From ef51b60c6481254d88c5fc3c34f4127b7f881a58 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 26 Nov 2012 12:05:40 -0500 Subject: Frontend static/ folder --- frontend/static/avatar/.htaccess | 1 + frontend/static/avatar/1.gif | Bin 0 -> 243404 bytes frontend/static/avatar/10.gif | Bin 0 -> 140059 bytes frontend/static/avatar/11.gif | Bin 0 -> 8011 bytes frontend/static/avatar/12.gif | Bin 0 -> 23706 bytes frontend/static/avatar/13.gif | Bin 0 -> 14554 bytes frontend/static/avatar/14.gif | Bin 0 -> 2665 bytes frontend/static/avatar/15.gif | Bin 0 -> 4609 bytes frontend/static/avatar/16.gif | Bin 0 -> 27497 bytes frontend/static/avatar/17.gif | Bin 0 -> 4193 bytes frontend/static/avatar/18.gif | Bin 0 -> 17818 bytes frontend/static/avatar/19.gif | Bin 0 -> 8008 bytes frontend/static/avatar/2.gif | Bin 0 -> 88282 bytes frontend/static/avatar/20.gif | Bin 0 -> 19957 bytes frontend/static/avatar/21.gif | Bin 0 -> 15102 bytes frontend/static/avatar/22.gif | Bin 0 -> 8373 bytes frontend/static/avatar/23.gif | Bin 0 -> 7503 bytes frontend/static/avatar/24.gif | Bin 0 -> 23310 bytes frontend/static/avatar/25.gif | Bin 0 -> 4371 bytes frontend/static/avatar/26.gif | Bin 0 -> 9591 bytes frontend/static/avatar/27.gif | Bin 0 -> 4456 bytes frontend/static/avatar/28.gif | Bin 0 -> 4804 bytes frontend/static/avatar/29.gif | Bin 0 -> 6257 bytes frontend/static/avatar/3.gif | Bin 0 -> 3198 bytes frontend/static/avatar/30.gif | Bin 0 -> 4819 bytes frontend/static/avatar/31.gif | Bin 0 -> 4226 bytes frontend/static/avatar/32.gif | Bin 0 -> 83145 bytes frontend/static/avatar/33.gif | Bin 0 -> 27525 bytes frontend/static/avatar/34.gif | Bin 0 -> 74176 bytes frontend/static/avatar/35.gif | Bin 0 -> 4606 bytes frontend/static/avatar/36.gif | Bin 0 -> 9615 bytes frontend/static/avatar/37.gif | Bin 0 -> 8723 bytes frontend/static/avatar/38.gif | Bin 0 -> 11347 bytes frontend/static/avatar/39.gif | Bin 0 -> 4696 bytes frontend/static/avatar/4.gif | Bin 0 -> 46781 bytes frontend/static/avatar/40.gif | Bin 0 -> 8281 bytes frontend/static/avatar/41.gif | Bin 0 -> 86840 bytes frontend/static/avatar/42.gif | Bin 0 -> 61175 bytes frontend/static/avatar/43.gif | Bin 0 -> 10325 bytes frontend/static/avatar/44.gif | Bin 0 -> 1798 bytes frontend/static/avatar/45.gif | Bin 0 -> 14857 bytes frontend/static/avatar/46.gif | Bin 0 -> 4750 bytes frontend/static/avatar/47.gif | Bin 0 -> 8793 bytes frontend/static/avatar/48.gif | Bin 0 -> 7555 bytes frontend/static/avatar/49.gif | Bin 0 -> 19817 bytes frontend/static/avatar/5.gif | Bin 0 -> 10662 bytes frontend/static/avatar/50.gif | Bin 0 -> 2810 bytes frontend/static/avatar/51.gif | Bin 0 -> 12146 bytes frontend/static/avatar/52.gif | Bin 0 -> 14024 bytes frontend/static/avatar/53.gif | Bin 0 -> 5383 bytes frontend/static/avatar/54.gif | Bin 0 -> 116561 bytes frontend/static/avatar/55.gif | Bin 0 -> 171829 bytes frontend/static/avatar/56.gif | Bin 0 -> 11369 bytes frontend/static/avatar/57.gif | Bin 0 -> 7952 bytes frontend/static/avatar/58.gif | Bin 0 -> 6745 bytes frontend/static/avatar/59.gif | Bin 0 -> 5704 bytes frontend/static/avatar/6.gif | Bin 0 -> 9566 bytes frontend/static/avatar/60.gif | Bin 0 -> 2967 bytes frontend/static/avatar/61.gif | Bin 0 -> 4752 bytes frontend/static/avatar/62.gif | Bin 0 -> 2267 bytes frontend/static/avatar/63.gif | Bin 0 -> 39574 bytes frontend/static/avatar/64.gif | Bin 0 -> 64540 bytes frontend/static/avatar/65.gif | Bin 0 -> 2320 bytes frontend/static/avatar/66.gif | Bin 0 -> 90090 bytes frontend/static/avatar/67.gif | Bin 0 -> 2814 bytes frontend/static/avatar/68.gif | Bin 0 -> 5285 bytes frontend/static/avatar/69.gif | Bin 0 -> 2105 bytes frontend/static/avatar/7.gif | Bin 0 -> 11472 bytes frontend/static/avatar/70.gif | Bin 0 -> 2009 bytes frontend/static/avatar/71.gif | Bin 0 -> 7545 bytes frontend/static/avatar/72.gif | Bin 0 -> 2618 bytes frontend/static/avatar/8.gif | Bin 0 -> 17882 bytes frontend/static/avatar/9.gif | Bin 0 -> 2353 bytes frontend/static/avatar/Predator.jpg | Bin 0 -> 25223 bytes frontend/static/avatar/arcane2.gif | Bin 0 -> 88282 bytes ...1294086971317-dumpfm-GucciSoFlosy-idgiinout.gif | Bin 0 -> 235145 bytes .../1300743917959-dumpfm-pepper-argus_glitter.gif | Bin 0 -> 418103 bytes .../1302474305250-dumpfm-GucciSoFlosy-pattern4.gif | Bin 0 -> 183755 bytes frontend/static/bgz/2181Series.gif | Bin 0 -> 23447 bytes frontend/static/bgz/8-planet-jupiter-map.jpg | Bin 0 -> 114807 bytes frontend/static/bgz/DarktowerL_gendler.jpg | Bin 0 -> 2356730 bytes ...Tropic_Of_Cancer_-_The_Sorrow_Of_Two_Blooms.jpg | Bin 0 -> 86148 bytes frontend/static/bgz/argus.gif | Bin 0 -> 55448 bytes frontend/static/bgz/birdcage_grid.jpg | Bin 0 -> 1104394 bytes frontend/static/bgz/cageumbrellaz.jpg | Bin 0 -> 125594 bytes frontend/static/bgz/cloudz1.png | Bin 0 -> 36725 bytes frontend/static/bgz/cloudz2.png | Bin 0 -> 38090 bytes frontend/static/bgz/crystalz.png | Bin 0 -> 44708 bytes frontend/static/bgz/darktower.jpg | Bin 0 -> 736919 bytes frontend/static/bgz/diornights.jpg | Bin 0 -> 9198 bytes frontend/static/bgz/fingerlings-butterflies.png | Bin 0 -> 563473 bytes frontend/static/bgz/fingerlings.gif | Bin 0 -> 175488 bytes frontend/static/bgz/fingerlings2.png | Bin 0 -> 980238 bytes frontend/static/bgz/fingerlings3.jpg | Bin 0 -> 60054 bytes frontend/static/bgz/geodesic-brick.png | Bin 0 -> 673293 bytes frontend/static/bgz/geodesic.png | Bin 0 -> 757585 bytes frontend/static/bgz/gridzer01.gif | Bin 0 -> 20289 bytes frontend/static/bgz/gridzy1.jpg | Bin 0 -> 47539 bytes frontend/static/bgz/gridzy10.jpg | Bin 0 -> 40655 bytes frontend/static/bgz/gridzy2.jpg | Bin 0 -> 50845 bytes frontend/static/bgz/gridzy3.jpg | Bin 0 -> 82380 bytes frontend/static/bgz/gridzy4.jpg | Bin 0 -> 18924 bytes frontend/static/bgz/gridzy5.jpg | Bin 0 -> 21900 bytes frontend/static/bgz/gridzy6.jpg | Bin 0 -> 11591 bytes frontend/static/bgz/gridzy7.jpg | Bin 0 -> 7166 bytes frontend/static/bgz/gridzy8.jpg | Bin 0 -> 18723 bytes frontend/static/bgz/gridzy9.jpg | Bin 0 -> 7338 bytes frontend/static/bgz/index.html | 13 + frontend/static/bgz/jupiter-aurora.jpg | Bin 0 -> 146820 bytes frontend/static/bgz/jupiteraurora.jpg | Bin 0 -> 415933 bytes frontend/static/bgz/lavender.jpg | Bin 0 -> 71203 bytes frontend/static/bgz/morrocorace.png | Bin 0 -> 606767 bytes frontend/static/bgz/mountainz.png | Bin 0 -> 124487 bytes frontend/static/bgz/mountainz2.png | Bin 0 -> 88674 bytes frontend/static/bgz/mountainz3.png | Bin 0 -> 67805 bytes frontend/static/bgz/ocian1.gif | Bin 0 -> 11487 bytes frontend/static/bgz/ocian2.gif | Bin 0 -> 41644 bytes frontend/static/bgz/ocian3.gif | Bin 0 -> 27568 bytes frontend/static/bgz/ocian4.gif | Bin 0 -> 24832 bytes frontend/static/bgz/ocian4.jpg | Bin 0 -> 9272 bytes frontend/static/bgz/orlynails.jpg | Bin 0 -> 19065 bytes frontend/static/bgz/scannerjammer_cyberspace.jpg | Bin 0 -> 162984 bytes frontend/static/bgz/sewergreatsbg.jpg | Bin 0 -> 393613 bytes frontend/static/bgz/sewergreatscorner.jpg | Bin 0 -> 10652 bytes frontend/static/bgz/sewergreatsvol1.jpg | Bin 0 -> 85280 bytes frontend/static/bgz/starfield.jpg | Bin 0 -> 31700 bytes frontend/static/bgz/triangledeluxe.jpg | Bin 0 -> 86421 bytes frontend/static/bgz/visual6502.jpg | Bin 0 -> 129221 bytes frontend/static/bgz/waterfall.gif | Bin 0 -> 67479 bytes frontend/static/bgz/waterfall2.gif | Bin 0 -> 589136 bytes frontend/static/bgz/whitesquare.gif | Bin 0 -> 156 bytes frontend/static/css/dump.css | 70 + frontend/static/css/sasscss | 1 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_0_eeeeee_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_100_381c63_40x100.png | Bin 0 -> 183 bytes .../images/ui-bg_flat_35_dddddd_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_50_ededed_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_55_c0402a_40x100.png | Bin 0 -> 213 bytes .../images/ui-bg_flat_55_fdf9d8_40x100.png | Bin 0 -> 182 bytes .../images/ui-bg_flat_60_edebef_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_8566a9_40x100.png | Bin 0 -> 213 bytes .../ui-purple2/images/ui-icons_6d33bb_256x240.png | Bin 0 -> 5355 bytes .../ui-purple2/images/ui-icons_7d5bbe_256x240.png | Bin 0 -> 4369 bytes .../ui-purple2/images/ui-icons_817693_256x240.png | Bin 0 -> 4369 bytes .../ui-purple2/images/ui-icons_9e70e1_256x240.png | Bin 0 -> 5355 bytes .../ui-purple2/images/ui-icons_aa8fd1_256x240.png | Bin 0 -> 4369 bytes .../ui-purple2/images/ui-icons_edecee_256x240.png | Bin 0 -> 4369 bytes .../ui-purple2/images/ui-icons_fbc856_256x240.png | Bin 0 -> 4369 bytes .../css/ui-purple2/jquery-ui-1.8.13.custom.css | 362 + frontend/static/css/used_to_be_called_chat.css | 621 ++ frontend/static/faq/.htaccess | 1 + frontend/static/faq/index.html | 286 + frontend/static/favicon.ico | Bin 0 -> 1152 bytes frontend/static/img/.htaccess | 2 + ...78131405573-dumpfm-glasspopcorn-sitmanpiano.gif | Bin 0 -> 54933 bytes .../1302474305250-dumpfm-GucciSoFlosy-pattern4.gif | Bin 0 -> 183755 bytes .../1309267681552-dumpfm-frakbuddy-glasscross.gif | Bin 0 -> 211016 bytes ...Cancer__The_Sorrow_Of_Two_Blooms_1308602037.jpg | Bin 0 -> 86290 bytes frontend/static/img/avatar2.png | Bin 0 -> 40085 bytes frontend/static/img/bgz-icon.jpg | Bin 0 -> 101729 bytes frontend/static/img/black-flower.gif | Bin 0 -> 212880 bytes frontend/static/img/blackplantmask.png | Bin 0 -> 115230 bytes frontend/static/img/cube.png | Bin 0 -> 1286 bytes frontend/static/img/diornights.png | Bin 0 -> 934547 bytes frontend/static/img/disaro.jpg | Bin 0 -> 29748 bytes frontend/static/img/flower-red.gif | Bin 0 -> 227945 bytes frontend/static/img/flower20.png | Bin 0 -> 1346 bytes frontend/static/img/glasspopcornheader.png | Bin 0 -> 50063 bytes frontend/static/img/glasspopradio.gif | Bin 0 -> 192407 bytes frontend/static/img/glasspopthumb.gif | Bin 0 -> 161435 bytes .../img/glitter/100-Percent-Sexy-Cowgirl.gif | Bin 0 -> 19523 bytes .../1292462203316-dumpfm-yrmomvsmymom-sparkle.gif | Bin 0 -> 1004036 bytes .../99-percent-tejana-and-1-percent-floridian.gif | Bin 0 -> 71840 bytes frontend/static/img/glitter/Air-Plane.gif | Bin 0 -> 12145 bytes frontend/static/img/glitter/Aloha-Girl.gif | Bin 0 -> 67397 bytes .../static/img/glitter/American-Flag-Heart.gif | Bin 0 -> 21324 bytes .../static/img/glitter/American-Sexy-Thing-1.gif | Bin 0 -> 265839 bytes .../static/img/glitter/American-Sexy-Thing.gif | Bin 0 -> 265839 bytes frontend/static/img/glitter/Arizona-Cardinals.gif | Bin 0 -> 111674 bytes .../static/img/glitter/Arizona-Diamondbacks.gif | Bin 0 -> 127820 bytes frontend/static/img/glitter/Atlanta-Braves.gif | Bin 0 -> 29678 bytes frontend/static/img/glitter/Atlanta-Falcons.gif | Bin 0 -> 50387 bytes frontend/static/img/glitter/Baltimore-Orioles.gif | Bin 0 -> 77478 bytes frontend/static/img/glitter/Baltimore-Ravens.gif | Bin 0 -> 31319 bytes frontend/static/img/glitter/Beat-Hell.gif | Bin 0 -> 13713 bytes .../static/img/glitter/Beautiful-Friendship.gif | Bin 0 -> 407195 bytes frontend/static/img/glitter/Belle-Glitter.gif | Bin 0 -> 37184 bytes frontend/static/img/glitter/Belly-Dancer.gif | Bin 0 -> 2542 bytes frontend/static/img/glitter/Belly-Dnacer.gif | Bin 0 -> 66873 bytes frontend/static/img/glitter/Bible-Diet.gif | Bin 0 -> 42592 bytes frontend/static/img/glitter/Black-Kisses.gif | Bin 0 -> 84533 bytes frontend/static/img/glitter/Black-Razzers.gif | Bin 0 -> 140704 bytes frontend/static/img/glitter/Bloody-Vampire.gif | Bin 0 -> 206164 bytes .../static/img/glitter/Blue-Butterfly-Heaven.gif | Bin 0 -> 223109 bytes frontend/static/img/glitter/Blue-Cape-Fairy.gif | Bin 0 -> 77695 bytes frontend/static/img/glitter/Blue-Care-Bear.gif | Bin 0 -> 25172 bytes frontend/static/img/glitter/Blue-Dolphin.gif | Bin 0 -> 9231 bytes frontend/static/img/glitter/Blue-Flower-02.gif | Bin 0 -> 13598 bytes frontend/static/img/glitter/Blue-Flower-03.gif | Bin 0 -> 12257 bytes frontend/static/img/glitter/Blue-Purple-Shoe.gif | Bin 0 -> 13301 bytes frontend/static/img/glitter/Booty-Call.gif | Bin 0 -> 30430 bytes frontend/static/img/glitter/Broken-heart-Pink.gif | Bin 0 -> 13295 bytes frontend/static/img/glitter/Buffalo-Bills.gif | Bin 0 -> 58671 bytes frontend/static/img/glitter/Bulls.gif | Bin 0 -> 9559 bytes .../static/img/glitter/Burger-King-Glitter.gif | Bin 0 -> 30275 bytes frontend/static/img/glitter/Butterfly-Girl.gif | Bin 0 -> 157768 bytes frontend/static/img/glitter/California-Angels.gif | Bin 0 -> 157247 bytes frontend/static/img/glitter/Cat-Fairy.gif | Bin 0 -> 98062 bytes frontend/static/img/glitter/Cell-Phone-Glitter.gif | Bin 0 -> 19291 bytes frontend/static/img/glitter/Cheetah-Chick.gif | Bin 0 -> 128928 bytes frontend/static/img/glitter/Cherries-Glittler.gif | Bin 0 -> 22046 bytes frontend/static/img/glitter/Cherries.gif | Bin 0 -> 2389 bytes frontend/static/img/glitter/Chicago-Bears.gif | Bin 0 -> 65932 bytes frontend/static/img/glitter/Chicago-Cubs.gif | Bin 0 -> 69649 bytes frontend/static/img/glitter/Chicago-Whitesox.gif | Bin 0 -> 56199 bytes frontend/static/img/glitter/Cleveland-Indians.gif | Bin 0 -> 103240 bytes frontend/static/img/glitter/Close-Girlfriends.gif | Bin 0 -> 113631 bytes frontend/static/img/glitter/Colorado-Rockies.gif | Bin 0 -> 65999 bytes frontend/static/img/glitter/Colour-My-World.gif | Bin 0 -> 176348 bytes frontend/static/img/glitter/Cone-Get-It.gif | Bin 0 -> 42508 bytes frontend/static/img/glitter/Cuban-Babe.gif | Bin 0 -> 94253 bytes frontend/static/img/glitter/Cupid-Just-Struck.gif | Bin 0 -> 16308 bytes .../static/img/glitter/Dirty-Little-Secret.gif | Bin 0 -> 24729 bytes frontend/static/img/glitter/Dolphin-Animated.gif | Bin 0 -> 3674 bytes .../static/img/glitter/Droppin-In-To-Say-Hello.gif | Bin 0 -> 43966 bytes .../static/img/glitter/Drppin-By-To-Say-hellow.gif | Bin 0 -> 43966 bytes frontend/static/img/glitter/Eeyore-Angel.gif | Bin 0 -> 8838 bytes frontend/static/img/glitter/Fairy-18.gif | Bin 0 -> 49472 bytes frontend/static/img/glitter/Fairy-23.gif | Bin 0 -> 50120 bytes .../static/img/glitter/Fairy-Caught-in-Jar.gif | Bin 0 -> 8631 bytes frontend/static/img/glitter/Fairy-Chest.gif | Bin 0 -> 77186 bytes frontend/static/img/glitter/Fairy-Fantasy-5.gif | Bin 0 -> 230982 bytes frontend/static/img/glitter/Fairy-Waterfalls.gif | Bin 0 -> 256032 bytes frontend/static/img/glitter/Fairy-Wings-4.gif | Bin 0 -> 87371 bytes frontend/static/img/glitter/Fairy-Wings-5.gif | Bin 0 -> 24129 bytes frontend/static/img/glitter/Fantasy-Fairy-10.gif | Bin 0 -> 90647 bytes frontend/static/img/glitter/Fantasy-Fairy-4.gif | Bin 0 -> 167014 bytes frontend/static/img/glitter/Fantasy-Fairy-5.gif | Bin 0 -> 72354 bytes frontend/static/img/glitter/Fantasy-Fairy-8.gif | Bin 0 -> 67730 bytes frontend/static/img/glitter/Fantasy-Fairy.gif | Bin 0 -> 81035 bytes frontend/static/img/glitter/Fendi-Yellow.gif | Bin 0 -> 53541 bytes frontend/static/img/glitter/Florida-Marlins.gif | Bin 0 -> 38524 bytes frontend/static/img/glitter/Fur-Cowgirl.gif | Bin 0 -> 38908 bytes frontend/static/img/glitter/Getting-Ready.gif | Bin 0 -> 173928 bytes frontend/static/img/glitter/Ghetto-Booty.gif | Bin 0 -> 38865 bytes frontend/static/img/glitter/Gorgeous-Fairy.gif | Bin 0 -> 365983 bytes .../static/img/glitter/Gorgeous-Pink-Flowers.gif | Bin 0 -> 23690 bytes frontend/static/img/glitter/Green-Palm-Tree.gif | Bin 0 -> 2470 bytes .../img/glitter/Happy-Feb-14th-Arrow-Heart.gif | Bin 0 -> 24529 bytes .../static/img/glitter/Have-A-Beautiful-Day.gif | Bin 0 -> 308232 bytes frontend/static/img/glitter/Have-Dreams.gif | Bin 0 -> 146839 bytes frontend/static/img/glitter/He-Died-For-you.gif | Bin 0 -> 19037 bytes frontend/static/img/glitter/Heart-Underwear.gif | Bin 0 -> 140704 bytes frontend/static/img/glitter/Hello-Blue-Roses.gif | Bin 0 -> 22220 bytes frontend/static/img/glitter/Hello-Rose.gif | Bin 0 -> 50265 bytes frontend/static/img/glitter/Here-Big-Boy.gif | Bin 0 -> 80785 bytes frontend/static/img/glitter/Hi-Sexy-Red.gif | Bin 0 -> 20764 bytes frontend/static/img/glitter/Hollow-Heart-Red.gif | Bin 0 -> 7327 bytes frontend/static/img/glitter/Honey.gif | Bin 0 -> 5189 bytes frontend/static/img/glitter/Hot-Jail-Babe.gif | Bin 0 -> 192893 bytes frontend/static/img/glitter/Hot-Long-Hair.gif | Bin 0 -> 52468 bytes frontend/static/img/glitter/Hot-Pink-Bikini.gif | Bin 0 -> 55504 bytes frontend/static/img/glitter/Hot-Pink-Lady.gif | Bin 0 -> 7399 bytes frontend/static/img/glitter/Hot-Stuff.gif | Bin 0 -> 29599 bytes frontend/static/img/glitter/Houston-Texans.gif | Bin 0 -> 47918 bytes frontend/static/img/glitter/Howdy-Hat.gif | Bin 0 -> 25744 bytes frontend/static/img/glitter/I-Love-Mickey.gif | Bin 0 -> 13425 bytes frontend/static/img/glitter/Im-such-a-Bad-Girl.gif | Bin 0 -> 73877 bytes frontend/static/img/glitter/Jazz.gif | Bin 0 -> 16938 bytes frontend/static/img/glitter/Kansas-City-Chiefs.gif | Bin 0 -> 57560 bytes frontend/static/img/glitter/Kinky-Care-Bear.gif | Bin 0 -> 31688 bytes frontend/static/img/glitter/Kite-Care-Bear.gif | Bin 0 -> 25645 bytes frontend/static/img/glitter/Kumba.gif | Bin 0 -> 140208 bytes frontend/static/img/glitter/LETS-KISS.gif | Bin 0 -> 15593 bytes frontend/static/img/glitter/Leopard-Legs.gif | Bin 0 -> 97102 bytes frontend/static/img/glitter/Live-For-Jesus.gif | Bin 0 -> 41428 bytes frontend/static/img/glitter/Long-Legs.gif | Bin 0 -> 27240 bytes .../static/img/glitter/Los-Angeles-Dodgers.gif | Bin 0 -> 29938 bytes frontend/static/img/glitter/Love-The-Lord.gif | Bin 0 -> 27318 bytes .../img/glitter/Marilyn-Silver-Sparkle-1.gif | Bin 0 -> 19787 bytes .../static/img/glitter/Marilyn-Silver-Sparkle.gif | Bin 0 -> 19787 bytes frontend/static/img/glitter/Mickey.gif | Bin 0 -> 19273 bytes frontend/static/img/glitter/Minnesota-Wild.gif | Bin 0 -> 56403 bytes frontend/static/img/glitter/Muscle-Legs.gif | Bin 0 -> 46658 bytes frontend/static/img/glitter/Mushroom-Fairy.gif | Bin 0 -> 98443 bytes frontend/static/img/glitter/Music-Note-Glitter.gif | Bin 0 -> 3976 bytes frontend/static/img/glitter/Naught-Girl-Grey.gif | Bin 0 -> 27336 bytes frontend/static/img/glitter/Naughty-Pink.gif | Bin 0 -> 8446 bytes .../static/img/glitter/New-England-Patriots.gif | Bin 0 -> 23508 bytes frontend/static/img/glitter/New-York-Yankees.gif | Bin 0 -> 108687 bytes frontend/static/img/glitter/Nice-Brow.gif | Bin 0 -> 19806 bytes frontend/static/img/glitter/Ninja-Turtle.gif | Bin 0 -> 49041 bytes frontend/static/img/glitter/Oh-My.gif | Bin 0 -> 31090 bytes frontend/static/img/glitter/Orange-Eyes.gif | Bin 0 -> 259229 bytes frontend/static/img/glitter/Orange-Love.gif | Bin 0 -> 138526 bytes frontend/static/img/glitter/Overlooking-Fairy.gif | Bin 0 -> 124845 bytes frontend/static/img/glitter/Palm-Tree.gif | Bin 0 -> 54787 bytes frontend/static/img/glitter/Parental-Advisor.gif | Bin 0 -> 5067 bytes .../static/img/glitter/Philadelphia-Eagles-1.gif | Bin 0 -> 56551 bytes .../static/img/glitter/Philadelphia-Eagles.gif | Bin 0 -> 56551 bytes .../static/img/glitter/Philadelphia-Phillies.gif | Bin 0 -> 78704 bytes frontend/static/img/glitter/Phoenix-Coyotes.gif | Bin 0 -> 53327 bytes frontend/static/img/glitter/Pink-Bitches.gif | Bin 0 -> 161237 bytes .../static/img/glitter/Pink-Fantashy-Hearts.gif | Bin 0 -> 139166 bytes frontend/static/img/glitter/Pink-Glitter-Star.gif | Bin 0 -> 11661 bytes frontend/static/img/glitter/Pink-Godess.gif | Bin 0 -> 171315 bytes .../static/img/glitter/Pink-Heart-Dolphins.gif | Bin 0 -> 57527 bytes .../static/img/glitter/Pink-Lips-High-Heals.gif | Bin 0 -> 29944 bytes frontend/static/img/glitter/Pink-Shoe.gif | Bin 0 -> 22547 bytes .../static/img/glitter/Pittsburgh-Penguins.gif | Bin 0 -> 71092 bytes frontend/static/img/glitter/Playboy-029.gif | Bin 0 -> 13237 bytes frontend/static/img/glitter/Playboy-032.gif | Bin 0 -> 16249 bytes frontend/static/img/glitter/Playboy-036.gif | Bin 0 -> 22300 bytes frontend/static/img/glitter/Playboy-045.gif | Bin 0 -> 37337 bytes frontend/static/img/glitter/Playboy-047.gif | Bin 0 -> 37770 bytes frontend/static/img/glitter/Playboy-24.gif | Bin 0 -> 5134 bytes frontend/static/img/glitter/Playboy-4.gif | Bin 0 -> 41405 bytes frontend/static/img/glitter/Playboy-5.gif | Bin 0 -> 13437 bytes frontend/static/img/glitter/Playboy-9.gif | Bin 0 -> 2892 bytes frontend/static/img/glitter/Playboy-Blue.gif | Bin 0 -> 10566 bytes frontend/static/img/glitter/Playboy-Bunny-Pink.gif | Bin 0 -> 4351 bytes frontend/static/img/glitter/Playboy-Orange.gif | Bin 0 -> 38228 bytes frontend/static/img/glitter/Playboy-Pink.gif | Bin 0 -> 17601 bytes frontend/static/img/glitter/Playboy-Purple.gif | Bin 0 -> 13437 bytes frontend/static/img/glitter/Playboy-Silver.gif | Bin 0 -> 13237 bytes .../static/img/glitter/Potty-Head-Care-Bear.gif | Bin 0 -> 52943 bytes frontend/static/img/glitter/Powerpuff-Blossom.gif | Bin 0 -> 3925 bytes frontend/static/img/glitter/Princess-Fairy.gif | Bin 0 -> 413046 bytes .../img/glitter/Purple-Flower-and-Butterfly.gif | Bin 0 -> 12785 bytes frontend/static/img/glitter/Purple-Gal.gif | Bin 0 -> 4063 bytes .../static/img/glitter/Purple-Glitter-Flower.gif | Bin 0 -> 6465 bytes frontend/static/img/glitter/Red-Flower.gif | Bin 0 -> 2765 bytes frontend/static/img/glitter/Red-Hair-Glitter.gif | Bin 0 -> 51302 bytes frontend/static/img/glitter/Red-Haze-Fairy.gif | Bin 0 -> 197893 bytes frontend/static/img/glitter/Red-Head-Goth.gif | Bin 0 -> 117962 bytes frontend/static/img/glitter/Red-Rose-Glitter.gif | Bin 0 -> 10343 bytes frontend/static/img/glitter/Red-Umbrella.gif | Bin 0 -> 122855 bytes frontend/static/img/glitter/Res-Fantasy-Sky.gif | Bin 0 -> 290961 bytes frontend/static/img/glitter/Riding-Roses.gif | Bin 0 -> 78711 bytes frontend/static/img/glitter/Rose.gif | Bin 0 -> 9133 bytes frontend/static/img/glitter/Samurai-Chick.gif | Bin 0 -> 82936 bytes frontend/static/img/glitter/Set-Me-free.gif | Bin 0 -> 66283 bytes .../static/img/glitter/Sexy-Bitch-Leoppard-1.gif | Bin 0 -> 35473 bytes .../static/img/glitter/Sexy-Bitch-Leoppard.gif | Bin 0 -> 35473 bytes frontend/static/img/glitter/Sexy-Black-White.gif | Bin 0 -> 57772 bytes frontend/static/img/glitter/Sexy-Blue-Hearts.gif | Bin 0 -> 13421 bytes frontend/static/img/glitter/Sexy-Cape.gif | Bin 0 -> 69004 bytes frontend/static/img/glitter/Sexy-Flower-Bed.gif | Bin 0 -> 67694 bytes frontend/static/img/glitter/Sexy-Silver.gif | Bin 0 -> 6982 bytes frontend/static/img/glitter/Sexy-Star.gif | Bin 0 -> 55637 bytes frontend/static/img/glitter/Sexy-White-Hair.gif | Bin 0 -> 71621 bytes frontend/static/img/glitter/Sharing-Fruit.gif | Bin 0 -> 81523 bytes frontend/static/img/glitter/Show-It-To-Me.gif | Bin 0 -> 7725 bytes frontend/static/img/glitter/Showing-Sexy-Luv.gif | Bin 0 -> 197196 bytes frontend/static/img/glitter/Silver-Cross.gif | Bin 0 -> 2046 bytes frontend/static/img/glitter/Silver-Flower-Face.gif | Bin 0 -> 176362 bytes frontend/static/img/glitter/Simply-Pink.gif | Bin 0 -> 55504 bytes frontend/static/img/glitter/Sleek-Red.gif | Bin 0 -> 105170 bytes frontend/static/img/glitter/Soft-Ice-Cream.gif | Bin 0 -> 20507 bytes frontend/static/img/glitter/Some-Like-It-hot.gif | Bin 0 -> 37457 bytes frontend/static/img/glitter/Spanish-Beauty.gif | Bin 0 -> 133481 bytes frontend/static/img/glitter/Spank-Me-1.gif | Bin 0 -> 38658 bytes frontend/static/img/glitter/Spank-Me.gif | Bin 0 -> 38658 bytes frontend/static/img/glitter/St-Louis-Rams.gif | Bin 0 -> 47802 bytes frontend/static/img/glitter/Sucker.gif | Bin 0 -> 4967 bytes .../static/img/glitter/Tampa-Bay-Devilrays.gif | Bin 0 -> 69917 bytes frontend/static/img/glitter/Tear-Drop-Fairy-1.gif | Bin 0 -> 34182 bytes frontend/static/img/glitter/Tear-Drop-Fairy.gif | Bin 0 -> 34182 bytes frontend/static/img/glitter/Teddy-Bear-Glitter.gif | Bin 0 -> 5472 bytes frontend/static/img/glitter/Texas-Rangers.gif | Bin 0 -> 108485 bytes frontend/static/img/glitter/Thank-You-Friend.gif | Bin 0 -> 148953 bytes frontend/static/img/glitter/Tinkerbell-Dreamy.gif | Bin 0 -> 65000 bytes frontend/static/img/glitter/Tinkerbell-Flying.gif | Bin 0 -> 11086 bytes .../static/img/glitter/Tinkerbell-Green-Dress.gif | Bin 0 -> 21388 bytes frontend/static/img/glitter/Tinkerbell.gif | Bin 0 -> 21326 bytes frontend/static/img/glitter/Tired-Puppy.gif | Bin 0 -> 32369 bytes .../static/img/glitter/Tweety-Bird-Dancing.gif | Bin 0 -> 59920 bytes frontend/static/img/glitter/Two-Sexy-Gals.gif | Bin 0 -> 103998 bytes frontend/static/img/glitter/Vibrate-Me-1.gif | Bin 0 -> 55184 bytes frontend/static/img/glitter/Vibrate-Me.gif | Bin 0 -> 55184 bytes .../static/img/glitter/Washington-Redskins.gif | Bin 0 -> 63076 bytes frontend/static/img/glitter/Wings-2.gif | Bin 0 -> 145610 bytes frontend/static/img/glitter/Wings-5.gif | Bin 0 -> 91342 bytes frontend/static/img/glitter/Winnie-Glitter-2.gif | Bin 0 -> 12238 bytes frontend/static/img/glitter/Winnie-Glitter.gif | Bin 0 -> 12970 bytes frontend/static/img/glitter/XoXo-Hearts.gif | Bin 0 -> 4592 bytes frontend/static/img/glitter/Yellow-Bird.gif | Bin 0 -> 23797 bytes .../img/glitter/You-Want-It-Come-and-Get-It.gif | Bin 0 -> 33764 bytes frontend/static/img/glitter/Young-Red-Witch.gif | Bin 0 -> 81689 bytes frontend/static/img/glitter/aaliyah.gif | Bin 0 -> 28160 bytes .../static/img/glitter/ani-sparkle-fountain.gif | Bin 0 -> 74591 bytes .../glitter/awkward_pink_purple_glitter_wiggle.gif | Bin 0 -> 15856 bytes .../img/glitter/babe-bikini-butt-ass-face.gif | Bin 0 -> 33317 bytes .../glitter/beautiful-unicorn-magical-sparkle.gif | Bin 0 -> 371613 bytes .../static/img/glitter/beauty-red-rose-sparkle.gif | Bin 0 -> 81674 bytes .../static/img/glitter/blonde_gold_sparkle.gif | Bin 0 -> 43696 bytes frontend/static/img/glitter/christian_symbol07.gif | Bin 0 -> 94869 bytes frontend/static/img/glitter/christmas-sexy11.gif | Bin 0 -> 133701 bytes frontend/static/img/glitter/christmas-sexy6.gif | Bin 0 -> 148401 bytes .../cleopatra-elizabeth-liz-taylor-dress-babe.gif | Bin 0 -> 228540 bytes frontend/static/img/glitter/date13.gif | Bin 0 -> 24270 bytes frontend/static/img/glitter/dreamer.gif | Bin 0 -> 207629 bytes frontend/static/img/glitter/egypt.gif | Bin 0 -> 80753 bytes .../egypt_320_256_9223372036854775000_0_1_0.gif | Bin 0 -> 118008 bytes ...egypt_320_320_256_9223372036854775000_0_1_0.gif | Bin 0 -> 114345 bytes frontend/static/img/glitter/eye-glitter.gif | Bin 0 -> 30416 bytes .../img/glitter/flirting-my-way-to-the-top.gif | Bin 0 -> 132004 bytes frontend/static/img/glitter/flowers.gif | Bin 0 -> 47170 bytes frontend/static/img/glitter/glitterfriend38.gif | Bin 0 -> 30753 bytes frontend/static/img/glitter/goodbye7(combine).gif | Bin 0 -> 88605 bytes frontend/static/img/glitter/gtmc034.gif | Bin 0 -> 11202 bytes frontend/static/img/glitter/gtmc037.gif | Bin 0 -> 10426 bytes frontend/static/img/glitter/gtmc039.gif | Bin 0 -> 11572 bytes frontend/static/img/glitter/gtmc041.gif | Bin 0 -> 4696 bytes frontend/static/img/glitter/gtmc048.gif | Bin 0 -> 40607 bytes frontend/static/img/glitter/gtmc058.gif | Bin 0 -> 24757 bytes frontend/static/img/glitter/gtmc067.gif | Bin 0 -> 29811 bytes frontend/static/img/glitter/gtmc072.gif | Bin 0 -> 5476 bytes frontend/static/img/glitter/gtmc079.gif | Bin 0 -> 15697 bytes frontend/static/img/glitter/happy-new-year-524.gif | Bin 0 -> 8535 bytes frontend/static/img/glitter/happy-new-year-527.gif | Bin 0 -> 8535 bytes .../static/img/glitter/happy-new-year-computer.gif | Bin 0 -> 203630 bytes frontend/static/img/glitter/happy-new-year.gif | Bin 0 -> 157021 bytes .../glitter/ice-cream-cone-dessert-sweet-smile.gif | Bin 0 -> 81591 bytes .../glitter/kisses-for-my-valentine-glitter.gif | Bin 0 -> 44722 bytes frontend/static/img/glitter/lindsay-lohan.gif | Bin 0 -> 158538 bytes .../static/img/glitter/myspace-flower-rose.gif | Bin 0 -> 133016 bytes frontend/static/img/glitter/never-give-up.gif | Bin 0 -> 31122 bytes frontend/static/img/glitter/new-year-29.gif | Bin 0 -> 46340 bytes frontend/static/img/glitter/penis.gif | Bin 0 -> 39274 bytes frontend/static/img/glitter/pinkcowgirl.gif | Bin 0 -> 55535 bytes frontend/static/img/glitter/proud-mom-aunt.gif | Bin 0 -> 36439 bytes frontend/static/img/glitter/sexy-100.gif | Bin 0 -> 67058 bytes .../showin_some_love_reflecting_rosebud.gif | Bin 0 -> 107540 bytes frontend/static/img/glitter/sparkle-logo.gif | Bin 0 -> 19979 bytes .../static/img/glitter/staypunk-sparkle-cross.gif | Bin 0 -> 30852 bytes frontend/static/img/glitter/thanksc.gif | Bin 0 -> 38144 bytes frontend/static/img/glitter/tiger_eye_sparkle.gif | Bin 0 -> 117147 bytes .../img/glitter/woman-style-lipstick-makeup.gif | Bin 0 -> 73025 bytes frontend/static/img/glitter_flower.gif | Bin 0 -> 109249 bytes frontend/static/img/glitter_scannerjammer.gif | Bin 0 -> 10867 bytes frontend/static/img/glittergutzbg.gif | Bin 0 -> 240901 bytes frontend/static/img/icons/aim_16.png | Bin 0 -> 784 bytes frontend/static/img/icons/aim_32.png | Bin 0 -> 1726 bytes frontend/static/img/icons/apple_16.png | Bin 0 -> 666 bytes frontend/static/img/icons/apple_32.png | Bin 0 -> 1852 bytes frontend/static/img/icons/bandcamp_32.png | Bin 0 -> 1220 bytes frontend/static/img/icons/bebo_16.png | Bin 0 -> 670 bytes frontend/static/img/icons/bebo_32.png | Bin 0 -> 1455 bytes frontend/static/img/icons/blogger_16.png | Bin 0 -> 506 bytes frontend/static/img/icons/blogger_32.png | Bin 0 -> 1117 bytes frontend/static/img/icons/brightkite_16.png | Bin 0 -> 667 bytes frontend/static/img/icons/brightkite_32.png | Bin 0 -> 1154 bytes frontend/static/img/icons/cargo_16.png | Bin 0 -> 555 bytes frontend/static/img/icons/cargo_32.png | Bin 0 -> 1052 bytes frontend/static/img/icons/delicious_16.png | Bin 0 -> 467 bytes frontend/static/img/icons/delicious_32.png | Bin 0 -> 856 bytes frontend/static/img/icons/designfloat_16.png | Bin 0 -> 785 bytes frontend/static/img/icons/designfloat_32.png | Bin 0 -> 1913 bytes frontend/static/img/icons/designmoo_16.png | Bin 0 -> 695 bytes frontend/static/img/icons/designmoo_32.png | Bin 0 -> 1293 bytes frontend/static/img/icons/deviantart_16.png | Bin 0 -> 660 bytes frontend/static/img/icons/deviantart_32.png | Bin 0 -> 1394 bytes frontend/static/img/icons/digg_16.png | Bin 0 -> 671 bytes frontend/static/img/icons/digg_32.png | Bin 0 -> 891 bytes frontend/static/img/icons/digg_alt_16.png | Bin 0 -> 531 bytes frontend/static/img/icons/dopplr_16.png | Bin 0 -> 671 bytes frontend/static/img/icons/dopplr_32.png | Bin 0 -> 1482 bytes frontend/static/img/icons/dribbble_16.png | Bin 0 -> 792 bytes frontend/static/img/icons/dribbble_32.png | Bin 0 -> 1822 bytes frontend/static/img/icons/email_16.png | Bin 0 -> 608 bytes frontend/static/img/icons/email_32.png | Bin 0 -> 1182 bytes frontend/static/img/icons/ember_16.png | Bin 0 -> 720 bytes frontend/static/img/icons/ember_32.png | Bin 0 -> 1329 bytes frontend/static/img/icons/evernote_16.png | Bin 0 -> 530 bytes frontend/static/img/icons/evernote_32.png | Bin 0 -> 1431 bytes frontend/static/img/icons/facebook_16.png | Bin 0 -> 502 bytes frontend/static/img/icons/facebook_32.png | Bin 0 -> 888 bytes frontend/static/img/icons/flickr_16.png | Bin 0 -> 612 bytes frontend/static/img/icons/flickr_32.png | Bin 0 -> 1115 bytes frontend/static/img/icons/forrst_16.png | Bin 0 -> 552 bytes frontend/static/img/icons/forrst_32.png | Bin 0 -> 1020 bytes frontend/static/img/icons/friendfeed_16.png | Bin 0 -> 733 bytes frontend/static/img/icons/friendfeed_32.png | Bin 0 -> 1404 bytes frontend/static/img/icons/gamespot_16.png | Bin 0 -> 796 bytes frontend/static/img/icons/gamespot_32.png | Bin 0 -> 1583 bytes frontend/static/img/icons/google_16.png | Bin 0 -> 751 bytes frontend/static/img/icons/google_32.png | Bin 0 -> 1523 bytes frontend/static/img/icons/google_voice_16.png | Bin 0 -> 704 bytes frontend/static/img/icons/google_voice_32.png | Bin 0 -> 1418 bytes frontend/static/img/icons/google_wave_16.png | Bin 0 -> 709 bytes frontend/static/img/icons/google_wave_32.png | Bin 0 -> 1570 bytes frontend/static/img/icons/googletalk_16.png | Bin 0 -> 867 bytes frontend/static/img/icons/googletalk_32.png | Bin 0 -> 1720 bytes frontend/static/img/icons/gowalla_16.png | Bin 0 -> 563 bytes frontend/static/img/icons/gowalla_32.png | Bin 0 -> 1914 bytes frontend/static/img/icons/grooveshark_16.png | Bin 0 -> 812 bytes frontend/static/img/icons/grooveshark_32.png | Bin 0 -> 1959 bytes frontend/static/img/icons/ilike_16.png | Bin 0 -> 563 bytes frontend/static/img/icons/ilike_32.png | Bin 0 -> 1188 bytes frontend/static/img/icons/komodomedia_azure_16.png | Bin 0 -> 643 bytes frontend/static/img/icons/komodomedia_azure_32.png | Bin 0 -> 1245 bytes frontend/static/img/icons/komodomedia_wood_16.png | Bin 0 -> 876 bytes frontend/static/img/icons/komodomedia_wood_32.png | Bin 0 -> 2113 bytes frontend/static/img/icons/lastfm_16.png | Bin 0 -> 830 bytes frontend/static/img/icons/lastfm_32.png | Bin 0 -> 1574 bytes frontend/static/img/icons/license.txt | 9 + frontend/static/img/icons/linkedin_16.png | Bin 0 -> 624 bytes frontend/static/img/icons/linkedin_32.png | Bin 0 -> 1057 bytes frontend/static/img/icons/mixx_16.png | Bin 0 -> 458 bytes frontend/static/img/icons/mixx_32.png | Bin 0 -> 824 bytes frontend/static/img/icons/mobileme_16.png | Bin 0 -> 619 bytes frontend/static/img/icons/mobileme_32.png | Bin 0 -> 1112 bytes frontend/static/img/icons/mynameise_16.png | Bin 0 -> 573 bytes frontend/static/img/icons/mynameise_32.png | Bin 0 -> 1126 bytes frontend/static/img/icons/myspace_16.png | Bin 0 -> 658 bytes frontend/static/img/icons/myspace_32.png | Bin 0 -> 1268 bytes frontend/static/img/icons/netvibes_16.png | Bin 0 -> 532 bytes frontend/static/img/icons/netvibes_32.png | Bin 0 -> 870 bytes frontend/static/img/icons/newsvine_16.png | Bin 0 -> 688 bytes frontend/static/img/icons/newsvine_32.png | Bin 0 -> 1567 bytes frontend/static/img/icons/openid_16.png | Bin 0 -> 671 bytes frontend/static/img/icons/openid_32.png | Bin 0 -> 1204 bytes frontend/static/img/icons/orkut_16.png | Bin 0 -> 698 bytes frontend/static/img/icons/orkut_32.png | Bin 0 -> 1304 bytes frontend/static/img/icons/pandora_16.png | Bin 0 -> 633 bytes frontend/static/img/icons/pandora_32.png | Bin 0 -> 1182 bytes frontend/static/img/icons/paypal_16.png | Bin 0 -> 634 bytes frontend/static/img/icons/paypal_32.png | Bin 0 -> 1272 bytes frontend/static/img/icons/picasa_16.png | Bin 0 -> 783 bytes frontend/static/img/icons/picasa_32.png | Bin 0 -> 1393 bytes frontend/static/img/icons/playstation_16.png | Bin 0 -> 630 bytes frontend/static/img/icons/playstation_32.png | Bin 0 -> 1416 bytes frontend/static/img/icons/plurk_16.png | Bin 0 -> 563 bytes frontend/static/img/icons/plurk_32.png | Bin 0 -> 886 bytes frontend/static/img/icons/posterous_16.png | Bin 0 -> 714 bytes frontend/static/img/icons/posterous_32.png | Bin 0 -> 1484 bytes frontend/static/img/icons/qik_16.png | Bin 0 -> 662 bytes frontend/static/img/icons/qik_32.png | Bin 0 -> 1367 bytes frontend/static/img/icons/readernaut_16.png | Bin 0 -> 791 bytes frontend/static/img/icons/readernaut_32.png | Bin 0 -> 1909 bytes frontend/static/img/icons/reddit_16.png | Bin 0 -> 744 bytes frontend/static/img/icons/reddit_32.png | Bin 0 -> 1666 bytes frontend/static/img/icons/roboto_16.png | Bin 0 -> 512 bytes frontend/static/img/icons/roboto_32.png | Bin 0 -> 1232 bytes frontend/static/img/icons/rss_16.png | Bin 0 -> 711 bytes frontend/static/img/icons/rss_32.png | Bin 0 -> 1434 bytes frontend/static/img/icons/sharethis_16.png | Bin 0 -> 689 bytes frontend/static/img/icons/sharethis_32.png | Bin 0 -> 1397 bytes frontend/static/img/icons/skype_16.png | Bin 0 -> 717 bytes frontend/static/img/icons/skype_32.png | Bin 0 -> 1640 bytes frontend/static/img/icons/stumbleupon_16.png | Bin 0 -> 698 bytes frontend/static/img/icons/stumbleupon_32.png | Bin 0 -> 1329 bytes frontend/static/img/icons/technorati_16.png | Bin 0 -> 821 bytes frontend/static/img/icons/technorati_32.png | Bin 0 -> 1619 bytes frontend/static/img/icons/tumblr_16.png | Bin 0 -> 613 bytes frontend/static/img/icons/tumblr_32.png | Bin 0 -> 1175 bytes frontend/static/img/icons/twitter_16.png | Bin 0 -> 608 bytes frontend/static/img/icons/twitter_32.png | Bin 0 -> 1089 bytes frontend/static/img/icons/viddler_16.png | Bin 0 -> 670 bytes frontend/static/img/icons/viddler_32.png | Bin 0 -> 1371 bytes frontend/static/img/icons/vimeo_16.png | Bin 0 -> 643 bytes frontend/static/img/icons/vimeo_32.png | Bin 0 -> 1269 bytes frontend/static/img/icons/virb_16.png | Bin 0 -> 636 bytes frontend/static/img/icons/virb_32.png | Bin 0 -> 1014 bytes frontend/static/img/icons/windows_16.png | Bin 0 -> 792 bytes frontend/static/img/icons/windows_32.png | Bin 0 -> 1668 bytes frontend/static/img/icons/wordpress_16.png | Bin 0 -> 783 bytes frontend/static/img/icons/wordpress_32.png | Bin 0 -> 1740 bytes frontend/static/img/icons/xing_16.png | Bin 0 -> 769 bytes frontend/static/img/icons/xing_32.png | Bin 0 -> 1350 bytes frontend/static/img/icons/yahoo_16.png | Bin 0 -> 763 bytes frontend/static/img/icons/yahoo_32.png | Bin 0 -> 1301 bytes frontend/static/img/icons/yahoobuzz_16.png | Bin 0 -> 672 bytes frontend/static/img/icons/yahoobuzz_32.png | Bin 0 -> 1188 bytes frontend/static/img/icons/yelp_16.png | Bin 0 -> 763 bytes frontend/static/img/icons/yelp_32.png | Bin 0 -> 1500 bytes frontend/static/img/icons/youtube_16.png | Bin 0 -> 537 bytes frontend/static/img/icons/youtube_32.png | Bin 0 -> 1297 bytes frontend/static/img/icons/zootool_16.png | Bin 0 -> 702 bytes frontend/static/img/icons/zootool_32.png | Bin 0 -> 1273 bytes frontend/static/img/icosahedron.png | Bin 0 -> 1434 bytes frontend/static/img/idgiguy2.png | Bin 0 -> 38944 bytes frontend/static/img/loading.gif | Bin 0 -> 673 bytes frontend/static/img/loading2.gif | Bin 0 -> 673 bytes frontend/static/img/magnify.png | Bin 0 -> 440 bytes frontend/static/img/office-plant.jpg | Bin 0 -> 16584 bytes frontend/static/img/plant.gif | Bin 0 -> 67949 bytes frontend/static/img/playlist-banner.gif | Bin 0 -> 202144 bytes frontend/static/img/playlist.gif | Bin 0 -> 233975 bytes frontend/static/img/playlist_chat.gif | Bin 0 -> 131389 bytes frontend/static/img/pyramid.png | Bin 0 -> 1375 bytes frontend/static/img/ramshead.png | Bin 0 -> 1554 bytes frontend/static/img/runner.gif | Bin 0 -> 1465796 bytes frontend/static/img/scanjam-flipping.gif | Bin 0 -> 711173 bytes frontend/static/img/scanjam-title.gif | Bin 0 -> 2274 bytes frontend/static/img/scanjambg2.jpg | Bin 0 -> 63464 bytes frontend/static/img/scannerjammer-logo.png | Bin 0 -> 3040 bytes frontend/static/img/water-cooler.jpg | Bin 0 -> 6520 bytes frontend/static/img/watercoolericon.jpg | Bin 0 -> 59636 bytes .../img/webcam/2011/08/19/1313810814_ryz.jpg | 0 .../img/webcam/2011/08/19/1313810826_ryz.jpg | 0 .../img/webcam/2011/08/19/1313810981_ryz.jpg | 0 .../img/webcam/2011/08/19/1313811002_ryz.jpg | 0 .../img/webcam/2011/08/19/1313811024_ryz.jpg | 0 .../img/webcam/2011/08/19/1313811041_ryz.jpg | 0 .../img/webcam/2011/08/19/1313811730_ryz.jpg | Bin 0 -> 22300 bytes .../img/webcam/2011/08/19/1313811772_ryz.jpg | Bin 0 -> 21854 bytes .../img/webcam/2011/08/19/1313811923_ryz.jpg | Bin 0 -> 21567 bytes .../img/webcam/2011/08/19/1313812087_ryz.jpg | Bin 0 -> 21745 bytes .../img/webcam/2011/08/19/1313812093_ryz.jpg | Bin 0 -> 20951 bytes .../img/webcam/2011/08/19/1313812097_ryz.jpg | Bin 0 -> 22052 bytes .../img/webcam/2011/08/19/1313812098_ryz.jpg | Bin 0 -> 20927 bytes .../img/webcam/2011/08/19/1313812099_ryz.jpg | Bin 0 -> 21409 bytes .../img/webcam/2011/08/19/1313812490_ryz.jpg | Bin 0 -> 20167 bytes .../img/webcam/2011/08/19/1313812564_ryz.jpg | Bin 0 -> 286 bytes .../img/webcam/2011/08/19/1313815048_ryz.jpg | Bin 0 -> 288 bytes .../img/webcam/2011/08/19/1313815411_ryz.jpg | Bin 0 -> 288 bytes .../img/webcam/2011/08/19/1313815429_ryz.jpg | Bin 0 -> 16100 bytes .../img/webcam/2011/08/19/1313815522_ryz.jpg | Bin 0 -> 15203 bytes .../img/webcam/2011/08/21/1313909058_ryz.jpg | Bin 0 -> 2711 bytes .../img/webcam/2011/09/26/1317090391_ryz.jpg | Bin 0 -> 20717 bytes frontend/static/js/admin.js | 119 + frontend/static/js/api.js | 132 + frontend/static/js/audio.js | 142 + frontend/static/js/auth.js | 166 + frontend/static/js/avatar-data.js | 1 + frontend/static/js/avatar.js | 236 + frontend/static/js/calendar.js | 273 + frontend/static/js/chat.js | 280 + frontend/static/js/debug.js | 130 + frontend/static/js/dump.js | 2 + frontend/static/js/embed.js | 142 + frontend/static/js/glitter-data.js | 1 + frontend/static/js/glitter.js | 108 + frontend/static/js/jquery-1.5.2.min.js | 16 + frontend/static/js/jquery.md5.js | 230 + frontend/static/js/like.js | 97 + frontend/static/js/main.js | 662 ++ frontend/static/js/player.js | 546 ++ frontend/static/js/poll.js | 53 + frontend/static/js/profile.js | 540 ++ frontend/static/js/register.js | 292 + frontend/static/js/room.js | 459 ++ frontend/static/js/roomlist.js | 166 + frontend/static/js/search.js | 191 + frontend/static/js/sj6.js | 6505 +++++++++++++++ frontend/static/js/soundcloud.js | 157 + frontend/static/js/soundmanager2.js | 2838 +++++++ frontend/static/js/swfobject.js | 4 + frontend/static/js/test-admin.js | 93 + frontend/static/js/tokbox.js | 181 + frontend/static/js/top.js | 251 + frontend/static/js/vimeo.js | 100 + frontend/static/js/youtube.js | 177 + frontend/static/other_rooms/admin.html | 78 + frontend/static/other_rooms/calendar.html | 89 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 153 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../css/ui-lightness/jquery-ui-1.8.13.custom.css | 362 + .../static/other_rooms/datepicker/datepicker.js | 100 + .../datepicker/development-bundle/AUTHORS.txt | 30 + .../datepicker/development-bundle/GPL-LICENSE.txt | 278 + .../datepicker/development-bundle/MIT-LICENSE.txt | 25 + .../demos/datepicker/alt-field.html | 36 + .../demos/datepicker/animation.html | 58 + .../demos/datepicker/buttonbar.html | 35 + .../demos/datepicker/date-formats.html | 47 + .../demos/datepicker/date-range.html | 49 + .../demos/datepicker/default.html | 33 + .../demos/datepicker/dropdown-month-year.html | 36 + .../demos/datepicker/icon-trigger.html | 37 + .../demos/datepicker/images/calendar.gif | Bin 0 -> 269 bytes .../development-bundle/demos/datepicker/index.html | 31 + .../demos/datepicker/inline.html | 33 + .../demos/datepicker/localization.html | 162 + .../demos/datepicker/min-max.html | 33 + .../demos/datepicker/multiple-calendars.html | 36 + .../demos/datepicker/other-months.html | 37 + .../demos/datepicker/show-week.html | 39 + .../datepicker/development-bundle/demos/demos.css | 334 + .../development-bundle/demos/images/calendar.gif | Bin 0 -> 269 bytes .../demos/images/demo-config-on-tile.gif | Bin 0 -> 172 bytes .../demos/images/demo-config-on.gif | Bin 0 -> 335 bytes .../demos/images/demo-spindown-closed.gif | Bin 0 -> 103 bytes .../demos/images/demo-spindown-open.gif | Bin 0 -> 105 bytes .../demos/images/icon-docs-info.gif | Bin 0 -> 206 bytes .../development-bundle/demos/images/pbar-ani.gif | Bin 0 -> 7970 bytes .../datepicker/development-bundle/demos/index.html | 321 + .../development-bundle/docs/datepicker.html | 2570 ++++++ .../external/jquery.bgiframe-2.1.2.js | 39 + .../development-bundle/external/jquery.cookie.js | 89 + .../development-bundle/external/jquery.metadata.js | 122 + .../development-bundle/external/qunit.css | 153 + .../development-bundle/external/qunit.js | 1261 +++ .../datepicker/development-bundle/jquery-1.5.1.js | 8316 ++++++++++++++++++++ .../base/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../base/images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../base/images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../base/images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../base/images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../base/images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../base/images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../themes/base/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../themes/base/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../themes/base/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../themes/base/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../themes/base/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../themes/base/jquery.ui.all.css | 11 + .../themes/base/jquery.ui.base.css | 2 + .../themes/base/jquery.ui.core.css | 41 + .../themes/base/jquery.ui.datepicker.css | 68 + .../themes/base/jquery.ui.theme.css | 252 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 153 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../ui-lightness/jquery-ui-1.8.13.custom.css | 362 + .../themes/ui-lightness/jquery.ui.all.css | 11 + .../themes/ui-lightness/jquery.ui.base.css | 2 + .../themes/ui-lightness/jquery.ui.core.css | 41 + .../themes/ui-lightness/jquery.ui.datepicker.css | 68 + .../themes/ui-lightness/jquery.ui.theme.css | 254 + .../development-bundle/ui/i18n/jquery-ui-i18n.js | 1379 ++++ .../ui/i18n/jquery.ui.datepicker-af.js | 23 + .../ui/i18n/jquery.ui.datepicker-ar-DZ.js | 23 + .../ui/i18n/jquery.ui.datepicker-ar.js | 23 + .../ui/i18n/jquery.ui.datepicker-az.js | 23 + .../ui/i18n/jquery.ui.datepicker-bg.js | 24 + .../ui/i18n/jquery.ui.datepicker-bs.js | 23 + .../ui/i18n/jquery.ui.datepicker-ca.js | 23 + .../ui/i18n/jquery.ui.datepicker-cs.js | 23 + .../ui/i18n/jquery.ui.datepicker-da.js | 23 + .../ui/i18n/jquery.ui.datepicker-de.js | 23 + .../ui/i18n/jquery.ui.datepicker-el.js | 23 + .../ui/i18n/jquery.ui.datepicker-en-AU.js | 23 + .../ui/i18n/jquery.ui.datepicker-en-GB.js | 23 + .../ui/i18n/jquery.ui.datepicker-en-NZ.js | 23 + .../ui/i18n/jquery.ui.datepicker-eo.js | 23 + .../ui/i18n/jquery.ui.datepicker-es.js | 23 + .../ui/i18n/jquery.ui.datepicker-et.js | 23 + .../ui/i18n/jquery.ui.datepicker-eu.js | 23 + .../ui/i18n/jquery.ui.datepicker-fa.js | 23 + .../ui/i18n/jquery.ui.datepicker-fi.js | 23 + .../ui/i18n/jquery.ui.datepicker-fo.js | 23 + .../ui/i18n/jquery.ui.datepicker-fr-CH.js | 23 + .../ui/i18n/jquery.ui.datepicker-fr.js | 25 + .../ui/i18n/jquery.ui.datepicker-gl.js | 23 + .../ui/i18n/jquery.ui.datepicker-he.js | 23 + .../ui/i18n/jquery.ui.datepicker-hr.js | 23 + .../ui/i18n/jquery.ui.datepicker-hu.js | 23 + .../ui/i18n/jquery.ui.datepicker-hy.js | 23 + .../ui/i18n/jquery.ui.datepicker-id.js | 23 + .../ui/i18n/jquery.ui.datepicker-is.js | 23 + .../ui/i18n/jquery.ui.datepicker-it.js | 23 + .../ui/i18n/jquery.ui.datepicker-ja.js | 23 + .../ui/i18n/jquery.ui.datepicker-ko.js | 23 + .../ui/i18n/jquery.ui.datepicker-kz.js | 23 + .../ui/i18n/jquery.ui.datepicker-lt.js | 23 + .../ui/i18n/jquery.ui.datepicker-lv.js | 23 + .../ui/i18n/jquery.ui.datepicker-ml.js | 23 + .../ui/i18n/jquery.ui.datepicker-ms.js | 23 + .../ui/i18n/jquery.ui.datepicker-nl.js | 23 + .../ui/i18n/jquery.ui.datepicker-no.js | 23 + .../ui/i18n/jquery.ui.datepicker-pl.js | 23 + .../ui/i18n/jquery.ui.datepicker-pt-BR.js | 23 + .../ui/i18n/jquery.ui.datepicker-pt.js | 22 + .../ui/i18n/jquery.ui.datepicker-rm.js | 21 + .../ui/i18n/jquery.ui.datepicker-ro.js | 26 + .../ui/i18n/jquery.ui.datepicker-ru.js | 23 + .../ui/i18n/jquery.ui.datepicker-sk.js | 23 + .../ui/i18n/jquery.ui.datepicker-sl.js | 24 + .../ui/i18n/jquery.ui.datepicker-sq.js | 23 + .../ui/i18n/jquery.ui.datepicker-sr-SR.js | 23 + .../ui/i18n/jquery.ui.datepicker-sr.js | 23 + .../ui/i18n/jquery.ui.datepicker-sv.js | 23 + .../ui/i18n/jquery.ui.datepicker-ta.js | 23 + .../ui/i18n/jquery.ui.datepicker-th.js | 23 + .../ui/i18n/jquery.ui.datepicker-tj.js | 23 + .../ui/i18n/jquery.ui.datepicker-tr.js | 23 + .../ui/i18n/jquery.ui.datepicker-uk.js | 23 + .../ui/i18n/jquery.ui.datepicker-vi.js | 23 + .../ui/i18n/jquery.ui.datepicker-zh-CN.js | 23 + .../ui/i18n/jquery.ui.datepicker-zh-HK.js | 23 + .../ui/i18n/jquery.ui.datepicker-zh-TW.js | 23 + .../ui/jquery-ui-1.8.13.custom.js | 2103 +++++ .../development-bundle/ui/jquery.ui.core.js | 312 + .../development-bundle/ui/jquery.ui.datepicker.js | 1791 +++++ .../ui/minified/jquery.ui.core.min.js | 17 + .../ui/minified/jquery.ui.datepicker.min.js | 82 + .../datepicker/development-bundle/version.txt | 1 + .../other_rooms/datepicker/js/jquery-1.5.1.min.js | 16 + .../datepicker/js/jquery-ui-1.8.13.custom.min.js | 100 + frontend/static/other_rooms/embed-test.html | 48 + frontend/static/other_rooms/embed-test2.html | 48 + frontend/static/other_rooms/embed.html | 64 + frontend/static/other_rooms/img/cloudz1.png | Bin 0 -> 36725 bytes frontend/static/other_rooms/img/cloudz2.png | Bin 0 -> 38090 bytes .../static/other_rooms/img/playlist-banner.gif | Bin 0 -> 202144 bytes frontend/static/other_rooms/liketest.html | 70 + frontend/static/other_rooms/topvids.html | 127 + frontend/static/radio/default.html | 178 + frontend/static/radio/diornights.html | 13 + frontend/static/radio/disaro.html | 178 + frontend/static/radio/glasspopcorn.html | 204 + frontend/static/radio/sewergreats.html | 219 + frontend/static/register/.htaccess | 1 + frontend/static/register/index.html | 178 + frontend/static/register/reset/.htaccess | 1 + frontend/static/register/reset/index.html | 57 + .../avatar.sassc | Bin 0 -> 7936 bytes .../calendar.sassc | Bin 0 -> 11052 bytes .../diornights.sassc | Bin 0 -> 12635 bytes .../disaro.sassc | Bin 0 -> 3784 bytes .../embed.sassc | Bin 0 -> 12864 bytes .../feederbleeder.sassc | Bin 0 -> 3791 bytes .../frederick.sassc | Bin 0 -> 1127 bytes .../gallery-white.sassc | Bin 0 -> 27222 bytes .../glitter.sassc | Bin 0 -> 6170 bytes .../ie.scssc | Bin 0 -> 773 bytes .../main.sassc | Bin 0 -> 126 bytes .../print.scssc | Bin 0 -> 655 bytes .../profile.sassc | 770 ++ .../roomlist.sassc | Bin 0 -> 14117 bytes .../screen.sassc | 1281 +++ .../sewergreats.sassc | Bin 0 -> 126 bytes .../sexydj_main.sassc | Bin 0 -> 9076 bytes .../sexydj_player.sassc | Bin 0 -> 2463 bytes .../test.sassc | Bin 0 -> 31936 bytes .../tiny.sassc | Bin 0 -> 5630 bytes .../top.sassc | Bin 0 -> 7594 bytes .../vtest1.sassc | Bin 0 -> 23656 bytes .../vtest2.sassc | Bin 0 -> 23769 bytes .../vtest3.sassc | Bin 0 -> 27659 bytes .../_reset.scssc | Bin 0 -> 383 bytes .../_utilities.scssc | Bin 0 -> 12355 bytes .../_utilities.scssc | Bin 0 -> 22051 bytes .../_reset.scssc | Bin 0 -> 360 bytes .../avatar.sassc | Bin 0 -> 8368 bytes .../calendar.sassc | Bin 0 -> 10788 bytes .../diornights.sassc | Bin 0 -> 11790 bytes .../embed.sassc | Bin 0 -> 11424 bytes .../feederbleeder.sassc | Bin 0 -> 4451 bytes .../frederick.sassc | Bin 0 -> 2007 bytes .../gallery-white.sassc | Bin 0 -> 21201 bytes .../glitter.sassc | Bin 0 -> 8322 bytes .../ie.scssc | Bin 0 -> 1879 bytes .../main.sassc | Bin 0 -> 1242 bytes .../print.scssc | Bin 0 -> 1764 bytes .../profile.sassc | Bin 0 -> 56391 bytes .../roomlist.sassc | Bin 0 -> 13756 bytes .../screen.sassc | Bin 0 -> 91568 bytes .../screen.scssc | Bin 0 -> 1981 bytes .../sewergreats.sassc | Bin 0 -> 1249 bytes .../sexydj_main.sassc | Bin 0 -> 8408 bytes .../sexydj_player.sassc | Bin 0 -> 3052 bytes .../test.sassc | Bin 0 -> 28008 bytes .../tiny.sassc | Bin 0 -> 4877 bytes .../top.sassc | Bin 0 -> 8350 bytes .../vtest.sassc | Bin 0 -> 20266 bytes .../vtest1.sassc | Bin 0 -> 22814 bytes .../vtest2.sassc | Bin 0 -> 22930 bytes .../vtest3.sassc | Bin 0 -> 26807 bytes .../_utilities.scssc | Bin 0 -> 26414 bytes .../_reset.scssc | Bin 0 -> 1129 bytes .../avatar.sassc | Bin 0 -> 8989 bytes .../calendar.sassc | Bin 0 -> 12538 bytes .../diornights.sassc | Bin 0 -> 13266 bytes .../disaro.sassc | Bin 0 -> 4230 bytes .../embed.sassc | Bin 0 -> 14899 bytes .../feederbleeder.sassc | Bin 0 -> 4237 bytes .../frederick.sassc | Bin 0 -> 1230 bytes .../gallery-white.sassc | Bin 0 -> 30769 bytes .../glitter.sassc | Bin 0 -> 7018 bytes .../ie.scssc | Bin 0 -> 771 bytes .../main.sassc | Bin 0 -> 130 bytes .../print.scssc | Bin 0 -> 653 bytes .../profile.sassc | Bin 0 -> 67495 bytes .../roomlist.sassc | Bin 0 -> 15907 bytes .../screen.sassc | Bin 0 -> 113202 bytes .../screen.scssc | Bin 0 -> 874 bytes .../sewergreats.sassc | Bin 0 -> 130 bytes .../test.sassc | Bin 0 -> 35070 bytes .../tiny.sassc | Bin 0 -> 6656 bytes .../top.sassc | Bin 0 -> 8543 bytes frontend/static/sass/config.rb | 9 + frontend/static/sass/src/avatar.sass | 56 + frontend/static/sass/src/calendar.sass | 87 + frontend/static/sass/src/diornights.sass | 88 + frontend/static/sass/src/disaro.sass | 29 + frontend/static/sass/src/embed.sass | 96 + frontend/static/sass/src/feederbleeder.sass | 29 + frontend/static/sass/src/frederick.sass | 4 + frontend/static/sass/src/gallery-white.sass | 220 + frontend/static/sass/src/glitter.sass | 18 + frontend/static/sass/src/ie.scss | 5 + frontend/static/sass/src/main.sass | 0 frontend/static/sass/src/print.scss | 3 + frontend/static/sass/src/profile.sass | 514 ++ frontend/static/sass/src/roomlist.sass | 131 + frontend/static/sass/src/screen.sass | 891 +++ frontend/static/sass/src/screen.scss | 6 + frontend/static/sass/src/sewergreats.sass | 0 frontend/static/sass/src/test.sass | 285 + frontend/static/sass/src/tiny.sass | 36 + frontend/static/sass/src/top.sass | 52 + frontend/static/sass/stylesheets/avatar.css | 91 + frontend/static/sass/stylesheets/calendar.css | 141 + frontend/static/sass/stylesheets/diornights.css | 182 + frontend/static/sass/stylesheets/disaro.css | 1 + frontend/static/sass/stylesheets/embed.css | 163 + frontend/static/sass/stylesheets/feederbleeder.css | 41 + frontend/static/sass/stylesheets/frederick.css | 5 + frontend/static/sass/stylesheets/gallery-white.css | 353 + frontend/static/sass/stylesheets/glitter.css | 29 + frontend/static/sass/stylesheets/ie.css | 5 + frontend/static/sass/stylesheets/main.css | 0 frontend/static/sass/stylesheets/print.css | 3 + frontend/static/sass/stylesheets/profile.css | 799 ++ frontend/static/sass/stylesheets/roomlist.css | 179 + frontend/static/sass/stylesheets/screen.css | 1323 ++++ frontend/static/sass/stylesheets/sewergreats.css | 0 frontend/static/sass/stylesheets/test.css | 478 ++ frontend/static/sass/stylesheets/tiny.css | 69 + frontend/static/sass/stylesheets/top.css | 77 + frontend/static/sass/stylesheets/waterfall.css | 29 + frontend/static/search/.htaccess | 2 + frontend/static/search/index.html | 0 frontend/static/stylesheets/src/avatar.css | 1 + frontend/static/stylesheets/src/calendar.css | 1 + frontend/static/stylesheets/src/diornights.css | 1 + frontend/static/stylesheets/src/disaro.css | 1 + frontend/static/stylesheets/src/embed.css | 1 + frontend/static/stylesheets/src/feederbleeder.css | 1 + frontend/static/stylesheets/src/frederick.css | 1 + frontend/static/stylesheets/src/gallery-white.css | 1 + frontend/static/stylesheets/src/glitter.css | 1 + frontend/static/stylesheets/src/ie.css | 0 frontend/static/stylesheets/src/main.css | 0 frontend/static/stylesheets/src/print.css | 0 frontend/static/stylesheets/src/profile.css | 1 + frontend/static/stylesheets/src/roomlist.css | 1 + frontend/static/stylesheets/src/screen.css | 62 + frontend/static/stylesheets/src/sewergreats.css | 0 frontend/static/stylesheets/src/test.css | 1 + frontend/static/stylesheets/src/tiny.css | 1 + frontend/static/stylesheets/src/top.css | 1 + frontend/static/swf/soundmanager2.swf | Bin 0 -> 3090 bytes frontend/static/swf/soundmanager2_debug.swf | Bin 0 -> 3582 bytes frontend/static/swf/soundmanager2_flash9.swf | Bin 0 -> 9527 bytes frontend/static/swf/soundmanager2_flash9_debug.swf | Bin 0 -> 18241 bytes frontend/static/swf/webcam.swf | Bin 0 -> 6034 bytes frontend/static/template/directory.html | 282 + frontend/static/template/index.html | 96 + frontend/static/template/profile.html | 151 + frontend/static/template/redir.html | 13 + frontend/static/template/register.html | 172 + frontend/static/template/room.html | 220 + frontend/static/template/roomlist.html | 82 + frontend/static/tumblrplay/index.html | 19 + frontend/static/tumblrplay/input.html | 55 + frontend/static/tumblrplay/play.html | 22 + frontend/static/tumblrplay/temp.html | 382 + 987 files changed, 51381 insertions(+) create mode 100644 frontend/static/avatar/.htaccess create mode 100644 frontend/static/avatar/1.gif create mode 100644 frontend/static/avatar/10.gif create mode 100644 frontend/static/avatar/11.gif create mode 100644 frontend/static/avatar/12.gif create mode 100644 frontend/static/avatar/13.gif create mode 100644 frontend/static/avatar/14.gif create mode 100644 frontend/static/avatar/15.gif create mode 100644 frontend/static/avatar/16.gif create mode 100644 frontend/static/avatar/17.gif create mode 100644 frontend/static/avatar/18.gif create mode 100644 frontend/static/avatar/19.gif create mode 100644 frontend/static/avatar/2.gif create mode 100644 frontend/static/avatar/20.gif create mode 100644 frontend/static/avatar/21.gif create mode 100644 frontend/static/avatar/22.gif create mode 100644 frontend/static/avatar/23.gif create mode 100644 frontend/static/avatar/24.gif create mode 100644 frontend/static/avatar/25.gif create mode 100644 frontend/static/avatar/26.gif create mode 100644 frontend/static/avatar/27.gif create mode 100644 frontend/static/avatar/28.gif create mode 100644 frontend/static/avatar/29.gif create mode 100644 frontend/static/avatar/3.gif create mode 100644 frontend/static/avatar/30.gif create mode 100644 frontend/static/avatar/31.gif create mode 100644 frontend/static/avatar/32.gif create mode 100644 frontend/static/avatar/33.gif create mode 100644 frontend/static/avatar/34.gif create mode 100644 frontend/static/avatar/35.gif create mode 100644 frontend/static/avatar/36.gif create mode 100644 frontend/static/avatar/37.gif create mode 100644 frontend/static/avatar/38.gif create mode 100644 frontend/static/avatar/39.gif create mode 100644 frontend/static/avatar/4.gif create mode 100644 frontend/static/avatar/40.gif create mode 100644 frontend/static/avatar/41.gif create mode 100644 frontend/static/avatar/42.gif create mode 100644 frontend/static/avatar/43.gif create mode 100644 frontend/static/avatar/44.gif create mode 100644 frontend/static/avatar/45.gif create mode 100644 frontend/static/avatar/46.gif create mode 100644 frontend/static/avatar/47.gif create mode 100644 frontend/static/avatar/48.gif create mode 100644 frontend/static/avatar/49.gif create mode 100644 frontend/static/avatar/5.gif create mode 100644 frontend/static/avatar/50.gif create mode 100644 frontend/static/avatar/51.gif create mode 100644 frontend/static/avatar/52.gif create mode 100644 frontend/static/avatar/53.gif create mode 100644 frontend/static/avatar/54.gif create mode 100644 frontend/static/avatar/55.gif create mode 100644 frontend/static/avatar/56.gif create mode 100644 frontend/static/avatar/57.gif create mode 100644 frontend/static/avatar/58.gif create mode 100644 frontend/static/avatar/59.gif create mode 100644 frontend/static/avatar/6.gif create mode 100644 frontend/static/avatar/60.gif create mode 100644 frontend/static/avatar/61.gif create mode 100644 frontend/static/avatar/62.gif create mode 100644 frontend/static/avatar/63.gif create mode 100644 frontend/static/avatar/64.gif create mode 100644 frontend/static/avatar/65.gif create mode 100644 frontend/static/avatar/66.gif create mode 100644 frontend/static/avatar/67.gif create mode 100644 frontend/static/avatar/68.gif create mode 100644 frontend/static/avatar/69.gif create mode 100644 frontend/static/avatar/7.gif create mode 100644 frontend/static/avatar/70.gif create mode 100644 frontend/static/avatar/71.gif create mode 100644 frontend/static/avatar/72.gif create mode 100644 frontend/static/avatar/8.gif create mode 100644 frontend/static/avatar/9.gif create mode 100644 frontend/static/avatar/Predator.jpg create mode 100644 frontend/static/avatar/arcane2.gif create mode 100644 frontend/static/bgz/1294086971317-dumpfm-GucciSoFlosy-idgiinout.gif create mode 100644 frontend/static/bgz/1300743917959-dumpfm-pepper-argus_glitter.gif create mode 100644 frontend/static/bgz/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif create mode 100644 frontend/static/bgz/2181Series.gif create mode 100644 frontend/static/bgz/8-planet-jupiter-map.jpg create mode 100644 frontend/static/bgz/DarktowerL_gendler.jpg create mode 100644 frontend/static/bgz/Tropic_Of_Cancer_-_The_Sorrow_Of_Two_Blooms.jpg create mode 100644 frontend/static/bgz/argus.gif create mode 100644 frontend/static/bgz/birdcage_grid.jpg create mode 100644 frontend/static/bgz/cageumbrellaz.jpg create mode 100644 frontend/static/bgz/cloudz1.png create mode 100644 frontend/static/bgz/cloudz2.png create mode 100644 frontend/static/bgz/crystalz.png create mode 100644 frontend/static/bgz/darktower.jpg create mode 100644 frontend/static/bgz/diornights.jpg create mode 100644 frontend/static/bgz/fingerlings-butterflies.png create mode 100644 frontend/static/bgz/fingerlings.gif create mode 100644 frontend/static/bgz/fingerlings2.png create mode 100644 frontend/static/bgz/fingerlings3.jpg create mode 100644 frontend/static/bgz/geodesic-brick.png create mode 100644 frontend/static/bgz/geodesic.png create mode 100644 frontend/static/bgz/gridzer01.gif create mode 100644 frontend/static/bgz/gridzy1.jpg create mode 100644 frontend/static/bgz/gridzy10.jpg create mode 100644 frontend/static/bgz/gridzy2.jpg create mode 100644 frontend/static/bgz/gridzy3.jpg create mode 100644 frontend/static/bgz/gridzy4.jpg create mode 100644 frontend/static/bgz/gridzy5.jpg create mode 100644 frontend/static/bgz/gridzy6.jpg create mode 100644 frontend/static/bgz/gridzy7.jpg create mode 100644 frontend/static/bgz/gridzy8.jpg create mode 100644 frontend/static/bgz/gridzy9.jpg create mode 100644 frontend/static/bgz/index.html create mode 100644 frontend/static/bgz/jupiter-aurora.jpg create mode 100644 frontend/static/bgz/jupiteraurora.jpg create mode 100644 frontend/static/bgz/lavender.jpg create mode 100644 frontend/static/bgz/morrocorace.png create mode 100644 frontend/static/bgz/mountainz.png create mode 100644 frontend/static/bgz/mountainz2.png create mode 100644 frontend/static/bgz/mountainz3.png create mode 100644 frontend/static/bgz/ocian1.gif create mode 100644 frontend/static/bgz/ocian2.gif create mode 100644 frontend/static/bgz/ocian3.gif create mode 100644 frontend/static/bgz/ocian4.gif create mode 100644 frontend/static/bgz/ocian4.jpg create mode 100644 frontend/static/bgz/orlynails.jpg create mode 100644 frontend/static/bgz/scannerjammer_cyberspace.jpg create mode 100644 frontend/static/bgz/sewergreatsbg.jpg create mode 100644 frontend/static/bgz/sewergreatscorner.jpg create mode 100644 frontend/static/bgz/sewergreatsvol1.jpg create mode 100644 frontend/static/bgz/starfield.jpg create mode 100644 frontend/static/bgz/triangledeluxe.jpg create mode 100644 frontend/static/bgz/visual6502.jpg create mode 100644 frontend/static/bgz/waterfall.gif create mode 100644 frontend/static/bgz/waterfall2.gif create mode 100644 frontend/static/bgz/whitesquare.gif create mode 100644 frontend/static/css/dump.css create mode 120000 frontend/static/css/sasscss create mode 100644 frontend/static/css/ui-purple2/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 frontend/static/css/ui-purple2/images/ui-bg_flat_0_eeeeee_40x100.png create mode 100644 frontend/static/css/ui-purple2/images/ui-bg_flat_100_381c63_40x100.png create mode 100644 frontend/static/css/ui-purple2/images/ui-bg_flat_35_dddddd_40x100.png create mode 100644 frontend/static/css/ui-purple2/images/ui-bg_flat_50_ededed_40x100.png create mode 100644 frontend/static/css/ui-purple2/images/ui-bg_flat_55_c0402a_40x100.png create mode 100644 frontend/static/css/ui-purple2/images/ui-bg_flat_55_fdf9d8_40x100.png create mode 100644 frontend/static/css/ui-purple2/images/ui-bg_flat_60_edebef_40x100.png create mode 100644 frontend/static/css/ui-purple2/images/ui-bg_flat_75_8566a9_40x100.png create mode 100644 frontend/static/css/ui-purple2/images/ui-icons_6d33bb_256x240.png create mode 100644 frontend/static/css/ui-purple2/images/ui-icons_7d5bbe_256x240.png create mode 100644 frontend/static/css/ui-purple2/images/ui-icons_817693_256x240.png create mode 100644 frontend/static/css/ui-purple2/images/ui-icons_9e70e1_256x240.png create mode 100644 frontend/static/css/ui-purple2/images/ui-icons_aa8fd1_256x240.png create mode 100644 frontend/static/css/ui-purple2/images/ui-icons_edecee_256x240.png create mode 100644 frontend/static/css/ui-purple2/images/ui-icons_fbc856_256x240.png create mode 100644 frontend/static/css/ui-purple2/jquery-ui-1.8.13.custom.css create mode 100644 frontend/static/css/used_to_be_called_chat.css create mode 100644 frontend/static/faq/.htaccess create mode 100644 frontend/static/faq/index.html create mode 100644 frontend/static/favicon.ico create mode 100644 frontend/static/img/.htaccess create mode 100644 frontend/static/img/1278131405573-dumpfm-glasspopcorn-sitmanpiano.gif create mode 100644 frontend/static/img/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif create mode 100644 frontend/static/img/1309267681552-dumpfm-frakbuddy-glasscross.gif create mode 100644 frontend/static/img/Tropic_Of_Cancer__The_Sorrow_Of_Two_Blooms_1308602037.jpg create mode 100644 frontend/static/img/avatar2.png create mode 100644 frontend/static/img/bgz-icon.jpg create mode 100644 frontend/static/img/black-flower.gif create mode 100644 frontend/static/img/blackplantmask.png create mode 100644 frontend/static/img/cube.png create mode 100644 frontend/static/img/diornights.png create mode 100644 frontend/static/img/disaro.jpg create mode 100644 frontend/static/img/flower-red.gif create mode 100644 frontend/static/img/flower20.png create mode 100644 frontend/static/img/glasspopcornheader.png create mode 100644 frontend/static/img/glasspopradio.gif create mode 100644 frontend/static/img/glasspopthumb.gif create mode 100644 frontend/static/img/glitter/100-Percent-Sexy-Cowgirl.gif create mode 100644 frontend/static/img/glitter/1292462203316-dumpfm-yrmomvsmymom-sparkle.gif create mode 100644 frontend/static/img/glitter/99-percent-tejana-and-1-percent-floridian.gif create mode 100644 frontend/static/img/glitter/Air-Plane.gif create mode 100644 frontend/static/img/glitter/Aloha-Girl.gif create mode 100644 frontend/static/img/glitter/American-Flag-Heart.gif create mode 100644 frontend/static/img/glitter/American-Sexy-Thing-1.gif create mode 100644 frontend/static/img/glitter/American-Sexy-Thing.gif create mode 100644 frontend/static/img/glitter/Arizona-Cardinals.gif create mode 100644 frontend/static/img/glitter/Arizona-Diamondbacks.gif create mode 100644 frontend/static/img/glitter/Atlanta-Braves.gif create mode 100644 frontend/static/img/glitter/Atlanta-Falcons.gif create mode 100644 frontend/static/img/glitter/Baltimore-Orioles.gif create mode 100644 frontend/static/img/glitter/Baltimore-Ravens.gif create mode 100644 frontend/static/img/glitter/Beat-Hell.gif create mode 100644 frontend/static/img/glitter/Beautiful-Friendship.gif create mode 100644 frontend/static/img/glitter/Belle-Glitter.gif create mode 100644 frontend/static/img/glitter/Belly-Dancer.gif create mode 100644 frontend/static/img/glitter/Belly-Dnacer.gif create mode 100644 frontend/static/img/glitter/Bible-Diet.gif create mode 100644 frontend/static/img/glitter/Black-Kisses.gif create mode 100644 frontend/static/img/glitter/Black-Razzers.gif create mode 100644 frontend/static/img/glitter/Bloody-Vampire.gif create mode 100644 frontend/static/img/glitter/Blue-Butterfly-Heaven.gif create mode 100644 frontend/static/img/glitter/Blue-Cape-Fairy.gif create mode 100644 frontend/static/img/glitter/Blue-Care-Bear.gif create mode 100644 frontend/static/img/glitter/Blue-Dolphin.gif create mode 100644 frontend/static/img/glitter/Blue-Flower-02.gif create mode 100644 frontend/static/img/glitter/Blue-Flower-03.gif create mode 100644 frontend/static/img/glitter/Blue-Purple-Shoe.gif create mode 100644 frontend/static/img/glitter/Booty-Call.gif create mode 100644 frontend/static/img/glitter/Broken-heart-Pink.gif create mode 100644 frontend/static/img/glitter/Buffalo-Bills.gif create mode 100644 frontend/static/img/glitter/Bulls.gif create mode 100644 frontend/static/img/glitter/Burger-King-Glitter.gif create mode 100644 frontend/static/img/glitter/Butterfly-Girl.gif create mode 100644 frontend/static/img/glitter/California-Angels.gif create mode 100644 frontend/static/img/glitter/Cat-Fairy.gif create mode 100644 frontend/static/img/glitter/Cell-Phone-Glitter.gif create mode 100644 frontend/static/img/glitter/Cheetah-Chick.gif create mode 100644 frontend/static/img/glitter/Cherries-Glittler.gif create mode 100644 frontend/static/img/glitter/Cherries.gif create mode 100644 frontend/static/img/glitter/Chicago-Bears.gif create mode 100644 frontend/static/img/glitter/Chicago-Cubs.gif create mode 100644 frontend/static/img/glitter/Chicago-Whitesox.gif create mode 100644 frontend/static/img/glitter/Cleveland-Indians.gif create mode 100644 frontend/static/img/glitter/Close-Girlfriends.gif create mode 100644 frontend/static/img/glitter/Colorado-Rockies.gif create mode 100644 frontend/static/img/glitter/Colour-My-World.gif create mode 100644 frontend/static/img/glitter/Cone-Get-It.gif create mode 100644 frontend/static/img/glitter/Cuban-Babe.gif create mode 100644 frontend/static/img/glitter/Cupid-Just-Struck.gif create mode 100644 frontend/static/img/glitter/Dirty-Little-Secret.gif create mode 100644 frontend/static/img/glitter/Dolphin-Animated.gif create mode 100644 frontend/static/img/glitter/Droppin-In-To-Say-Hello.gif create mode 100644 frontend/static/img/glitter/Drppin-By-To-Say-hellow.gif create mode 100644 frontend/static/img/glitter/Eeyore-Angel.gif create mode 100644 frontend/static/img/glitter/Fairy-18.gif create mode 100644 frontend/static/img/glitter/Fairy-23.gif create mode 100644 frontend/static/img/glitter/Fairy-Caught-in-Jar.gif create mode 100644 frontend/static/img/glitter/Fairy-Chest.gif create mode 100644 frontend/static/img/glitter/Fairy-Fantasy-5.gif create mode 100644 frontend/static/img/glitter/Fairy-Waterfalls.gif create mode 100644 frontend/static/img/glitter/Fairy-Wings-4.gif create mode 100644 frontend/static/img/glitter/Fairy-Wings-5.gif create mode 100644 frontend/static/img/glitter/Fantasy-Fairy-10.gif create mode 100644 frontend/static/img/glitter/Fantasy-Fairy-4.gif create mode 100644 frontend/static/img/glitter/Fantasy-Fairy-5.gif create mode 100644 frontend/static/img/glitter/Fantasy-Fairy-8.gif create mode 100644 frontend/static/img/glitter/Fantasy-Fairy.gif create mode 100644 frontend/static/img/glitter/Fendi-Yellow.gif create mode 100644 frontend/static/img/glitter/Florida-Marlins.gif create mode 100644 frontend/static/img/glitter/Fur-Cowgirl.gif create mode 100644 frontend/static/img/glitter/Getting-Ready.gif create mode 100644 frontend/static/img/glitter/Ghetto-Booty.gif create mode 100644 frontend/static/img/glitter/Gorgeous-Fairy.gif create mode 100644 frontend/static/img/glitter/Gorgeous-Pink-Flowers.gif create mode 100644 frontend/static/img/glitter/Green-Palm-Tree.gif create mode 100644 frontend/static/img/glitter/Happy-Feb-14th-Arrow-Heart.gif create mode 100644 frontend/static/img/glitter/Have-A-Beautiful-Day.gif create mode 100644 frontend/static/img/glitter/Have-Dreams.gif create mode 100644 frontend/static/img/glitter/He-Died-For-you.gif create mode 100644 frontend/static/img/glitter/Heart-Underwear.gif create mode 100644 frontend/static/img/glitter/Hello-Blue-Roses.gif create mode 100644 frontend/static/img/glitter/Hello-Rose.gif create mode 100644 frontend/static/img/glitter/Here-Big-Boy.gif create mode 100644 frontend/static/img/glitter/Hi-Sexy-Red.gif create mode 100644 frontend/static/img/glitter/Hollow-Heart-Red.gif create mode 100644 frontend/static/img/glitter/Honey.gif create mode 100644 frontend/static/img/glitter/Hot-Jail-Babe.gif create mode 100644 frontend/static/img/glitter/Hot-Long-Hair.gif create mode 100644 frontend/static/img/glitter/Hot-Pink-Bikini.gif create mode 100644 frontend/static/img/glitter/Hot-Pink-Lady.gif create mode 100644 frontend/static/img/glitter/Hot-Stuff.gif create mode 100644 frontend/static/img/glitter/Houston-Texans.gif create mode 100644 frontend/static/img/glitter/Howdy-Hat.gif create mode 100644 frontend/static/img/glitter/I-Love-Mickey.gif create mode 100644 frontend/static/img/glitter/Im-such-a-Bad-Girl.gif create mode 100644 frontend/static/img/glitter/Jazz.gif create mode 100644 frontend/static/img/glitter/Kansas-City-Chiefs.gif create mode 100644 frontend/static/img/glitter/Kinky-Care-Bear.gif create mode 100644 frontend/static/img/glitter/Kite-Care-Bear.gif create mode 100644 frontend/static/img/glitter/Kumba.gif create mode 100644 frontend/static/img/glitter/LETS-KISS.gif create mode 100644 frontend/static/img/glitter/Leopard-Legs.gif create mode 100644 frontend/static/img/glitter/Live-For-Jesus.gif create mode 100644 frontend/static/img/glitter/Long-Legs.gif create mode 100644 frontend/static/img/glitter/Los-Angeles-Dodgers.gif create mode 100644 frontend/static/img/glitter/Love-The-Lord.gif create mode 100644 frontend/static/img/glitter/Marilyn-Silver-Sparkle-1.gif create mode 100644 frontend/static/img/glitter/Marilyn-Silver-Sparkle.gif create mode 100644 frontend/static/img/glitter/Mickey.gif create mode 100644 frontend/static/img/glitter/Minnesota-Wild.gif create mode 100644 frontend/static/img/glitter/Muscle-Legs.gif create mode 100644 frontend/static/img/glitter/Mushroom-Fairy.gif create mode 100644 frontend/static/img/glitter/Music-Note-Glitter.gif create mode 100644 frontend/static/img/glitter/Naught-Girl-Grey.gif create mode 100644 frontend/static/img/glitter/Naughty-Pink.gif create mode 100644 frontend/static/img/glitter/New-England-Patriots.gif create mode 100644 frontend/static/img/glitter/New-York-Yankees.gif create mode 100644 frontend/static/img/glitter/Nice-Brow.gif create mode 100644 frontend/static/img/glitter/Ninja-Turtle.gif create mode 100644 frontend/static/img/glitter/Oh-My.gif create mode 100644 frontend/static/img/glitter/Orange-Eyes.gif create mode 100644 frontend/static/img/glitter/Orange-Love.gif create mode 100644 frontend/static/img/glitter/Overlooking-Fairy.gif create mode 100644 frontend/static/img/glitter/Palm-Tree.gif create mode 100644 frontend/static/img/glitter/Parental-Advisor.gif create mode 100644 frontend/static/img/glitter/Philadelphia-Eagles-1.gif create mode 100644 frontend/static/img/glitter/Philadelphia-Eagles.gif create mode 100644 frontend/static/img/glitter/Philadelphia-Phillies.gif create mode 100644 frontend/static/img/glitter/Phoenix-Coyotes.gif create mode 100644 frontend/static/img/glitter/Pink-Bitches.gif create mode 100644 frontend/static/img/glitter/Pink-Fantashy-Hearts.gif create mode 100644 frontend/static/img/glitter/Pink-Glitter-Star.gif create mode 100644 frontend/static/img/glitter/Pink-Godess.gif create mode 100644 frontend/static/img/glitter/Pink-Heart-Dolphins.gif create mode 100644 frontend/static/img/glitter/Pink-Lips-High-Heals.gif create mode 100644 frontend/static/img/glitter/Pink-Shoe.gif create mode 100644 frontend/static/img/glitter/Pittsburgh-Penguins.gif create mode 100644 frontend/static/img/glitter/Playboy-029.gif create mode 100644 frontend/static/img/glitter/Playboy-032.gif create mode 100644 frontend/static/img/glitter/Playboy-036.gif create mode 100644 frontend/static/img/glitter/Playboy-045.gif create mode 100644 frontend/static/img/glitter/Playboy-047.gif create mode 100644 frontend/static/img/glitter/Playboy-24.gif create mode 100644 frontend/static/img/glitter/Playboy-4.gif create mode 100644 frontend/static/img/glitter/Playboy-5.gif create mode 100644 frontend/static/img/glitter/Playboy-9.gif create mode 100644 frontend/static/img/glitter/Playboy-Blue.gif create mode 100644 frontend/static/img/glitter/Playboy-Bunny-Pink.gif create mode 100644 frontend/static/img/glitter/Playboy-Orange.gif create mode 100644 frontend/static/img/glitter/Playboy-Pink.gif create mode 100644 frontend/static/img/glitter/Playboy-Purple.gif create mode 100644 frontend/static/img/glitter/Playboy-Silver.gif create mode 100644 frontend/static/img/glitter/Potty-Head-Care-Bear.gif create mode 100644 frontend/static/img/glitter/Powerpuff-Blossom.gif create mode 100644 frontend/static/img/glitter/Princess-Fairy.gif create mode 100644 frontend/static/img/glitter/Purple-Flower-and-Butterfly.gif create mode 100644 frontend/static/img/glitter/Purple-Gal.gif create mode 100644 frontend/static/img/glitter/Purple-Glitter-Flower.gif create mode 100644 frontend/static/img/glitter/Red-Flower.gif create mode 100644 frontend/static/img/glitter/Red-Hair-Glitter.gif create mode 100644 frontend/static/img/glitter/Red-Haze-Fairy.gif create mode 100644 frontend/static/img/glitter/Red-Head-Goth.gif create mode 100644 frontend/static/img/glitter/Red-Rose-Glitter.gif create mode 100644 frontend/static/img/glitter/Red-Umbrella.gif create mode 100644 frontend/static/img/glitter/Res-Fantasy-Sky.gif create mode 100644 frontend/static/img/glitter/Riding-Roses.gif create mode 100644 frontend/static/img/glitter/Rose.gif create mode 100644 frontend/static/img/glitter/Samurai-Chick.gif create mode 100644 frontend/static/img/glitter/Set-Me-free.gif create mode 100644 frontend/static/img/glitter/Sexy-Bitch-Leoppard-1.gif create mode 100644 frontend/static/img/glitter/Sexy-Bitch-Leoppard.gif create mode 100644 frontend/static/img/glitter/Sexy-Black-White.gif create mode 100644 frontend/static/img/glitter/Sexy-Blue-Hearts.gif create mode 100644 frontend/static/img/glitter/Sexy-Cape.gif create mode 100644 frontend/static/img/glitter/Sexy-Flower-Bed.gif create mode 100644 frontend/static/img/glitter/Sexy-Silver.gif create mode 100644 frontend/static/img/glitter/Sexy-Star.gif create mode 100644 frontend/static/img/glitter/Sexy-White-Hair.gif create mode 100644 frontend/static/img/glitter/Sharing-Fruit.gif create mode 100644 frontend/static/img/glitter/Show-It-To-Me.gif create mode 100644 frontend/static/img/glitter/Showing-Sexy-Luv.gif create mode 100644 frontend/static/img/glitter/Silver-Cross.gif create mode 100644 frontend/static/img/glitter/Silver-Flower-Face.gif create mode 100644 frontend/static/img/glitter/Simply-Pink.gif create mode 100644 frontend/static/img/glitter/Sleek-Red.gif create mode 100644 frontend/static/img/glitter/Soft-Ice-Cream.gif create mode 100644 frontend/static/img/glitter/Some-Like-It-hot.gif create mode 100644 frontend/static/img/glitter/Spanish-Beauty.gif create mode 100644 frontend/static/img/glitter/Spank-Me-1.gif create mode 100644 frontend/static/img/glitter/Spank-Me.gif create mode 100644 frontend/static/img/glitter/St-Louis-Rams.gif create mode 100644 frontend/static/img/glitter/Sucker.gif create mode 100644 frontend/static/img/glitter/Tampa-Bay-Devilrays.gif create mode 100644 frontend/static/img/glitter/Tear-Drop-Fairy-1.gif create mode 100644 frontend/static/img/glitter/Tear-Drop-Fairy.gif create mode 100644 frontend/static/img/glitter/Teddy-Bear-Glitter.gif create mode 100644 frontend/static/img/glitter/Texas-Rangers.gif create mode 100644 frontend/static/img/glitter/Thank-You-Friend.gif create mode 100644 frontend/static/img/glitter/Tinkerbell-Dreamy.gif create mode 100644 frontend/static/img/glitter/Tinkerbell-Flying.gif create mode 100644 frontend/static/img/glitter/Tinkerbell-Green-Dress.gif create mode 100644 frontend/static/img/glitter/Tinkerbell.gif create mode 100644 frontend/static/img/glitter/Tired-Puppy.gif create mode 100644 frontend/static/img/glitter/Tweety-Bird-Dancing.gif create mode 100644 frontend/static/img/glitter/Two-Sexy-Gals.gif create mode 100644 frontend/static/img/glitter/Vibrate-Me-1.gif create mode 100644 frontend/static/img/glitter/Vibrate-Me.gif create mode 100644 frontend/static/img/glitter/Washington-Redskins.gif create mode 100644 frontend/static/img/glitter/Wings-2.gif create mode 100644 frontend/static/img/glitter/Wings-5.gif create mode 100644 frontend/static/img/glitter/Winnie-Glitter-2.gif create mode 100644 frontend/static/img/glitter/Winnie-Glitter.gif create mode 100644 frontend/static/img/glitter/XoXo-Hearts.gif create mode 100644 frontend/static/img/glitter/Yellow-Bird.gif create mode 100644 frontend/static/img/glitter/You-Want-It-Come-and-Get-It.gif create mode 100644 frontend/static/img/glitter/Young-Red-Witch.gif create mode 100644 frontend/static/img/glitter/aaliyah.gif create mode 100644 frontend/static/img/glitter/ani-sparkle-fountain.gif create mode 100644 frontend/static/img/glitter/awkward_pink_purple_glitter_wiggle.gif create mode 100644 frontend/static/img/glitter/babe-bikini-butt-ass-face.gif create mode 100644 frontend/static/img/glitter/beautiful-unicorn-magical-sparkle.gif create mode 100644 frontend/static/img/glitter/beauty-red-rose-sparkle.gif create mode 100644 frontend/static/img/glitter/blonde_gold_sparkle.gif create mode 100644 frontend/static/img/glitter/christian_symbol07.gif create mode 100644 frontend/static/img/glitter/christmas-sexy11.gif create mode 100644 frontend/static/img/glitter/christmas-sexy6.gif create mode 100644 frontend/static/img/glitter/cleopatra-elizabeth-liz-taylor-dress-babe.gif create mode 100644 frontend/static/img/glitter/date13.gif create mode 100644 frontend/static/img/glitter/dreamer.gif create mode 100644 frontend/static/img/glitter/egypt.gif create mode 100644 frontend/static/img/glitter/egypt_320_256_9223372036854775000_0_1_0.gif create mode 100644 frontend/static/img/glitter/egypt_320_320_256_9223372036854775000_0_1_0.gif create mode 100644 frontend/static/img/glitter/eye-glitter.gif create mode 100644 frontend/static/img/glitter/flirting-my-way-to-the-top.gif create mode 100644 frontend/static/img/glitter/flowers.gif create mode 100644 frontend/static/img/glitter/glitterfriend38.gif create mode 100644 frontend/static/img/glitter/goodbye7(combine).gif create mode 100644 frontend/static/img/glitter/gtmc034.gif create mode 100644 frontend/static/img/glitter/gtmc037.gif create mode 100644 frontend/static/img/glitter/gtmc039.gif create mode 100644 frontend/static/img/glitter/gtmc041.gif create mode 100644 frontend/static/img/glitter/gtmc048.gif create mode 100644 frontend/static/img/glitter/gtmc058.gif create mode 100644 frontend/static/img/glitter/gtmc067.gif create mode 100644 frontend/static/img/glitter/gtmc072.gif create mode 100644 frontend/static/img/glitter/gtmc079.gif create mode 100644 frontend/static/img/glitter/happy-new-year-524.gif create mode 100644 frontend/static/img/glitter/happy-new-year-527.gif create mode 100644 frontend/static/img/glitter/happy-new-year-computer.gif create mode 100644 frontend/static/img/glitter/happy-new-year.gif create mode 100644 frontend/static/img/glitter/ice-cream-cone-dessert-sweet-smile.gif create mode 100644 frontend/static/img/glitter/kisses-for-my-valentine-glitter.gif create mode 100644 frontend/static/img/glitter/lindsay-lohan.gif create mode 100644 frontend/static/img/glitter/myspace-flower-rose.gif create mode 100644 frontend/static/img/glitter/never-give-up.gif create mode 100644 frontend/static/img/glitter/new-year-29.gif create mode 100644 frontend/static/img/glitter/penis.gif create mode 100644 frontend/static/img/glitter/pinkcowgirl.gif create mode 100644 frontend/static/img/glitter/proud-mom-aunt.gif create mode 100644 frontend/static/img/glitter/sexy-100.gif create mode 100644 frontend/static/img/glitter/showin_some_love_reflecting_rosebud.gif create mode 100644 frontend/static/img/glitter/sparkle-logo.gif create mode 100644 frontend/static/img/glitter/staypunk-sparkle-cross.gif create mode 100644 frontend/static/img/glitter/thanksc.gif create mode 100644 frontend/static/img/glitter/tiger_eye_sparkle.gif create mode 100644 frontend/static/img/glitter/woman-style-lipstick-makeup.gif create mode 100644 frontend/static/img/glitter_flower.gif create mode 100644 frontend/static/img/glitter_scannerjammer.gif create mode 100644 frontend/static/img/glittergutzbg.gif create mode 100755 frontend/static/img/icons/aim_16.png create mode 100755 frontend/static/img/icons/aim_32.png create mode 100755 frontend/static/img/icons/apple_16.png create mode 100755 frontend/static/img/icons/apple_32.png create mode 100644 frontend/static/img/icons/bandcamp_32.png create mode 100755 frontend/static/img/icons/bebo_16.png create mode 100755 frontend/static/img/icons/bebo_32.png create mode 100755 frontend/static/img/icons/blogger_16.png create mode 100755 frontend/static/img/icons/blogger_32.png create mode 100755 frontend/static/img/icons/brightkite_16.png create mode 100755 frontend/static/img/icons/brightkite_32.png create mode 100755 frontend/static/img/icons/cargo_16.png create mode 100755 frontend/static/img/icons/cargo_32.png create mode 100755 frontend/static/img/icons/delicious_16.png create mode 100755 frontend/static/img/icons/delicious_32.png create mode 100755 frontend/static/img/icons/designfloat_16.png create mode 100755 frontend/static/img/icons/designfloat_32.png create mode 100755 frontend/static/img/icons/designmoo_16.png create mode 100755 frontend/static/img/icons/designmoo_32.png create mode 100755 frontend/static/img/icons/deviantart_16.png create mode 100755 frontend/static/img/icons/deviantart_32.png create mode 100755 frontend/static/img/icons/digg_16.png create mode 100755 frontend/static/img/icons/digg_32.png create mode 100755 frontend/static/img/icons/digg_alt_16.png create mode 100755 frontend/static/img/icons/dopplr_16.png create mode 100755 frontend/static/img/icons/dopplr_32.png create mode 100755 frontend/static/img/icons/dribbble_16.png create mode 100755 frontend/static/img/icons/dribbble_32.png create mode 100755 frontend/static/img/icons/email_16.png create mode 100755 frontend/static/img/icons/email_32.png create mode 100755 frontend/static/img/icons/ember_16.png create mode 100755 frontend/static/img/icons/ember_32.png create mode 100755 frontend/static/img/icons/evernote_16.png create mode 100755 frontend/static/img/icons/evernote_32.png create mode 100755 frontend/static/img/icons/facebook_16.png create mode 100755 frontend/static/img/icons/facebook_32.png create mode 100755 frontend/static/img/icons/flickr_16.png create mode 100755 frontend/static/img/icons/flickr_32.png create mode 100644 frontend/static/img/icons/forrst_16.png create mode 100644 frontend/static/img/icons/forrst_32.png create mode 100755 frontend/static/img/icons/friendfeed_16.png create mode 100755 frontend/static/img/icons/friendfeed_32.png create mode 100755 frontend/static/img/icons/gamespot_16.png create mode 100755 frontend/static/img/icons/gamespot_32.png create mode 100755 frontend/static/img/icons/google_16.png create mode 100755 frontend/static/img/icons/google_32.png create mode 100755 frontend/static/img/icons/google_voice_16.png create mode 100755 frontend/static/img/icons/google_voice_32.png create mode 100755 frontend/static/img/icons/google_wave_16.png create mode 100755 frontend/static/img/icons/google_wave_32.png create mode 100755 frontend/static/img/icons/googletalk_16.png create mode 100755 frontend/static/img/icons/googletalk_32.png create mode 100755 frontend/static/img/icons/gowalla_16.png create mode 100755 frontend/static/img/icons/gowalla_32.png create mode 100755 frontend/static/img/icons/grooveshark_16.png create mode 100755 frontend/static/img/icons/grooveshark_32.png create mode 100755 frontend/static/img/icons/ilike_16.png create mode 100755 frontend/static/img/icons/ilike_32.png create mode 100755 frontend/static/img/icons/komodomedia_azure_16.png create mode 100755 frontend/static/img/icons/komodomedia_azure_32.png create mode 100755 frontend/static/img/icons/komodomedia_wood_16.png create mode 100755 frontend/static/img/icons/komodomedia_wood_32.png create mode 100755 frontend/static/img/icons/lastfm_16.png create mode 100755 frontend/static/img/icons/lastfm_32.png create mode 100755 frontend/static/img/icons/license.txt create mode 100755 frontend/static/img/icons/linkedin_16.png create mode 100755 frontend/static/img/icons/linkedin_32.png create mode 100755 frontend/static/img/icons/mixx_16.png create mode 100755 frontend/static/img/icons/mixx_32.png create mode 100755 frontend/static/img/icons/mobileme_16.png create mode 100755 frontend/static/img/icons/mobileme_32.png create mode 100755 frontend/static/img/icons/mynameise_16.png create mode 100755 frontend/static/img/icons/mynameise_32.png create mode 100755 frontend/static/img/icons/myspace_16.png create mode 100755 frontend/static/img/icons/myspace_32.png create mode 100755 frontend/static/img/icons/netvibes_16.png create mode 100755 frontend/static/img/icons/netvibes_32.png create mode 100755 frontend/static/img/icons/newsvine_16.png create mode 100755 frontend/static/img/icons/newsvine_32.png create mode 100755 frontend/static/img/icons/openid_16.png create mode 100755 frontend/static/img/icons/openid_32.png create mode 100755 frontend/static/img/icons/orkut_16.png create mode 100755 frontend/static/img/icons/orkut_32.png create mode 100755 frontend/static/img/icons/pandora_16.png create mode 100755 frontend/static/img/icons/pandora_32.png create mode 100755 frontend/static/img/icons/paypal_16.png create mode 100755 frontend/static/img/icons/paypal_32.png create mode 100755 frontend/static/img/icons/picasa_16.png create mode 100755 frontend/static/img/icons/picasa_32.png create mode 100644 frontend/static/img/icons/playstation_16.png create mode 100644 frontend/static/img/icons/playstation_32.png create mode 100755 frontend/static/img/icons/plurk_16.png create mode 100755 frontend/static/img/icons/plurk_32.png create mode 100755 frontend/static/img/icons/posterous_16.png create mode 100755 frontend/static/img/icons/posterous_32.png create mode 100755 frontend/static/img/icons/qik_16.png create mode 100755 frontend/static/img/icons/qik_32.png create mode 100755 frontend/static/img/icons/readernaut_16.png create mode 100755 frontend/static/img/icons/readernaut_32.png create mode 100755 frontend/static/img/icons/reddit_16.png create mode 100755 frontend/static/img/icons/reddit_32.png create mode 100755 frontend/static/img/icons/roboto_16.png create mode 100755 frontend/static/img/icons/roboto_32.png create mode 100755 frontend/static/img/icons/rss_16.png create mode 100755 frontend/static/img/icons/rss_32.png create mode 100644 frontend/static/img/icons/sharethis_16.png create mode 100644 frontend/static/img/icons/sharethis_32.png create mode 100755 frontend/static/img/icons/skype_16.png create mode 100755 frontend/static/img/icons/skype_32.png create mode 100755 frontend/static/img/icons/stumbleupon_16.png create mode 100755 frontend/static/img/icons/stumbleupon_32.png create mode 100755 frontend/static/img/icons/technorati_16.png create mode 100755 frontend/static/img/icons/technorati_32.png create mode 100755 frontend/static/img/icons/tumblr_16.png create mode 100755 frontend/static/img/icons/tumblr_32.png create mode 100755 frontend/static/img/icons/twitter_16.png create mode 100755 frontend/static/img/icons/twitter_32.png create mode 100755 frontend/static/img/icons/viddler_16.png create mode 100755 frontend/static/img/icons/viddler_32.png create mode 100755 frontend/static/img/icons/vimeo_16.png create mode 100755 frontend/static/img/icons/vimeo_32.png create mode 100755 frontend/static/img/icons/virb_16.png create mode 100755 frontend/static/img/icons/virb_32.png create mode 100755 frontend/static/img/icons/windows_16.png create mode 100755 frontend/static/img/icons/windows_32.png create mode 100755 frontend/static/img/icons/wordpress_16.png create mode 100755 frontend/static/img/icons/wordpress_32.png create mode 100755 frontend/static/img/icons/xing_16.png create mode 100755 frontend/static/img/icons/xing_32.png create mode 100755 frontend/static/img/icons/yahoo_16.png create mode 100755 frontend/static/img/icons/yahoo_32.png create mode 100755 frontend/static/img/icons/yahoobuzz_16.png create mode 100755 frontend/static/img/icons/yahoobuzz_32.png create mode 100755 frontend/static/img/icons/yelp_16.png create mode 100755 frontend/static/img/icons/yelp_32.png create mode 100755 frontend/static/img/icons/youtube_16.png create mode 100755 frontend/static/img/icons/youtube_32.png create mode 100644 frontend/static/img/icons/zootool_16.png create mode 100644 frontend/static/img/icons/zootool_32.png create mode 100644 frontend/static/img/icosahedron.png create mode 100644 frontend/static/img/idgiguy2.png create mode 100644 frontend/static/img/loading.gif create mode 100644 frontend/static/img/loading2.gif create mode 100644 frontend/static/img/magnify.png create mode 100644 frontend/static/img/office-plant.jpg create mode 100644 frontend/static/img/plant.gif create mode 100644 frontend/static/img/playlist-banner.gif create mode 100644 frontend/static/img/playlist.gif create mode 100644 frontend/static/img/playlist_chat.gif create mode 100644 frontend/static/img/pyramid.png create mode 100644 frontend/static/img/ramshead.png create mode 100644 frontend/static/img/runner.gif create mode 100644 frontend/static/img/scanjam-flipping.gif create mode 100644 frontend/static/img/scanjam-title.gif create mode 100644 frontend/static/img/scanjambg2.jpg create mode 100644 frontend/static/img/scannerjammer-logo.png create mode 100644 frontend/static/img/water-cooler.jpg create mode 100644 frontend/static/img/watercoolericon.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313810814_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313810826_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313810981_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313811002_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313811024_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313811041_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313811730_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313811772_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313811923_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313812087_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313812093_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313812097_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313812098_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313812099_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313812490_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313812564_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313815048_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313815411_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313815429_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/19/1313815522_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/08/21/1313909058_ryz.jpg create mode 100644 frontend/static/img/webcam/2011/09/26/1317090391_ryz.jpg create mode 100644 frontend/static/js/admin.js create mode 100644 frontend/static/js/api.js create mode 100644 frontend/static/js/audio.js create mode 100644 frontend/static/js/auth.js create mode 100644 frontend/static/js/avatar-data.js create mode 100644 frontend/static/js/avatar.js create mode 100644 frontend/static/js/calendar.js create mode 100644 frontend/static/js/chat.js create mode 100644 frontend/static/js/debug.js create mode 100644 frontend/static/js/dump.js create mode 100644 frontend/static/js/embed.js create mode 100644 frontend/static/js/glitter-data.js create mode 100644 frontend/static/js/glitter.js create mode 100644 frontend/static/js/jquery-1.5.2.min.js create mode 100644 frontend/static/js/jquery.md5.js create mode 100644 frontend/static/js/like.js create mode 100644 frontend/static/js/main.js create mode 100644 frontend/static/js/player.js create mode 100644 frontend/static/js/poll.js create mode 100644 frontend/static/js/profile.js create mode 100644 frontend/static/js/register.js create mode 100644 frontend/static/js/room.js create mode 100644 frontend/static/js/roomlist.js create mode 100644 frontend/static/js/search.js create mode 100644 frontend/static/js/sj6.js create mode 100644 frontend/static/js/soundcloud.js create mode 100644 frontend/static/js/soundmanager2.js create mode 100644 frontend/static/js/swfobject.js create mode 100644 frontend/static/js/test-admin.js create mode 100644 frontend/static/js/tokbox.js create mode 100644 frontend/static/js/top.js create mode 100644 frontend/static/js/vimeo.js create mode 100644 frontend/static/js/youtube.js create mode 100644 frontend/static/other_rooms/admin.html create mode 100644 frontend/static/other_rooms/calendar.html create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/css/ui-lightness/jquery-ui-1.8.13.custom.css create mode 100644 frontend/static/other_rooms/datepicker/datepicker.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/AUTHORS.txt create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/GPL-LICENSE.txt create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/MIT-LICENSE.txt create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/alt-field.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/animation.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/buttonbar.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/date-formats.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/date-range.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/default.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/dropdown-month-year.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/icon-trigger.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/images/calendar.gif create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/index.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/inline.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/localization.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/min-max.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/multiple-calendars.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/other-months.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/show-week.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/demos.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/images/calendar.gif create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-config-on-tile.gif create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-config-on.gif create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-spindown-closed.gif create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-spindown-open.gif create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/images/icon-docs-info.gif create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/images/pbar-ani.gif create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/demos/index.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/docs/datepicker.html create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/external/jquery.bgiframe-2.1.2.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/external/jquery.cookie.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/external/jquery.metadata.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/external/qunit.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/external/qunit.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/jquery-1.5.1.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-icons_222222_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-icons_2e83ff_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-icons_454545_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-icons_888888_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/images/ui-icons_cd0a0a_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/jquery.ui.all.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/jquery.ui.base.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/jquery.ui.core.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/jquery.ui.datepicker.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/base/jquery.ui.theme.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-icons_222222_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/jquery-ui-1.8.13.custom.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/jquery.ui.all.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/jquery.ui.base.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/jquery.ui.core.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/jquery.ui.datepicker.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/themes/ui-lightness/jquery.ui.theme.css create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery-ui-i18n.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-af.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ar-DZ.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ar.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-az.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-bg.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-bs.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ca.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-cs.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-da.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-de.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-el.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-en-AU.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-en-GB.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-en-NZ.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-eo.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-es.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-et.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-eu.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-fa.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-fi.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-fo.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-fr-CH.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-fr.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-gl.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-he.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-hr.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-hu.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-hy.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-id.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-is.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-it.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ja.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ko.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-kz.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-lt.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-lv.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ml.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ms.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-nl.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-no.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-pl.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-pt-BR.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-pt.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-rm.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ro.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ru.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-sk.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-sl.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-sq.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-sr-SR.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-sr.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-sv.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-ta.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-th.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-tj.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-tr.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-uk.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-vi.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-zh-CN.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-zh-HK.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/i18n/jquery.ui.datepicker-zh-TW.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/jquery-ui-1.8.13.custom.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/jquery.ui.core.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/jquery.ui.datepicker.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/minified/jquery.ui.core.min.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/ui/minified/jquery.ui.datepicker.min.js create mode 100644 frontend/static/other_rooms/datepicker/development-bundle/version.txt create mode 100644 frontend/static/other_rooms/datepicker/js/jquery-1.5.1.min.js create mode 100644 frontend/static/other_rooms/datepicker/js/jquery-ui-1.8.13.custom.min.js create mode 100644 frontend/static/other_rooms/embed-test.html create mode 100644 frontend/static/other_rooms/embed-test2.html create mode 100644 frontend/static/other_rooms/embed.html create mode 100644 frontend/static/other_rooms/img/cloudz1.png create mode 100644 frontend/static/other_rooms/img/cloudz2.png create mode 100644 frontend/static/other_rooms/img/playlist-banner.gif create mode 100644 frontend/static/other_rooms/liketest.html create mode 100644 frontend/static/other_rooms/topvids.html create mode 100644 frontend/static/radio/default.html create mode 100644 frontend/static/radio/diornights.html create mode 100644 frontend/static/radio/disaro.html create mode 100644 frontend/static/radio/glasspopcorn.html create mode 100644 frontend/static/radio/sewergreats.html create mode 100644 frontend/static/register/.htaccess create mode 100644 frontend/static/register/index.html create mode 100644 frontend/static/register/reset/.htaccess create mode 100644 frontend/static/register/reset/index.html create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/avatar.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/calendar.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/diornights.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/disaro.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/embed.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/feederbleeder.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/frederick.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/gallery-white.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/glitter.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/ie.scssc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/main.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/print.scssc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/profile.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/roomlist.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/screen.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sewergreats.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sexydj_main.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sexydj_player.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/test.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/tiny.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/top.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest1.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest2.sassc create mode 100644 frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest3.sassc create mode 100644 frontend/static/sass/.sass-cache/8d1bbecbf03b462f4c6289df796a863187871fc8/_reset.scssc create mode 100644 frontend/static/sass/.sass-cache/979cb0604153df91b26ad31e4a3968c997fc15e0/_utilities.scssc create mode 100644 frontend/static/sass/.sass-cache/9ec6fa9d6c0b37ad8c4a639ff5b392374f95acc9/_utilities.scssc create mode 100644 frontend/static/sass/.sass-cache/aa657dc61a4d909775004a1ed5620272d7fbb16b/_reset.scssc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/avatar.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/calendar.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/diornights.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/embed.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/feederbleeder.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/frederick.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/gallery-white.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/glitter.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/ie.scssc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/main.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/print.scssc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/profile.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/roomlist.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/screen.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/screen.scssc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sewergreats.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sexydj_main.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sexydj_player.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/test.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/tiny.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/top.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest1.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest2.sassc create mode 100644 frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest3.sassc create mode 100644 frontend/static/sass/.sass-cache/dc3c2ad9455a8346a847e74b89758086fe56fd21/_utilities.scssc create mode 100644 frontend/static/sass/.sass-cache/e708b27684b7743d4ded18d0ddc82a270ca22e62/_reset.scssc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/avatar.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/calendar.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/diornights.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/disaro.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/embed.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/feederbleeder.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/frederick.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/gallery-white.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/glitter.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/ie.scssc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/main.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/print.scssc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/profile.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/roomlist.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/screen.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/screen.scssc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/sewergreats.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/test.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/tiny.sassc create mode 100644 frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/top.sassc create mode 100644 frontend/static/sass/config.rb create mode 100644 frontend/static/sass/src/avatar.sass create mode 100644 frontend/static/sass/src/calendar.sass create mode 100644 frontend/static/sass/src/diornights.sass create mode 100644 frontend/static/sass/src/disaro.sass create mode 100644 frontend/static/sass/src/embed.sass create mode 100644 frontend/static/sass/src/feederbleeder.sass create mode 100644 frontend/static/sass/src/frederick.sass create mode 100644 frontend/static/sass/src/gallery-white.sass create mode 100644 frontend/static/sass/src/glitter.sass create mode 100644 frontend/static/sass/src/ie.scss create mode 100644 frontend/static/sass/src/main.sass create mode 100644 frontend/static/sass/src/print.scss create mode 100644 frontend/static/sass/src/profile.sass create mode 100644 frontend/static/sass/src/roomlist.sass create mode 100644 frontend/static/sass/src/screen.sass create mode 100644 frontend/static/sass/src/screen.scss create mode 100644 frontend/static/sass/src/sewergreats.sass create mode 100644 frontend/static/sass/src/test.sass create mode 100644 frontend/static/sass/src/tiny.sass create mode 100644 frontend/static/sass/src/top.sass create mode 100644 frontend/static/sass/stylesheets/avatar.css create mode 100644 frontend/static/sass/stylesheets/calendar.css create mode 100644 frontend/static/sass/stylesheets/diornights.css create mode 100644 frontend/static/sass/stylesheets/disaro.css create mode 100644 frontend/static/sass/stylesheets/embed.css create mode 100644 frontend/static/sass/stylesheets/feederbleeder.css create mode 100644 frontend/static/sass/stylesheets/frederick.css create mode 100644 frontend/static/sass/stylesheets/gallery-white.css create mode 100644 frontend/static/sass/stylesheets/glitter.css create mode 100644 frontend/static/sass/stylesheets/ie.css create mode 100644 frontend/static/sass/stylesheets/main.css create mode 100644 frontend/static/sass/stylesheets/print.css create mode 100644 frontend/static/sass/stylesheets/profile.css create mode 100644 frontend/static/sass/stylesheets/roomlist.css create mode 100644 frontend/static/sass/stylesheets/screen.css create mode 100644 frontend/static/sass/stylesheets/sewergreats.css create mode 100644 frontend/static/sass/stylesheets/test.css create mode 100644 frontend/static/sass/stylesheets/tiny.css create mode 100644 frontend/static/sass/stylesheets/top.css create mode 100644 frontend/static/sass/stylesheets/waterfall.css create mode 100644 frontend/static/search/.htaccess create mode 100644 frontend/static/search/index.html create mode 100644 frontend/static/stylesheets/src/avatar.css create mode 100644 frontend/static/stylesheets/src/calendar.css create mode 100644 frontend/static/stylesheets/src/diornights.css create mode 100644 frontend/static/stylesheets/src/disaro.css create mode 100644 frontend/static/stylesheets/src/embed.css create mode 100644 frontend/static/stylesheets/src/feederbleeder.css create mode 100644 frontend/static/stylesheets/src/frederick.css create mode 100644 frontend/static/stylesheets/src/gallery-white.css create mode 100644 frontend/static/stylesheets/src/glitter.css create mode 100644 frontend/static/stylesheets/src/ie.css create mode 100644 frontend/static/stylesheets/src/main.css create mode 100644 frontend/static/stylesheets/src/print.css create mode 100644 frontend/static/stylesheets/src/profile.css create mode 100644 frontend/static/stylesheets/src/roomlist.css create mode 100644 frontend/static/stylesheets/src/screen.css create mode 100644 frontend/static/stylesheets/src/sewergreats.css create mode 100644 frontend/static/stylesheets/src/test.css create mode 100644 frontend/static/stylesheets/src/tiny.css create mode 100644 frontend/static/stylesheets/src/top.css create mode 100755 frontend/static/swf/soundmanager2.swf create mode 100755 frontend/static/swf/soundmanager2_debug.swf create mode 100755 frontend/static/swf/soundmanager2_flash9.swf create mode 100755 frontend/static/swf/soundmanager2_flash9_debug.swf create mode 100644 frontend/static/swf/webcam.swf create mode 100644 frontend/static/template/directory.html create mode 100644 frontend/static/template/index.html create mode 100644 frontend/static/template/profile.html create mode 100644 frontend/static/template/redir.html create mode 100644 frontend/static/template/register.html create mode 100644 frontend/static/template/room.html create mode 100644 frontend/static/template/roomlist.html create mode 100644 frontend/static/tumblrplay/index.html create mode 100644 frontend/static/tumblrplay/input.html create mode 100644 frontend/static/tumblrplay/play.html create mode 100644 frontend/static/tumblrplay/temp.html (limited to 'frontend/static') diff --git a/frontend/static/avatar/.htaccess b/frontend/static/avatar/.htaccess new file mode 100644 index 0000000..2f17318 --- /dev/null +++ b/frontend/static/avatar/.htaccess @@ -0,0 +1 @@ +DirectoryIndex /cgi-bin/room.cgi?room=avatar diff --git a/frontend/static/avatar/1.gif b/frontend/static/avatar/1.gif new file mode 100644 index 0000000..7ee95c1 Binary files /dev/null and b/frontend/static/avatar/1.gif differ diff --git a/frontend/static/avatar/10.gif b/frontend/static/avatar/10.gif new file mode 100644 index 0000000..546d9a3 Binary files /dev/null and b/frontend/static/avatar/10.gif differ diff --git a/frontend/static/avatar/11.gif b/frontend/static/avatar/11.gif new file mode 100644 index 0000000..625039a Binary files /dev/null and b/frontend/static/avatar/11.gif differ diff --git a/frontend/static/avatar/12.gif b/frontend/static/avatar/12.gif new file mode 100644 index 0000000..d1cea36 Binary files /dev/null and b/frontend/static/avatar/12.gif differ diff --git a/frontend/static/avatar/13.gif b/frontend/static/avatar/13.gif new file mode 100644 index 0000000..b03e509 Binary files /dev/null and b/frontend/static/avatar/13.gif differ diff --git a/frontend/static/avatar/14.gif b/frontend/static/avatar/14.gif new file mode 100644 index 0000000..20f66de Binary files /dev/null and b/frontend/static/avatar/14.gif differ diff --git a/frontend/static/avatar/15.gif b/frontend/static/avatar/15.gif new file mode 100644 index 0000000..95e2379 Binary files /dev/null and b/frontend/static/avatar/15.gif differ diff --git a/frontend/static/avatar/16.gif b/frontend/static/avatar/16.gif new file mode 100644 index 0000000..1e36155 Binary files /dev/null and b/frontend/static/avatar/16.gif differ diff --git a/frontend/static/avatar/17.gif b/frontend/static/avatar/17.gif new file mode 100644 index 0000000..17dfc54 Binary files /dev/null and b/frontend/static/avatar/17.gif differ diff --git a/frontend/static/avatar/18.gif b/frontend/static/avatar/18.gif new file mode 100644 index 0000000..1cb4f0b Binary files /dev/null and b/frontend/static/avatar/18.gif differ diff --git a/frontend/static/avatar/19.gif b/frontend/static/avatar/19.gif new file mode 100644 index 0000000..9f2db15 Binary files /dev/null and b/frontend/static/avatar/19.gif differ diff --git a/frontend/static/avatar/2.gif b/frontend/static/avatar/2.gif new file mode 100644 index 0000000..d2f79ab Binary files /dev/null and b/frontend/static/avatar/2.gif differ diff --git a/frontend/static/avatar/20.gif b/frontend/static/avatar/20.gif new file mode 100644 index 0000000..0776db5 Binary files /dev/null and b/frontend/static/avatar/20.gif differ diff --git a/frontend/static/avatar/21.gif b/frontend/static/avatar/21.gif new file mode 100644 index 0000000..5b3cafa Binary files /dev/null and b/frontend/static/avatar/21.gif differ diff --git a/frontend/static/avatar/22.gif b/frontend/static/avatar/22.gif new file mode 100644 index 0000000..46c0490 Binary files /dev/null and b/frontend/static/avatar/22.gif differ diff --git a/frontend/static/avatar/23.gif b/frontend/static/avatar/23.gif new file mode 100644 index 0000000..57f6f15 Binary files /dev/null and b/frontend/static/avatar/23.gif differ diff --git a/frontend/static/avatar/24.gif b/frontend/static/avatar/24.gif new file mode 100644 index 0000000..9cedfc1 Binary files /dev/null and b/frontend/static/avatar/24.gif differ diff --git a/frontend/static/avatar/25.gif b/frontend/static/avatar/25.gif new file mode 100644 index 0000000..2953854 Binary files /dev/null and b/frontend/static/avatar/25.gif differ diff --git a/frontend/static/avatar/26.gif b/frontend/static/avatar/26.gif new file mode 100644 index 0000000..fcff54c Binary files /dev/null and b/frontend/static/avatar/26.gif differ diff --git a/frontend/static/avatar/27.gif b/frontend/static/avatar/27.gif new file mode 100644 index 0000000..8464434 Binary files /dev/null and b/frontend/static/avatar/27.gif differ diff --git a/frontend/static/avatar/28.gif b/frontend/static/avatar/28.gif new file mode 100644 index 0000000..0f9d366 Binary files /dev/null and b/frontend/static/avatar/28.gif differ diff --git a/frontend/static/avatar/29.gif b/frontend/static/avatar/29.gif new file mode 100644 index 0000000..92437f0 Binary files /dev/null and b/frontend/static/avatar/29.gif differ diff --git a/frontend/static/avatar/3.gif b/frontend/static/avatar/3.gif new file mode 100644 index 0000000..c418f68 Binary files /dev/null and b/frontend/static/avatar/3.gif differ diff --git a/frontend/static/avatar/30.gif b/frontend/static/avatar/30.gif new file mode 100644 index 0000000..0cf99c3 Binary files /dev/null and b/frontend/static/avatar/30.gif differ diff --git a/frontend/static/avatar/31.gif b/frontend/static/avatar/31.gif new file mode 100644 index 0000000..d4468ef Binary files /dev/null and b/frontend/static/avatar/31.gif differ diff --git a/frontend/static/avatar/32.gif b/frontend/static/avatar/32.gif new file mode 100644 index 0000000..764e78e Binary files /dev/null and b/frontend/static/avatar/32.gif differ diff --git a/frontend/static/avatar/33.gif b/frontend/static/avatar/33.gif new file mode 100644 index 0000000..9553e99 Binary files /dev/null and b/frontend/static/avatar/33.gif differ diff --git a/frontend/static/avatar/34.gif b/frontend/static/avatar/34.gif new file mode 100644 index 0000000..b1cdf60 Binary files /dev/null and b/frontend/static/avatar/34.gif differ diff --git a/frontend/static/avatar/35.gif b/frontend/static/avatar/35.gif new file mode 100644 index 0000000..313e544 Binary files /dev/null and b/frontend/static/avatar/35.gif differ diff --git a/frontend/static/avatar/36.gif b/frontend/static/avatar/36.gif new file mode 100644 index 0000000..7723b8b Binary files /dev/null and b/frontend/static/avatar/36.gif differ diff --git a/frontend/static/avatar/37.gif b/frontend/static/avatar/37.gif new file mode 100644 index 0000000..2537465 Binary files /dev/null and b/frontend/static/avatar/37.gif differ diff --git a/frontend/static/avatar/38.gif b/frontend/static/avatar/38.gif new file mode 100644 index 0000000..473dace Binary files /dev/null and b/frontend/static/avatar/38.gif differ diff --git a/frontend/static/avatar/39.gif b/frontend/static/avatar/39.gif new file mode 100644 index 0000000..4a04fb4 Binary files /dev/null and b/frontend/static/avatar/39.gif differ diff --git a/frontend/static/avatar/4.gif b/frontend/static/avatar/4.gif new file mode 100644 index 0000000..ad1bf28 Binary files /dev/null and b/frontend/static/avatar/4.gif differ diff --git a/frontend/static/avatar/40.gif b/frontend/static/avatar/40.gif new file mode 100644 index 0000000..07c4c01 Binary files /dev/null and b/frontend/static/avatar/40.gif differ diff --git a/frontend/static/avatar/41.gif b/frontend/static/avatar/41.gif new file mode 100644 index 0000000..d8b37a6 Binary files /dev/null and b/frontend/static/avatar/41.gif differ diff --git a/frontend/static/avatar/42.gif b/frontend/static/avatar/42.gif new file mode 100644 index 0000000..b102ba6 Binary files /dev/null and b/frontend/static/avatar/42.gif differ diff --git a/frontend/static/avatar/43.gif b/frontend/static/avatar/43.gif new file mode 100644 index 0000000..dc990c7 Binary files /dev/null and b/frontend/static/avatar/43.gif differ diff --git a/frontend/static/avatar/44.gif b/frontend/static/avatar/44.gif new file mode 100644 index 0000000..bf4ef70 Binary files /dev/null and b/frontend/static/avatar/44.gif differ diff --git a/frontend/static/avatar/45.gif b/frontend/static/avatar/45.gif new file mode 100644 index 0000000..ee56332 Binary files /dev/null and b/frontend/static/avatar/45.gif differ diff --git a/frontend/static/avatar/46.gif b/frontend/static/avatar/46.gif new file mode 100644 index 0000000..0ebfc94 Binary files /dev/null and b/frontend/static/avatar/46.gif differ diff --git a/frontend/static/avatar/47.gif b/frontend/static/avatar/47.gif new file mode 100644 index 0000000..0996a5c Binary files /dev/null and b/frontend/static/avatar/47.gif differ diff --git a/frontend/static/avatar/48.gif b/frontend/static/avatar/48.gif new file mode 100644 index 0000000..5b0cf68 Binary files /dev/null and b/frontend/static/avatar/48.gif differ diff --git a/frontend/static/avatar/49.gif b/frontend/static/avatar/49.gif new file mode 100644 index 0000000..7210952 Binary files /dev/null and b/frontend/static/avatar/49.gif differ diff --git a/frontend/static/avatar/5.gif b/frontend/static/avatar/5.gif new file mode 100644 index 0000000..340bb71 Binary files /dev/null and b/frontend/static/avatar/5.gif differ diff --git a/frontend/static/avatar/50.gif b/frontend/static/avatar/50.gif new file mode 100644 index 0000000..83431cd Binary files /dev/null and b/frontend/static/avatar/50.gif differ diff --git a/frontend/static/avatar/51.gif b/frontend/static/avatar/51.gif new file mode 100644 index 0000000..2e502fb Binary files /dev/null and b/frontend/static/avatar/51.gif differ diff --git a/frontend/static/avatar/52.gif b/frontend/static/avatar/52.gif new file mode 100644 index 0000000..815d0f1 Binary files /dev/null and b/frontend/static/avatar/52.gif differ diff --git a/frontend/static/avatar/53.gif b/frontend/static/avatar/53.gif new file mode 100644 index 0000000..a98fc6b Binary files /dev/null and b/frontend/static/avatar/53.gif differ diff --git a/frontend/static/avatar/54.gif b/frontend/static/avatar/54.gif new file mode 100644 index 0000000..c774510 Binary files /dev/null and b/frontend/static/avatar/54.gif differ diff --git a/frontend/static/avatar/55.gif b/frontend/static/avatar/55.gif new file mode 100644 index 0000000..c55d5e6 Binary files /dev/null and b/frontend/static/avatar/55.gif differ diff --git a/frontend/static/avatar/56.gif b/frontend/static/avatar/56.gif new file mode 100644 index 0000000..5d4ca9f Binary files /dev/null and b/frontend/static/avatar/56.gif differ diff --git a/frontend/static/avatar/57.gif b/frontend/static/avatar/57.gif new file mode 100644 index 0000000..e27ee31 Binary files /dev/null and b/frontend/static/avatar/57.gif differ diff --git a/frontend/static/avatar/58.gif b/frontend/static/avatar/58.gif new file mode 100644 index 0000000..14a2398 Binary files /dev/null and b/frontend/static/avatar/58.gif differ diff --git a/frontend/static/avatar/59.gif b/frontend/static/avatar/59.gif new file mode 100644 index 0000000..b1be329 Binary files /dev/null and b/frontend/static/avatar/59.gif differ diff --git a/frontend/static/avatar/6.gif b/frontend/static/avatar/6.gif new file mode 100644 index 0000000..442549d Binary files /dev/null and b/frontend/static/avatar/6.gif differ diff --git a/frontend/static/avatar/60.gif b/frontend/static/avatar/60.gif new file mode 100644 index 0000000..8957756 Binary files /dev/null and b/frontend/static/avatar/60.gif differ diff --git a/frontend/static/avatar/61.gif b/frontend/static/avatar/61.gif new file mode 100644 index 0000000..0b1c51b Binary files /dev/null and b/frontend/static/avatar/61.gif differ diff --git a/frontend/static/avatar/62.gif b/frontend/static/avatar/62.gif new file mode 100644 index 0000000..36e3147 Binary files /dev/null and b/frontend/static/avatar/62.gif differ diff --git a/frontend/static/avatar/63.gif b/frontend/static/avatar/63.gif new file mode 100644 index 0000000..a455996 Binary files /dev/null and b/frontend/static/avatar/63.gif differ diff --git a/frontend/static/avatar/64.gif b/frontend/static/avatar/64.gif new file mode 100644 index 0000000..d35a25e Binary files /dev/null and b/frontend/static/avatar/64.gif differ diff --git a/frontend/static/avatar/65.gif b/frontend/static/avatar/65.gif new file mode 100644 index 0000000..d2fb851 Binary files /dev/null and b/frontend/static/avatar/65.gif differ diff --git a/frontend/static/avatar/66.gif b/frontend/static/avatar/66.gif new file mode 100644 index 0000000..f5121d0 Binary files /dev/null and b/frontend/static/avatar/66.gif differ diff --git a/frontend/static/avatar/67.gif b/frontend/static/avatar/67.gif new file mode 100644 index 0000000..94f3454 Binary files /dev/null and b/frontend/static/avatar/67.gif differ diff --git a/frontend/static/avatar/68.gif b/frontend/static/avatar/68.gif new file mode 100644 index 0000000..551a7af Binary files /dev/null and b/frontend/static/avatar/68.gif differ diff --git a/frontend/static/avatar/69.gif b/frontend/static/avatar/69.gif new file mode 100644 index 0000000..abb12f7 Binary files /dev/null and b/frontend/static/avatar/69.gif differ diff --git a/frontend/static/avatar/7.gif b/frontend/static/avatar/7.gif new file mode 100644 index 0000000..580cad4 Binary files /dev/null and b/frontend/static/avatar/7.gif differ diff --git a/frontend/static/avatar/70.gif b/frontend/static/avatar/70.gif new file mode 100644 index 0000000..1771e20 Binary files /dev/null and b/frontend/static/avatar/70.gif differ diff --git a/frontend/static/avatar/71.gif b/frontend/static/avatar/71.gif new file mode 100644 index 0000000..d08d382 Binary files /dev/null and b/frontend/static/avatar/71.gif differ diff --git a/frontend/static/avatar/72.gif b/frontend/static/avatar/72.gif new file mode 100644 index 0000000..cfe304f Binary files /dev/null and b/frontend/static/avatar/72.gif differ diff --git a/frontend/static/avatar/8.gif b/frontend/static/avatar/8.gif new file mode 100644 index 0000000..1c96e52 Binary files /dev/null and b/frontend/static/avatar/8.gif differ diff --git a/frontend/static/avatar/9.gif b/frontend/static/avatar/9.gif new file mode 100644 index 0000000..b70f7d9 Binary files /dev/null and b/frontend/static/avatar/9.gif differ diff --git a/frontend/static/avatar/Predator.jpg b/frontend/static/avatar/Predator.jpg new file mode 100644 index 0000000..2b485ac Binary files /dev/null and b/frontend/static/avatar/Predator.jpg differ diff --git a/frontend/static/avatar/arcane2.gif b/frontend/static/avatar/arcane2.gif new file mode 100644 index 0000000..d2f79ab Binary files /dev/null and b/frontend/static/avatar/arcane2.gif differ diff --git a/frontend/static/bgz/1294086971317-dumpfm-GucciSoFlosy-idgiinout.gif b/frontend/static/bgz/1294086971317-dumpfm-GucciSoFlosy-idgiinout.gif new file mode 100644 index 0000000..7beeb6a Binary files /dev/null and b/frontend/static/bgz/1294086971317-dumpfm-GucciSoFlosy-idgiinout.gif differ diff --git a/frontend/static/bgz/1300743917959-dumpfm-pepper-argus_glitter.gif b/frontend/static/bgz/1300743917959-dumpfm-pepper-argus_glitter.gif new file mode 100644 index 0000000..9e0123b Binary files /dev/null and b/frontend/static/bgz/1300743917959-dumpfm-pepper-argus_glitter.gif differ diff --git a/frontend/static/bgz/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif b/frontend/static/bgz/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif new file mode 100644 index 0000000..3dd1c0a Binary files /dev/null and b/frontend/static/bgz/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif differ diff --git a/frontend/static/bgz/2181Series.gif b/frontend/static/bgz/2181Series.gif new file mode 100644 index 0000000..dd8bafe Binary files /dev/null and b/frontend/static/bgz/2181Series.gif differ diff --git a/frontend/static/bgz/8-planet-jupiter-map.jpg b/frontend/static/bgz/8-planet-jupiter-map.jpg new file mode 100644 index 0000000..9205499 Binary files /dev/null and b/frontend/static/bgz/8-planet-jupiter-map.jpg differ diff --git a/frontend/static/bgz/DarktowerL_gendler.jpg b/frontend/static/bgz/DarktowerL_gendler.jpg new file mode 100644 index 0000000..3e415aa Binary files /dev/null and b/frontend/static/bgz/DarktowerL_gendler.jpg differ diff --git a/frontend/static/bgz/Tropic_Of_Cancer_-_The_Sorrow_Of_Two_Blooms.jpg b/frontend/static/bgz/Tropic_Of_Cancer_-_The_Sorrow_Of_Two_Blooms.jpg new file mode 100644 index 0000000..378a1c1 Binary files /dev/null and b/frontend/static/bgz/Tropic_Of_Cancer_-_The_Sorrow_Of_Two_Blooms.jpg differ diff --git a/frontend/static/bgz/argus.gif b/frontend/static/bgz/argus.gif new file mode 100644 index 0000000..b94a60a Binary files /dev/null and b/frontend/static/bgz/argus.gif differ diff --git a/frontend/static/bgz/birdcage_grid.jpg b/frontend/static/bgz/birdcage_grid.jpg new file mode 100644 index 0000000..551eff3 Binary files /dev/null and b/frontend/static/bgz/birdcage_grid.jpg differ diff --git a/frontend/static/bgz/cageumbrellaz.jpg b/frontend/static/bgz/cageumbrellaz.jpg new file mode 100644 index 0000000..e89452a Binary files /dev/null and b/frontend/static/bgz/cageumbrellaz.jpg differ diff --git a/frontend/static/bgz/cloudz1.png b/frontend/static/bgz/cloudz1.png new file mode 100644 index 0000000..fc83e06 Binary files /dev/null and b/frontend/static/bgz/cloudz1.png differ diff --git a/frontend/static/bgz/cloudz2.png b/frontend/static/bgz/cloudz2.png new file mode 100644 index 0000000..d563639 Binary files /dev/null and b/frontend/static/bgz/cloudz2.png differ diff --git a/frontend/static/bgz/crystalz.png b/frontend/static/bgz/crystalz.png new file mode 100644 index 0000000..925de31 Binary files /dev/null and b/frontend/static/bgz/crystalz.png differ diff --git a/frontend/static/bgz/darktower.jpg b/frontend/static/bgz/darktower.jpg new file mode 100644 index 0000000..5f45a99 Binary files /dev/null and b/frontend/static/bgz/darktower.jpg differ diff --git a/frontend/static/bgz/diornights.jpg b/frontend/static/bgz/diornights.jpg new file mode 100644 index 0000000..d7e5bef Binary files /dev/null and b/frontend/static/bgz/diornights.jpg differ diff --git a/frontend/static/bgz/fingerlings-butterflies.png b/frontend/static/bgz/fingerlings-butterflies.png new file mode 100644 index 0000000..6fd117f Binary files /dev/null and b/frontend/static/bgz/fingerlings-butterflies.png differ diff --git a/frontend/static/bgz/fingerlings.gif b/frontend/static/bgz/fingerlings.gif new file mode 100644 index 0000000..02c15cb Binary files /dev/null and b/frontend/static/bgz/fingerlings.gif differ diff --git a/frontend/static/bgz/fingerlings2.png b/frontend/static/bgz/fingerlings2.png new file mode 100644 index 0000000..247497d Binary files /dev/null and b/frontend/static/bgz/fingerlings2.png differ diff --git a/frontend/static/bgz/fingerlings3.jpg b/frontend/static/bgz/fingerlings3.jpg new file mode 100644 index 0000000..2c2659b Binary files /dev/null and b/frontend/static/bgz/fingerlings3.jpg differ diff --git a/frontend/static/bgz/geodesic-brick.png b/frontend/static/bgz/geodesic-brick.png new file mode 100644 index 0000000..df1e605 Binary files /dev/null and b/frontend/static/bgz/geodesic-brick.png differ diff --git a/frontend/static/bgz/geodesic.png b/frontend/static/bgz/geodesic.png new file mode 100644 index 0000000..eaff1f6 Binary files /dev/null and b/frontend/static/bgz/geodesic.png differ diff --git a/frontend/static/bgz/gridzer01.gif b/frontend/static/bgz/gridzer01.gif new file mode 100644 index 0000000..0820b7f Binary files /dev/null and b/frontend/static/bgz/gridzer01.gif differ diff --git a/frontend/static/bgz/gridzy1.jpg b/frontend/static/bgz/gridzy1.jpg new file mode 100644 index 0000000..42236c9 Binary files /dev/null and b/frontend/static/bgz/gridzy1.jpg differ diff --git a/frontend/static/bgz/gridzy10.jpg b/frontend/static/bgz/gridzy10.jpg new file mode 100644 index 0000000..24275e4 Binary files /dev/null and b/frontend/static/bgz/gridzy10.jpg differ diff --git a/frontend/static/bgz/gridzy2.jpg b/frontend/static/bgz/gridzy2.jpg new file mode 100644 index 0000000..212fa8b Binary files /dev/null and b/frontend/static/bgz/gridzy2.jpg differ diff --git a/frontend/static/bgz/gridzy3.jpg b/frontend/static/bgz/gridzy3.jpg new file mode 100644 index 0000000..7b7885d Binary files /dev/null and b/frontend/static/bgz/gridzy3.jpg differ diff --git a/frontend/static/bgz/gridzy4.jpg b/frontend/static/bgz/gridzy4.jpg new file mode 100644 index 0000000..e74b92c Binary files /dev/null and b/frontend/static/bgz/gridzy4.jpg differ diff --git a/frontend/static/bgz/gridzy5.jpg b/frontend/static/bgz/gridzy5.jpg new file mode 100644 index 0000000..16ff052 Binary files /dev/null and b/frontend/static/bgz/gridzy5.jpg differ diff --git a/frontend/static/bgz/gridzy6.jpg b/frontend/static/bgz/gridzy6.jpg new file mode 100644 index 0000000..fb88337 Binary files /dev/null and b/frontend/static/bgz/gridzy6.jpg differ diff --git a/frontend/static/bgz/gridzy7.jpg b/frontend/static/bgz/gridzy7.jpg new file mode 100644 index 0000000..6ff5c6e Binary files /dev/null and b/frontend/static/bgz/gridzy7.jpg differ diff --git a/frontend/static/bgz/gridzy8.jpg b/frontend/static/bgz/gridzy8.jpg new file mode 100644 index 0000000..fcdf9c2 Binary files /dev/null and b/frontend/static/bgz/gridzy8.jpg differ diff --git a/frontend/static/bgz/gridzy9.jpg b/frontend/static/bgz/gridzy9.jpg new file mode 100644 index 0000000..9f9fc27 Binary files /dev/null and b/frontend/static/bgz/gridzy9.jpg differ diff --git a/frontend/static/bgz/index.html b/frontend/static/bgz/index.html new file mode 100644 index 0000000..d0264c5 --- /dev/null +++ b/frontend/static/bgz/index.html @@ -0,0 +1,13 @@ + + + + + +
+Sending you through to + Scanner Jammer..! +
+ + + diff --git a/frontend/static/bgz/jupiter-aurora.jpg b/frontend/static/bgz/jupiter-aurora.jpg new file mode 100644 index 0000000..03eba32 Binary files /dev/null and b/frontend/static/bgz/jupiter-aurora.jpg differ diff --git a/frontend/static/bgz/jupiteraurora.jpg b/frontend/static/bgz/jupiteraurora.jpg new file mode 100644 index 0000000..28ab86c Binary files /dev/null and b/frontend/static/bgz/jupiteraurora.jpg differ diff --git a/frontend/static/bgz/lavender.jpg b/frontend/static/bgz/lavender.jpg new file mode 100644 index 0000000..4795f5b Binary files /dev/null and b/frontend/static/bgz/lavender.jpg differ diff --git a/frontend/static/bgz/morrocorace.png b/frontend/static/bgz/morrocorace.png new file mode 100644 index 0000000..0c4c715 Binary files /dev/null and b/frontend/static/bgz/morrocorace.png differ diff --git a/frontend/static/bgz/mountainz.png b/frontend/static/bgz/mountainz.png new file mode 100644 index 0000000..82743b7 Binary files /dev/null and b/frontend/static/bgz/mountainz.png differ diff --git a/frontend/static/bgz/mountainz2.png b/frontend/static/bgz/mountainz2.png new file mode 100644 index 0000000..17d62da Binary files /dev/null and b/frontend/static/bgz/mountainz2.png differ diff --git a/frontend/static/bgz/mountainz3.png b/frontend/static/bgz/mountainz3.png new file mode 100644 index 0000000..6eccf9a Binary files /dev/null and b/frontend/static/bgz/mountainz3.png differ diff --git a/frontend/static/bgz/ocian1.gif b/frontend/static/bgz/ocian1.gif new file mode 100644 index 0000000..db46984 Binary files /dev/null and b/frontend/static/bgz/ocian1.gif differ diff --git a/frontend/static/bgz/ocian2.gif b/frontend/static/bgz/ocian2.gif new file mode 100644 index 0000000..5637a75 Binary files /dev/null and b/frontend/static/bgz/ocian2.gif differ diff --git a/frontend/static/bgz/ocian3.gif b/frontend/static/bgz/ocian3.gif new file mode 100644 index 0000000..70b88a0 Binary files /dev/null and b/frontend/static/bgz/ocian3.gif differ diff --git a/frontend/static/bgz/ocian4.gif b/frontend/static/bgz/ocian4.gif new file mode 100644 index 0000000..a423adc Binary files /dev/null and b/frontend/static/bgz/ocian4.gif differ diff --git a/frontend/static/bgz/ocian4.jpg b/frontend/static/bgz/ocian4.jpg new file mode 100644 index 0000000..9243384 Binary files /dev/null and b/frontend/static/bgz/ocian4.jpg differ diff --git a/frontend/static/bgz/orlynails.jpg b/frontend/static/bgz/orlynails.jpg new file mode 100644 index 0000000..ac8ddc8 Binary files /dev/null and b/frontend/static/bgz/orlynails.jpg differ diff --git a/frontend/static/bgz/scannerjammer_cyberspace.jpg b/frontend/static/bgz/scannerjammer_cyberspace.jpg new file mode 100644 index 0000000..a2aec26 Binary files /dev/null and b/frontend/static/bgz/scannerjammer_cyberspace.jpg differ diff --git a/frontend/static/bgz/sewergreatsbg.jpg b/frontend/static/bgz/sewergreatsbg.jpg new file mode 100644 index 0000000..e3cd0cc Binary files /dev/null and b/frontend/static/bgz/sewergreatsbg.jpg differ diff --git a/frontend/static/bgz/sewergreatscorner.jpg b/frontend/static/bgz/sewergreatscorner.jpg new file mode 100644 index 0000000..1cb0757 Binary files /dev/null and b/frontend/static/bgz/sewergreatscorner.jpg differ diff --git a/frontend/static/bgz/sewergreatsvol1.jpg b/frontend/static/bgz/sewergreatsvol1.jpg new file mode 100644 index 0000000..62f1cf2 Binary files /dev/null and b/frontend/static/bgz/sewergreatsvol1.jpg differ diff --git a/frontend/static/bgz/starfield.jpg b/frontend/static/bgz/starfield.jpg new file mode 100644 index 0000000..1dd119a Binary files /dev/null and b/frontend/static/bgz/starfield.jpg differ diff --git a/frontend/static/bgz/triangledeluxe.jpg b/frontend/static/bgz/triangledeluxe.jpg new file mode 100644 index 0000000..fc25478 Binary files /dev/null and b/frontend/static/bgz/triangledeluxe.jpg differ diff --git a/frontend/static/bgz/visual6502.jpg b/frontend/static/bgz/visual6502.jpg new file mode 100644 index 0000000..819cb61 Binary files /dev/null and b/frontend/static/bgz/visual6502.jpg differ diff --git a/frontend/static/bgz/waterfall.gif b/frontend/static/bgz/waterfall.gif new file mode 100644 index 0000000..49ba75d Binary files /dev/null and b/frontend/static/bgz/waterfall.gif differ diff --git a/frontend/static/bgz/waterfall2.gif b/frontend/static/bgz/waterfall2.gif new file mode 100644 index 0000000..63c93c4 Binary files /dev/null and b/frontend/static/bgz/waterfall2.gif differ diff --git a/frontend/static/bgz/whitesquare.gif b/frontend/static/bgz/whitesquare.gif new file mode 100644 index 0000000..4616123 Binary files /dev/null and b/frontend/static/bgz/whitesquare.gif differ diff --git a/frontend/static/css/dump.css b/frontend/static/css/dump.css new file mode 100644 index 0000000..d0327e7 --- /dev/null +++ b/frontend/static/css/dump.css @@ -0,0 +1,70 @@ +#logo h1 + { + color: #468; + } +#chat a.u + { + color: #f08; + font-weight: bold; + text-shadow: #000 0 0 2px; + } +#chatbg + { + background-color: #000; + opacity: 0.7; + } +#lastlogbg + { + background-color: #000; + opacity: 0.8; + } +#playlistbg + { + background-color: #000; + opacity: 0.8; + } +#chat span a + { + color: #03f; + opacity: 1; + } +#queue li + { + } +#queue li.selected + { + background-color: #000; + } +#queue li span.yt + { + } +#queue li.selected span.yt + { + } +#queue li a + { + color: #f24; + letter-spacing: -1px; + } +#queue li.selected a + { + color: #f08; + } +#queue li span.like + { + color: #bbb; + } +#queue li.selected span.like + { + color: #888; + } +#queue li.liked span.like + { + color: #999; + font-weight: bold; + } +#queue li.selected.liked span.like + { + color: #fff; + font-weight: bold; + } diff --git a/frontend/static/css/sasscss b/frontend/static/css/sasscss new file mode 120000 index 0000000..3d25004 --- /dev/null +++ b/frontend/static/css/sasscss @@ -0,0 +1 @@ +../sass/stylesheets/ \ No newline at end of file diff --git a/frontend/static/css/ui-purple2/images/ui-bg_flat_0_aaaaaa_40x100.png b/frontend/static/css/ui-purple2/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..5b5dab2 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-bg_flat_0_eeeeee_40x100.png b/frontend/static/css/ui-purple2/images/ui-bg_flat_0_eeeeee_40x100.png new file mode 100644 index 0000000..e44f861 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-bg_flat_0_eeeeee_40x100.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-bg_flat_100_381c63_40x100.png b/frontend/static/css/ui-purple2/images/ui-bg_flat_100_381c63_40x100.png new file mode 100644 index 0000000..2bce760 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-bg_flat_100_381c63_40x100.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-bg_flat_35_dddddd_40x100.png b/frontend/static/css/ui-purple2/images/ui-bg_flat_35_dddddd_40x100.png new file mode 100644 index 0000000..4dd3c68 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-bg_flat_35_dddddd_40x100.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-bg_flat_50_ededed_40x100.png b/frontend/static/css/ui-purple2/images/ui-bg_flat_50_ededed_40x100.png new file mode 100644 index 0000000..4b631ff Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-bg_flat_50_ededed_40x100.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-bg_flat_55_c0402a_40x100.png b/frontend/static/css/ui-purple2/images/ui-bg_flat_55_c0402a_40x100.png new file mode 100644 index 0000000..b8c9bb1 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-bg_flat_55_c0402a_40x100.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-bg_flat_55_fdf9d8_40x100.png b/frontend/static/css/ui-purple2/images/ui-bg_flat_55_fdf9d8_40x100.png new file mode 100644 index 0000000..de4be91 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-bg_flat_55_fdf9d8_40x100.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-bg_flat_60_edebef_40x100.png b/frontend/static/css/ui-purple2/images/ui-bg_flat_60_edebef_40x100.png new file mode 100644 index 0000000..3460078 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-bg_flat_60_edebef_40x100.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-bg_flat_75_8566a9_40x100.png b/frontend/static/css/ui-purple2/images/ui-bg_flat_75_8566a9_40x100.png new file mode 100644 index 0000000..4f0ab16 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-bg_flat_75_8566a9_40x100.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-icons_6d33bb_256x240.png b/frontend/static/css/ui-purple2/images/ui-icons_6d33bb_256x240.png new file mode 100644 index 0000000..d11f501 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-icons_6d33bb_256x240.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-icons_7d5bbe_256x240.png b/frontend/static/css/ui-purple2/images/ui-icons_7d5bbe_256x240.png new file mode 100644 index 0000000..2758cf3 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-icons_7d5bbe_256x240.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-icons_817693_256x240.png b/frontend/static/css/ui-purple2/images/ui-icons_817693_256x240.png new file mode 100644 index 0000000..27a7ba0 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-icons_817693_256x240.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-icons_9e70e1_256x240.png b/frontend/static/css/ui-purple2/images/ui-icons_9e70e1_256x240.png new file mode 100644 index 0000000..7187858 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-icons_9e70e1_256x240.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-icons_aa8fd1_256x240.png b/frontend/static/css/ui-purple2/images/ui-icons_aa8fd1_256x240.png new file mode 100644 index 0000000..41a1b27 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-icons_aa8fd1_256x240.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-icons_edecee_256x240.png b/frontend/static/css/ui-purple2/images/ui-icons_edecee_256x240.png new file mode 100644 index 0000000..01bb36b Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-icons_edecee_256x240.png differ diff --git a/frontend/static/css/ui-purple2/images/ui-icons_fbc856_256x240.png b/frontend/static/css/ui-purple2/images/ui-icons_fbc856_256x240.png new file mode 100644 index 0000000..9d1b027 Binary files /dev/null and b/frontend/static/css/ui-purple2/images/ui-icons_fbc856_256x240.png differ diff --git a/frontend/static/css/ui-purple2/jquery-ui-1.8.13.custom.css b/frontend/static/css/ui-purple2/jquery-ui-1.8.13.custom.css new file mode 100644 index 0000000..647be01 --- /dev/null +++ b/frontend/static/css/ui-purple2/jquery-ui-1.8.13.custom.css @@ -0,0 +1,362 @@ +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Helvetica,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=dddddd&bgTextureHeader=01_flat.png&bgImgOpacityHeader=35&borderColorHeader=ccccd1&fcHeader=444444&iconColorHeader=aa8fd1&bgColorContent=ededed&bgTextureContent=01_flat.png&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=888686&iconColorContent=edecee&bgColorDefault=edebef&bgTextureDefault=01_flat.png&bgImgOpacityDefault=60&borderColorDefault=f3eed8&fcDefault=7e5cb7&iconColorDefault=9e70e1&bgColorHover=381c63&bgTextureHover=01_flat.png&bgImgOpacityHover=100&borderColorHover=e0e0e0&fcHover=e7e2e9&iconColorHover=7d5bbe&bgColorActive=8566a9&bgTextureActive=01_flat.png&bgImgOpacityActive=75&borderColorActive=f7df3b&fcActive=ffffff&iconColorActive=817693&bgColorHighlight=fdf9d8&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=b080fa&fcHighlight=9c5e5e&iconColorHighlight=6d33bb&bgColorError=c0402a&bgTextureError=01_flat.png&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow=0px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Helvetica, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Helvetica, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa; background: #ededed url(images/ui-bg_flat_50_ededed_40x100.png) 50% 50% repeat-x; color: #888686; } +.ui-widget-content a { color: #888686; } +.ui-widget-header { border: 1px solid #ccccd1; background: #dddddd url(images/ui-bg_flat_35_dddddd_40x100.png) 50% 50% repeat-x; color: #444444; font-weight: bold; } +.ui-widget-header a { color: #444444; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #f3eed8; background: #edebef url(images/ui-bg_flat_60_edebef_40x100.png) 50% 50% repeat-x; font-weight: bold; color: #7e5cb7; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #7e5cb7; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #e0e0e0; background: #381c63 url(images/ui-bg_flat_100_381c63_40x100.png) 50% 50% repeat-x; font-weight: bold; color: #e7e2e9; } +.ui-state-hover a, .ui-state-hover a:hover { color: #e7e2e9; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #f7df3b; background: #8566a9 url(images/ui-bg_flat_75_8566a9_40x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #b080fa; background: #fdf9d8 url(images/ui-bg_flat_55_fdf9d8_40x100.png) 50% 50% repeat-x; color: #9c5e5e; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #9c5e5e; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #c0402a; background: #c0402a url(images/ui-bg_flat_55_c0402a_40x100.png) 50% 50% repeat-x; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_edecee_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_edecee_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_aa8fd1_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_9e70e1_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_7d5bbe_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_817693_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_6d33bb_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_fbc856_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; } +.ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } +.ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } +.ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } +.ui-corner-right { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; } +.ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; } +.ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; } + +/* Overlays */ +.ui-widget-overlay { background: #eeeeee url(images/ui-bg_flat_0_eeeeee_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); } +.ui-widget-shadow { margin: -4px 0 0 -4px; padding: 4px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 0pxdow=0px; -webkit-border-radius: 0pxdow=0px; border-radius: 0pxdow=0px; }/* + * jQuery UI Datepicker 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/frontend/static/css/used_to_be_called_chat.css b/frontend/static/css/used_to_be_called_chat.css new file mode 100644 index 0000000..8cbe833 --- /dev/null +++ b/frontend/static/css/used_to_be_called_chat.css @@ -0,0 +1,621 @@ +* + { + padding:0; + margin: 0; + } +body + { + background: #000; + font-family: trebuchet ms, helvetica, arial, sans-serif; + } +a + { + text-decoration: none; + } +a:hover + { + text-decoration: underline; + } +#bg + { + position: fixed; + top: 0; + left: 0; + opacity: 1; + z-index: -3; + display: none; + } + +#curtain + { + background: #080810; + opacity: 0.3; + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 10; + } +#login + { + background: #000; + display: block; + width: 50%; + top: 20%; + left: 50%; + margin-left: -25%; + padding: 30px; + padding-bottom: 60px; + z-index: 20; + position: fixed; + text-align: center; + } +#login img + { + margin-bottom: 20px; + } +#login label + { + min-width: 20%; + display: inline-block; + text-align: right; + padding-right: 10px; + font-size: 18px; + color: #fff; + } +#login #button-shim + { + width: 30%; + display: inline-block; + text-align: left; + padding: 10px 10px 10px 0; + margin-right: 20px; + } +#login-username, #login-password + { + width: 30%; + margin-right: 10px; + font-size: 24px; + border: 2px solid #806; + padding: 10px; + } +#login a + { + color: #68f; + text-decoration: underline; + } +#sitez + { + position: absolute; + top: 30px; + right: 30px; + color: #888; + z-index: 21; + color: #aaa; + } +#sitez a, #sitez #logout + { + cursor: pointer; + color: #aaa; + text-decoration: underline; + } +#sitez select option + { + color: #666; + text-decoration: none; + padding-right: 3px; + } +button + { + font-size: 24px; + background: #030303; + color: #fff; + padding: 2px; + } +nav + { + z-index: 10; + margin: 0 auto; + } +nav button + { + background-color: #080808; + font-size: 14px; + min-width: 40px; + min-height: 20px; + padding: 5px 5px; + position: relative; + top: -3px; + } +nav button#like.liked + { + background-color: #804; + color: #fff8ee; + } +nav button#like + { + background-color: #312; + color: #fed; + } +nav #vidlink + { + margin: 14px 0 0 10px; + padding: 2px; + display: inline-block; + font-size: 14px; + color: #8b8; + position: relative; + cursor: pointer; + top: -2px; + background-color: #000; + } +nav button#scan + { + margin-left: 10px; + } +button#scan.blinkOn + { + color: #fff; + background-color: #f8f; + } +button#scan.blinkOff + { + color: #ff0; + background-color: #80f; + } +button#pause + { + color: #38f; + font-weight: bold; + min-width: 50px; + } +#login #button-shim button + { + padding: 2px 5px; + } +#login #noemail + { + color: #ddd; + } +#lunacy + { + z-index: 40; + background: #ddd; + color: #000; + display: block; + width: 700px; + position: fixed; + top: 20%; + left: 50%; + margin-left: -390px; + opacity: 0.7; + padding: 40px; + text-align: center; + font-size: 48px; + } +#plea + { + z-index: 30; + background: #ddd; + color: #000; + display: block; + width: 400px; + position: fixed; + top: 20%; + left: 50%; + margin-left: -240px; + opacity: 0.7; + padding: 40px; + text-align: center; + font-size: 48px; + } +#loading + { + z-index: 20; + background: transparent; + color: #06033c; + text-shadow: #060363 0 0 50px; + display: block; + position: fixed; + width: 100%; + padding: 20px; + top: 30%; + left: 10%; + font-size: 170px; + font-weight: bold; + text-align: left; + white-space: no-wrap; + letter-spacing: -3px; + } +#logo + { + position: fixed; + top: 10px; + z-index: 20; + left: 10px; + } +#logobg + { + position: fixed; top: 10px; left: 0; width: 100%; height: 64px; + background-color: #000; opacity: 0.8; z-index: 19; + } +#logo a + { + float: left; + display: inline-block; + } +#logo a img + { + display: inline-block; + } +#logo h1 + { + padding: 15px 0 0 25px; + font-size: 34px; + color: #fff; + font-weight: normal; + font-style: italic; + font-family: georgia, garamond, serif; + color: #8ff; + display: inline-block; + } +#logo #likebutton + { + display: inline-block; + width: 90px; + height: 21px; + margin-left: 20px; + margin-top: -5px; + } +#likereport + { + position: fixed; + width: 100px; + padding: 20px; + z-index: 19; + overflow-y: hidden; + } +#likereport a + { + background-color: #222; + display: block; + text-decoration: none; + padding: 5px; + opacity: 0.95; + } +#instructions + { + position: fixed; + width: 450px; + z-index: -1; + } +#instructions span + { + display: inline-block; + background-color: #000; + color: #008fe6; + font-size: 14px; + line-height: 14px; + padding: 3px; + opacity: 0.8; + } +#form + { + position: fixed; + bottom: 10px; + left: 0px; + padding: 15px 10px 10px 10px; + background-color: #000; + white-space: nowrap; + } +#form #chat-message + { + border: 0; + outline: 0; + font-size: 18px; + padding: 5px; + margin-right: 5px; + } +#form #chat-send + { + margin: 0; + outline: 0; + padding: 2px 6px; + position: relative; + top: 1px; + color: #fff; + font-size: 20px; + } +#form #chat-send:hover + { + background-color: #543; + } +#formbg + { + background-color: #000; + opacity: 0.7; + } +#player + { + position: fixed; + padding: 10px; + left: 20px; + top: 10px; + background-color: #000; + display: none; + } +#player #ytplayer + { + position: static; + width: 533px; + height: 400px; + display: block; + background-color: #888; + pointer-events: none; + } +#playlistbg + { + position: fixed; + background-color: #222; + opacity: 0.4; + z-index: 11; + } +#playlist + { + position: fixed; + left: 450px; + top: 10px; + width: 320px; + background-color: #transparent; + opacity: 1; + border-bottom: 10px solid #000; + z-index: 12; + } +#playlist #queue + { + overflow-y: scroll; + overflow-x: hidden; + position: absolute; + bottom: 0; + width: 100%; + height: 85%; + } +#playlist img + { + position: absolute; + top: -5px; + left: 10px; + } +li + { + list-style-type: none; + } +#queue li + { + font-size: 16px; + list-style-type: none; + margin: 0; + border-bottom: 1px solid #333; + padding: 10px 5px 10px 10px; + opacity: 0.8; + } +#queue li span.like + { + color: #bbe; + font-size: 15px; + padding: 2px 10px 0 5px; + display: inline-block; + float: right; + cursor: pointer; + } +#queue li.liked span.like + { + color: #fff; + font-weight: bold; + } +#queue li span.yt + { + padding-left: 2px; + cursor: pointer; + color: #fff; + display: inline-block; + max-width: 65%; + } +#queue li span.yt.error + { + color: #888; + } +#queue li a + { + float: right; + color: #ff0066; + padding: 2px 10px 0 5px; + display: inline-block; + font-weight: bold; + font-size: 15px; + } +#queue li.selected + { + opacity: 1.0; + color: #008fe6; + background-color: #04022d; + } +#queue li.selected span.like + { + color: #a3d3ff; + } +#queue li.selected.liked span.like + { + color: #fff; + } +#queue li.selected a + { + color: #d8131f; + } +#queue li.selected span.yt + { + color: #f0efe6; + } +#chatbg + { + position: fixed; + bottom: 100px; + left: 20px; + padding: 10px; + width: 600px; + background-color: #000; + padding: 0 10px 5px 10px; + opacity: 0.3; + z-index: 9; + } +#chat + { + padding: 0 10px 5px 10px; + position: fixed; + overflow-y: scroll; + font-size: 16px; + vertical-align: bottom; + background: transparent; + z-index: 10; + } +#chat a + { + opacity: 0.8; + color: #ccff66; + text-decoration: underline; + } +#chat a.u + { + font-weight: normal; + min-width: 60px; + padding-right: 10px; + display: inline-block; + color: #ff0066; + opacity: 0.9; + text-decoration: none; + } +#chat a.pic + { + opacity: 1; + } +#chat span + { + color: #f0fff0; + text-shadow: #000 0 0 2px; + } +#chat .ytlink + { + color: #aaccff; + cursor: pointer; + text-decoration: underline; + text-shadow: none; + text-shadow: #000 0 0 1px; + opacity: 1; + } +#chat .ytlink:hover + { + color: #dd66ff; + text-decoration: underline; + text-shadow: #000 0 0 1px; + } +#chat .ytlink.playing + { + color: #daf; + font-weight: bold; + text-decoration: none; + } +#chat .ytlink.playing::before + { + text-decoration: none; + content: "\25b6 "; + font-weight: bold; + } +#chat img + { + max-width: 350px; + max-height: 400px; + border: 0; + } +#lastlogbg + { + position: fixed; + background-color: #000; + opacity: 0.5; + padding: 10px; + z-index: 15; + } +#lastlogbox + { + position: fixed; + font-size: 14px; + padding: 10px; + z-index: 16; + } +#lastlogbox h4 + { + font-size: 12px; + font-weight: bold; + color: #eee; + padding-bottom: 5px; + } +#lastlogbox ul + { + border-top: 1px solid #000; + } +li.ll + { + list-style-type: none; + } +li.ll a + { + color: #d0e0fe; + padding: 5px 0; + border-bottom: 1px solid #000; + display: block; + text-shadow: #000 0 0 2px; + text-decoration: underline; + font-size: 16px; + font-weight: bold; + } +#msg + { + opacity: 0.8; + z-index: 20; + position: fixed; + right: 10px; + top: 10px; + width: 350px; + padding: 10px; + overflow-x: hidden; + overflow-y: scroll; + font-size: 13px; + background-color: #fff; + } +#flower + { + position: absolute; + top: 0; + right: 10%; + z-index: 20; + pointer-events: none; + display: none; + } +#plant + { + position: absolute; + bottom: 0; + z-index: 20; + pointer-events: none; + display: none; + } +#shim + { + width: 10px; + height: 500px; + } +#scanjam { padding: 10px 0 10px 0; } +#msg { display: none; } +#login,#sitez { display: none; } +#lunacy { display: none; } +#likereport, #logo, #logobg, #chat, #chatbg, #form, #formbg, #instructions, #playlist, #playlistbg, #lastlogbox, #lastlogbg { display: none; } diff --git a/frontend/static/faq/.htaccess b/frontend/static/faq/.htaccess new file mode 100644 index 0000000..717ec6f --- /dev/null +++ b/frontend/static/faq/.htaccess @@ -0,0 +1 @@ +DirectoryIndex index.html diff --git a/frontend/static/faq/index.html b/frontend/static/faq/index.html new file mode 100644 index 0000000..fd76e86 --- /dev/null +++ b/frontend/static/faq/index.html @@ -0,0 +1,286 @@ + + + + +SCANNERJAMMER FAQ + + + + +
+ +
+ Rooms · + Top Videos Today · + Directory +
+ +
+contact us: facebook.com/AAAFFF
+and follow @scannerjammer +
+ +
+

why do I need to register and why do I need a username?

+

+because this is an elite establishment. this is for SERIOUS internet browsers ONLY ......NOXQSZ. +

+

+if you post "The Lonely Island" or any related videos in scannerjammer you will be held accountable. we care about the content of our site. +

+

+we want you to develop a reputation. all posts will be connected to your username. be forewarned. (no email or contact information is required upon registration) +

+ +

what is this?

+

+this is a crazy video chatroom in which you can post YOUTUBES, VIMEOS and SOUNDCLOUDS into the chat as well as GIFs and IMAGES. the videos are added to a playlist that you can click through. +

+ +

how do I post a video?

+

+to add media to the playlist, simply copy and paste the URL of the video or music that you want into the chat and hit SEND. +

+ +

what do I do (and how do I do it)?

+

+the SCAN button enables you to scan through the videos like a scan button on a radio receiver. By hitting the ESC key, you can toggle through the full-screen modes. +

+ +

+post the urls of images and gifs and they will show up on the chat as well as on your profile page. +

+

+by clicking LIKE on a video in the playlist, you add the video to a playlist of "likes" on your profile page.
+See the top videos today. +

+

+All profiles can be accessed by clicking on a username. also check out the Scannerjammer directory. +

+ +
+
+ +
+ +

who made this?

+

+it was made by Pepper DaStroyer (Andrew Fenlon) who is a crazed American Idol reject, Jules Welter (asdf.us), one of the operators of Rotten dot com, and Peter Le Bek (vokoda). +

+ +

are the creators of the website alive or dead?

+

+all dead +

+ +

what does this site intend to accomplish?

+

+this site was designed for people to talk with youtube videos in conjunction with words. our goal is to encourage people to post the best videos they can find and eventually make videos for the site. +

+ +

how do i get started using this?

+

+post a youtube url into the chat and begin. also, you should say hello to whomever is in the room. +

+ +

can you post anything other than youtube?

+

+yes. we can play any Vimeo or Soundcloud url. +

+ +

how can I help scannerjammer, I like this site!

+
+ +
+

+ click the like button. it's crucial ------------------> +

+ +

how do I improve my fav score?

+

+post the best video you can find and cross your fingers +

+ +
+

what does the flower mean?

+

+the flower means you liked something +

+
+

what does the glittery plant mean?

+

+the plant means someone liked a video you posted <3 +

+





+





+
+ + + + diff --git a/frontend/static/favicon.ico b/frontend/static/favicon.ico new file mode 100644 index 0000000..10176a4 Binary files /dev/null and b/frontend/static/favicon.ico differ diff --git a/frontend/static/img/.htaccess b/frontend/static/img/.htaccess new file mode 100644 index 0000000..fe50a80 --- /dev/null +++ b/frontend/static/img/.htaccess @@ -0,0 +1,2 @@ +DirectoryIndex /cgi-bin/img.cgi + diff --git a/frontend/static/img/1278131405573-dumpfm-glasspopcorn-sitmanpiano.gif b/frontend/static/img/1278131405573-dumpfm-glasspopcorn-sitmanpiano.gif new file mode 100644 index 0000000..a7b8f1e Binary files /dev/null and b/frontend/static/img/1278131405573-dumpfm-glasspopcorn-sitmanpiano.gif differ diff --git a/frontend/static/img/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif b/frontend/static/img/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif new file mode 100644 index 0000000..3dd1c0a Binary files /dev/null and b/frontend/static/img/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif differ diff --git a/frontend/static/img/1309267681552-dumpfm-frakbuddy-glasscross.gif b/frontend/static/img/1309267681552-dumpfm-frakbuddy-glasscross.gif new file mode 100644 index 0000000..dd9188b Binary files /dev/null and b/frontend/static/img/1309267681552-dumpfm-frakbuddy-glasscross.gif differ diff --git a/frontend/static/img/Tropic_Of_Cancer__The_Sorrow_Of_Two_Blooms_1308602037.jpg b/frontend/static/img/Tropic_Of_Cancer__The_Sorrow_Of_Two_Blooms_1308602037.jpg new file mode 100644 index 0000000..f79e46e Binary files /dev/null and b/frontend/static/img/Tropic_Of_Cancer__The_Sorrow_Of_Two_Blooms_1308602037.jpg differ diff --git a/frontend/static/img/avatar2.png b/frontend/static/img/avatar2.png new file mode 100644 index 0000000..29ddaae Binary files /dev/null and b/frontend/static/img/avatar2.png differ diff --git a/frontend/static/img/bgz-icon.jpg b/frontend/static/img/bgz-icon.jpg new file mode 100644 index 0000000..36a84e2 Binary files /dev/null and b/frontend/static/img/bgz-icon.jpg differ diff --git a/frontend/static/img/black-flower.gif b/frontend/static/img/black-flower.gif new file mode 100644 index 0000000..acb091e Binary files /dev/null and b/frontend/static/img/black-flower.gif differ diff --git a/frontend/static/img/blackplantmask.png b/frontend/static/img/blackplantmask.png new file mode 100644 index 0000000..f3818de Binary files /dev/null and b/frontend/static/img/blackplantmask.png differ diff --git a/frontend/static/img/cube.png b/frontend/static/img/cube.png new file mode 100644 index 0000000..759faea Binary files /dev/null and b/frontend/static/img/cube.png differ diff --git a/frontend/static/img/diornights.png b/frontend/static/img/diornights.png new file mode 100644 index 0000000..b6ae7d0 Binary files /dev/null and b/frontend/static/img/diornights.png differ diff --git a/frontend/static/img/disaro.jpg b/frontend/static/img/disaro.jpg new file mode 100644 index 0000000..2d14033 Binary files /dev/null and b/frontend/static/img/disaro.jpg differ diff --git a/frontend/static/img/flower-red.gif b/frontend/static/img/flower-red.gif new file mode 100644 index 0000000..c0daaa6 Binary files /dev/null and b/frontend/static/img/flower-red.gif differ diff --git a/frontend/static/img/flower20.png b/frontend/static/img/flower20.png new file mode 100644 index 0000000..04461c2 Binary files /dev/null and b/frontend/static/img/flower20.png differ diff --git a/frontend/static/img/glasspopcornheader.png b/frontend/static/img/glasspopcornheader.png new file mode 100644 index 0000000..6626277 Binary files /dev/null and b/frontend/static/img/glasspopcornheader.png differ diff --git a/frontend/static/img/glasspopradio.gif b/frontend/static/img/glasspopradio.gif new file mode 100644 index 0000000..376182c Binary files /dev/null and b/frontend/static/img/glasspopradio.gif differ diff --git a/frontend/static/img/glasspopthumb.gif b/frontend/static/img/glasspopthumb.gif new file mode 100644 index 0000000..344922b Binary files /dev/null and b/frontend/static/img/glasspopthumb.gif differ diff --git a/frontend/static/img/glitter/100-Percent-Sexy-Cowgirl.gif b/frontend/static/img/glitter/100-Percent-Sexy-Cowgirl.gif new file mode 100644 index 0000000..a1bbdbe Binary files /dev/null and b/frontend/static/img/glitter/100-Percent-Sexy-Cowgirl.gif differ diff --git a/frontend/static/img/glitter/1292462203316-dumpfm-yrmomvsmymom-sparkle.gif b/frontend/static/img/glitter/1292462203316-dumpfm-yrmomvsmymom-sparkle.gif new file mode 100644 index 0000000..c1336c4 Binary files /dev/null and b/frontend/static/img/glitter/1292462203316-dumpfm-yrmomvsmymom-sparkle.gif differ diff --git a/frontend/static/img/glitter/99-percent-tejana-and-1-percent-floridian.gif b/frontend/static/img/glitter/99-percent-tejana-and-1-percent-floridian.gif new file mode 100644 index 0000000..be7cfb6 Binary files /dev/null and b/frontend/static/img/glitter/99-percent-tejana-and-1-percent-floridian.gif differ diff --git a/frontend/static/img/glitter/Air-Plane.gif b/frontend/static/img/glitter/Air-Plane.gif new file mode 100644 index 0000000..c92af95 Binary files /dev/null and b/frontend/static/img/glitter/Air-Plane.gif differ diff --git a/frontend/static/img/glitter/Aloha-Girl.gif b/frontend/static/img/glitter/Aloha-Girl.gif new file mode 100644 index 0000000..c02c421 Binary files /dev/null and b/frontend/static/img/glitter/Aloha-Girl.gif differ diff --git a/frontend/static/img/glitter/American-Flag-Heart.gif b/frontend/static/img/glitter/American-Flag-Heart.gif new file mode 100644 index 0000000..d4dfe66 Binary files /dev/null and b/frontend/static/img/glitter/American-Flag-Heart.gif differ diff --git a/frontend/static/img/glitter/American-Sexy-Thing-1.gif b/frontend/static/img/glitter/American-Sexy-Thing-1.gif new file mode 100644 index 0000000..7a0b728 Binary files /dev/null and b/frontend/static/img/glitter/American-Sexy-Thing-1.gif differ diff --git a/frontend/static/img/glitter/American-Sexy-Thing.gif b/frontend/static/img/glitter/American-Sexy-Thing.gif new file mode 100644 index 0000000..7a0b728 Binary files /dev/null and b/frontend/static/img/glitter/American-Sexy-Thing.gif differ diff --git a/frontend/static/img/glitter/Arizona-Cardinals.gif b/frontend/static/img/glitter/Arizona-Cardinals.gif new file mode 100644 index 0000000..972309c Binary files /dev/null and b/frontend/static/img/glitter/Arizona-Cardinals.gif differ diff --git a/frontend/static/img/glitter/Arizona-Diamondbacks.gif b/frontend/static/img/glitter/Arizona-Diamondbacks.gif new file mode 100644 index 0000000..ddd3209 Binary files /dev/null and b/frontend/static/img/glitter/Arizona-Diamondbacks.gif differ diff --git a/frontend/static/img/glitter/Atlanta-Braves.gif b/frontend/static/img/glitter/Atlanta-Braves.gif new file mode 100644 index 0000000..805c3bb Binary files /dev/null and b/frontend/static/img/glitter/Atlanta-Braves.gif differ diff --git a/frontend/static/img/glitter/Atlanta-Falcons.gif b/frontend/static/img/glitter/Atlanta-Falcons.gif new file mode 100644 index 0000000..26e418b Binary files /dev/null and b/frontend/static/img/glitter/Atlanta-Falcons.gif differ diff --git a/frontend/static/img/glitter/Baltimore-Orioles.gif b/frontend/static/img/glitter/Baltimore-Orioles.gif new file mode 100644 index 0000000..d49f116 Binary files /dev/null and b/frontend/static/img/glitter/Baltimore-Orioles.gif differ diff --git a/frontend/static/img/glitter/Baltimore-Ravens.gif b/frontend/static/img/glitter/Baltimore-Ravens.gif new file mode 100644 index 0000000..5737c42 Binary files /dev/null and b/frontend/static/img/glitter/Baltimore-Ravens.gif differ diff --git a/frontend/static/img/glitter/Beat-Hell.gif b/frontend/static/img/glitter/Beat-Hell.gif new file mode 100644 index 0000000..dc5e1de Binary files /dev/null and b/frontend/static/img/glitter/Beat-Hell.gif differ diff --git a/frontend/static/img/glitter/Beautiful-Friendship.gif b/frontend/static/img/glitter/Beautiful-Friendship.gif new file mode 100644 index 0000000..301d20e Binary files /dev/null and b/frontend/static/img/glitter/Beautiful-Friendship.gif differ diff --git a/frontend/static/img/glitter/Belle-Glitter.gif b/frontend/static/img/glitter/Belle-Glitter.gif new file mode 100644 index 0000000..738f126 Binary files /dev/null and b/frontend/static/img/glitter/Belle-Glitter.gif differ diff --git a/frontend/static/img/glitter/Belly-Dancer.gif b/frontend/static/img/glitter/Belly-Dancer.gif new file mode 100644 index 0000000..e23e8e1 Binary files /dev/null and b/frontend/static/img/glitter/Belly-Dancer.gif differ diff --git a/frontend/static/img/glitter/Belly-Dnacer.gif b/frontend/static/img/glitter/Belly-Dnacer.gif new file mode 100644 index 0000000..7af934f Binary files /dev/null and b/frontend/static/img/glitter/Belly-Dnacer.gif differ diff --git a/frontend/static/img/glitter/Bible-Diet.gif b/frontend/static/img/glitter/Bible-Diet.gif new file mode 100644 index 0000000..548d28a Binary files /dev/null and b/frontend/static/img/glitter/Bible-Diet.gif differ diff --git a/frontend/static/img/glitter/Black-Kisses.gif b/frontend/static/img/glitter/Black-Kisses.gif new file mode 100644 index 0000000..cad7dd9 Binary files /dev/null and b/frontend/static/img/glitter/Black-Kisses.gif differ diff --git a/frontend/static/img/glitter/Black-Razzers.gif b/frontend/static/img/glitter/Black-Razzers.gif new file mode 100644 index 0000000..deeed80 Binary files /dev/null and b/frontend/static/img/glitter/Black-Razzers.gif differ diff --git a/frontend/static/img/glitter/Bloody-Vampire.gif b/frontend/static/img/glitter/Bloody-Vampire.gif new file mode 100644 index 0000000..cfc838a Binary files /dev/null and b/frontend/static/img/glitter/Bloody-Vampire.gif differ diff --git a/frontend/static/img/glitter/Blue-Butterfly-Heaven.gif b/frontend/static/img/glitter/Blue-Butterfly-Heaven.gif new file mode 100644 index 0000000..1f93967 Binary files /dev/null and b/frontend/static/img/glitter/Blue-Butterfly-Heaven.gif differ diff --git a/frontend/static/img/glitter/Blue-Cape-Fairy.gif b/frontend/static/img/glitter/Blue-Cape-Fairy.gif new file mode 100644 index 0000000..89b80c5 Binary files /dev/null and b/frontend/static/img/glitter/Blue-Cape-Fairy.gif differ diff --git a/frontend/static/img/glitter/Blue-Care-Bear.gif b/frontend/static/img/glitter/Blue-Care-Bear.gif new file mode 100644 index 0000000..6f46165 Binary files /dev/null and b/frontend/static/img/glitter/Blue-Care-Bear.gif differ diff --git a/frontend/static/img/glitter/Blue-Dolphin.gif b/frontend/static/img/glitter/Blue-Dolphin.gif new file mode 100644 index 0000000..07435b7 Binary files /dev/null and b/frontend/static/img/glitter/Blue-Dolphin.gif differ diff --git a/frontend/static/img/glitter/Blue-Flower-02.gif b/frontend/static/img/glitter/Blue-Flower-02.gif new file mode 100644 index 0000000..3ced0e1 Binary files /dev/null and b/frontend/static/img/glitter/Blue-Flower-02.gif differ diff --git a/frontend/static/img/glitter/Blue-Flower-03.gif b/frontend/static/img/glitter/Blue-Flower-03.gif new file mode 100644 index 0000000..a80df24 Binary files /dev/null and b/frontend/static/img/glitter/Blue-Flower-03.gif differ diff --git a/frontend/static/img/glitter/Blue-Purple-Shoe.gif b/frontend/static/img/glitter/Blue-Purple-Shoe.gif new file mode 100644 index 0000000..7e1f7bf Binary files /dev/null and b/frontend/static/img/glitter/Blue-Purple-Shoe.gif differ diff --git a/frontend/static/img/glitter/Booty-Call.gif b/frontend/static/img/glitter/Booty-Call.gif new file mode 100644 index 0000000..a975ed1 Binary files /dev/null and b/frontend/static/img/glitter/Booty-Call.gif differ diff --git a/frontend/static/img/glitter/Broken-heart-Pink.gif b/frontend/static/img/glitter/Broken-heart-Pink.gif new file mode 100644 index 0000000..1dc565f Binary files /dev/null and b/frontend/static/img/glitter/Broken-heart-Pink.gif differ diff --git a/frontend/static/img/glitter/Buffalo-Bills.gif b/frontend/static/img/glitter/Buffalo-Bills.gif new file mode 100644 index 0000000..4a3ab95 Binary files /dev/null and b/frontend/static/img/glitter/Buffalo-Bills.gif differ diff --git a/frontend/static/img/glitter/Bulls.gif b/frontend/static/img/glitter/Bulls.gif new file mode 100644 index 0000000..906cb98 Binary files /dev/null and b/frontend/static/img/glitter/Bulls.gif differ diff --git a/frontend/static/img/glitter/Burger-King-Glitter.gif b/frontend/static/img/glitter/Burger-King-Glitter.gif new file mode 100644 index 0000000..d534de5 Binary files /dev/null and b/frontend/static/img/glitter/Burger-King-Glitter.gif differ diff --git a/frontend/static/img/glitter/Butterfly-Girl.gif b/frontend/static/img/glitter/Butterfly-Girl.gif new file mode 100644 index 0000000..774f1f4 Binary files /dev/null and b/frontend/static/img/glitter/Butterfly-Girl.gif differ diff --git a/frontend/static/img/glitter/California-Angels.gif b/frontend/static/img/glitter/California-Angels.gif new file mode 100644 index 0000000..87fe231 Binary files /dev/null and b/frontend/static/img/glitter/California-Angels.gif differ diff --git a/frontend/static/img/glitter/Cat-Fairy.gif b/frontend/static/img/glitter/Cat-Fairy.gif new file mode 100644 index 0000000..404b056 Binary files /dev/null and b/frontend/static/img/glitter/Cat-Fairy.gif differ diff --git a/frontend/static/img/glitter/Cell-Phone-Glitter.gif b/frontend/static/img/glitter/Cell-Phone-Glitter.gif new file mode 100644 index 0000000..92555f3 Binary files /dev/null and b/frontend/static/img/glitter/Cell-Phone-Glitter.gif differ diff --git a/frontend/static/img/glitter/Cheetah-Chick.gif b/frontend/static/img/glitter/Cheetah-Chick.gif new file mode 100644 index 0000000..c3a9e69 Binary files /dev/null and b/frontend/static/img/glitter/Cheetah-Chick.gif differ diff --git a/frontend/static/img/glitter/Cherries-Glittler.gif b/frontend/static/img/glitter/Cherries-Glittler.gif new file mode 100644 index 0000000..2ff1a11 Binary files /dev/null and b/frontend/static/img/glitter/Cherries-Glittler.gif differ diff --git a/frontend/static/img/glitter/Cherries.gif b/frontend/static/img/glitter/Cherries.gif new file mode 100644 index 0000000..bbfbb25 Binary files /dev/null and b/frontend/static/img/glitter/Cherries.gif differ diff --git a/frontend/static/img/glitter/Chicago-Bears.gif b/frontend/static/img/glitter/Chicago-Bears.gif new file mode 100644 index 0000000..ce39dc9 Binary files /dev/null and b/frontend/static/img/glitter/Chicago-Bears.gif differ diff --git a/frontend/static/img/glitter/Chicago-Cubs.gif b/frontend/static/img/glitter/Chicago-Cubs.gif new file mode 100644 index 0000000..e30735e Binary files /dev/null and b/frontend/static/img/glitter/Chicago-Cubs.gif differ diff --git a/frontend/static/img/glitter/Chicago-Whitesox.gif b/frontend/static/img/glitter/Chicago-Whitesox.gif new file mode 100644 index 0000000..5335751 Binary files /dev/null and b/frontend/static/img/glitter/Chicago-Whitesox.gif differ diff --git a/frontend/static/img/glitter/Cleveland-Indians.gif b/frontend/static/img/glitter/Cleveland-Indians.gif new file mode 100644 index 0000000..a7c65e9 Binary files /dev/null and b/frontend/static/img/glitter/Cleveland-Indians.gif differ diff --git a/frontend/static/img/glitter/Close-Girlfriends.gif b/frontend/static/img/glitter/Close-Girlfriends.gif new file mode 100644 index 0000000..c67d210 Binary files /dev/null and b/frontend/static/img/glitter/Close-Girlfriends.gif differ diff --git a/frontend/static/img/glitter/Colorado-Rockies.gif b/frontend/static/img/glitter/Colorado-Rockies.gif new file mode 100644 index 0000000..07a4b33 Binary files /dev/null and b/frontend/static/img/glitter/Colorado-Rockies.gif differ diff --git a/frontend/static/img/glitter/Colour-My-World.gif b/frontend/static/img/glitter/Colour-My-World.gif new file mode 100644 index 0000000..a5428cd Binary files /dev/null and b/frontend/static/img/glitter/Colour-My-World.gif differ diff --git a/frontend/static/img/glitter/Cone-Get-It.gif b/frontend/static/img/glitter/Cone-Get-It.gif new file mode 100644 index 0000000..ae31306 Binary files /dev/null and b/frontend/static/img/glitter/Cone-Get-It.gif differ diff --git a/frontend/static/img/glitter/Cuban-Babe.gif b/frontend/static/img/glitter/Cuban-Babe.gif new file mode 100644 index 0000000..b874b39 Binary files /dev/null and b/frontend/static/img/glitter/Cuban-Babe.gif differ diff --git a/frontend/static/img/glitter/Cupid-Just-Struck.gif b/frontend/static/img/glitter/Cupid-Just-Struck.gif new file mode 100644 index 0000000..028caac Binary files /dev/null and b/frontend/static/img/glitter/Cupid-Just-Struck.gif differ diff --git a/frontend/static/img/glitter/Dirty-Little-Secret.gif b/frontend/static/img/glitter/Dirty-Little-Secret.gif new file mode 100644 index 0000000..be2136f Binary files /dev/null and b/frontend/static/img/glitter/Dirty-Little-Secret.gif differ diff --git a/frontend/static/img/glitter/Dolphin-Animated.gif b/frontend/static/img/glitter/Dolphin-Animated.gif new file mode 100644 index 0000000..dc44b30 Binary files /dev/null and b/frontend/static/img/glitter/Dolphin-Animated.gif differ diff --git a/frontend/static/img/glitter/Droppin-In-To-Say-Hello.gif b/frontend/static/img/glitter/Droppin-In-To-Say-Hello.gif new file mode 100644 index 0000000..0e21ec3 Binary files /dev/null and b/frontend/static/img/glitter/Droppin-In-To-Say-Hello.gif differ diff --git a/frontend/static/img/glitter/Drppin-By-To-Say-hellow.gif b/frontend/static/img/glitter/Drppin-By-To-Say-hellow.gif new file mode 100644 index 0000000..0e21ec3 Binary files /dev/null and b/frontend/static/img/glitter/Drppin-By-To-Say-hellow.gif differ diff --git a/frontend/static/img/glitter/Eeyore-Angel.gif b/frontend/static/img/glitter/Eeyore-Angel.gif new file mode 100644 index 0000000..3a3343d Binary files /dev/null and b/frontend/static/img/glitter/Eeyore-Angel.gif differ diff --git a/frontend/static/img/glitter/Fairy-18.gif b/frontend/static/img/glitter/Fairy-18.gif new file mode 100644 index 0000000..6732cbb Binary files /dev/null and b/frontend/static/img/glitter/Fairy-18.gif differ diff --git a/frontend/static/img/glitter/Fairy-23.gif b/frontend/static/img/glitter/Fairy-23.gif new file mode 100644 index 0000000..0439ffb Binary files /dev/null and b/frontend/static/img/glitter/Fairy-23.gif differ diff --git a/frontend/static/img/glitter/Fairy-Caught-in-Jar.gif b/frontend/static/img/glitter/Fairy-Caught-in-Jar.gif new file mode 100644 index 0000000..39f55d6 Binary files /dev/null and b/frontend/static/img/glitter/Fairy-Caught-in-Jar.gif differ diff --git a/frontend/static/img/glitter/Fairy-Chest.gif b/frontend/static/img/glitter/Fairy-Chest.gif new file mode 100644 index 0000000..8f89634 Binary files /dev/null and b/frontend/static/img/glitter/Fairy-Chest.gif differ diff --git a/frontend/static/img/glitter/Fairy-Fantasy-5.gif b/frontend/static/img/glitter/Fairy-Fantasy-5.gif new file mode 100644 index 0000000..bc563aa Binary files /dev/null and b/frontend/static/img/glitter/Fairy-Fantasy-5.gif differ diff --git a/frontend/static/img/glitter/Fairy-Waterfalls.gif b/frontend/static/img/glitter/Fairy-Waterfalls.gif new file mode 100644 index 0000000..8709f55 Binary files /dev/null and b/frontend/static/img/glitter/Fairy-Waterfalls.gif differ diff --git a/frontend/static/img/glitter/Fairy-Wings-4.gif b/frontend/static/img/glitter/Fairy-Wings-4.gif new file mode 100644 index 0000000..fdf5d54 Binary files /dev/null and b/frontend/static/img/glitter/Fairy-Wings-4.gif differ diff --git a/frontend/static/img/glitter/Fairy-Wings-5.gif b/frontend/static/img/glitter/Fairy-Wings-5.gif new file mode 100644 index 0000000..d64240c Binary files /dev/null and b/frontend/static/img/glitter/Fairy-Wings-5.gif differ diff --git a/frontend/static/img/glitter/Fantasy-Fairy-10.gif b/frontend/static/img/glitter/Fantasy-Fairy-10.gif new file mode 100644 index 0000000..c39829e Binary files /dev/null and b/frontend/static/img/glitter/Fantasy-Fairy-10.gif differ diff --git a/frontend/static/img/glitter/Fantasy-Fairy-4.gif b/frontend/static/img/glitter/Fantasy-Fairy-4.gif new file mode 100644 index 0000000..2f82dad Binary files /dev/null and b/frontend/static/img/glitter/Fantasy-Fairy-4.gif differ diff --git a/frontend/static/img/glitter/Fantasy-Fairy-5.gif b/frontend/static/img/glitter/Fantasy-Fairy-5.gif new file mode 100644 index 0000000..3b7b59e Binary files /dev/null and b/frontend/static/img/glitter/Fantasy-Fairy-5.gif differ diff --git a/frontend/static/img/glitter/Fantasy-Fairy-8.gif b/frontend/static/img/glitter/Fantasy-Fairy-8.gif new file mode 100644 index 0000000..84f217d Binary files /dev/null and b/frontend/static/img/glitter/Fantasy-Fairy-8.gif differ diff --git a/frontend/static/img/glitter/Fantasy-Fairy.gif b/frontend/static/img/glitter/Fantasy-Fairy.gif new file mode 100644 index 0000000..425e757 Binary files /dev/null and b/frontend/static/img/glitter/Fantasy-Fairy.gif differ diff --git a/frontend/static/img/glitter/Fendi-Yellow.gif b/frontend/static/img/glitter/Fendi-Yellow.gif new file mode 100644 index 0000000..cc22042 Binary files /dev/null and b/frontend/static/img/glitter/Fendi-Yellow.gif differ diff --git a/frontend/static/img/glitter/Florida-Marlins.gif b/frontend/static/img/glitter/Florida-Marlins.gif new file mode 100644 index 0000000..eba21b6 Binary files /dev/null and b/frontend/static/img/glitter/Florida-Marlins.gif differ diff --git a/frontend/static/img/glitter/Fur-Cowgirl.gif b/frontend/static/img/glitter/Fur-Cowgirl.gif new file mode 100644 index 0000000..1eb9acc Binary files /dev/null and b/frontend/static/img/glitter/Fur-Cowgirl.gif differ diff --git a/frontend/static/img/glitter/Getting-Ready.gif b/frontend/static/img/glitter/Getting-Ready.gif new file mode 100644 index 0000000..b358365 Binary files /dev/null and b/frontend/static/img/glitter/Getting-Ready.gif differ diff --git a/frontend/static/img/glitter/Ghetto-Booty.gif b/frontend/static/img/glitter/Ghetto-Booty.gif new file mode 100644 index 0000000..09458a4 Binary files /dev/null and b/frontend/static/img/glitter/Ghetto-Booty.gif differ diff --git a/frontend/static/img/glitter/Gorgeous-Fairy.gif b/frontend/static/img/glitter/Gorgeous-Fairy.gif new file mode 100644 index 0000000..9e7389f Binary files /dev/null and b/frontend/static/img/glitter/Gorgeous-Fairy.gif differ diff --git a/frontend/static/img/glitter/Gorgeous-Pink-Flowers.gif b/frontend/static/img/glitter/Gorgeous-Pink-Flowers.gif new file mode 100644 index 0000000..15da1f4 Binary files /dev/null and b/frontend/static/img/glitter/Gorgeous-Pink-Flowers.gif differ diff --git a/frontend/static/img/glitter/Green-Palm-Tree.gif b/frontend/static/img/glitter/Green-Palm-Tree.gif new file mode 100644 index 0000000..78d7cfd Binary files /dev/null and b/frontend/static/img/glitter/Green-Palm-Tree.gif differ diff --git a/frontend/static/img/glitter/Happy-Feb-14th-Arrow-Heart.gif b/frontend/static/img/glitter/Happy-Feb-14th-Arrow-Heart.gif new file mode 100644 index 0000000..2bbc3a2 Binary files /dev/null and b/frontend/static/img/glitter/Happy-Feb-14th-Arrow-Heart.gif differ diff --git a/frontend/static/img/glitter/Have-A-Beautiful-Day.gif b/frontend/static/img/glitter/Have-A-Beautiful-Day.gif new file mode 100644 index 0000000..17bee84 Binary files /dev/null and b/frontend/static/img/glitter/Have-A-Beautiful-Day.gif differ diff --git a/frontend/static/img/glitter/Have-Dreams.gif b/frontend/static/img/glitter/Have-Dreams.gif new file mode 100644 index 0000000..48122d9 Binary files /dev/null and b/frontend/static/img/glitter/Have-Dreams.gif differ diff --git a/frontend/static/img/glitter/He-Died-For-you.gif b/frontend/static/img/glitter/He-Died-For-you.gif new file mode 100644 index 0000000..4b3cdb0 Binary files /dev/null and b/frontend/static/img/glitter/He-Died-For-you.gif differ diff --git a/frontend/static/img/glitter/Heart-Underwear.gif b/frontend/static/img/glitter/Heart-Underwear.gif new file mode 100644 index 0000000..deeed80 Binary files /dev/null and b/frontend/static/img/glitter/Heart-Underwear.gif differ diff --git a/frontend/static/img/glitter/Hello-Blue-Roses.gif b/frontend/static/img/glitter/Hello-Blue-Roses.gif new file mode 100644 index 0000000..504a268 Binary files /dev/null and b/frontend/static/img/glitter/Hello-Blue-Roses.gif differ diff --git a/frontend/static/img/glitter/Hello-Rose.gif b/frontend/static/img/glitter/Hello-Rose.gif new file mode 100644 index 0000000..b6e8de2 Binary files /dev/null and b/frontend/static/img/glitter/Hello-Rose.gif differ diff --git a/frontend/static/img/glitter/Here-Big-Boy.gif b/frontend/static/img/glitter/Here-Big-Boy.gif new file mode 100644 index 0000000..9fcc7f3 Binary files /dev/null and b/frontend/static/img/glitter/Here-Big-Boy.gif differ diff --git a/frontend/static/img/glitter/Hi-Sexy-Red.gif b/frontend/static/img/glitter/Hi-Sexy-Red.gif new file mode 100644 index 0000000..e453dc0 Binary files /dev/null and b/frontend/static/img/glitter/Hi-Sexy-Red.gif differ diff --git a/frontend/static/img/glitter/Hollow-Heart-Red.gif b/frontend/static/img/glitter/Hollow-Heart-Red.gif new file mode 100644 index 0000000..422ecfd Binary files /dev/null and b/frontend/static/img/glitter/Hollow-Heart-Red.gif differ diff --git a/frontend/static/img/glitter/Honey.gif b/frontend/static/img/glitter/Honey.gif new file mode 100644 index 0000000..5d08f36 Binary files /dev/null and b/frontend/static/img/glitter/Honey.gif differ diff --git a/frontend/static/img/glitter/Hot-Jail-Babe.gif b/frontend/static/img/glitter/Hot-Jail-Babe.gif new file mode 100644 index 0000000..f2b3cd3 Binary files /dev/null and b/frontend/static/img/glitter/Hot-Jail-Babe.gif differ diff --git a/frontend/static/img/glitter/Hot-Long-Hair.gif b/frontend/static/img/glitter/Hot-Long-Hair.gif new file mode 100644 index 0000000..74e6ea6 Binary files /dev/null and b/frontend/static/img/glitter/Hot-Long-Hair.gif differ diff --git a/frontend/static/img/glitter/Hot-Pink-Bikini.gif b/frontend/static/img/glitter/Hot-Pink-Bikini.gif new file mode 100644 index 0000000..fb71829 Binary files /dev/null and b/frontend/static/img/glitter/Hot-Pink-Bikini.gif differ diff --git a/frontend/static/img/glitter/Hot-Pink-Lady.gif b/frontend/static/img/glitter/Hot-Pink-Lady.gif new file mode 100644 index 0000000..b02510e Binary files /dev/null and b/frontend/static/img/glitter/Hot-Pink-Lady.gif differ diff --git a/frontend/static/img/glitter/Hot-Stuff.gif b/frontend/static/img/glitter/Hot-Stuff.gif new file mode 100644 index 0000000..42360cc Binary files /dev/null and b/frontend/static/img/glitter/Hot-Stuff.gif differ diff --git a/frontend/static/img/glitter/Houston-Texans.gif b/frontend/static/img/glitter/Houston-Texans.gif new file mode 100644 index 0000000..3dfd6a0 Binary files /dev/null and b/frontend/static/img/glitter/Houston-Texans.gif differ diff --git a/frontend/static/img/glitter/Howdy-Hat.gif b/frontend/static/img/glitter/Howdy-Hat.gif new file mode 100644 index 0000000..7c56c55 Binary files /dev/null and b/frontend/static/img/glitter/Howdy-Hat.gif differ diff --git a/frontend/static/img/glitter/I-Love-Mickey.gif b/frontend/static/img/glitter/I-Love-Mickey.gif new file mode 100644 index 0000000..02de04b Binary files /dev/null and b/frontend/static/img/glitter/I-Love-Mickey.gif differ diff --git a/frontend/static/img/glitter/Im-such-a-Bad-Girl.gif b/frontend/static/img/glitter/Im-such-a-Bad-Girl.gif new file mode 100644 index 0000000..80b206e Binary files /dev/null and b/frontend/static/img/glitter/Im-such-a-Bad-Girl.gif differ diff --git a/frontend/static/img/glitter/Jazz.gif b/frontend/static/img/glitter/Jazz.gif new file mode 100644 index 0000000..38c0863 Binary files /dev/null and b/frontend/static/img/glitter/Jazz.gif differ diff --git a/frontend/static/img/glitter/Kansas-City-Chiefs.gif b/frontend/static/img/glitter/Kansas-City-Chiefs.gif new file mode 100644 index 0000000..877eda4 Binary files /dev/null and b/frontend/static/img/glitter/Kansas-City-Chiefs.gif differ diff --git a/frontend/static/img/glitter/Kinky-Care-Bear.gif b/frontend/static/img/glitter/Kinky-Care-Bear.gif new file mode 100644 index 0000000..0f1c031 Binary files /dev/null and b/frontend/static/img/glitter/Kinky-Care-Bear.gif differ diff --git a/frontend/static/img/glitter/Kite-Care-Bear.gif b/frontend/static/img/glitter/Kite-Care-Bear.gif new file mode 100644 index 0000000..57373ff Binary files /dev/null and b/frontend/static/img/glitter/Kite-Care-Bear.gif differ diff --git a/frontend/static/img/glitter/Kumba.gif b/frontend/static/img/glitter/Kumba.gif new file mode 100644 index 0000000..eb40697 Binary files /dev/null and b/frontend/static/img/glitter/Kumba.gif differ diff --git a/frontend/static/img/glitter/LETS-KISS.gif b/frontend/static/img/glitter/LETS-KISS.gif new file mode 100644 index 0000000..c779387 Binary files /dev/null and b/frontend/static/img/glitter/LETS-KISS.gif differ diff --git a/frontend/static/img/glitter/Leopard-Legs.gif b/frontend/static/img/glitter/Leopard-Legs.gif new file mode 100644 index 0000000..1e3dabd Binary files /dev/null and b/frontend/static/img/glitter/Leopard-Legs.gif differ diff --git a/frontend/static/img/glitter/Live-For-Jesus.gif b/frontend/static/img/glitter/Live-For-Jesus.gif new file mode 100644 index 0000000..9682997 Binary files /dev/null and b/frontend/static/img/glitter/Live-For-Jesus.gif differ diff --git a/frontend/static/img/glitter/Long-Legs.gif b/frontend/static/img/glitter/Long-Legs.gif new file mode 100644 index 0000000..9539eca Binary files /dev/null and b/frontend/static/img/glitter/Long-Legs.gif differ diff --git a/frontend/static/img/glitter/Los-Angeles-Dodgers.gif b/frontend/static/img/glitter/Los-Angeles-Dodgers.gif new file mode 100644 index 0000000..d12b060 Binary files /dev/null and b/frontend/static/img/glitter/Los-Angeles-Dodgers.gif differ diff --git a/frontend/static/img/glitter/Love-The-Lord.gif b/frontend/static/img/glitter/Love-The-Lord.gif new file mode 100644 index 0000000..c9fd5e3 Binary files /dev/null and b/frontend/static/img/glitter/Love-The-Lord.gif differ diff --git a/frontend/static/img/glitter/Marilyn-Silver-Sparkle-1.gif b/frontend/static/img/glitter/Marilyn-Silver-Sparkle-1.gif new file mode 100644 index 0000000..8d9a5f0 Binary files /dev/null and b/frontend/static/img/glitter/Marilyn-Silver-Sparkle-1.gif differ diff --git a/frontend/static/img/glitter/Marilyn-Silver-Sparkle.gif b/frontend/static/img/glitter/Marilyn-Silver-Sparkle.gif new file mode 100644 index 0000000..8d9a5f0 Binary files /dev/null and b/frontend/static/img/glitter/Marilyn-Silver-Sparkle.gif differ diff --git a/frontend/static/img/glitter/Mickey.gif b/frontend/static/img/glitter/Mickey.gif new file mode 100644 index 0000000..4b44721 Binary files /dev/null and b/frontend/static/img/glitter/Mickey.gif differ diff --git a/frontend/static/img/glitter/Minnesota-Wild.gif b/frontend/static/img/glitter/Minnesota-Wild.gif new file mode 100644 index 0000000..ed9d7ea Binary files /dev/null and b/frontend/static/img/glitter/Minnesota-Wild.gif differ diff --git a/frontend/static/img/glitter/Muscle-Legs.gif b/frontend/static/img/glitter/Muscle-Legs.gif new file mode 100644 index 0000000..5d0db15 Binary files /dev/null and b/frontend/static/img/glitter/Muscle-Legs.gif differ diff --git a/frontend/static/img/glitter/Mushroom-Fairy.gif b/frontend/static/img/glitter/Mushroom-Fairy.gif new file mode 100644 index 0000000..f036ffc Binary files /dev/null and b/frontend/static/img/glitter/Mushroom-Fairy.gif differ diff --git a/frontend/static/img/glitter/Music-Note-Glitter.gif b/frontend/static/img/glitter/Music-Note-Glitter.gif new file mode 100644 index 0000000..476b44f Binary files /dev/null and b/frontend/static/img/glitter/Music-Note-Glitter.gif differ diff --git a/frontend/static/img/glitter/Naught-Girl-Grey.gif b/frontend/static/img/glitter/Naught-Girl-Grey.gif new file mode 100644 index 0000000..fe44b8e Binary files /dev/null and b/frontend/static/img/glitter/Naught-Girl-Grey.gif differ diff --git a/frontend/static/img/glitter/Naughty-Pink.gif b/frontend/static/img/glitter/Naughty-Pink.gif new file mode 100644 index 0000000..7adaf1d Binary files /dev/null and b/frontend/static/img/glitter/Naughty-Pink.gif differ diff --git a/frontend/static/img/glitter/New-England-Patriots.gif b/frontend/static/img/glitter/New-England-Patriots.gif new file mode 100644 index 0000000..fe045b9 Binary files /dev/null and b/frontend/static/img/glitter/New-England-Patriots.gif differ diff --git a/frontend/static/img/glitter/New-York-Yankees.gif b/frontend/static/img/glitter/New-York-Yankees.gif new file mode 100644 index 0000000..ea41a2a Binary files /dev/null and b/frontend/static/img/glitter/New-York-Yankees.gif differ diff --git a/frontend/static/img/glitter/Nice-Brow.gif b/frontend/static/img/glitter/Nice-Brow.gif new file mode 100644 index 0000000..68ae53a Binary files /dev/null and b/frontend/static/img/glitter/Nice-Brow.gif differ diff --git a/frontend/static/img/glitter/Ninja-Turtle.gif b/frontend/static/img/glitter/Ninja-Turtle.gif new file mode 100644 index 0000000..9a53c4e Binary files /dev/null and b/frontend/static/img/glitter/Ninja-Turtle.gif differ diff --git a/frontend/static/img/glitter/Oh-My.gif b/frontend/static/img/glitter/Oh-My.gif new file mode 100644 index 0000000..d47ad8c Binary files /dev/null and b/frontend/static/img/glitter/Oh-My.gif differ diff --git a/frontend/static/img/glitter/Orange-Eyes.gif b/frontend/static/img/glitter/Orange-Eyes.gif new file mode 100644 index 0000000..fc46087 Binary files /dev/null and b/frontend/static/img/glitter/Orange-Eyes.gif differ diff --git a/frontend/static/img/glitter/Orange-Love.gif b/frontend/static/img/glitter/Orange-Love.gif new file mode 100644 index 0000000..57b74e8 Binary files /dev/null and b/frontend/static/img/glitter/Orange-Love.gif differ diff --git a/frontend/static/img/glitter/Overlooking-Fairy.gif b/frontend/static/img/glitter/Overlooking-Fairy.gif new file mode 100644 index 0000000..3638e48 Binary files /dev/null and b/frontend/static/img/glitter/Overlooking-Fairy.gif differ diff --git a/frontend/static/img/glitter/Palm-Tree.gif b/frontend/static/img/glitter/Palm-Tree.gif new file mode 100644 index 0000000..f7aa567 Binary files /dev/null and b/frontend/static/img/glitter/Palm-Tree.gif differ diff --git a/frontend/static/img/glitter/Parental-Advisor.gif b/frontend/static/img/glitter/Parental-Advisor.gif new file mode 100644 index 0000000..8348842 Binary files /dev/null and b/frontend/static/img/glitter/Parental-Advisor.gif differ diff --git a/frontend/static/img/glitter/Philadelphia-Eagles-1.gif b/frontend/static/img/glitter/Philadelphia-Eagles-1.gif new file mode 100644 index 0000000..a27c51a Binary files /dev/null and b/frontend/static/img/glitter/Philadelphia-Eagles-1.gif differ diff --git a/frontend/static/img/glitter/Philadelphia-Eagles.gif b/frontend/static/img/glitter/Philadelphia-Eagles.gif new file mode 100644 index 0000000..a27c51a Binary files /dev/null and b/frontend/static/img/glitter/Philadelphia-Eagles.gif differ diff --git a/frontend/static/img/glitter/Philadelphia-Phillies.gif b/frontend/static/img/glitter/Philadelphia-Phillies.gif new file mode 100644 index 0000000..7c4691e Binary files /dev/null and b/frontend/static/img/glitter/Philadelphia-Phillies.gif differ diff --git a/frontend/static/img/glitter/Phoenix-Coyotes.gif b/frontend/static/img/glitter/Phoenix-Coyotes.gif new file mode 100644 index 0000000..244c5a0 Binary files /dev/null and b/frontend/static/img/glitter/Phoenix-Coyotes.gif differ diff --git a/frontend/static/img/glitter/Pink-Bitches.gif b/frontend/static/img/glitter/Pink-Bitches.gif new file mode 100644 index 0000000..ad8b47c Binary files /dev/null and b/frontend/static/img/glitter/Pink-Bitches.gif differ diff --git a/frontend/static/img/glitter/Pink-Fantashy-Hearts.gif b/frontend/static/img/glitter/Pink-Fantashy-Hearts.gif new file mode 100644 index 0000000..46fc917 Binary files /dev/null and b/frontend/static/img/glitter/Pink-Fantashy-Hearts.gif differ diff --git a/frontend/static/img/glitter/Pink-Glitter-Star.gif b/frontend/static/img/glitter/Pink-Glitter-Star.gif new file mode 100644 index 0000000..158c95f Binary files /dev/null and b/frontend/static/img/glitter/Pink-Glitter-Star.gif differ diff --git a/frontend/static/img/glitter/Pink-Godess.gif b/frontend/static/img/glitter/Pink-Godess.gif new file mode 100644 index 0000000..e356dbb Binary files /dev/null and b/frontend/static/img/glitter/Pink-Godess.gif differ diff --git a/frontend/static/img/glitter/Pink-Heart-Dolphins.gif b/frontend/static/img/glitter/Pink-Heart-Dolphins.gif new file mode 100644 index 0000000..618fc82 Binary files /dev/null and b/frontend/static/img/glitter/Pink-Heart-Dolphins.gif differ diff --git a/frontend/static/img/glitter/Pink-Lips-High-Heals.gif b/frontend/static/img/glitter/Pink-Lips-High-Heals.gif new file mode 100644 index 0000000..0983265 Binary files /dev/null and b/frontend/static/img/glitter/Pink-Lips-High-Heals.gif differ diff --git a/frontend/static/img/glitter/Pink-Shoe.gif b/frontend/static/img/glitter/Pink-Shoe.gif new file mode 100644 index 0000000..efc890f Binary files /dev/null and b/frontend/static/img/glitter/Pink-Shoe.gif differ diff --git a/frontend/static/img/glitter/Pittsburgh-Penguins.gif b/frontend/static/img/glitter/Pittsburgh-Penguins.gif new file mode 100644 index 0000000..cae962d Binary files /dev/null and b/frontend/static/img/glitter/Pittsburgh-Penguins.gif differ diff --git a/frontend/static/img/glitter/Playboy-029.gif b/frontend/static/img/glitter/Playboy-029.gif new file mode 100644 index 0000000..9b55b44 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-029.gif differ diff --git a/frontend/static/img/glitter/Playboy-032.gif b/frontend/static/img/glitter/Playboy-032.gif new file mode 100644 index 0000000..1b71531 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-032.gif differ diff --git a/frontend/static/img/glitter/Playboy-036.gif b/frontend/static/img/glitter/Playboy-036.gif new file mode 100644 index 0000000..19dd4b0 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-036.gif differ diff --git a/frontend/static/img/glitter/Playboy-045.gif b/frontend/static/img/glitter/Playboy-045.gif new file mode 100644 index 0000000..5ef3485 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-045.gif differ diff --git a/frontend/static/img/glitter/Playboy-047.gif b/frontend/static/img/glitter/Playboy-047.gif new file mode 100644 index 0000000..a65c97b Binary files /dev/null and b/frontend/static/img/glitter/Playboy-047.gif differ diff --git a/frontend/static/img/glitter/Playboy-24.gif b/frontend/static/img/glitter/Playboy-24.gif new file mode 100644 index 0000000..6c051d7 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-24.gif differ diff --git a/frontend/static/img/glitter/Playboy-4.gif b/frontend/static/img/glitter/Playboy-4.gif new file mode 100644 index 0000000..deff339 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-4.gif differ diff --git a/frontend/static/img/glitter/Playboy-5.gif b/frontend/static/img/glitter/Playboy-5.gif new file mode 100644 index 0000000..1d75b40 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-5.gif differ diff --git a/frontend/static/img/glitter/Playboy-9.gif b/frontend/static/img/glitter/Playboy-9.gif new file mode 100644 index 0000000..989d51f Binary files /dev/null and b/frontend/static/img/glitter/Playboy-9.gif differ diff --git a/frontend/static/img/glitter/Playboy-Blue.gif b/frontend/static/img/glitter/Playboy-Blue.gif new file mode 100644 index 0000000..7a72b49 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-Blue.gif differ diff --git a/frontend/static/img/glitter/Playboy-Bunny-Pink.gif b/frontend/static/img/glitter/Playboy-Bunny-Pink.gif new file mode 100644 index 0000000..51a7cbc Binary files /dev/null and b/frontend/static/img/glitter/Playboy-Bunny-Pink.gif differ diff --git a/frontend/static/img/glitter/Playboy-Orange.gif b/frontend/static/img/glitter/Playboy-Orange.gif new file mode 100644 index 0000000..053b4ef Binary files /dev/null and b/frontend/static/img/glitter/Playboy-Orange.gif differ diff --git a/frontend/static/img/glitter/Playboy-Pink.gif b/frontend/static/img/glitter/Playboy-Pink.gif new file mode 100644 index 0000000..a395a0e Binary files /dev/null and b/frontend/static/img/glitter/Playboy-Pink.gif differ diff --git a/frontend/static/img/glitter/Playboy-Purple.gif b/frontend/static/img/glitter/Playboy-Purple.gif new file mode 100644 index 0000000..1d75b40 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-Purple.gif differ diff --git a/frontend/static/img/glitter/Playboy-Silver.gif b/frontend/static/img/glitter/Playboy-Silver.gif new file mode 100644 index 0000000..9b55b44 Binary files /dev/null and b/frontend/static/img/glitter/Playboy-Silver.gif differ diff --git a/frontend/static/img/glitter/Potty-Head-Care-Bear.gif b/frontend/static/img/glitter/Potty-Head-Care-Bear.gif new file mode 100644 index 0000000..04d38b2 Binary files /dev/null and b/frontend/static/img/glitter/Potty-Head-Care-Bear.gif differ diff --git a/frontend/static/img/glitter/Powerpuff-Blossom.gif b/frontend/static/img/glitter/Powerpuff-Blossom.gif new file mode 100644 index 0000000..38b5a56 Binary files /dev/null and b/frontend/static/img/glitter/Powerpuff-Blossom.gif differ diff --git a/frontend/static/img/glitter/Princess-Fairy.gif b/frontend/static/img/glitter/Princess-Fairy.gif new file mode 100644 index 0000000..a433d81 Binary files /dev/null and b/frontend/static/img/glitter/Princess-Fairy.gif differ diff --git a/frontend/static/img/glitter/Purple-Flower-and-Butterfly.gif b/frontend/static/img/glitter/Purple-Flower-and-Butterfly.gif new file mode 100644 index 0000000..36ce940 Binary files /dev/null and b/frontend/static/img/glitter/Purple-Flower-and-Butterfly.gif differ diff --git a/frontend/static/img/glitter/Purple-Gal.gif b/frontend/static/img/glitter/Purple-Gal.gif new file mode 100644 index 0000000..b462d75 Binary files /dev/null and b/frontend/static/img/glitter/Purple-Gal.gif differ diff --git a/frontend/static/img/glitter/Purple-Glitter-Flower.gif b/frontend/static/img/glitter/Purple-Glitter-Flower.gif new file mode 100644 index 0000000..bac8400 Binary files /dev/null and b/frontend/static/img/glitter/Purple-Glitter-Flower.gif differ diff --git a/frontend/static/img/glitter/Red-Flower.gif b/frontend/static/img/glitter/Red-Flower.gif new file mode 100644 index 0000000..8bc8442 Binary files /dev/null and b/frontend/static/img/glitter/Red-Flower.gif differ diff --git a/frontend/static/img/glitter/Red-Hair-Glitter.gif b/frontend/static/img/glitter/Red-Hair-Glitter.gif new file mode 100644 index 0000000..60fbd97 Binary files /dev/null and b/frontend/static/img/glitter/Red-Hair-Glitter.gif differ diff --git a/frontend/static/img/glitter/Red-Haze-Fairy.gif b/frontend/static/img/glitter/Red-Haze-Fairy.gif new file mode 100644 index 0000000..83013da Binary files /dev/null and b/frontend/static/img/glitter/Red-Haze-Fairy.gif differ diff --git a/frontend/static/img/glitter/Red-Head-Goth.gif b/frontend/static/img/glitter/Red-Head-Goth.gif new file mode 100644 index 0000000..e6b6986 Binary files /dev/null and b/frontend/static/img/glitter/Red-Head-Goth.gif differ diff --git a/frontend/static/img/glitter/Red-Rose-Glitter.gif b/frontend/static/img/glitter/Red-Rose-Glitter.gif new file mode 100644 index 0000000..a434776 Binary files /dev/null and b/frontend/static/img/glitter/Red-Rose-Glitter.gif differ diff --git a/frontend/static/img/glitter/Red-Umbrella.gif b/frontend/static/img/glitter/Red-Umbrella.gif new file mode 100644 index 0000000..472a563 Binary files /dev/null and b/frontend/static/img/glitter/Red-Umbrella.gif differ diff --git a/frontend/static/img/glitter/Res-Fantasy-Sky.gif b/frontend/static/img/glitter/Res-Fantasy-Sky.gif new file mode 100644 index 0000000..c6dccef Binary files /dev/null and b/frontend/static/img/glitter/Res-Fantasy-Sky.gif differ diff --git a/frontend/static/img/glitter/Riding-Roses.gif b/frontend/static/img/glitter/Riding-Roses.gif new file mode 100644 index 0000000..b67223c Binary files /dev/null and b/frontend/static/img/glitter/Riding-Roses.gif differ diff --git a/frontend/static/img/glitter/Rose.gif b/frontend/static/img/glitter/Rose.gif new file mode 100644 index 0000000..8687edf Binary files /dev/null and b/frontend/static/img/glitter/Rose.gif differ diff --git a/frontend/static/img/glitter/Samurai-Chick.gif b/frontend/static/img/glitter/Samurai-Chick.gif new file mode 100644 index 0000000..981e847 Binary files /dev/null and b/frontend/static/img/glitter/Samurai-Chick.gif differ diff --git a/frontend/static/img/glitter/Set-Me-free.gif b/frontend/static/img/glitter/Set-Me-free.gif new file mode 100644 index 0000000..802343f Binary files /dev/null and b/frontend/static/img/glitter/Set-Me-free.gif differ diff --git a/frontend/static/img/glitter/Sexy-Bitch-Leoppard-1.gif b/frontend/static/img/glitter/Sexy-Bitch-Leoppard-1.gif new file mode 100644 index 0000000..4665066 Binary files /dev/null and b/frontend/static/img/glitter/Sexy-Bitch-Leoppard-1.gif differ diff --git a/frontend/static/img/glitter/Sexy-Bitch-Leoppard.gif b/frontend/static/img/glitter/Sexy-Bitch-Leoppard.gif new file mode 100644 index 0000000..4665066 Binary files /dev/null and b/frontend/static/img/glitter/Sexy-Bitch-Leoppard.gif differ diff --git a/frontend/static/img/glitter/Sexy-Black-White.gif b/frontend/static/img/glitter/Sexy-Black-White.gif new file mode 100644 index 0000000..b04cc5b Binary files /dev/null and b/frontend/static/img/glitter/Sexy-Black-White.gif differ diff --git a/frontend/static/img/glitter/Sexy-Blue-Hearts.gif b/frontend/static/img/glitter/Sexy-Blue-Hearts.gif new file mode 100644 index 0000000..55d93cc Binary files /dev/null and b/frontend/static/img/glitter/Sexy-Blue-Hearts.gif differ diff --git a/frontend/static/img/glitter/Sexy-Cape.gif b/frontend/static/img/glitter/Sexy-Cape.gif new file mode 100644 index 0000000..02c8e66 Binary files /dev/null and b/frontend/static/img/glitter/Sexy-Cape.gif differ diff --git a/frontend/static/img/glitter/Sexy-Flower-Bed.gif b/frontend/static/img/glitter/Sexy-Flower-Bed.gif new file mode 100644 index 0000000..3489cda Binary files /dev/null and b/frontend/static/img/glitter/Sexy-Flower-Bed.gif differ diff --git a/frontend/static/img/glitter/Sexy-Silver.gif b/frontend/static/img/glitter/Sexy-Silver.gif new file mode 100644 index 0000000..3a9e95c Binary files /dev/null and b/frontend/static/img/glitter/Sexy-Silver.gif differ diff --git a/frontend/static/img/glitter/Sexy-Star.gif b/frontend/static/img/glitter/Sexy-Star.gif new file mode 100644 index 0000000..155cee5 Binary files /dev/null and b/frontend/static/img/glitter/Sexy-Star.gif differ diff --git a/frontend/static/img/glitter/Sexy-White-Hair.gif b/frontend/static/img/glitter/Sexy-White-Hair.gif new file mode 100644 index 0000000..71f8eae Binary files /dev/null and b/frontend/static/img/glitter/Sexy-White-Hair.gif differ diff --git a/frontend/static/img/glitter/Sharing-Fruit.gif b/frontend/static/img/glitter/Sharing-Fruit.gif new file mode 100644 index 0000000..63f6106 Binary files /dev/null and b/frontend/static/img/glitter/Sharing-Fruit.gif differ diff --git a/frontend/static/img/glitter/Show-It-To-Me.gif b/frontend/static/img/glitter/Show-It-To-Me.gif new file mode 100644 index 0000000..b4040ac Binary files /dev/null and b/frontend/static/img/glitter/Show-It-To-Me.gif differ diff --git a/frontend/static/img/glitter/Showing-Sexy-Luv.gif b/frontend/static/img/glitter/Showing-Sexy-Luv.gif new file mode 100644 index 0000000..b2a2ec7 Binary files /dev/null and b/frontend/static/img/glitter/Showing-Sexy-Luv.gif differ diff --git a/frontend/static/img/glitter/Silver-Cross.gif b/frontend/static/img/glitter/Silver-Cross.gif new file mode 100644 index 0000000..2392eba Binary files /dev/null and b/frontend/static/img/glitter/Silver-Cross.gif differ diff --git a/frontend/static/img/glitter/Silver-Flower-Face.gif b/frontend/static/img/glitter/Silver-Flower-Face.gif new file mode 100644 index 0000000..8f14566 Binary files /dev/null and b/frontend/static/img/glitter/Silver-Flower-Face.gif differ diff --git a/frontend/static/img/glitter/Simply-Pink.gif b/frontend/static/img/glitter/Simply-Pink.gif new file mode 100644 index 0000000..fb71829 Binary files /dev/null and b/frontend/static/img/glitter/Simply-Pink.gif differ diff --git a/frontend/static/img/glitter/Sleek-Red.gif b/frontend/static/img/glitter/Sleek-Red.gif new file mode 100644 index 0000000..868f645 Binary files /dev/null and b/frontend/static/img/glitter/Sleek-Red.gif differ diff --git a/frontend/static/img/glitter/Soft-Ice-Cream.gif b/frontend/static/img/glitter/Soft-Ice-Cream.gif new file mode 100644 index 0000000..f1766f2 Binary files /dev/null and b/frontend/static/img/glitter/Soft-Ice-Cream.gif differ diff --git a/frontend/static/img/glitter/Some-Like-It-hot.gif b/frontend/static/img/glitter/Some-Like-It-hot.gif new file mode 100644 index 0000000..0a703af Binary files /dev/null and b/frontend/static/img/glitter/Some-Like-It-hot.gif differ diff --git a/frontend/static/img/glitter/Spanish-Beauty.gif b/frontend/static/img/glitter/Spanish-Beauty.gif new file mode 100644 index 0000000..45d7249 Binary files /dev/null and b/frontend/static/img/glitter/Spanish-Beauty.gif differ diff --git a/frontend/static/img/glitter/Spank-Me-1.gif b/frontend/static/img/glitter/Spank-Me-1.gif new file mode 100644 index 0000000..197ba68 Binary files /dev/null and b/frontend/static/img/glitter/Spank-Me-1.gif differ diff --git a/frontend/static/img/glitter/Spank-Me.gif b/frontend/static/img/glitter/Spank-Me.gif new file mode 100644 index 0000000..197ba68 Binary files /dev/null and b/frontend/static/img/glitter/Spank-Me.gif differ diff --git a/frontend/static/img/glitter/St-Louis-Rams.gif b/frontend/static/img/glitter/St-Louis-Rams.gif new file mode 100644 index 0000000..0b4b827 Binary files /dev/null and b/frontend/static/img/glitter/St-Louis-Rams.gif differ diff --git a/frontend/static/img/glitter/Sucker.gif b/frontend/static/img/glitter/Sucker.gif new file mode 100644 index 0000000..bc00e1c Binary files /dev/null and b/frontend/static/img/glitter/Sucker.gif differ diff --git a/frontend/static/img/glitter/Tampa-Bay-Devilrays.gif b/frontend/static/img/glitter/Tampa-Bay-Devilrays.gif new file mode 100644 index 0000000..410fc4f Binary files /dev/null and b/frontend/static/img/glitter/Tampa-Bay-Devilrays.gif differ diff --git a/frontend/static/img/glitter/Tear-Drop-Fairy-1.gif b/frontend/static/img/glitter/Tear-Drop-Fairy-1.gif new file mode 100644 index 0000000..59672e4 Binary files /dev/null and b/frontend/static/img/glitter/Tear-Drop-Fairy-1.gif differ diff --git a/frontend/static/img/glitter/Tear-Drop-Fairy.gif b/frontend/static/img/glitter/Tear-Drop-Fairy.gif new file mode 100644 index 0000000..59672e4 Binary files /dev/null and b/frontend/static/img/glitter/Tear-Drop-Fairy.gif differ diff --git a/frontend/static/img/glitter/Teddy-Bear-Glitter.gif b/frontend/static/img/glitter/Teddy-Bear-Glitter.gif new file mode 100644 index 0000000..26a49c1 Binary files /dev/null and b/frontend/static/img/glitter/Teddy-Bear-Glitter.gif differ diff --git a/frontend/static/img/glitter/Texas-Rangers.gif b/frontend/static/img/glitter/Texas-Rangers.gif new file mode 100644 index 0000000..272bc07 Binary files /dev/null and b/frontend/static/img/glitter/Texas-Rangers.gif differ diff --git a/frontend/static/img/glitter/Thank-You-Friend.gif b/frontend/static/img/glitter/Thank-You-Friend.gif new file mode 100644 index 0000000..1e754ca Binary files /dev/null and b/frontend/static/img/glitter/Thank-You-Friend.gif differ diff --git a/frontend/static/img/glitter/Tinkerbell-Dreamy.gif b/frontend/static/img/glitter/Tinkerbell-Dreamy.gif new file mode 100644 index 0000000..407ddb8 Binary files /dev/null and b/frontend/static/img/glitter/Tinkerbell-Dreamy.gif differ diff --git a/frontend/static/img/glitter/Tinkerbell-Flying.gif b/frontend/static/img/glitter/Tinkerbell-Flying.gif new file mode 100644 index 0000000..92bbcf7 Binary files /dev/null and b/frontend/static/img/glitter/Tinkerbell-Flying.gif differ diff --git a/frontend/static/img/glitter/Tinkerbell-Green-Dress.gif b/frontend/static/img/glitter/Tinkerbell-Green-Dress.gif new file mode 100644 index 0000000..9fdfe14 Binary files /dev/null and b/frontend/static/img/glitter/Tinkerbell-Green-Dress.gif differ diff --git a/frontend/static/img/glitter/Tinkerbell.gif b/frontend/static/img/glitter/Tinkerbell.gif new file mode 100644 index 0000000..fe44edd Binary files /dev/null and b/frontend/static/img/glitter/Tinkerbell.gif differ diff --git a/frontend/static/img/glitter/Tired-Puppy.gif b/frontend/static/img/glitter/Tired-Puppy.gif new file mode 100644 index 0000000..d47a6d7 Binary files /dev/null and b/frontend/static/img/glitter/Tired-Puppy.gif differ diff --git a/frontend/static/img/glitter/Tweety-Bird-Dancing.gif b/frontend/static/img/glitter/Tweety-Bird-Dancing.gif new file mode 100644 index 0000000..b3989fc Binary files /dev/null and b/frontend/static/img/glitter/Tweety-Bird-Dancing.gif differ diff --git a/frontend/static/img/glitter/Two-Sexy-Gals.gif b/frontend/static/img/glitter/Two-Sexy-Gals.gif new file mode 100644 index 0000000..f14e388 Binary files /dev/null and b/frontend/static/img/glitter/Two-Sexy-Gals.gif differ diff --git a/frontend/static/img/glitter/Vibrate-Me-1.gif b/frontend/static/img/glitter/Vibrate-Me-1.gif new file mode 100644 index 0000000..bfd2da4 Binary files /dev/null and b/frontend/static/img/glitter/Vibrate-Me-1.gif differ diff --git a/frontend/static/img/glitter/Vibrate-Me.gif b/frontend/static/img/glitter/Vibrate-Me.gif new file mode 100644 index 0000000..bfd2da4 Binary files /dev/null and b/frontend/static/img/glitter/Vibrate-Me.gif differ diff --git a/frontend/static/img/glitter/Washington-Redskins.gif b/frontend/static/img/glitter/Washington-Redskins.gif new file mode 100644 index 0000000..3d88595 Binary files /dev/null and b/frontend/static/img/glitter/Washington-Redskins.gif differ diff --git a/frontend/static/img/glitter/Wings-2.gif b/frontend/static/img/glitter/Wings-2.gif new file mode 100644 index 0000000..184d22e Binary files /dev/null and b/frontend/static/img/glitter/Wings-2.gif differ diff --git a/frontend/static/img/glitter/Wings-5.gif b/frontend/static/img/glitter/Wings-5.gif new file mode 100644 index 0000000..e27582b Binary files /dev/null and b/frontend/static/img/glitter/Wings-5.gif differ diff --git a/frontend/static/img/glitter/Winnie-Glitter-2.gif b/frontend/static/img/glitter/Winnie-Glitter-2.gif new file mode 100644 index 0000000..aecb22a Binary files /dev/null and b/frontend/static/img/glitter/Winnie-Glitter-2.gif differ diff --git a/frontend/static/img/glitter/Winnie-Glitter.gif b/frontend/static/img/glitter/Winnie-Glitter.gif new file mode 100644 index 0000000..d5a0e03 Binary files /dev/null and b/frontend/static/img/glitter/Winnie-Glitter.gif differ diff --git a/frontend/static/img/glitter/XoXo-Hearts.gif b/frontend/static/img/glitter/XoXo-Hearts.gif new file mode 100644 index 0000000..ae504fa Binary files /dev/null and b/frontend/static/img/glitter/XoXo-Hearts.gif differ diff --git a/frontend/static/img/glitter/Yellow-Bird.gif b/frontend/static/img/glitter/Yellow-Bird.gif new file mode 100644 index 0000000..9f9973d Binary files /dev/null and b/frontend/static/img/glitter/Yellow-Bird.gif differ diff --git a/frontend/static/img/glitter/You-Want-It-Come-and-Get-It.gif b/frontend/static/img/glitter/You-Want-It-Come-and-Get-It.gif new file mode 100644 index 0000000..8b567ab Binary files /dev/null and b/frontend/static/img/glitter/You-Want-It-Come-and-Get-It.gif differ diff --git a/frontend/static/img/glitter/Young-Red-Witch.gif b/frontend/static/img/glitter/Young-Red-Witch.gif new file mode 100644 index 0000000..40ac67b Binary files /dev/null and b/frontend/static/img/glitter/Young-Red-Witch.gif differ diff --git a/frontend/static/img/glitter/aaliyah.gif b/frontend/static/img/glitter/aaliyah.gif new file mode 100644 index 0000000..5e7b4c7 Binary files /dev/null and b/frontend/static/img/glitter/aaliyah.gif differ diff --git a/frontend/static/img/glitter/ani-sparkle-fountain.gif b/frontend/static/img/glitter/ani-sparkle-fountain.gif new file mode 100644 index 0000000..0d835c8 Binary files /dev/null and b/frontend/static/img/glitter/ani-sparkle-fountain.gif differ diff --git a/frontend/static/img/glitter/awkward_pink_purple_glitter_wiggle.gif b/frontend/static/img/glitter/awkward_pink_purple_glitter_wiggle.gif new file mode 100644 index 0000000..cdc26f2 Binary files /dev/null and b/frontend/static/img/glitter/awkward_pink_purple_glitter_wiggle.gif differ diff --git a/frontend/static/img/glitter/babe-bikini-butt-ass-face.gif b/frontend/static/img/glitter/babe-bikini-butt-ass-face.gif new file mode 100644 index 0000000..c7538f4 Binary files /dev/null and b/frontend/static/img/glitter/babe-bikini-butt-ass-face.gif differ diff --git a/frontend/static/img/glitter/beautiful-unicorn-magical-sparkle.gif b/frontend/static/img/glitter/beautiful-unicorn-magical-sparkle.gif new file mode 100644 index 0000000..03f6264 Binary files /dev/null and b/frontend/static/img/glitter/beautiful-unicorn-magical-sparkle.gif differ diff --git a/frontend/static/img/glitter/beauty-red-rose-sparkle.gif b/frontend/static/img/glitter/beauty-red-rose-sparkle.gif new file mode 100644 index 0000000..ef81dbb Binary files /dev/null and b/frontend/static/img/glitter/beauty-red-rose-sparkle.gif differ diff --git a/frontend/static/img/glitter/blonde_gold_sparkle.gif b/frontend/static/img/glitter/blonde_gold_sparkle.gif new file mode 100644 index 0000000..a47b441 Binary files /dev/null and b/frontend/static/img/glitter/blonde_gold_sparkle.gif differ diff --git a/frontend/static/img/glitter/christian_symbol07.gif b/frontend/static/img/glitter/christian_symbol07.gif new file mode 100644 index 0000000..5e7f9a7 Binary files /dev/null and b/frontend/static/img/glitter/christian_symbol07.gif differ diff --git a/frontend/static/img/glitter/christmas-sexy11.gif b/frontend/static/img/glitter/christmas-sexy11.gif new file mode 100644 index 0000000..0837b7b Binary files /dev/null and b/frontend/static/img/glitter/christmas-sexy11.gif differ diff --git a/frontend/static/img/glitter/christmas-sexy6.gif b/frontend/static/img/glitter/christmas-sexy6.gif new file mode 100644 index 0000000..390b44f Binary files /dev/null and b/frontend/static/img/glitter/christmas-sexy6.gif differ diff --git a/frontend/static/img/glitter/cleopatra-elizabeth-liz-taylor-dress-babe.gif b/frontend/static/img/glitter/cleopatra-elizabeth-liz-taylor-dress-babe.gif new file mode 100644 index 0000000..6094279 Binary files /dev/null and b/frontend/static/img/glitter/cleopatra-elizabeth-liz-taylor-dress-babe.gif differ diff --git a/frontend/static/img/glitter/date13.gif b/frontend/static/img/glitter/date13.gif new file mode 100644 index 0000000..52186b2 Binary files /dev/null and b/frontend/static/img/glitter/date13.gif differ diff --git a/frontend/static/img/glitter/dreamer.gif b/frontend/static/img/glitter/dreamer.gif new file mode 100644 index 0000000..e14007b Binary files /dev/null and b/frontend/static/img/glitter/dreamer.gif differ diff --git a/frontend/static/img/glitter/egypt.gif b/frontend/static/img/glitter/egypt.gif new file mode 100644 index 0000000..343d411 Binary files /dev/null and b/frontend/static/img/glitter/egypt.gif differ diff --git a/frontend/static/img/glitter/egypt_320_256_9223372036854775000_0_1_0.gif b/frontend/static/img/glitter/egypt_320_256_9223372036854775000_0_1_0.gif new file mode 100644 index 0000000..3503bd1 Binary files /dev/null and b/frontend/static/img/glitter/egypt_320_256_9223372036854775000_0_1_0.gif differ diff --git a/frontend/static/img/glitter/egypt_320_320_256_9223372036854775000_0_1_0.gif b/frontend/static/img/glitter/egypt_320_320_256_9223372036854775000_0_1_0.gif new file mode 100644 index 0000000..ea2afb3 Binary files /dev/null and b/frontend/static/img/glitter/egypt_320_320_256_9223372036854775000_0_1_0.gif differ diff --git a/frontend/static/img/glitter/eye-glitter.gif b/frontend/static/img/glitter/eye-glitter.gif new file mode 100644 index 0000000..37de2ac Binary files /dev/null and b/frontend/static/img/glitter/eye-glitter.gif differ diff --git a/frontend/static/img/glitter/flirting-my-way-to-the-top.gif b/frontend/static/img/glitter/flirting-my-way-to-the-top.gif new file mode 100644 index 0000000..f9f2d92 Binary files /dev/null and b/frontend/static/img/glitter/flirting-my-way-to-the-top.gif differ diff --git a/frontend/static/img/glitter/flowers.gif b/frontend/static/img/glitter/flowers.gif new file mode 100644 index 0000000..63477a9 Binary files /dev/null and b/frontend/static/img/glitter/flowers.gif differ diff --git a/frontend/static/img/glitter/glitterfriend38.gif b/frontend/static/img/glitter/glitterfriend38.gif new file mode 100644 index 0000000..0c2610c Binary files /dev/null and b/frontend/static/img/glitter/glitterfriend38.gif differ diff --git a/frontend/static/img/glitter/goodbye7(combine).gif b/frontend/static/img/glitter/goodbye7(combine).gif new file mode 100644 index 0000000..77e14a0 Binary files /dev/null and b/frontend/static/img/glitter/goodbye7(combine).gif differ diff --git a/frontend/static/img/glitter/gtmc034.gif b/frontend/static/img/glitter/gtmc034.gif new file mode 100644 index 0000000..ebc65aa Binary files /dev/null and b/frontend/static/img/glitter/gtmc034.gif differ diff --git a/frontend/static/img/glitter/gtmc037.gif b/frontend/static/img/glitter/gtmc037.gif new file mode 100644 index 0000000..aab2b8b Binary files /dev/null and b/frontend/static/img/glitter/gtmc037.gif differ diff --git a/frontend/static/img/glitter/gtmc039.gif b/frontend/static/img/glitter/gtmc039.gif new file mode 100644 index 0000000..5d6ac6f Binary files /dev/null and b/frontend/static/img/glitter/gtmc039.gif differ diff --git a/frontend/static/img/glitter/gtmc041.gif b/frontend/static/img/glitter/gtmc041.gif new file mode 100644 index 0000000..2958878 Binary files /dev/null and b/frontend/static/img/glitter/gtmc041.gif differ diff --git a/frontend/static/img/glitter/gtmc048.gif b/frontend/static/img/glitter/gtmc048.gif new file mode 100644 index 0000000..fecb2de Binary files /dev/null and b/frontend/static/img/glitter/gtmc048.gif differ diff --git a/frontend/static/img/glitter/gtmc058.gif b/frontend/static/img/glitter/gtmc058.gif new file mode 100644 index 0000000..57b1d5c Binary files /dev/null and b/frontend/static/img/glitter/gtmc058.gif differ diff --git a/frontend/static/img/glitter/gtmc067.gif b/frontend/static/img/glitter/gtmc067.gif new file mode 100644 index 0000000..fb4e2c7 Binary files /dev/null and b/frontend/static/img/glitter/gtmc067.gif differ diff --git a/frontend/static/img/glitter/gtmc072.gif b/frontend/static/img/glitter/gtmc072.gif new file mode 100644 index 0000000..128fa1d Binary files /dev/null and b/frontend/static/img/glitter/gtmc072.gif differ diff --git a/frontend/static/img/glitter/gtmc079.gif b/frontend/static/img/glitter/gtmc079.gif new file mode 100644 index 0000000..19d1121 Binary files /dev/null and b/frontend/static/img/glitter/gtmc079.gif differ diff --git a/frontend/static/img/glitter/happy-new-year-524.gif b/frontend/static/img/glitter/happy-new-year-524.gif new file mode 100644 index 0000000..bfefee5 Binary files /dev/null and b/frontend/static/img/glitter/happy-new-year-524.gif differ diff --git a/frontend/static/img/glitter/happy-new-year-527.gif b/frontend/static/img/glitter/happy-new-year-527.gif new file mode 100644 index 0000000..47897ea Binary files /dev/null and b/frontend/static/img/glitter/happy-new-year-527.gif differ diff --git a/frontend/static/img/glitter/happy-new-year-computer.gif b/frontend/static/img/glitter/happy-new-year-computer.gif new file mode 100644 index 0000000..fb39bee Binary files /dev/null and b/frontend/static/img/glitter/happy-new-year-computer.gif differ diff --git a/frontend/static/img/glitter/happy-new-year.gif b/frontend/static/img/glitter/happy-new-year.gif new file mode 100644 index 0000000..bd05c05 Binary files /dev/null and b/frontend/static/img/glitter/happy-new-year.gif differ diff --git a/frontend/static/img/glitter/ice-cream-cone-dessert-sweet-smile.gif b/frontend/static/img/glitter/ice-cream-cone-dessert-sweet-smile.gif new file mode 100644 index 0000000..3a87e64 Binary files /dev/null and b/frontend/static/img/glitter/ice-cream-cone-dessert-sweet-smile.gif differ diff --git a/frontend/static/img/glitter/kisses-for-my-valentine-glitter.gif b/frontend/static/img/glitter/kisses-for-my-valentine-glitter.gif new file mode 100644 index 0000000..222c878 Binary files /dev/null and b/frontend/static/img/glitter/kisses-for-my-valentine-glitter.gif differ diff --git a/frontend/static/img/glitter/lindsay-lohan.gif b/frontend/static/img/glitter/lindsay-lohan.gif new file mode 100644 index 0000000..b5cfbf3 Binary files /dev/null and b/frontend/static/img/glitter/lindsay-lohan.gif differ diff --git a/frontend/static/img/glitter/myspace-flower-rose.gif b/frontend/static/img/glitter/myspace-flower-rose.gif new file mode 100644 index 0000000..d311c64 Binary files /dev/null and b/frontend/static/img/glitter/myspace-flower-rose.gif differ diff --git a/frontend/static/img/glitter/never-give-up.gif b/frontend/static/img/glitter/never-give-up.gif new file mode 100644 index 0000000..d6514ef Binary files /dev/null and b/frontend/static/img/glitter/never-give-up.gif differ diff --git a/frontend/static/img/glitter/new-year-29.gif b/frontend/static/img/glitter/new-year-29.gif new file mode 100644 index 0000000..8002d7a Binary files /dev/null and b/frontend/static/img/glitter/new-year-29.gif differ diff --git a/frontend/static/img/glitter/penis.gif b/frontend/static/img/glitter/penis.gif new file mode 100644 index 0000000..f2190f8 Binary files /dev/null and b/frontend/static/img/glitter/penis.gif differ diff --git a/frontend/static/img/glitter/pinkcowgirl.gif b/frontend/static/img/glitter/pinkcowgirl.gif new file mode 100644 index 0000000..47b34e1 Binary files /dev/null and b/frontend/static/img/glitter/pinkcowgirl.gif differ diff --git a/frontend/static/img/glitter/proud-mom-aunt.gif b/frontend/static/img/glitter/proud-mom-aunt.gif new file mode 100644 index 0000000..c21ea00 Binary files /dev/null and b/frontend/static/img/glitter/proud-mom-aunt.gif differ diff --git a/frontend/static/img/glitter/sexy-100.gif b/frontend/static/img/glitter/sexy-100.gif new file mode 100644 index 0000000..2dd5ff5 Binary files /dev/null and b/frontend/static/img/glitter/sexy-100.gif differ diff --git a/frontend/static/img/glitter/showin_some_love_reflecting_rosebud.gif b/frontend/static/img/glitter/showin_some_love_reflecting_rosebud.gif new file mode 100644 index 0000000..9d58e50 Binary files /dev/null and b/frontend/static/img/glitter/showin_some_love_reflecting_rosebud.gif differ diff --git a/frontend/static/img/glitter/sparkle-logo.gif b/frontend/static/img/glitter/sparkle-logo.gif new file mode 100644 index 0000000..b42bca4 Binary files /dev/null and b/frontend/static/img/glitter/sparkle-logo.gif differ diff --git a/frontend/static/img/glitter/staypunk-sparkle-cross.gif b/frontend/static/img/glitter/staypunk-sparkle-cross.gif new file mode 100644 index 0000000..36b1ac8 Binary files /dev/null and b/frontend/static/img/glitter/staypunk-sparkle-cross.gif differ diff --git a/frontend/static/img/glitter/thanksc.gif b/frontend/static/img/glitter/thanksc.gif new file mode 100644 index 0000000..3bdf13a Binary files /dev/null and b/frontend/static/img/glitter/thanksc.gif differ diff --git a/frontend/static/img/glitter/tiger_eye_sparkle.gif b/frontend/static/img/glitter/tiger_eye_sparkle.gif new file mode 100644 index 0000000..ecd5c43 Binary files /dev/null and b/frontend/static/img/glitter/tiger_eye_sparkle.gif differ diff --git a/frontend/static/img/glitter/woman-style-lipstick-makeup.gif b/frontend/static/img/glitter/woman-style-lipstick-makeup.gif new file mode 100644 index 0000000..0754a53 Binary files /dev/null and b/frontend/static/img/glitter/woman-style-lipstick-makeup.gif differ diff --git a/frontend/static/img/glitter_flower.gif b/frontend/static/img/glitter_flower.gif new file mode 100644 index 0000000..050cc11 Binary files /dev/null and b/frontend/static/img/glitter_flower.gif differ diff --git a/frontend/static/img/glitter_scannerjammer.gif b/frontend/static/img/glitter_scannerjammer.gif new file mode 100644 index 0000000..64fd575 Binary files /dev/null and b/frontend/static/img/glitter_scannerjammer.gif differ diff --git a/frontend/static/img/glittergutzbg.gif b/frontend/static/img/glittergutzbg.gif new file mode 100644 index 0000000..c1d2b10 Binary files /dev/null and b/frontend/static/img/glittergutzbg.gif differ diff --git a/frontend/static/img/icons/aim_16.png b/frontend/static/img/icons/aim_16.png new file mode 100755 index 0000000..f0e0dc1 Binary files /dev/null and b/frontend/static/img/icons/aim_16.png differ diff --git a/frontend/static/img/icons/aim_32.png b/frontend/static/img/icons/aim_32.png new file mode 100755 index 0000000..e343bd8 Binary files /dev/null and b/frontend/static/img/icons/aim_32.png differ diff --git a/frontend/static/img/icons/apple_16.png b/frontend/static/img/icons/apple_16.png new file mode 100755 index 0000000..6db1f23 Binary files /dev/null and b/frontend/static/img/icons/apple_16.png differ diff --git a/frontend/static/img/icons/apple_32.png b/frontend/static/img/icons/apple_32.png new file mode 100755 index 0000000..260e491 Binary files /dev/null and b/frontend/static/img/icons/apple_32.png differ diff --git a/frontend/static/img/icons/bandcamp_32.png b/frontend/static/img/icons/bandcamp_32.png new file mode 100644 index 0000000..9561303 Binary files /dev/null and b/frontend/static/img/icons/bandcamp_32.png differ diff --git a/frontend/static/img/icons/bebo_16.png b/frontend/static/img/icons/bebo_16.png new file mode 100755 index 0000000..ee944b7 Binary files /dev/null and b/frontend/static/img/icons/bebo_16.png differ diff --git a/frontend/static/img/icons/bebo_32.png b/frontend/static/img/icons/bebo_32.png new file mode 100755 index 0000000..556aea1 Binary files /dev/null and b/frontend/static/img/icons/bebo_32.png differ diff --git a/frontend/static/img/icons/blogger_16.png b/frontend/static/img/icons/blogger_16.png new file mode 100755 index 0000000..40172ce Binary files /dev/null and b/frontend/static/img/icons/blogger_16.png differ diff --git a/frontend/static/img/icons/blogger_32.png b/frontend/static/img/icons/blogger_32.png new file mode 100755 index 0000000..40825a5 Binary files /dev/null and b/frontend/static/img/icons/blogger_32.png differ diff --git a/frontend/static/img/icons/brightkite_16.png b/frontend/static/img/icons/brightkite_16.png new file mode 100755 index 0000000..4de9fee Binary files /dev/null and b/frontend/static/img/icons/brightkite_16.png differ diff --git a/frontend/static/img/icons/brightkite_32.png b/frontend/static/img/icons/brightkite_32.png new file mode 100755 index 0000000..6ff286a Binary files /dev/null and b/frontend/static/img/icons/brightkite_32.png differ diff --git a/frontend/static/img/icons/cargo_16.png b/frontend/static/img/icons/cargo_16.png new file mode 100755 index 0000000..f9c7935 Binary files /dev/null and b/frontend/static/img/icons/cargo_16.png differ diff --git a/frontend/static/img/icons/cargo_32.png b/frontend/static/img/icons/cargo_32.png new file mode 100755 index 0000000..25cd8b2 Binary files /dev/null and b/frontend/static/img/icons/cargo_32.png differ diff --git a/frontend/static/img/icons/delicious_16.png b/frontend/static/img/icons/delicious_16.png new file mode 100755 index 0000000..e4ebb98 Binary files /dev/null and b/frontend/static/img/icons/delicious_16.png differ diff --git a/frontend/static/img/icons/delicious_32.png b/frontend/static/img/icons/delicious_32.png new file mode 100755 index 0000000..482e0fa Binary files /dev/null and b/frontend/static/img/icons/delicious_32.png differ diff --git a/frontend/static/img/icons/designfloat_16.png b/frontend/static/img/icons/designfloat_16.png new file mode 100755 index 0000000..80e356e Binary files /dev/null and b/frontend/static/img/icons/designfloat_16.png differ diff --git a/frontend/static/img/icons/designfloat_32.png b/frontend/static/img/icons/designfloat_32.png new file mode 100755 index 0000000..9d17066 Binary files /dev/null and b/frontend/static/img/icons/designfloat_32.png differ diff --git a/frontend/static/img/icons/designmoo_16.png b/frontend/static/img/icons/designmoo_16.png new file mode 100755 index 0000000..90d4b84 Binary files /dev/null and b/frontend/static/img/icons/designmoo_16.png differ diff --git a/frontend/static/img/icons/designmoo_32.png b/frontend/static/img/icons/designmoo_32.png new file mode 100755 index 0000000..936da3a Binary files /dev/null and b/frontend/static/img/icons/designmoo_32.png differ diff --git a/frontend/static/img/icons/deviantart_16.png b/frontend/static/img/icons/deviantart_16.png new file mode 100755 index 0000000..363accb Binary files /dev/null and b/frontend/static/img/icons/deviantart_16.png differ diff --git a/frontend/static/img/icons/deviantart_32.png b/frontend/static/img/icons/deviantart_32.png new file mode 100755 index 0000000..8773163 Binary files /dev/null and b/frontend/static/img/icons/deviantart_32.png differ diff --git a/frontend/static/img/icons/digg_16.png b/frontend/static/img/icons/digg_16.png new file mode 100755 index 0000000..fa2efee Binary files /dev/null and b/frontend/static/img/icons/digg_16.png differ diff --git a/frontend/static/img/icons/digg_32.png b/frontend/static/img/icons/digg_32.png new file mode 100755 index 0000000..1c75b49 Binary files /dev/null and b/frontend/static/img/icons/digg_32.png differ diff --git a/frontend/static/img/icons/digg_alt_16.png b/frontend/static/img/icons/digg_alt_16.png new file mode 100755 index 0000000..49245da Binary files /dev/null and b/frontend/static/img/icons/digg_alt_16.png differ diff --git a/frontend/static/img/icons/dopplr_16.png b/frontend/static/img/icons/dopplr_16.png new file mode 100755 index 0000000..c3a8e38 Binary files /dev/null and b/frontend/static/img/icons/dopplr_16.png differ diff --git a/frontend/static/img/icons/dopplr_32.png b/frontend/static/img/icons/dopplr_32.png new file mode 100755 index 0000000..a81c683 Binary files /dev/null and b/frontend/static/img/icons/dopplr_32.png differ diff --git a/frontend/static/img/icons/dribbble_16.png b/frontend/static/img/icons/dribbble_16.png new file mode 100755 index 0000000..a6a27c7 Binary files /dev/null and b/frontend/static/img/icons/dribbble_16.png differ diff --git a/frontend/static/img/icons/dribbble_32.png b/frontend/static/img/icons/dribbble_32.png new file mode 100755 index 0000000..344a28c Binary files /dev/null and b/frontend/static/img/icons/dribbble_32.png differ diff --git a/frontend/static/img/icons/email_16.png b/frontend/static/img/icons/email_16.png new file mode 100755 index 0000000..2cabb17 Binary files /dev/null and b/frontend/static/img/icons/email_16.png differ diff --git a/frontend/static/img/icons/email_32.png b/frontend/static/img/icons/email_32.png new file mode 100755 index 0000000..9cba18c Binary files /dev/null and b/frontend/static/img/icons/email_32.png differ diff --git a/frontend/static/img/icons/ember_16.png b/frontend/static/img/icons/ember_16.png new file mode 100755 index 0000000..c7eef3b Binary files /dev/null and b/frontend/static/img/icons/ember_16.png differ diff --git a/frontend/static/img/icons/ember_32.png b/frontend/static/img/icons/ember_32.png new file mode 100755 index 0000000..88215bc Binary files /dev/null and b/frontend/static/img/icons/ember_32.png differ diff --git a/frontend/static/img/icons/evernote_16.png b/frontend/static/img/icons/evernote_16.png new file mode 100755 index 0000000..40d7a7d Binary files /dev/null and b/frontend/static/img/icons/evernote_16.png differ diff --git a/frontend/static/img/icons/evernote_32.png b/frontend/static/img/icons/evernote_32.png new file mode 100755 index 0000000..9485554 Binary files /dev/null and b/frontend/static/img/icons/evernote_32.png differ diff --git a/frontend/static/img/icons/facebook_16.png b/frontend/static/img/icons/facebook_16.png new file mode 100755 index 0000000..f0faf29 Binary files /dev/null and b/frontend/static/img/icons/facebook_16.png differ diff --git a/frontend/static/img/icons/facebook_32.png b/frontend/static/img/icons/facebook_32.png new file mode 100755 index 0000000..24d7f41 Binary files /dev/null and b/frontend/static/img/icons/facebook_32.png differ diff --git a/frontend/static/img/icons/flickr_16.png b/frontend/static/img/icons/flickr_16.png new file mode 100755 index 0000000..4a6b134 Binary files /dev/null and b/frontend/static/img/icons/flickr_16.png differ diff --git a/frontend/static/img/icons/flickr_32.png b/frontend/static/img/icons/flickr_32.png new file mode 100755 index 0000000..5179bc5 Binary files /dev/null and b/frontend/static/img/icons/flickr_32.png differ diff --git a/frontend/static/img/icons/forrst_16.png b/frontend/static/img/icons/forrst_16.png new file mode 100644 index 0000000..43b2cfe Binary files /dev/null and b/frontend/static/img/icons/forrst_16.png differ diff --git a/frontend/static/img/icons/forrst_32.png b/frontend/static/img/icons/forrst_32.png new file mode 100644 index 0000000..b710898 Binary files /dev/null and b/frontend/static/img/icons/forrst_32.png differ diff --git a/frontend/static/img/icons/friendfeed_16.png b/frontend/static/img/icons/friendfeed_16.png new file mode 100755 index 0000000..ea9d96e Binary files /dev/null and b/frontend/static/img/icons/friendfeed_16.png differ diff --git a/frontend/static/img/icons/friendfeed_32.png b/frontend/static/img/icons/friendfeed_32.png new file mode 100755 index 0000000..ebfc2b5 Binary files /dev/null and b/frontend/static/img/icons/friendfeed_32.png differ diff --git a/frontend/static/img/icons/gamespot_16.png b/frontend/static/img/icons/gamespot_16.png new file mode 100755 index 0000000..0f5a6bb Binary files /dev/null and b/frontend/static/img/icons/gamespot_16.png differ diff --git a/frontend/static/img/icons/gamespot_32.png b/frontend/static/img/icons/gamespot_32.png new file mode 100755 index 0000000..47e0cf8 Binary files /dev/null and b/frontend/static/img/icons/gamespot_32.png differ diff --git a/frontend/static/img/icons/google_16.png b/frontend/static/img/icons/google_16.png new file mode 100755 index 0000000..aeaca23 Binary files /dev/null and b/frontend/static/img/icons/google_16.png differ diff --git a/frontend/static/img/icons/google_32.png b/frontend/static/img/icons/google_32.png new file mode 100755 index 0000000..b67a62a Binary files /dev/null and b/frontend/static/img/icons/google_32.png differ diff --git a/frontend/static/img/icons/google_voice_16.png b/frontend/static/img/icons/google_voice_16.png new file mode 100755 index 0000000..d8fe79d Binary files /dev/null and b/frontend/static/img/icons/google_voice_16.png differ diff --git a/frontend/static/img/icons/google_voice_32.png b/frontend/static/img/icons/google_voice_32.png new file mode 100755 index 0000000..fcfabfa Binary files /dev/null and b/frontend/static/img/icons/google_voice_32.png differ diff --git a/frontend/static/img/icons/google_wave_16.png b/frontend/static/img/icons/google_wave_16.png new file mode 100755 index 0000000..4df0493 Binary files /dev/null and b/frontend/static/img/icons/google_wave_16.png differ diff --git a/frontend/static/img/icons/google_wave_32.png b/frontend/static/img/icons/google_wave_32.png new file mode 100755 index 0000000..9ae6ae9 Binary files /dev/null and b/frontend/static/img/icons/google_wave_32.png differ diff --git a/frontend/static/img/icons/googletalk_16.png b/frontend/static/img/icons/googletalk_16.png new file mode 100755 index 0000000..a003ddf Binary files /dev/null and b/frontend/static/img/icons/googletalk_16.png differ diff --git a/frontend/static/img/icons/googletalk_32.png b/frontend/static/img/icons/googletalk_32.png new file mode 100755 index 0000000..c5ecc6e Binary files /dev/null and b/frontend/static/img/icons/googletalk_32.png differ diff --git a/frontend/static/img/icons/gowalla_16.png b/frontend/static/img/icons/gowalla_16.png new file mode 100755 index 0000000..2c60ae6 Binary files /dev/null and b/frontend/static/img/icons/gowalla_16.png differ diff --git a/frontend/static/img/icons/gowalla_32.png b/frontend/static/img/icons/gowalla_32.png new file mode 100755 index 0000000..7ec8812 Binary files /dev/null and b/frontend/static/img/icons/gowalla_32.png differ diff --git a/frontend/static/img/icons/grooveshark_16.png b/frontend/static/img/icons/grooveshark_16.png new file mode 100755 index 0000000..8c90871 Binary files /dev/null and b/frontend/static/img/icons/grooveshark_16.png differ diff --git a/frontend/static/img/icons/grooveshark_32.png b/frontend/static/img/icons/grooveshark_32.png new file mode 100755 index 0000000..13794c4 Binary files /dev/null and b/frontend/static/img/icons/grooveshark_32.png differ diff --git a/frontend/static/img/icons/ilike_16.png b/frontend/static/img/icons/ilike_16.png new file mode 100755 index 0000000..2b41d80 Binary files /dev/null and b/frontend/static/img/icons/ilike_16.png differ diff --git a/frontend/static/img/icons/ilike_32.png b/frontend/static/img/icons/ilike_32.png new file mode 100755 index 0000000..bdac950 Binary files /dev/null and b/frontend/static/img/icons/ilike_32.png differ diff --git a/frontend/static/img/icons/komodomedia_azure_16.png b/frontend/static/img/icons/komodomedia_azure_16.png new file mode 100755 index 0000000..02b1d82 Binary files /dev/null and b/frontend/static/img/icons/komodomedia_azure_16.png differ diff --git a/frontend/static/img/icons/komodomedia_azure_32.png b/frontend/static/img/icons/komodomedia_azure_32.png new file mode 100755 index 0000000..7e12e10 Binary files /dev/null and b/frontend/static/img/icons/komodomedia_azure_32.png differ diff --git a/frontend/static/img/icons/komodomedia_wood_16.png b/frontend/static/img/icons/komodomedia_wood_16.png new file mode 100755 index 0000000..b58c51c Binary files /dev/null and b/frontend/static/img/icons/komodomedia_wood_16.png differ diff --git a/frontend/static/img/icons/komodomedia_wood_32.png b/frontend/static/img/icons/komodomedia_wood_32.png new file mode 100755 index 0000000..061c4af Binary files /dev/null and b/frontend/static/img/icons/komodomedia_wood_32.png differ diff --git a/frontend/static/img/icons/lastfm_16.png b/frontend/static/img/icons/lastfm_16.png new file mode 100755 index 0000000..10f7bd7 Binary files /dev/null and b/frontend/static/img/icons/lastfm_16.png differ diff --git a/frontend/static/img/icons/lastfm_32.png b/frontend/static/img/icons/lastfm_32.png new file mode 100755 index 0000000..d8c3c5e Binary files /dev/null and b/frontend/static/img/icons/lastfm_32.png differ diff --git a/frontend/static/img/icons/license.txt b/frontend/static/img/icons/license.txt new file mode 100755 index 0000000..e7eda19 --- /dev/null +++ b/frontend/static/img/icons/license.txt @@ -0,0 +1,9 @@ +If you use these icons, please place an attribution link to komodomedia.com. Social Network Icon Pack by Rogie King is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License (http://creativecommons.org/licenses/by-nc-sa/3.0/). + +Based on a work at www.komodomedia.com. + +More rad downloads can be found at http://www.komodomedia.com/download/ + +Feelin' the love? Donate to Paypal: rogie@komodomedia.com + +I claim no right of ownership to the respective company logos and glyphs in each one of these icons. \ No newline at end of file diff --git a/frontend/static/img/icons/linkedin_16.png b/frontend/static/img/icons/linkedin_16.png new file mode 100755 index 0000000..20353ba Binary files /dev/null and b/frontend/static/img/icons/linkedin_16.png differ diff --git a/frontend/static/img/icons/linkedin_32.png b/frontend/static/img/icons/linkedin_32.png new file mode 100755 index 0000000..f8f73ab Binary files /dev/null and b/frontend/static/img/icons/linkedin_32.png differ diff --git a/frontend/static/img/icons/mixx_16.png b/frontend/static/img/icons/mixx_16.png new file mode 100755 index 0000000..d2d539c Binary files /dev/null and b/frontend/static/img/icons/mixx_16.png differ diff --git a/frontend/static/img/icons/mixx_32.png b/frontend/static/img/icons/mixx_32.png new file mode 100755 index 0000000..e4966b4 Binary files /dev/null and b/frontend/static/img/icons/mixx_32.png differ diff --git a/frontend/static/img/icons/mobileme_16.png b/frontend/static/img/icons/mobileme_16.png new file mode 100755 index 0000000..850e1bc Binary files /dev/null and b/frontend/static/img/icons/mobileme_16.png differ diff --git a/frontend/static/img/icons/mobileme_32.png b/frontend/static/img/icons/mobileme_32.png new file mode 100755 index 0000000..b8742bb Binary files /dev/null and b/frontend/static/img/icons/mobileme_32.png differ diff --git a/frontend/static/img/icons/mynameise_16.png b/frontend/static/img/icons/mynameise_16.png new file mode 100755 index 0000000..cb11b81 Binary files /dev/null and b/frontend/static/img/icons/mynameise_16.png differ diff --git a/frontend/static/img/icons/mynameise_32.png b/frontend/static/img/icons/mynameise_32.png new file mode 100755 index 0000000..c42d5b3 Binary files /dev/null and b/frontend/static/img/icons/mynameise_32.png differ diff --git a/frontend/static/img/icons/myspace_16.png b/frontend/static/img/icons/myspace_16.png new file mode 100755 index 0000000..5e1b417 Binary files /dev/null and b/frontend/static/img/icons/myspace_16.png differ diff --git a/frontend/static/img/icons/myspace_32.png b/frontend/static/img/icons/myspace_32.png new file mode 100755 index 0000000..269c976 Binary files /dev/null and b/frontend/static/img/icons/myspace_32.png differ diff --git a/frontend/static/img/icons/netvibes_16.png b/frontend/static/img/icons/netvibes_16.png new file mode 100755 index 0000000..fb2cec1 Binary files /dev/null and b/frontend/static/img/icons/netvibes_16.png differ diff --git a/frontend/static/img/icons/netvibes_32.png b/frontend/static/img/icons/netvibes_32.png new file mode 100755 index 0000000..308b1f7 Binary files /dev/null and b/frontend/static/img/icons/netvibes_32.png differ diff --git a/frontend/static/img/icons/newsvine_16.png b/frontend/static/img/icons/newsvine_16.png new file mode 100755 index 0000000..8f6c1a5 Binary files /dev/null and b/frontend/static/img/icons/newsvine_16.png differ diff --git a/frontend/static/img/icons/newsvine_32.png b/frontend/static/img/icons/newsvine_32.png new file mode 100755 index 0000000..b079d1f Binary files /dev/null and b/frontend/static/img/icons/newsvine_32.png differ diff --git a/frontend/static/img/icons/openid_16.png b/frontend/static/img/icons/openid_16.png new file mode 100755 index 0000000..eadf8e8 Binary files /dev/null and b/frontend/static/img/icons/openid_16.png differ diff --git a/frontend/static/img/icons/openid_32.png b/frontend/static/img/icons/openid_32.png new file mode 100755 index 0000000..073c0e6 Binary files /dev/null and b/frontend/static/img/icons/openid_32.png differ diff --git a/frontend/static/img/icons/orkut_16.png b/frontend/static/img/icons/orkut_16.png new file mode 100755 index 0000000..9d7378b Binary files /dev/null and b/frontend/static/img/icons/orkut_16.png differ diff --git a/frontend/static/img/icons/orkut_32.png b/frontend/static/img/icons/orkut_32.png new file mode 100755 index 0000000..65abe2f Binary files /dev/null and b/frontend/static/img/icons/orkut_32.png differ diff --git a/frontend/static/img/icons/pandora_16.png b/frontend/static/img/icons/pandora_16.png new file mode 100755 index 0000000..90a40a2 Binary files /dev/null and b/frontend/static/img/icons/pandora_16.png differ diff --git a/frontend/static/img/icons/pandora_32.png b/frontend/static/img/icons/pandora_32.png new file mode 100755 index 0000000..b805c1c Binary files /dev/null and b/frontend/static/img/icons/pandora_32.png differ diff --git a/frontend/static/img/icons/paypal_16.png b/frontend/static/img/icons/paypal_16.png new file mode 100755 index 0000000..3d55ff4 Binary files /dev/null and b/frontend/static/img/icons/paypal_16.png differ diff --git a/frontend/static/img/icons/paypal_32.png b/frontend/static/img/icons/paypal_32.png new file mode 100755 index 0000000..3ee5436 Binary files /dev/null and b/frontend/static/img/icons/paypal_32.png differ diff --git a/frontend/static/img/icons/picasa_16.png b/frontend/static/img/icons/picasa_16.png new file mode 100755 index 0000000..cbd580e Binary files /dev/null and b/frontend/static/img/icons/picasa_16.png differ diff --git a/frontend/static/img/icons/picasa_32.png b/frontend/static/img/icons/picasa_32.png new file mode 100755 index 0000000..074cc50 Binary files /dev/null and b/frontend/static/img/icons/picasa_32.png differ diff --git a/frontend/static/img/icons/playstation_16.png b/frontend/static/img/icons/playstation_16.png new file mode 100644 index 0000000..20bcae7 Binary files /dev/null and b/frontend/static/img/icons/playstation_16.png differ diff --git a/frontend/static/img/icons/playstation_32.png b/frontend/static/img/icons/playstation_32.png new file mode 100644 index 0000000..ee7f000 Binary files /dev/null and b/frontend/static/img/icons/playstation_32.png differ diff --git a/frontend/static/img/icons/plurk_16.png b/frontend/static/img/icons/plurk_16.png new file mode 100755 index 0000000..313268c Binary files /dev/null and b/frontend/static/img/icons/plurk_16.png differ diff --git a/frontend/static/img/icons/plurk_32.png b/frontend/static/img/icons/plurk_32.png new file mode 100755 index 0000000..3f212ef Binary files /dev/null and b/frontend/static/img/icons/plurk_32.png differ diff --git a/frontend/static/img/icons/posterous_16.png b/frontend/static/img/icons/posterous_16.png new file mode 100755 index 0000000..34fdcd2 Binary files /dev/null and b/frontend/static/img/icons/posterous_16.png differ diff --git a/frontend/static/img/icons/posterous_32.png b/frontend/static/img/icons/posterous_32.png new file mode 100755 index 0000000..6d45a50 Binary files /dev/null and b/frontend/static/img/icons/posterous_32.png differ diff --git a/frontend/static/img/icons/qik_16.png b/frontend/static/img/icons/qik_16.png new file mode 100755 index 0000000..660446e Binary files /dev/null and b/frontend/static/img/icons/qik_16.png differ diff --git a/frontend/static/img/icons/qik_32.png b/frontend/static/img/icons/qik_32.png new file mode 100755 index 0000000..466b2cc Binary files /dev/null and b/frontend/static/img/icons/qik_32.png differ diff --git a/frontend/static/img/icons/readernaut_16.png b/frontend/static/img/icons/readernaut_16.png new file mode 100755 index 0000000..abf173e Binary files /dev/null and b/frontend/static/img/icons/readernaut_16.png differ diff --git a/frontend/static/img/icons/readernaut_32.png b/frontend/static/img/icons/readernaut_32.png new file mode 100755 index 0000000..bbd5385 Binary files /dev/null and b/frontend/static/img/icons/readernaut_32.png differ diff --git a/frontend/static/img/icons/reddit_16.png b/frontend/static/img/icons/reddit_16.png new file mode 100755 index 0000000..9ca9038 Binary files /dev/null and b/frontend/static/img/icons/reddit_16.png differ diff --git a/frontend/static/img/icons/reddit_32.png b/frontend/static/img/icons/reddit_32.png new file mode 100755 index 0000000..6e3eee1 Binary files /dev/null and b/frontend/static/img/icons/reddit_32.png differ diff --git a/frontend/static/img/icons/roboto_16.png b/frontend/static/img/icons/roboto_16.png new file mode 100755 index 0000000..675d507 Binary files /dev/null and b/frontend/static/img/icons/roboto_16.png differ diff --git a/frontend/static/img/icons/roboto_32.png b/frontend/static/img/icons/roboto_32.png new file mode 100755 index 0000000..6bb2fa7 Binary files /dev/null and b/frontend/static/img/icons/roboto_32.png differ diff --git a/frontend/static/img/icons/rss_16.png b/frontend/static/img/icons/rss_16.png new file mode 100755 index 0000000..f921046 Binary files /dev/null and b/frontend/static/img/icons/rss_16.png differ diff --git a/frontend/static/img/icons/rss_32.png b/frontend/static/img/icons/rss_32.png new file mode 100755 index 0000000..0150a85 Binary files /dev/null and b/frontend/static/img/icons/rss_32.png differ diff --git a/frontend/static/img/icons/sharethis_16.png b/frontend/static/img/icons/sharethis_16.png new file mode 100644 index 0000000..52be01b Binary files /dev/null and b/frontend/static/img/icons/sharethis_16.png differ diff --git a/frontend/static/img/icons/sharethis_32.png b/frontend/static/img/icons/sharethis_32.png new file mode 100644 index 0000000..0191748 Binary files /dev/null and b/frontend/static/img/icons/sharethis_32.png differ diff --git a/frontend/static/img/icons/skype_16.png b/frontend/static/img/icons/skype_16.png new file mode 100755 index 0000000..97ed84c Binary files /dev/null and b/frontend/static/img/icons/skype_16.png differ diff --git a/frontend/static/img/icons/skype_32.png b/frontend/static/img/icons/skype_32.png new file mode 100755 index 0000000..80ebd07 Binary files /dev/null and b/frontend/static/img/icons/skype_32.png differ diff --git a/frontend/static/img/icons/stumbleupon_16.png b/frontend/static/img/icons/stumbleupon_16.png new file mode 100755 index 0000000..484ba49 Binary files /dev/null and b/frontend/static/img/icons/stumbleupon_16.png differ diff --git a/frontend/static/img/icons/stumbleupon_32.png b/frontend/static/img/icons/stumbleupon_32.png new file mode 100755 index 0000000..4ab582a Binary files /dev/null and b/frontend/static/img/icons/stumbleupon_32.png differ diff --git a/frontend/static/img/icons/technorati_16.png b/frontend/static/img/icons/technorati_16.png new file mode 100755 index 0000000..2167362 Binary files /dev/null and b/frontend/static/img/icons/technorati_16.png differ diff --git a/frontend/static/img/icons/technorati_32.png b/frontend/static/img/icons/technorati_32.png new file mode 100755 index 0000000..2ff2359 Binary files /dev/null and b/frontend/static/img/icons/technorati_32.png differ diff --git a/frontend/static/img/icons/tumblr_16.png b/frontend/static/img/icons/tumblr_16.png new file mode 100755 index 0000000..1536a14 Binary files /dev/null and b/frontend/static/img/icons/tumblr_16.png differ diff --git a/frontend/static/img/icons/tumblr_32.png b/frontend/static/img/icons/tumblr_32.png new file mode 100755 index 0000000..0ebca39 Binary files /dev/null and b/frontend/static/img/icons/tumblr_32.png differ diff --git a/frontend/static/img/icons/twitter_16.png b/frontend/static/img/icons/twitter_16.png new file mode 100755 index 0000000..2bcd957 Binary files /dev/null and b/frontend/static/img/icons/twitter_16.png differ diff --git a/frontend/static/img/icons/twitter_32.png b/frontend/static/img/icons/twitter_32.png new file mode 100755 index 0000000..38d0545 Binary files /dev/null and b/frontend/static/img/icons/twitter_32.png differ diff --git a/frontend/static/img/icons/viddler_16.png b/frontend/static/img/icons/viddler_16.png new file mode 100755 index 0000000..4ac4356 Binary files /dev/null and b/frontend/static/img/icons/viddler_16.png differ diff --git a/frontend/static/img/icons/viddler_32.png b/frontend/static/img/icons/viddler_32.png new file mode 100755 index 0000000..f232136 Binary files /dev/null and b/frontend/static/img/icons/viddler_32.png differ diff --git a/frontend/static/img/icons/vimeo_16.png b/frontend/static/img/icons/vimeo_16.png new file mode 100755 index 0000000..dc6fc51 Binary files /dev/null and b/frontend/static/img/icons/vimeo_16.png differ diff --git a/frontend/static/img/icons/vimeo_32.png b/frontend/static/img/icons/vimeo_32.png new file mode 100755 index 0000000..28948a6 Binary files /dev/null and b/frontend/static/img/icons/vimeo_32.png differ diff --git a/frontend/static/img/icons/virb_16.png b/frontend/static/img/icons/virb_16.png new file mode 100755 index 0000000..e09ef84 Binary files /dev/null and b/frontend/static/img/icons/virb_16.png differ diff --git a/frontend/static/img/icons/virb_32.png b/frontend/static/img/icons/virb_32.png new file mode 100755 index 0000000..6be8b14 Binary files /dev/null and b/frontend/static/img/icons/virb_32.png differ diff --git a/frontend/static/img/icons/windows_16.png b/frontend/static/img/icons/windows_16.png new file mode 100755 index 0000000..c022c39 Binary files /dev/null and b/frontend/static/img/icons/windows_16.png differ diff --git a/frontend/static/img/icons/windows_32.png b/frontend/static/img/icons/windows_32.png new file mode 100755 index 0000000..13b3040 Binary files /dev/null and b/frontend/static/img/icons/windows_32.png differ diff --git a/frontend/static/img/icons/wordpress_16.png b/frontend/static/img/icons/wordpress_16.png new file mode 100755 index 0000000..47568ca Binary files /dev/null and b/frontend/static/img/icons/wordpress_16.png differ diff --git a/frontend/static/img/icons/wordpress_32.png b/frontend/static/img/icons/wordpress_32.png new file mode 100755 index 0000000..7aa7ec1 Binary files /dev/null and b/frontend/static/img/icons/wordpress_32.png differ diff --git a/frontend/static/img/icons/xing_16.png b/frontend/static/img/icons/xing_16.png new file mode 100755 index 0000000..a75365b Binary files /dev/null and b/frontend/static/img/icons/xing_16.png differ diff --git a/frontend/static/img/icons/xing_32.png b/frontend/static/img/icons/xing_32.png new file mode 100755 index 0000000..38d62ee Binary files /dev/null and b/frontend/static/img/icons/xing_32.png differ diff --git a/frontend/static/img/icons/yahoo_16.png b/frontend/static/img/icons/yahoo_16.png new file mode 100755 index 0000000..5f80da3 Binary files /dev/null and b/frontend/static/img/icons/yahoo_16.png differ diff --git a/frontend/static/img/icons/yahoo_32.png b/frontend/static/img/icons/yahoo_32.png new file mode 100755 index 0000000..87e16d7 Binary files /dev/null and b/frontend/static/img/icons/yahoo_32.png differ diff --git a/frontend/static/img/icons/yahoobuzz_16.png b/frontend/static/img/icons/yahoobuzz_16.png new file mode 100755 index 0000000..4f5d3c9 Binary files /dev/null and b/frontend/static/img/icons/yahoobuzz_16.png differ diff --git a/frontend/static/img/icons/yahoobuzz_32.png b/frontend/static/img/icons/yahoobuzz_32.png new file mode 100755 index 0000000..9150db0 Binary files /dev/null and b/frontend/static/img/icons/yahoobuzz_32.png differ diff --git a/frontend/static/img/icons/yelp_16.png b/frontend/static/img/icons/yelp_16.png new file mode 100755 index 0000000..b6929ea Binary files /dev/null and b/frontend/static/img/icons/yelp_16.png differ diff --git a/frontend/static/img/icons/yelp_32.png b/frontend/static/img/icons/yelp_32.png new file mode 100755 index 0000000..211cc1a Binary files /dev/null and b/frontend/static/img/icons/yelp_32.png differ diff --git a/frontend/static/img/icons/youtube_16.png b/frontend/static/img/icons/youtube_16.png new file mode 100755 index 0000000..2281d7f Binary files /dev/null and b/frontend/static/img/icons/youtube_16.png differ diff --git a/frontend/static/img/icons/youtube_32.png b/frontend/static/img/icons/youtube_32.png new file mode 100755 index 0000000..71e60ef Binary files /dev/null and b/frontend/static/img/icons/youtube_32.png differ diff --git a/frontend/static/img/icons/zootool_16.png b/frontend/static/img/icons/zootool_16.png new file mode 100644 index 0000000..65d8bee Binary files /dev/null and b/frontend/static/img/icons/zootool_16.png differ diff --git a/frontend/static/img/icons/zootool_32.png b/frontend/static/img/icons/zootool_32.png new file mode 100644 index 0000000..0a2a0bd Binary files /dev/null and b/frontend/static/img/icons/zootool_32.png differ diff --git a/frontend/static/img/icosahedron.png b/frontend/static/img/icosahedron.png new file mode 100644 index 0000000..0d27cc8 Binary files /dev/null and b/frontend/static/img/icosahedron.png differ diff --git a/frontend/static/img/idgiguy2.png b/frontend/static/img/idgiguy2.png new file mode 100644 index 0000000..a5ba0ae Binary files /dev/null and b/frontend/static/img/idgiguy2.png differ diff --git a/frontend/static/img/loading.gif b/frontend/static/img/loading.gif new file mode 100644 index 0000000..a309d3c Binary files /dev/null and b/frontend/static/img/loading.gif differ diff --git a/frontend/static/img/loading2.gif b/frontend/static/img/loading2.gif new file mode 100644 index 0000000..d9e135c Binary files /dev/null and b/frontend/static/img/loading2.gif differ diff --git a/frontend/static/img/magnify.png b/frontend/static/img/magnify.png new file mode 100644 index 0000000..9857c6d Binary files /dev/null and b/frontend/static/img/magnify.png differ diff --git a/frontend/static/img/office-plant.jpg b/frontend/static/img/office-plant.jpg new file mode 100644 index 0000000..ebabec9 Binary files /dev/null and b/frontend/static/img/office-plant.jpg differ diff --git a/frontend/static/img/plant.gif b/frontend/static/img/plant.gif new file mode 100644 index 0000000..aade765 Binary files /dev/null and b/frontend/static/img/plant.gif differ diff --git a/frontend/static/img/playlist-banner.gif b/frontend/static/img/playlist-banner.gif new file mode 100644 index 0000000..7486d7a Binary files /dev/null and b/frontend/static/img/playlist-banner.gif differ diff --git a/frontend/static/img/playlist.gif b/frontend/static/img/playlist.gif new file mode 100644 index 0000000..19973b5 Binary files /dev/null and b/frontend/static/img/playlist.gif differ diff --git a/frontend/static/img/playlist_chat.gif b/frontend/static/img/playlist_chat.gif new file mode 100644 index 0000000..b4b0cf9 Binary files /dev/null and b/frontend/static/img/playlist_chat.gif differ diff --git a/frontend/static/img/pyramid.png b/frontend/static/img/pyramid.png new file mode 100644 index 0000000..f60b5b7 Binary files /dev/null and b/frontend/static/img/pyramid.png differ diff --git a/frontend/static/img/ramshead.png b/frontend/static/img/ramshead.png new file mode 100644 index 0000000..2139510 Binary files /dev/null and b/frontend/static/img/ramshead.png differ diff --git a/frontend/static/img/runner.gif b/frontend/static/img/runner.gif new file mode 100644 index 0000000..7077019 Binary files /dev/null and b/frontend/static/img/runner.gif differ diff --git a/frontend/static/img/scanjam-flipping.gif b/frontend/static/img/scanjam-flipping.gif new file mode 100644 index 0000000..068fbd4 Binary files /dev/null and b/frontend/static/img/scanjam-flipping.gif differ diff --git a/frontend/static/img/scanjam-title.gif b/frontend/static/img/scanjam-title.gif new file mode 100644 index 0000000..ecb0d4a Binary files /dev/null and b/frontend/static/img/scanjam-title.gif differ diff --git a/frontend/static/img/scanjambg2.jpg b/frontend/static/img/scanjambg2.jpg new file mode 100644 index 0000000..2505de2 Binary files /dev/null and b/frontend/static/img/scanjambg2.jpg differ diff --git a/frontend/static/img/scannerjammer-logo.png b/frontend/static/img/scannerjammer-logo.png new file mode 100644 index 0000000..ba2545e Binary files /dev/null and b/frontend/static/img/scannerjammer-logo.png differ diff --git a/frontend/static/img/water-cooler.jpg b/frontend/static/img/water-cooler.jpg new file mode 100644 index 0000000..ad14994 Binary files /dev/null and b/frontend/static/img/water-cooler.jpg differ diff --git a/frontend/static/img/watercoolericon.jpg b/frontend/static/img/watercoolericon.jpg new file mode 100644 index 0000000..b2870eb Binary files /dev/null and b/frontend/static/img/watercoolericon.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313810814_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313810814_ryz.jpg new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/img/webcam/2011/08/19/1313810826_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313810826_ryz.jpg new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/img/webcam/2011/08/19/1313810981_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313810981_ryz.jpg new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/img/webcam/2011/08/19/1313811002_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313811002_ryz.jpg new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/img/webcam/2011/08/19/1313811024_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313811024_ryz.jpg new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/img/webcam/2011/08/19/1313811041_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313811041_ryz.jpg new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/img/webcam/2011/08/19/1313811730_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313811730_ryz.jpg new file mode 100644 index 0000000..3ad4758 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313811730_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313811772_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313811772_ryz.jpg new file mode 100644 index 0000000..c8ee28c Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313811772_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313811923_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313811923_ryz.jpg new file mode 100644 index 0000000..c4f4068 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313811923_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313812087_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313812087_ryz.jpg new file mode 100644 index 0000000..59cdf49 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313812087_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313812093_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313812093_ryz.jpg new file mode 100644 index 0000000..0540f06 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313812093_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313812097_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313812097_ryz.jpg new file mode 100644 index 0000000..dde29ec Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313812097_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313812098_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313812098_ryz.jpg new file mode 100644 index 0000000..eb63234 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313812098_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313812099_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313812099_ryz.jpg new file mode 100644 index 0000000..07ac725 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313812099_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313812490_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313812490_ryz.jpg new file mode 100644 index 0000000..0643cf9 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313812490_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313812564_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313812564_ryz.jpg new file mode 100644 index 0000000..d09772b Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313812564_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313815048_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313815048_ryz.jpg new file mode 100644 index 0000000..a5a4b15 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313815048_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313815411_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313815411_ryz.jpg new file mode 100644 index 0000000..a5a4b15 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313815411_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313815429_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313815429_ryz.jpg new file mode 100644 index 0000000..1186715 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313815429_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/19/1313815522_ryz.jpg b/frontend/static/img/webcam/2011/08/19/1313815522_ryz.jpg new file mode 100644 index 0000000..7902176 Binary files /dev/null and b/frontend/static/img/webcam/2011/08/19/1313815522_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/08/21/1313909058_ryz.jpg b/frontend/static/img/webcam/2011/08/21/1313909058_ryz.jpg new file mode 100644 index 0000000..b003f5f Binary files /dev/null and b/frontend/static/img/webcam/2011/08/21/1313909058_ryz.jpg differ diff --git a/frontend/static/img/webcam/2011/09/26/1317090391_ryz.jpg b/frontend/static/img/webcam/2011/09/26/1317090391_ryz.jpg new file mode 100644 index 0000000..b15bb53 Binary files /dev/null and b/frontend/static/img/webcam/2011/09/26/1317090391_ryz.jpg differ diff --git a/frontend/static/js/admin.js b/frontend/static/js/admin.js new file mode 100644 index 0000000..92a0421 --- /dev/null +++ b/frontend/static/js/admin.js @@ -0,0 +1,119 @@ +var Admin = + { + videos: {}, + viewRoom: function () + { + var videoKey = '' + var hash = document.location.hash + if (hash.indexOf("#") !== -1) + hash = hash.substr(1) + var partz = hash.split("&") + for (i in partz) + { + var pair = partz[i].split("=") + if (pair[0] === "v") + videoKey = pair[1] + } + d.warn("VIEWING ROOM "+Room.name) + $.post(API.URL.room.view, {'room':Room.name,'session':Auth.session,}).success(Admin.viewCallback).error(Admin.viewError) + }, + viewError: function (raw) + { + d.warn(raw) + }, + viewCallback: function (raw) + { + var lines = API.parse("/room/view", raw) + if (! lines) + return d.error("UNABLE TO LOAD ROOM") + var ll = lines.shift().split("\t") + if (ll[0] === '0') + return d.error(ll[1]) + + Lastlog.update(lines.shift()) + Admin.storeVideos(lines) + }, + storeVideos: function (lines) + { + var rows = [] + var lastDate = "" + for (i in lines.reverse()) + { + var row = lines[i].split("\t") + if (row[0].indexOf("ROOM") === 0) + { + Room.updateSetting(row[1],row[2]) + continue + } + if (row[0].indexOf("VIDEO") === 0) + { + var type = "??" + if (row[5].indexOf("youtube") !== -1) + type = "yt" + else if (row[5].indexOf("vimeo") !== -1) + type = "vm" + else if (row[5].indexOf("soundcloud") !== -1) + type = "sc" + else if (row[5].indexOf("mp3") !== -1) + type = "au" + // 0 VIDEO 1 id 2 date 3 userid 4 username 5 url 6 title + var d = new Date(parseInt(row[2])*1000) + var thisDate = makeClockDate(d) + if (thisDate === lastDate) + thisDate = "" + else + lastDate = thisDate + var li = "
  • " + li += ""+thisDate+"" + li += ""+makeClockTime(d)+"" + li += ""+row[4]+"" + li += ""+type+"" + li += ""+row[6]+"" + li += "remove" + li += "
  • " + rows.push(li) + Admin.videos[row[1]] = { id: row[1], title: row[6], username: row[4] } + } + } + $("#videos").css({"display": "inline-block", "vertical-align": "top"}) + $("#videos").html(rows.join("")) + }, + removeVideoClick: function () + { + var id = $(this).attr("id") + var idx = id.substr(id.indexOf("_")+1) + var video = Admin.videos[idx] + d.act("+ remove video "+idx) + if (confirm(video.title+"\nposted by "+video.username+"\n\nThis video will be removed from the queue.")) + $.post(API.URL.video.remove, {session:Auth.session, video:idx, room:Room.name}).success(Admin.removeVideoSuccess) + }, + removeVideoSuccess: function (raw) + { + var lines = API.parse("/video/remove", raw) + if (! lines) + return d.error("UNABLE TO REMOVE VIDEO") + var l = lines.shift().split("\t") + if (l[0] === '0') + { + d.error(l[1]) + return + } + d.warn(l[1]) + $("#video_"+l[0]).fadeOut(500) + } + } +var months = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ") +function makeClockDate(d) + { + var date = d.getDate() + var month = months[d.getMonth()] + return date+"-"+month + } +function makeClockTime(d) + { + var h = d.getHours() + var m = d.getMinutes() + if (m < 10) + m = "0" + m + return h+":"+m + } diff --git a/frontend/static/js/api.js b/frontend/static/js/api.js new file mode 100644 index 0000000..e881f8c --- /dev/null +++ b/frontend/static/js/api.js @@ -0,0 +1,132 @@ +var API = + { + HEADER: "#@scanjam 0.2", + BASE_URL: "http://"+serverHost+":"+serverPort, + URL: + { + auth: + { + login: "/api/auth/login", + logout: "/api/auth/logout", + checkin: "/api/auth/checkin", + sneakin: "/api/auth/sneakin", + }, + room: + { + join: "/api/room/join", + list: "/api/room/list", + view: "/api/room/view", + poll: "/api/room/poll", + watch: "/api/room/watch", + say: "/api/room/say", + settings: "/api/room/settings", + stats: "/stats", + }, + video: + { + date: "/api/video/date", + like: "/api/video/like", + unlike: "/api/video/unlike", + remove: "/api/video/remove", + search: "/api/video/search", + }, + user: + { + settings: "/api/user/settings", + videos: "/api/user/videos", + likes: "/api/user/likes", + }, + }, + error: function (s) + { + d.error("API: "+s) + return false + }, + parse: function (api, raw) + { + if (! raw) + return API.error("no result") + var lines = raw.split("\n") + if (lines.shift() !== API.HEADER) + return API.error("bad header") + if (! lines.length) + return API.error("no content") + return lines + }, + init: function () + { + d.warn("INIT API") + for (type in API.URL) + { + for (name in API.URL[type]) + { + API.URL[type][name] = API.BASE_URL + API.URL[type][name] + } + } + // $.ajaxSetup({ timeout: 1000 }) + } + } +var Local = + { + support: false, + hash: null, + get: null, + set: null, + _html5_get: function (key) + { + var val = localStorage["scanjam."+key] + if (val === "true") return true + if (val === "false") return false + if (val === "undefined") return undefined + return val + }, + _html5_set: function (key, val) + { + if (val === undefined) + localStorage["scanjam."+key] = "" + else + localStorage["scanjam."+key] = val + }, + _hash_get: function (key) + { + if (key in Local.hash) + return Local.hash[key] + }, + _hash_set: function (key, val) + { + Local.hash[key] = val + }, + _supports_html5_storage: function () + { + try + { return 'localStorage' in window && window['localStorage'] !== null; } + catch (e) + { return false } + }, + like: function (videoid) + { Local.set("like."+videoid, true) }, + unlike: function (videoid) + { Local.set("like."+videoid, false) }, + isLiked: function (videoid) + { return Local.get("like."+videoid) }, + init: function () + { + Local.support = Local._supports_html5_storage() + if (Local.support) + { + d.warn("SUPPORTS LOCAL STORAGE") + Local.get = Local._html5_get + Local.set = Local._html5_set + } + else + { + d.error("NO LOCAL STORAGE") + Local.hash = {} + Local.get = Local._hash_get + Local.set = Local._hash_set + } + } + } +API.init() +Local.init() + diff --git a/frontend/static/js/audio.js b/frontend/static/js/audio.js new file mode 100644 index 0000000..de33851 --- /dev/null +++ b/frontend/static/js/audio.js @@ -0,0 +1,142 @@ +var Audio = + { + type: "audio", + loaded: false, + pending: false, + playing: false, + paused: false, + player: null, + playerId: null, + timeout: null, + video: null, + width: "100%", + height: "100%", + volume: 100, + play: function (video) + { + d.warn("AUDIO PLAY "+video.key) + if (video.error) + return Audio.error() + if (Audio.playing) + Audio.stop() + $("#screen").html("
    ") + $("#ytscreen").css("z-index", -2) + Audio.video = video + Audio.playing = false + + var partz = video.src.split(" ") + var img = partz[0] + var url = partz[1] + var title = partz.slice(2).join(" ") + + if (Audio.player) + { + Audio.player.stop() + Audio.player.destruct() + } + Audio.player = soundManager.createSound + ({ + id: "player-"+video.id, + url: url, + volume: Audio.volume, + onfinish: Audio.finish, + onerror: Audio.error, + onload: Audio.onload, + }) + if (! Audio.player) + return Audio.error("no player") + Audio.player.play() + + $("#video-title").html(title) + $("#video-link").attr("href", url) + $("#audio-dl").html('download') + $("#audio-img").html("") + $("#audio-art").bind("error", function(){$("#audio-art").hide()}) + }, + onload: function (success) + { + if (! success) + return Audio.error("failed to load") + }, + toggle: function () + { + d.warn("TOGGLE PLAYBACK") + if (Audio.paused) + return Audio.resume() + else + return Audio.pause() + }, + error: function (s) + { + if (! s) + s = "unspecified error" + Player.error("AUDIO "+s) + Audio.finish() + }, + setVolume: function (vol) + { + Audio.volume = vol + if (Audio.player) + Audio.player.setVolume(vol) + }, + pause: function () + { + d.warn("PAUSED PLAYBACK") + Audio.paused = true + Audio.playing = false + if (Audio.player) + Audio.player.pause() + return true + }, + resume: function () + { + d.warn("RESUME PLAYBACK") + Audio.paused = false + Audio.playing = true + if (Audio.player) + Audio.player.resume() + return false + }, + stop: function () + { + d.warn("AUDIO STOP") + if (Audio.player) + Audio.player.stop() + Audio.playing = false + }, + finish: function () + { + d.warn("AUDIO FINISH") + Audio.playing = false + if (Audio.player) + { + Audio.player.stop() + Audio.player.destruct() + } + Player.finish() + }, + load: function () + { + d.warn("LOADING AUDIO") + Audio.loaded = true + }, + unload: function () + { + d.warn("AUDIO UNLOADED") + if (Audio.player) + { + Audio.player.stop() + Audio.player.destruct() + } + Audio.loaded = false + Audio.playing = false + }, + init: function () + { + d.warn("AUDIO INIT") + } + } +Player.register(Audio) +soundManager.url = '/swf/' +soundManager.useFlashBlock = false +soundManager.debugMode = false diff --git a/frontend/static/js/auth.js b/frontend/static/js/auth.js new file mode 100644 index 0000000..a0c667d --- /dev/null +++ b/frontend/static/js/auth.js @@ -0,0 +1,166 @@ +var Auth = + { + userid: false, + username: false, + session: false, + loaded: false, + access: 0, + login: function () + { + d.warn("LOG IN") + var username = d.trim( $("#login-username").val() ) + var password = d.trim( $("#login-password").val() ) + var pwhash = $.md5("scanjam"+password) + if (! username || ! password) return + Main.enter = false + d.warn("LOGGING IN") + $.post(API.URL.auth.login, {'username':username, 'password': pwhash}, Auth.loginCallback) + $("#chat").hide() + }, + loginCallback: function (raw) + { + var lines = API.parse("/auth/login", raw) + if (! lines.length) return + if (lines[0] !== "OK") + { + alert(lines[0].split("\t")[1]) + return Auth.error() + } + u = lines[1].split("\t") + + Auth.userid = u[0] + Auth.username = u[1] + Auth.session = u[2] + Auth.access = u[3] + + document.cookie = "session="+Auth.session+";path=/;domain=.scannerjammer.com;max-age=1086400" + Auth.success() + }, + checkin: function () + { + d.warn("CHECK IN") + $.post(API.URL.auth.checkin, {'session':Auth.session}, Auth.checkinCallback) + }, + checkinCallback: function (raw) + { + var lines = API.parse("/auth/checkin", raw) + if (! lines.length) return + if (lines[0] !== "OK") + { + alert(lines[0].split("\t")[1]) + return Auth.error() + } + u = lines[1].split("\t") + Auth.userid = u[0] + Auth.username = u[1] + Auth.success() + }, + sneakin: function (userid,username) + { + d.warn("SNEAK IN") + $.post(API.URL.auth.sneakin, {'userid':userid,'username':username}).success(Auth.sneakinCallback) + }, + sneakinCallback: function (raw) + { + var lines = API.parse("/auth/sneakin", raw) + if (! lines.length) return + if (lines[0] !== "OK") + { + alert(lines[0].split("\t")[1]) + return Auth.error() + } + d.joy("snuck in!") + u = lines[1].split("\t") + + Auth.userid = u[0] + Auth.username = u[1] + Auth.session = u[2] + Auth.access = u[3] + + d.warn(lines[1]) + if (! Auth.session) + return + document.cookie = "session="+Auth.session+";path=/;domain=.scannerjammer.com;max-age=1086400" + Auth.success() + }, + logout: function () + { + d.warn("LOG OUT") + clearTimeout(Room.timer) + Room.unload() + Auth.userid = false + Auth.username = false + Local.set('userid', false) + Local.set('username', false) + document.cookie = "session=false;path=/;domain=.scannerjammer.com;max-age=0" + Auth.session = "" + Auth.load() + }, + error: function () + { + Auth.load() + }, + success: function () + { + d.joy("logged in as "+Auth.username) + Auth.unload() + Room.load() + }, + unload: function () + { + d.warn("AUTH UNLOAD") + $("#login").hide() + $("#loading").show() + Keyboard.enter = false + Auth.loaded = false + }, + load: function () + { + d.warn("AUTH LOAD") + $("#loading").hide() + $("#login").show() + $("#login-username").focus() + $("#login-username").keydown(Keyboard.textareaMap) + $("#login-password").keydown(Keyboard.textareaMap) + $("#login-password").val("") + $("#login-go").click(Auth.login) + Keyboard.enter = Auth.login + $("#bg").show() + Auth.loaded = true + }, + init: function () + { + d.warn("INIT AUTH") + if (document.cookie) + { + d.warn("got a cookie") + d.warn(document.cookie) + var cookies = document.cookie.split(";") + for (i in cookies) + { + var cookie = cookies[i].split("=") + if (cookie[0].indexOf("session") !== -1) + { + if (cookie[1] !== 'false' && cookie[1] !== 'undefined') + { + Auth.session = cookie[1] + break + } + } + } + d.warn("got sessionid "+Auth.session) + if (Auth.session) + return true + } + var userid = Local.get('userid') + var username = Local.get('username') + if (userid && username) + { + d.warn("attempting to sneak in "+username) + Auth.sneakin(userid,username) + return true + } + return false + } + } + diff --git a/frontend/static/js/avatar-data.js b/frontend/static/js/avatar-data.js new file mode 100644 index 0000000..3d18fa7 --- /dev/null +++ b/frontend/static/js/avatar-data.js @@ -0,0 +1 @@ +AVATARS = ["arcane2.gif", "21.gif", "39.gif", "22.gif", "51.gif", "63.gif", "42.gif", "6.gif", "43.gif", "30.gif", "13.gif", "23.gif", "70.gif", "34.gif", "9.gif", "33.gif", "4.gif", "17.gif", "29.gif", "5.gif", "28.gif", "57.gif", "20.gif", "50.gif", "18.gif", "8.gif", "12.gif", "64.gif", "3.gif", "69.gif", "49.gif", "71.gif", "11.gif", "36.gif", "56.gif", "46.gif", "37.gif", "19.gif", "40.gif", "15.gif", "10.gif", "24.gif", "41.gif", "67.gif", "38.gif", "66.gif", "48.gif", "26.gif", "72.gif", "14.gif", "54.gif", "65.gif", "27.gif", "32.gif", "62.gif", "25.gif", "68.gif", "45.gif", "59.gif", "61.gif", "47.gif", "53.gif", "60.gif", "16.gif", "44.gif", "2.gif", "52.gif", "1.gif", "55.gif", "31.gif", "7.gif", "58.gif", "35.gif"] diff --git a/frontend/static/js/avatar.js b/frontend/static/js/avatar.js new file mode 100644 index 0000000..11d39d4 --- /dev/null +++ b/frontend/static/js/avatar.js @@ -0,0 +1,236 @@ +var Avatar = + { + orientation: true, + loaded: false, + } +Room.loadCallback = function () { setTimeout(Viewport.fullscreenOn, 500) } +Chat.store = function (lines) + { + var newVideos = [] + var newChat = [] + var postponeScroll = false + for (i in lines) + { + if (! lines[i]) + continue + row = lines[i].split("\t") + if (row[0] === 'VIDEO') + { + row.shift() + if (row[0] in Chat.oldVideo) + continue + Chat.oldVideo[row[0]] = row + Playlist.enqueueOldVideoFormat([row]) + } + else if (row[0] === 'ROOM') + { + Room.updateSetting(row[1],row[2]) + } + else if (row[0] === 'LIKE') + { + username = row[1] + Like.enqueue(username) + } + else if (row[0] === 'CAM') + { + VideoChat.updateCount(row[1]) + } + else + { + // 0 id 1 date 2 user 3 msg + if (row[0] in Chat.oldChat) + continue + Chat.oldChat[row[0]] = row + var c = Chat.parse(row) + if (c.indexOf("> POSTPONING") + } + if (row[2] === Auth.username && $.md5(row[3]) in Chat.messages) + continue + newChat.push(c) + } + } + if (newChat.length) + { + if (Avatar.loaded) + { + $("#chat").append(newChat.join("")) + } + else + { + Avatar.loaded = true + $("#chat").append(newChat[newChat.length-1]) + } + if (postponeScroll) + setTimeout('d.scrollToBottom("#chat")', 2000) + else + d.scrollToBottom("#chat") + } + } +Chat.say = function () + { + d.act("+ sent message") + var msg = d.sanitize( $("#chat-message").val() ) + $("#chat-message").val("") + if (! msg) return + if (msg === "debug=1") { $("#msg").show(); d.scrollToBottom("#msg"); return } + if (msg === "debug=0") { $("#msg").hide(); return } + if (msg === "poll=0") { d.error("+ DISABLED POLLING"); clearTimeout(Chat.timer); return} + if (msg.indexOf("bg=") === 0) { Room.setBg( msg.split("=",2)[1] ); return } + var hash = $.md5(msg) + Chat.messages[hash] = true + var newrow = [0, 0, Auth.username, msg] + // var newdiv = Chat.parse(newrow) + // $("#chat").append(newdiv) + // if (newdiv.indexOf("'+txt+' ' + } + else if (word.indexOf("youtube.com/v/") !== -1) + { + var index = word.indexOf("/v/") + var ytid = "youtube_"+word.substr(index+3,11) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("youtu.be") !== -1) + { + var ytid = "youtube_"+word.substr(16,11) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + // http://www.youtube.com/user/ahchachachacha#p/f/28/1GSBekxLR1E + else if (word.indexOf("youtube.com/user") !== -1) + { + var ytid = "youtube_"+word.substr(-11) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("vimeo.com") !== -1) + { + var vimeoid = word.replace(VIMEOregexp, "vimeo_$3") + if (vimeoid in Player.videos) + txt = Player.videos[vimeoid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("soundcloud.com") !== -1) + { + var scid = "soundcloud_" + $.md5(word) + if (scid in Player.videos) + txt = Player.videos[scid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf(".jpeg") !== -1 || + word.indexOf(".JPG") !== -1 || + word.indexOf(".GIF") !== -1 || + word.indexOf(".PNG") !== -1 || + word.indexOf(".JPEG") !== -1 || + word.indexOf(".jpg") !== -1 || + word.indexOf(".gif") !== -1 || + word.indexOf(".png") !== -1) + { + s += '' + } + else if (word.indexOf("scannerjammer.com/profile") !== -1) + { + var username = word.substr( word.indexOf("profile")+8 ).replace("/","") + s += 'ScannerJammer: '+username+'' + } + else + { + var poffset = word.indexOf('//') + var linktext = word.substr(poffset+2, word.indexOf('/', poffset+2)).replace("www.","") + s += ''+linktext+' ' + } + } + else if (word.indexOf(".com") !== -1 || + word.indexOf(".net") !== -1 || + word.indexOf(".org") !== -1 || + word.indexOf(".us") !== -1 || + word.indexOf(".nu") !== -1 || + word.indexOf(".uk") !== -1 || + word.indexOf(".fr") !== -1 || + word.indexOf(".de") !== -1 || + word.indexOf(".fm") !== -1) + { + var txt = word.replace("www.","") + s += ''+txt+' ' + } + else + s += word + " " + } + if (! avatar.length) + avatar = d.choice(AVATARS) + Avatar.orientation = ! Avatar.orientation + if (Avatar.orientation) + { + var q = '
    ' + q += '
    ' + q += '
    ' + s + '
    ' + return q + } + else + { + var q = [ + '
    ', + '
    ', + s, + '
    ', + '
    ' + ].join("") + return q + } + + return s + } diff --git a/frontend/static/js/calendar.js b/frontend/static/js/calendar.js new file mode 100644 index 0000000..cf70e29 --- /dev/null +++ b/frontend/static/js/calendar.js @@ -0,0 +1,273 @@ +var Keyboard = + { + altMode: false, + fullscreenKeys: function (event) + { + kc = event.keyCode + if (kc === 27) + Viewport.fullscreenOff() + if (kc === 37 || kc === 177) + Player.playPrev() + if (kc === 39 || kc === 176) + Player.playNext() + if (kc === 32 || kc === 179) + Player.toggle() + if (kc === 76) + Player.likeClick() + return false + }, + standardKeys: function (event) + { + kc = event.keyCode + if (kc === 91) + { + Keyboard.altMode = true + return true + } + if (kc === 27) + { + Viewport.fullscreenOn() + return false + } + if (kc === 37 || kc === 177) + { + Player.playPrev() + return false + } + else if (kc === 39 || kc === 176) + { + Player.playNext() + return false + } + if (! Keyboard.altMode && kc === 76) + { + Player.likeClick() + return false + } + if (kc === 32 || kc === 179) + { + Player.toggle() + return false + } + Keyboard.altMode = false + return true + } + } +var Viewport = + { + fullscreenMode: false, + fullscreenOn: function () + { + $("#logo,#logobg,#sitez,#playlist,#playlistbg,#contact,#bg,#gif-container,#controls,#calendar,.furniture").hide() + $("#settings-container").hide() + $(window).unbind("resize") + $(window).bind("resize", Viewport.fullscreenResize) + $(window).unbind("keydown") + $(window).bind("keydown", Keyboard.fullscreenKeys) + Viewport.fullscreenResize() + Viewport.fullscreenMode = true + }, + fullscreenResize: function () + { + $("#projector").css({ position: 'fixed', top: 0, left: 0, width: $(window).width(), height: $(window).height() }) + $("#screen,#ytscreen").css({ width: $(window).width(), height: $(window).height() }) + }, + fullscreenOff: function () + { + $("#logo,#logobg,#sitez,#playlist,#playlistbg,#contact,#bg,#gif-container,#controls,#calendar,.furniture").show() + $(window).unbind("resize") + $(window).bind("resize", Viewport.standardResize) + Viewport.standardResize() + Viewport.fullscreenMode = false + $(window).unbind("keydown") + $(window).bind("keydown", Keyboard.standardKeys) + $("#fullscreen").unbind("click") + $("#fullscreen").bind("click", Viewport.fullscreenOn) + }, + standardResize: function () + { + var w = $(window).width() + var h = $(window).height() + + var ytw = (w)*1/3 + var yth = ytw * 9/16 + + var buttonheight = $("#fullscreen").height() + + var topoffset = 100 + var rightoffset = 100 + + $("#player").css("right", rightoffset) + $("#player").css("top", topoffset) + $("#player").css("height", yth+buttonheight+20) + $("#player,#projector,#screen,#ytscreen").width(ytw) + $("#projector,#screen,#ytscreen").height(yth) + $("#projector").css("position", "absolute") + + $("#controls").css("top", yth+10+10) + var playerHeight = yth+buttonheight+topoffset+10 + + $("#playlist,#playlistbg").css("right", rightoffset) + $("#playlist,#playlistbg").css("top", playerHeight+30) + $("#playlist,#playlistbg").css("width", ytw+19) + $("#playlist,#playlistbg,#queue").css("height", h-playerHeight-50) + + $("#controls").css({ position: 'absolute', top: yth+20, bottom: 'auto', right: 'auto', }) + $("#calendar").css({ top: playerHeight-63, right: rightoffset+ytw+50 }) + } + } + +var Profile = + { + mode: false, + loadQueue: function (queue) + { + if (! queue || ! queue.length) + return + Player.clearQueue() + $("#queue").html("") + Playlist.enqueueOldVideoFormat(queue) + }, + init: function () + { + } + } + +var Room = + { + } +var Poll = + { + room: "main", + delay: 5000, + init: function () + { + if (document.cookie) + { + var cookies = document.cookie.split(";") + for (i in cookies) + { + var cookie = cookies[i].split("=") + if (cookie[0].indexOf("room") !== -1) + { + if (cookie[1] !== 'false' && cookie[1] !== 'undefined') + { + Poll.room = cookie[1] + break + } + } + } + } + Poll.poll() + Viewport.standardResize() + }, + poll: function () + { + $.post(API.URL.room.poll, + { + room: Poll.room, + session: Auth.session, + last: 1, + }).success(Poll.pollCallback).error(Poll.pollErrorCallback) + }, + pollErrorCallback: function () + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + }, + pollCallback: function (raw) + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + } + } + +var Calendar = + { + background: "", + dateLoad: function (y, m, d) + { + var data = + { + year: y, + month: m, + day: d, + } + $.post(API.URL.video.date, data).success(Calendar.dateSuccess) + }, + todayLoad: function () + { + d.warn("today") + $.post(API.URL.video.date).success(Calendar.dateSuccess) + }, + dateSuccess: function (raw) + { + var lines = API.parse("/video/date", raw) + if (! lines.length) return + var videos = [] + for (i in lines) + { + var line = lines[i].split("\t") + if (line[0] === "BG") + { + if (Calendar.background === line[1]) + continue + Calendar.background = line[1] + $("#bg").fadeOut(1000, function () + { + $("#bg img").attr("src", Calendar.background) + $("#bg img").bind("load", function () + { + $("#bg").fadeIn(1000) + $("#bg img").unbind("load") + }) + }) + } + if (line[0] === "VIDEO") + { + line.shift() + videos.push(line) + } + } + Player.clearQueue() + $("#queue").html("") + Playlist.enqueueOldVideoFormat(videos) + }, + onSelect: function (dateText, inst) + { + var datez = dateText.split("-") + Calendar.dateLoad(datez[0], datez[1], datez[2]) + }, + init: function () + { + $('#calendar').datepicker({ + inline: true, + onSelect: Calendar.onSelect, + dateFormat: "yy-m-d", + minDate: new Date(2011, 2, 2), + maxDate: new Date(), + }) + Calendar.todayLoad() + $('#calendar').fadeIn(1000) + } + } + +var Main = + { + init: function () + { + $(window).bind("resize", Viewport.standardResize) + $(window).bind("keydown", Keyboard.standardKeys) + Playlist.showScores = true + Auth.success = Poll.init + if (Auth.init()) + Auth.checkin() + Profile.init() + Player.init() + Like.likeVideoDelay = 6000 + $("#controls").fadeIn(2000) + $("#contact").fadeIn(2000) + setTimeout('Viewport.standardResize()', 1000) + Calendar.init() + } + } +Main.init() + diff --git a/frontend/static/js/chat.js b/frontend/static/js/chat.js new file mode 100644 index 0000000..822e1ee --- /dev/null +++ b/frontend/static/js/chat.js @@ -0,0 +1,280 @@ +var VIMEOregexp = /^(\bhttps?:\/\/)(www.)?vimeo.com\/([0-9]+).*$/i +var Chat = + { + timer: null, + oldChat: {}, + oldVideo: {}, + lastPoll: 0, + delay: 1000, + delayShort: 1000, + delayLong: 5000, + messages: {}, + callback: false, + parse: function (row) + { + var s = '' + row[2] + " " + s += Chat.parseWords(row[3]) + s += "
    " + return s + }, + parseWords: function (raw) + { + if (! raw) + return "" + var words = raw.split(" ") + var s = "" + for (i in words) + { + var word = words[i] + if (word.indexOf("http") !== -1) + { + if (word.indexOf("youtube.com/watch?") !== -1) + { + var ytid = "youtube_"+Youtube.getYtid(word) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("youtube.com/v/") !== -1) + { + var index = word.indexOf("/v/") + var ytid = "youtube_"+word.substr(index+3,11) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("youtu.be") !== -1) + { + var ytid = "youtube_"+word.substr(16,11) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + // http://www.youtube.com/user/ahchachachacha#p/f/28/1GSBekxLR1E + else if (word.indexOf("youtube.com/user") !== -1) + { + var ytid = "youtube_"+word.substr(-11) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("vimeo.com") !== -1) + { + var vimeoid = word.replace(VIMEOregexp, "vimeo_$3") + if (vimeoid in Player.videos) + txt = Player.videos[vimeoid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("soundcloud.com") !== -1) + { + var scid = "soundcloud_" + $.md5(word) + if (scid in Player.videos) + txt = Player.videos[scid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf(".jpeg") !== -1 || + word.indexOf(".JPG") !== -1 || + word.indexOf(".GIF") !== -1 || + word.indexOf(".PNG") !== -1 || + word.indexOf(".JPEG") !== -1 || + word.indexOf(".jpg") !== -1 || + word.indexOf(".gif") !== -1 || + word.indexOf(".png") !== -1) + { + s += '' + } + else if (word.indexOf("scannerjammer.com/profile") !== -1) + { + var username = word.substr( word.indexOf("profile")+8 ).replace("/","") + s += '@'+username+'' + } + // else if (word.indexOf("@") === 0 && word.length > 2) + // { + // } + else + { + var poffset = word.indexOf('//') + var linktext = word.substr(poffset+2, word.indexOf('/', poffset+2) - 2).replace("www.","").replace(/\/+$/,"") + s += ''+linktext+' ' + } + } + else if (word.indexOf(".com") !== -1 || + word.indexOf(".net") !== -1 || + word.indexOf(".org") !== -1 || + word.indexOf(".us") !== -1 || + word.indexOf(".nu") !== -1 || + word.indexOf(".uk") !== -1 || + word.indexOf(".fr") !== -1 || + word.indexOf(".de") !== -1 || + word.indexOf(".fm") !== -1) + { + var txt = word.replace("www.","") + s += ''+txt+' ' + } + else + s += word + " " + } + return s + }, + store: function (lines) + { + var newVideos = [] + var newChat = [] + var postponeScroll = false + for (i in lines) + { + if (! lines[i]) + continue + row = lines[i].split("\t") + if (row[0] === 'VIDEO') + { + row.shift() + if (row[0] in Chat.oldVideo) + continue + Chat.oldVideo[row[0]] = row + Playlist.enqueueOldVideoFormat([row]) + } + else if (row[0] === 'ROOM') + { + Room.updateSetting(row[1],row[2]) + } + else if (row[0] === 'LIKE') + { + username = row[1] + Like.enqueue(username) + } + else if (row[0] === 'CAM') + { + VideoChat.updateCount(row[1]) + } + else + { + // 0 id 1 date 2 user 3 msg + if (row[0] in Chat.oldChat) + continue + Chat.oldChat[row[0]] = row + var c = Chat.parse(row) + if (c.indexOf("> POSTPONING") + } + if (row[2] === Auth.username && $.md5(row[3]) in Chat.messages) + continue + newChat.push(c) + } + } + if (newChat.length) + { + $("#chat").append(newChat.join("")) + if (postponeScroll) + setTimeout('d.scrollToBottom("#chat")', 2000) + else + d.scrollToBottom("#chat") + } + }, + say: function () + { + d.act("+ sent message") + var msg = d.sanitize( $("#chat-message").val() ) + $("#chat-message").val("") + if (! msg) return + if (msg === "debug=1") { $("#msg").show(); d.scrollToBottom("#msg"); return } + if (msg === "debug=0") { $("#msg").hide(); return } + if (msg === "poll=0") { d.error("+ DISABLED POLLING"); clearTimeout(Chat.timer); return} + var hash = $.md5(msg) + Chat.messages[hash] = true + var newrow = [0, 0, Auth.username, msg] + var newdiv = Chat.parse(newrow) + $("#chat").append(newdiv) + // if (Chat.callback) + // Chat.callback(1) + if (newdiv.indexOf(""+names[i]+"" + } + $("#lastlog").html(s) + $("#lastlogbg").css("height", $("#lastlogbox").height()) + } + } diff --git a/frontend/static/js/debug.js b/frontend/static/js/debug.js new file mode 100644 index 0000000..1a3339f --- /dev/null +++ b/frontend/static/js/debug.js @@ -0,0 +1,130 @@ +var d = + { + DEBUG: false, + act: function (s) + { + // $('#msg').append(''+s+'
    ') + // d.scrollToBottom("#msg") + // if (d.DEBUG) + // console.log(s) + return false + }, + joy: function (s) + { + // $('#msg').append(''+s+'
    ') + // d.scrollToBottom("#msg") + // if (d.DEBUG) + // console.log(s) + return false + }, + warn: function (s) + { + // $('#msg').append(s+'
    ') + // d.scrollToBottom("#msg") + // if (d.DEBUG) + // console.log(s) + return false + }, + error: function (s) + { + // $('#msg').append('ERROR: '+s+'
    ') + // d.scrollToBottom("#msg") + // console.log(s) + return false + }, + noop: function () {}, + scrollToTop: function (elem) + { + $(elem).scrollTop( 0 ) + }, + scrollToBottom: function (elem) + { + try + { + $(elem).scrollTop( $(elem)[0].scrollHeight ) + } + catch (err) + { + } + }, + pageUp: function (div) + { + var st = $(div).scrollTop() + var h = $(window).height() + d.warn("PAGEUP: "+st+" "+h) + $(div).scrollTop( st - (2/3) * h ) + var st = $(div).scrollTop() + d.warn("ST NOW: "+st+" "+h) + }, + pageDown: function (div) + { + var st = $(div).scrollTop() + var h = $(window).height() + $(div).scrollTop( st + (2/3) * h ) + }, + choice: function (list) + { + return list[Math.floor (Math.random () * list.length)] + }, + trim: function (s) + { + if (s) + return s.replace(/^\s+|\s+$/g,"") + else + return "" + }, + sanitizeWithNewlines: function (s) + { + if (s) + return d.trim( s ).replace(//g,">").replace(/\"/g,""").replace(/\0/g,"") + return "" + }, + sanitize: function (s) + { + if (s) + return d.trim( s ).replace(//g,">").replace(/\"/g,""").replace(/\n/g,"").replace(/\r/g,"").replace(/\0/g,"") + return "" + }, + linkify: function (s) + { + var words = s.split(" ") + var checked = [] + for (i in words) + { + var word = words[i] + if (words[i].indexOf("http") === 0) + { + var poffset = word.indexOf('//') + var linktext = word.substr(poffset+2, word.indexOf('/', poffset+2)) + checked.push(''+linktext+'') + } + else + checked.push(word) + } + return checked.join(" ") + }, + enableStylesheet: function (style) + { + $("link[@rel*=style][title]").each(function (i) + { + if (this.getAttribute('title') == style) + this.disabled = false + }) + }, + disableStylesheet: function (style) + { + $("link[@rel*=style][title]").each(function (i) + { + if (this.getAttribute('title') == style) + this.disabled = true + }) + }, + buildLookup: function (list) + { + var lookup = {} + for (var i = 0; i < list.length; i++) + lookup[list[i]] = true + return lookup + } + } + diff --git a/frontend/static/js/dump.js b/frontend/static/js/dump.js new file mode 100644 index 0000000..d6ca3c1 --- /dev/null +++ b/frontend/static/js/dump.js @@ -0,0 +1,2 @@ +$("#bg").html('') +// $("#chatbg,#playlistbg").css({ 'background-color': '#fff' }) diff --git a/frontend/static/js/embed.js b/frontend/static/js/embed.js new file mode 100644 index 0000000..d52c7a0 --- /dev/null +++ b/frontend/static/js/embed.js @@ -0,0 +1,142 @@ +var VIMEOregexp = /^(\bhttps?:\/\/)(www.)?vimeo.com\/([0-9]+).*$/i +var stWidget = {addEntry:function(){}} +var Room = + { + load: function () + { + } + } +var Keyboard = + { + standardMap: function (event) + { + kc = event.keyCode + if (kc === 27) // && Room.loaded) + { + Menu.close() + Viewport.fullscreenOn() + return false + } + if (kc === 37 || kc === 177) + Player.playPrev() + if (kc === 39 || kc === 176) + Player.playNext() + if (kc === 32 || kc === 179) + Player.pause() + if (kc === 76) + Player.likeClick() + event.preventDefault() + } + } +var Viewport = + { + resize: function () + { + var w = $(window).width() + var h = $(window).height() + var ytw = w + var yth = ytw * 3/4 + + var conheight = $("#controls").height() + $("#player").css("height", yth+conheight+40) + $("#player").css("top", 0).css("left", 0) + $("#player,#projector,#screen,#ytscreen").width(ytw) + $("#projector,#screen,#ytscreen").height(yth) + + $("#controls").css("top", yth) + var playerTop = yth+15 + + $("#playlist,#playlistbg").css("top", playerTop+20) + $("#playlist,#playlistbg").css("width", '100%') + $("#playlist,#playlistbg,#queue").css("height", h-playerTop-20) + } + } +var Poll = + { + room: roomName, + last: "1", + delay: 60 * 1000, + init: function () + { + if (Auth.init()) + { + Poll.poll = Poll.pollAuth + Poll.delay = 3 * 1000 + Auth.success = Poll.poll + Auth.checkin () + } + else + { + Poll.poll = Poll.pollFree + Poll.poll() + } + }, + poll: function () {}, + pollAuth: function () + { + $.post(API.URL.room.poll, + { + room: Poll.room, + session: Auth.session, + last: 1, + }).success(Poll.pollCallback).error(Poll.pollErrorCallback) + }, + pollFree: function () + { + $.post(API.URL.room.watch, + { + room: Poll.room, + last: Poll.last, + }).success(Poll.pollCallback).error(Poll.pollErrorCallback) + }, + pollErrorCallback: function () + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + }, + pollCallback: function (raw) + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + var lines = raw.split("\n") + lines.shift() + Poll.last = d.trim( lines.shift() ) + var videos = [] + for (i in lines) + { + if (lines[i].indexOf("VIDEO") === 0) + { + var row = lines[i].split("\t") + row.shift() + videos.push(row) + } + } + if (videos.length) + { + Playlist.enqueueOldVideoFormat(videos) + } + } + } + +var Main = + { + init: function () + { + if (roomName === "disaro") + $("title").html("DISARO 20†† RADIO") + else if (roomName === "main") + $("title").html("SCANNERJAMMER RADIO") + else if (roomName === "sewergreats") + $("title").html("SEWER GREATS RADIO") + else + $("title").html(roomName.toUpperCase()+" RADIO") + $(window).bind("resize", Viewport.resize) + Viewport.resize() + $(window).bind("keydown", Keyboard.standardMap) + Poll.init() + Player.init() + Playlist.init() + $("#mute").bind("click", Player.muteClick) + setTimeout('Player.start()', 2000) + Player.queueOffset = 0 + } + } +Main.init() diff --git a/frontend/static/js/glitter-data.js b/frontend/static/js/glitter-data.js new file mode 100644 index 0000000..56787f2 --- /dev/null +++ b/frontend/static/js/glitter-data.js @@ -0,0 +1 @@ +GLITTER_DATA = ["Young-Red-Witch.gif", "You-Want-It-Come-and-Get-It.gif", "Winnie-Glitter-2.gif", "XoXo-Hearts.gif", "Winnie-Glitter.gif", "woman-style-lipstick-makeup.gif", "Yellow-Bird.gif", "Wings-2.gif", "Wings-5.gif", "Washington-Redskins.gif", "Vibrate-Me.gif", "Tweety-Bird-Dancing.gif", "Two-Sexy-Gals.gif", "Vibrate-Me-1.gif", "Tinkerbell.gif", "Tired-Puppy.gif", "Tinkerbell-Green-Dress.gif", "Tinkerbell-Flying.gif", "tiger_eye_sparkle.gif", "thanksc.gif", "Tinkerbell-Dreamy.gif", "Thank-You-Friend.gif", "Tear-Drop-Fairy.gif", "Texas-Rangers.gif", "Teddy-Bear-Glitter.gif", "Tampa-Bay-Devilrays.gif", "St-Louis-Rams.gif", "Tear-Drop-Fairy-1.gif", "staypunk-sparkle-cross.gif", "Sucker.gif", "sparkle-logo.gif", "Spanish-Beauty.gif", "Spank-Me.gif", "Spank-Me-1.gif", "Silver-Flower-Face.gif", "Sleek-Red.gif", "Simply-Pink.gif", "Some-Like-It-hot.gif", "Soft-Ice-Cream.gif", "Showing-Sexy-Luv.gif", "Silver-Cross.gif", "Sharing-Fruit.gif", "Sexy-White-Hair.gif", "Show-It-To-Me.gif", "showin_some_love_reflecting_rosebud.gif", "Sexy-Cape.gif", "Sexy-Flower-Bed.gif", "Sexy-Silver.gif", "Sexy-Star.gif", "sexy-100.gif", "Sexy-Blue-Hearts.gif", "Sexy-Bitch-Leoppard-1.gif", "Sexy-Bitch-Leoppard.gif", "Sexy-Black-White.gif", "Set-Me-free.gif", "Riding-Roses.gif", "Rose.gif", "Samurai-Chick.gif", "Red-Umbrella.gif", "Res-Fantasy-Sky.gif", "Red-Haze-Fairy.gif", "Red-Rose-Glitter.gif", "Red-Hair-Glitter.gif", "Red-Head-Goth.gif", "Purple-Flower-and-Butterfly.gif", "proud-mom-aunt.gif", "Red-Flower.gif", "Purple-Gal.gif", "Purple-Glitter-Flower.gif", "Powerpuff-Blossom.gif", "Princess-Fairy.gif", "Potty-Head-Care-Bear.gif", "Playboy-Purple.gif", "Playboy-Pink.gif", "Playboy-Silver.gif", "Playboy-Bunny-Pink.gif", "Playboy-Orange.gif", "Playboy-24.gif", "Playboy-4.gif", "Playboy-047.gif", "Playboy-Blue.gif", "Playboy-9.gif", "Playboy-5.gif", "Pittsburgh-Penguins.gif", "Playboy-032.gif", "Playboy-029.gif", "Playboy-036.gif", "Playboy-045.gif", "Pink-Lips-High-Heals.gif", "Pink-Shoe.gif", "Pink-Godess.gif", "pinkcowgirl.gif", "Pink-Heart-Dolphins.gif", "Pink-Glitter-Star.gif", "Pink-Bitches.gif", "Pink-Fantashy-Hearts.gif", "Philadelphia-Phillies.gif", "Philadelphia-Eagles.gif", "Phoenix-Coyotes.gif", "Overlooking-Fairy.gif", "Philadelphia-Eagles-1.gif", "Parental-Advisor.gif", "Palm-Tree.gif", "penis.gif", "Orange-Love.gif", "Orange-Eyes.gif", "Ninja-Turtle.gif", "Oh-My.gif", "Nice-Brow.gif", "New-York-Yankees.gif", "never-give-up.gif", "new-year-29.gif", "New-England-Patriots.gif", "myspace-flower-rose.gif", "Naughty-Pink.gif", "Naught-Girl-Grey.gif", "Music-Note-Glitter.gif", "Marilyn-Silver-Sparkle.gif", "Mushroom-Fairy.gif", "Muscle-Legs.gif", "Mickey.gif", "Minnesota-Wild.gif", "Long-Legs.gif", "Los-Angeles-Dodgers.gif", "Love-The-Lord.gif", "Marilyn-Silver-Sparkle-1.gif", "Live-For-Jesus.gif", "lindsay-lohan.gif", "Leopard-Legs.gif", "LETS-KISS.gif", "Kumba.gif", "Kansas-City-Chiefs.gif", "kisses-for-my-valentine-glitter.gif", "Kinky-Care-Bear.gif", "Kite-Care-Bear.gif", "ice-cream-cone-dessert-sweet-smile.gif", "Im-such-a-Bad-Girl.gif", "I-Love-Mickey.gif", "Jazz.gif", "Hot-Stuff.gif", "Hot-Pink-Bikini.gif", "Houston-Texans.gif", "Hot-Pink-Lady.gif", "Howdy-Hat.gif", "Hot-Long-Hair.gif", "Honey.gif", "Hot-Jail-Babe.gif", "Here-Big-Boy.gif", "Hello-Blue-Roses.gif", "Hello-Rose.gif", "Hi-Sexy-Red.gif", "Hollow-Heart-Red.gif", "Heart-Underwear.gif", "Have-Dreams.gif", "He-Died-For-you.gif", "Have-A-Beautiful-Day.gif", "happy-new-year.gif", "happy-new-year-computer.gif", "happy-new-year-524.gif", "happy-new-year-527.gif", "gtmc048.gif", "gtmc058.gif", "Happy-Feb-14th-Arrow-Heart.gif", "gtmc079.gif", "gtmc072.gif", "gtmc067.gif", "gtmc034.gif", "gtmc039.gif", "gtmc037.gif", "gtmc041.gif", "Green-Palm-Tree.gif", "Gorgeous-Pink-Flowers.gif", "goodbye7(combine).gif", "Gorgeous-Fairy.gif", "Ghetto-Booty.gif", "Getting-Ready.gif", "glitterfriend38.gif", "flirting-my-way-to-the-top.gif", "flowers.gif", "Fur-Cowgirl.gif", "Florida-Marlins.gif", "Fantasy-Fairy.gif", "Fantasy-Fairy-5.gif", "Fendi-Yellow.gif", "Fantasy-Fairy-8.gif", "Fairy-Wings-5.gif", "Fantasy-Fairy-4.gif", "Fairy-Wings-4.gif", "Fantasy-Fairy-10.gif", "Fairy-Waterfalls.gif", "Fairy-Fantasy-5.gif", "Fairy-Chest.gif", "Fairy-Caught-in-Jar.gif", "Fairy-23.gif", "Fairy-18.gif", "egypt_320_320_256_9223372036854775000_0_1_0.gif", "eye-glitter.gif", "egypt_320_256_9223372036854775000_0_1_0.gif", "Drppin-By-To-Say-hellow.gif", "Droppin-In-To-Say-Hello.gif", "egypt.gif", "Eeyore-Angel.gif", "dreamer.gif", "Dirty-Little-Secret.gif", "Dolphin-Animated.gif", "Cuban-Babe.gif", "Cupid-Just-Struck.gif", "date13.gif", "Colour-My-World.gif", "Cone-Get-It.gif", "Close-Girlfriends.gif", "Colorado-Rockies.gif", "cleopatra-elizabeth-liz-taylor-dress-babe.gif", "Cleveland-Indians.gif", "christmas-sexy6.gif", "christian_symbol07.gif", "christmas-sexy11.gif", "Chicago-Whitesox.gif", "Chicago-Cubs.gif", "Cherries.gif", "Chicago-Bears.gif", "Cat-Fairy.gif", "Cheetah-Chick.gif", "Cherries-Glittler.gif", "Cell-Phone-Glitter.gif", "Butterfly-Girl.gif", "California-Angels.gif", "Blue-Purple-Shoe.gif", "Buffalo-Bills.gif", "Bulls.gif", "Broken-heart-Pink.gif", "Burger-King-Glitter.gif", "Booty-Call.gif", "Blue-Care-Bear.gif", "Blue-Dolphin.gif", "Blue-Flower-03.gif", "Blue-Flower-02.gif", "Blue-Cape-Fairy.gif", "Blue-Butterfly-Heaven.gif", "Bloody-Vampire.gif", "Black-Kisses.gif", "Black-Razzers.gif", "blonde_gold_sparkle.gif", "Belly-Dnacer.gif", "Belly-Dancer.gif", "Belle-Glitter.gif", "beauty-red-rose-sparkle.gif", "Bible-Diet.gif", "beautiful-unicorn-magical-sparkle.gif", "Beautiful-Friendship.gif", "Beat-Hell.gif", "Baltimore-Orioles.gif", "Baltimore-Ravens.gif", "Atlanta-Falcons.gif", "awkward_pink_purple_glitter_wiggle.gif", "babe-bikini-butt-ass-face.gif", "Atlanta-Braves.gif", "Arizona-Cardinals.gif", "Arizona-Diamondbacks.gif", "ani-sparkle-fountain.gif", "American-Sexy-Thing.gif", "Aloha-Girl.gif", "American-Sexy-Thing-1.gif", "American-Flag-Heart.gif", "Air-Plane.gif", "1292462203316-dumpfm-yrmomvsmymom-sparkle.gif", "aaliyah.gif", "99-percent-tejana-and-1-percent-floridian.gif", "100-Percent-Sexy-Cowgirl.gif"] diff --git a/frontend/static/js/glitter.js b/frontend/static/js/glitter.js new file mode 100644 index 0000000..9aed159 --- /dev/null +++ b/frontend/static/js/glitter.js @@ -0,0 +1,108 @@ +var Glitter = + { + path: "/img/glitter/", + delay: 50, + count: 0, + radius: $(window).height() / 3, + direction: false, + centerX: $(window).width() * 2 / 7, + centerY: $(window).height() / 3, + loopTimer: false, + loopers: [], + rotate: function (id, angle, radius, direction, opacity) + { + if (direction) + angle += 2 + else + angle -= 2 + radians = angle * Math.PI / 180 + newX = Math.sin(radians) * radius + Glitter.centerX + newY = Math.cos(radians) * radius + Glitter.centerY + $(id).css({ "left": newX, "top": newY, "opacity": opacity/100 }) + opacity -= 1 + if (opacity === 0) + { + $(id).remove() + return false + } + return [id, angle, radius, direction, opacity] + }, + loop: function () + { + var newLoopers = [] + for (i in Glitter.loopers) + { + var l = Glitter.loopers[i] + var r = Glitter.rotate(l[0], l[1], l[2], l[3], l[4]) + if (r) + newLoopers.push(r) + } + Glitter.loopers = newLoopers + Glitter.loopTimer = setTimeout(Glitter.loop, Glitter.delay) + }, + go: function () + { + Glitter.count += 1 + // if (Glitter.count % 20 === 0) + // Glitter.direction = ! Glitter.direction + var index = Math.floor( Math.random() * GLITTER_DATA.length ) + var radius = Glitter.radius + Math.floor( Math.random() * 100 ) + var angle = Math.floor( Math.random() * 360 ) + var opacity = 100 + var newsrc = GLITTER_DATA[index] + var newid = "glitter_" + Glitter.count + var newdiv = "
    " + // console.log(newdiv) + $("body").append(newdiv) + Glitter.loopers.push(["#"+newid, angle, radius, Glitter.direction, opacity]) + if (! Glitter.loopTimer) + Glitter.loop() + }, + generate: function (count) + { + if (count > 1) + count = 1 + for (var i = 0; i < count; i++) + setTimeout(Glitter.go, 50) + }, + oldTextareaMap: Keyboard.textareaMap, + oldStandardMap: Keyboard.standardMap, + oldFullscreenMap: Keyboard.fullscreenMap, + fullscreenMap: function (event) + { + Chat.callback(1) + return Glitter.oldFullscreenMap(event) + }, + standardMap: function (event) + { + Chat.callback(1) + return Glitter.oldStandardMap(event) + }, + textareaMap: function (event) + { + Chat.callback(1) + return Glitter.oldTextareaMap(event) + }, + init: function () + { + $("#glitter-go").bind("click", Glitter.go) + $("#flower img").attr("src", "/img/glitter_flower.gif") + Chat.callback = Glitter.generate + Like.likeVideoDelay = 10000 + var newtitle = "" + setTimeout('$("#heading").html("'+newtitle+'")', 6000) + $("#topic").css({position:"fixed", top: 40, left: 750}) + Room.loadCallback = function () + { + setTimeout(Viewport.fullscreenOn, 500) + setTimeout('$("#logobg").css({width: "100%"})', 1000) + Keyboard.textareaMap = Glitter.textareaMap + Keyboard.standardMap = Glitter.standardMap + Keyboard.fullscreenMap = Glitter.fullscreenMap + Keyboard.focusTextarea() + } + }, + } +Glitter.init() + + diff --git a/frontend/static/js/jquery-1.5.2.min.js b/frontend/static/js/jquery-1.5.2.min.js new file mode 100644 index 0000000..f78f96a --- /dev/null +++ b/frontend/static/js/jquery-1.5.2.min.js @@ -0,0 +1,16 @@ +/*! + * jQuery JavaScript Library v1.5.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Mar 31 15:28:23 2011 -0400 + */ +(function(a,b){function ci(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cf(a){if(!b_[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";b_[a]=c}return b_[a]}function ce(a,b){var c={};d.each(cd.concat.apply([],cd.slice(0,b)),function(){c[this]=a});return c}function b$(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bZ(){try{return new a.XMLHttpRequest}catch(b){}}function bY(){d(a).unload(function(){for(var a in bW)bW[a](0,1)})}function bS(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function P(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function H(a,b){return(a&&a!=="*"?a+".":"")+b.replace(t,"`").replace(u,"&")}function G(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,p=[],q=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function E(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function y(){return!0}function x(){return!1}function i(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function h(a,c,e){if(e===b&&a.nodeType===1){e=a.getAttribute("data-"+c);if(typeof e==="string"){try{e=e==="true"?!0:e==="false"?!1:e==="null"?null:d.isNaN(e)?g.test(e)?d.parseJSON(e):e:parseFloat(e)}catch(f){}d.data(a,c,e)}else e=b}return e}var c=a.document,d=function(){function G(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(G,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x,y,z=Object.prototype.toString,A=Object.prototype.hasOwnProperty,B=Array.prototype.push,C=Array.prototype.slice,D=String.prototype.trim,E=Array.prototype.indexOf,F={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.2",length:0,size:function(){return this.length},toArray:function(){return C.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?B.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),x.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(C.apply(this,arguments),"slice",C.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:B,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;x.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=d._Deferred();if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",y,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",y),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&G()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):F[z.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!A.call(a,"constructor")&&!A.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||A.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1?f.call(arguments,0):c,--g||h.resolveWith(h,f.call(b,0))}}var b=arguments,c=0,e=b.length,g=e,h=e<=1&&a&&d.isFunction(a.promise)?a:d.Deferred();if(e>1){for(;c
    a";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0,reliableMarginRight:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e)}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(a.style.width="1px",a.style.marginRight="0",d.support.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(a,null).marginRight,10)||0)===0),b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function");return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}}();var g=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!i(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,g=b.nodeType,h=g?d.cache:b,j=g?b[d.expando]:d.expando;if(!h[j])return;if(c){var k=e?h[j][f]:h[j];if(k){delete k[c];if(!i(k))return}}if(e){delete h[j][f];if(!i(h[j]))return}var l=h[j][f];d.support.deleteExpando||h!=a?delete h[j]:h[j]=null,l?(h[j]={},g||(h[j].toJSON=d.noop),h[j][f]=l):g&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var f=this[0].attributes,g;for(var i=0,j=f.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var j=i?f:0,k=i?f+1:h.length;j=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=m.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&n.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var k=a.getAttributeNode("tabIndex");return k&&k.specified?k.value:o.test(a.nodeName)||p.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var l=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return l===null?b:l}h&&(a[c]=e);return a[c]}});var r=/\.(.*)$/,s=/^(?:textarea|input|select)$/i,t=/\./g,u=/ /g,v=/[^\w\s.|`]/g,w=function(a){return a.replace(v,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=x;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(a){return typeof d!=="undefined"&&d.event.triggered!==a.type?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=x);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),w).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(r,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=a.type,l[m]())}catch(p){}k&&(l["on"+m]=k),d.event.triggered=b}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},D=function D(a){var c=a.target,e,f;if(s.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=C(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:D,beforedeactivate:D,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&D.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&D.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",C(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in B)d.event.add(this,c+".specialChange",B[c]);return s.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return s.test(this.nodeName)}},B=d.event.special.change.filters,B.focus=B.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function f(a){var c=d.event.fix(a);c.type=b,c.originalEvent={},d.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var e=0;d.event.special[b]={setup:function(){e++===0&&c.addEventListener(a,f,!0)},teardown:function(){--e===0&&c.removeEventListener(a,f,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return"text"===c&&(b===c||b===null)},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=N.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(P(c[0])||P(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=M.call(arguments);I.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!O[a]?d.unique(f):f,(this.length>1||K.test(e))&&J.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var R=/ jQuery\d+="(?:\d+|null)"/g,S=/^\s+/,T=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,U=/<([\w:]+)/,V=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};Z.optgroup=Z.option,Z.tbody=Z.tfoot=Z.colgroup=Z.caption=Z.thead,Z.th=Z.td,d.support.htmlSerialize||(Z._default=[1,"div
    ","
    "]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(R,""):null;if(typeof a!=="string"||X.test(a)||!d.support.leadingWhitespace&&S.test(a)||Z[(U.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(T,"<$1>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){ba(a,e),f=bb(a),g=bb(e);for(h=0;f[h];++h)ba(f[h],g[h])}if(b){_(a,e);if(c){f=bb(a),g=bb(e);for(h=0;f[h];++h)_(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||W.test(i)){if(typeof i==="string"){i=i.replace(T,"<$1>");var j=(U.exec(i)||["",""])[1].toLowerCase(),k=Z[j]||Z._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=V.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&S.test(i)&&m.insertBefore(b.createTextNode(S.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bd=/alpha\([^)]*\)/i,be=/opacity=([^)]*)/,bf=/-([a-z])/ig,bg=/([A-Z]|^ms)/g,bh=/^-?\d+(?:px)?$/i,bi=/^-?\d/,bj={position:"absolute",visibility:"hidden",display:"block"},bk=["Left","Right"],bl=["Top","Bottom"],bm,bn,bo,bp=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bm(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bm)return bm(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bf,bp)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bq(a,b,e):d.swap(a,bj,function(){f=bq(a,b,e)});if(f<=0){f=bm(a,b,b),f==="0px"&&bo&&(f=bo(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bh.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return be.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bd.test(f)?f.replace(bd,e):c.filter+" "+e}}),d(function(){d.support.reliableMarginRight||(d.cssHooks.marginRight={get:function(a,b){var c;d.swap(a,{display:"inline-block"},function(){b?c=bm(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bn=function(a,c,e){var f,g,h;e=e.replace(bg,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bo=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bh.test(d)&&bi.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bm=bn||bo,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var br=/%20/g,bs=/\[\]$/,bt=/\r?\n/g,bu=/#.*$/,bv=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bw=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bx=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,by=/^(?:GET|HEAD)$/,bz=/^\/\//,bA=/\?/,bB=/)<[^<]*)*<\/script>/gi,bC=/^(?:select|textarea)/i,bD=/\s+/,bE=/([?&])_=[^&]*/,bF=/(^|\-)([a-z])/g,bG=function(a,b,c){return b+c.toUpperCase()},bH=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bI=d.fn.load,bJ={},bK={},bL,bM;try{bL=c.location.href}catch(bN){bL=c.createElement("a"),bL.href="",bL=bL.href}bM=bH.exec(bL.toLowerCase())||[],d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bI)return bI.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("
    ").append(c.replace(bB,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bC.test(this.nodeName)||bw.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(bt,"\r\n")}}):{name:b.name,value:c.replace(bt,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bL,isLocal:bx.test(bM[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bO(bJ),ajaxTransport:bO(bK),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bR(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bS(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bF,bG)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bv.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bu,"").replace(bz,bM[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bD),e.crossDomain==null&&(q=bH.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bM[1]||q[2]!=bM[2]||(q[3]||(q[1]==="http:"?80:443))!=(bM[3]||(bM[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bP(bJ,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!by.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(bA.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bE,"$1_="+w);e.url=x+(x===e.url?(bA.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bP(bK,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bQ(g,a[g],c,f);return e.join("&").replace(br,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bT=d.now(),bU=/(\=)\?(&|$)|\?\?/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bT++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bU.test(b.url)||f&&bU.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bU,l),b.url===j&&(f&&(k=k.replace(bU,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bV=d.now(),bW,bX;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bZ()||b$()}:bZ,bX=d.ajaxSettings.xhr(),d.support.ajax=!!bX,d.support.cors=bX&&"withCredentials"in bX,bX=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),!a.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bW[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bW||(bW={},bY()),h=bV++,g.onreadystatechange=bW[h]=c):c()},abort:function(){c&&c(0,1)}}}});var b_={},ca=/^(?:toggle|show|hide)$/,cb=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cc,cd=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(ce("show",3),a,b,c);for(var g=0,h=this.length;g=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:ce("show",1),slideUp:ce("hide",1),slideToggle:ce("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!cc&&(cc=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b
    ";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=(e==="absolute"||e==="fixed")&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=ch.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!ch.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=ci(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=ci(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window); \ No newline at end of file diff --git a/frontend/static/js/jquery.md5.js b/frontend/static/js/jquery.md5.js new file mode 100644 index 0000000..0333717 --- /dev/null +++ b/frontend/static/js/jquery.md5.js @@ -0,0 +1,230 @@ + + /** + * jQuery MD5 hash algorithm function + * + * + * Calculate the md5 hash of a String + * String $.md5 ( String str ) + * + * + * Calculates the MD5 hash of str using the » RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. + * MD5 (Message-Digest algorithm 5) is a widely-used cryptographic hash function with a 128-bit hash value. MD5 has been employed in a wide variety of security applications, and is also commonly used to check the integrity of data. The generated hash is also non-reversable. Data cannot be retrieved from the message digest, the digest uniquely identifies the data. + * MD5 was developed by Professor Ronald L. Rivest in 1994. Its 128 bit (16 byte) message digest makes it a faster implementation than SHA-1. + * This script is used to process a variable length message into a fixed-length output of 128 bits using the MD5 algorithm. It is fully compatible with UTF-8 encoding. It is very useful when u want to transfer encrypted passwords over the internet. If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). + * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin. + * + * Example + * Code + * + * $.md5("I'm Persian."); + * + * Result + * + * "b8c901d0f02223f9761016cfff9d68df" + * + * + * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com > + * @link http://www.semnanweb.com/jquery-plugin/md5.html + * @see http://www.webtoolkit.info/ + * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License] + * @param {jQuery} {md5:function(string)) + * @return string + */ + + (function($){ + + var rotateLeft = function(lValue, iShiftBits) { + return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); + } + + var addUnsigned = function(lX, lY) { + var lX4, lY4, lX8, lY8, lResult; + lX8 = (lX & 0x80000000); + lY8 = (lY & 0x80000000); + lX4 = (lX & 0x40000000); + lY4 = (lY & 0x40000000); + lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); + if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8); + if (lX4 | lY4) { + if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); + else return (lResult ^ 0x40000000 ^ lX8 ^ lY8); + } else { + return (lResult ^ lX8 ^ lY8); + } + } + + var F = function(x, y, z) { + return (x & y) | ((~ x) & z); + } + + var G = function(x, y, z) { + return (x & z) | (y & (~ z)); + } + + var H = function(x, y, z) { + return (x ^ y ^ z); + } + + var I = function(x, y, z) { + return (y ^ (x | (~ z))); + } + + var FF = function(a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); + }; + + var GG = function(a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); + }; + + var HH = function(a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); + }; + + var II = function(a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); + }; + + var convertToWordArray = function(string) { + var lWordCount; + var lMessageLength = string.length; + var lNumberOfWordsTempOne = lMessageLength + 8; + var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64; + var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16; + var lWordArray = Array(lNumberOfWords - 1); + var lBytePosition = 0; + var lByteCount = 0; + while (lByteCount < lMessageLength) { + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition)); + lByteCount++; + } + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); + lWordArray[lNumberOfWords - 2] = lMessageLength << 3; + lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; + return lWordArray; + }; + + var wordToHex = function(lValue) { + var WordToHexValue = "", WordToHexValueTemp = "", lByte, lCount; + for (lCount = 0; lCount <= 3; lCount++) { + lByte = (lValue >>> (lCount * 8)) & 255; + WordToHexValueTemp = "0" + lByte.toString(16); + WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2); + } + return WordToHexValue; + }; + + var uTF8Encode = function(string) { + string = string.replace(/\x0d\x0a/g, "\x0a"); + var output = ""; + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + if (c < 128) { + output += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + output += String.fromCharCode((c >> 6) | 192); + output += String.fromCharCode((c & 63) | 128); + } else { + output += String.fromCharCode((c >> 12) | 224); + output += String.fromCharCode(((c >> 6) & 63) | 128); + output += String.fromCharCode((c & 63) | 128); + } + } + return output; + }; + + $.extend({ + md5: function(string) { + var x = Array(); + var k, AA, BB, CC, DD, a, b, c, d; + var S11=7, S12=12, S13=17, S14=22; + var S21=5, S22=9 , S23=14, S24=20; + var S31=4, S32=11, S33=16, S34=23; + var S41=6, S42=10, S43=15, S44=21; + string = uTF8Encode(string); + x = convertToWordArray(string); + a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; + for (k = 0; k < x.length; k += 16) { + AA = a; BB = b; CC = c; DD = d; + a = FF(a, b, c, d, x[k+0], S11, 0xD76AA478); + d = FF(d, a, b, c, x[k+1], S12, 0xE8C7B756); + c = FF(c, d, a, b, x[k+2], S13, 0x242070DB); + b = FF(b, c, d, a, x[k+3], S14, 0xC1BDCEEE); + a = FF(a, b, c, d, x[k+4], S11, 0xF57C0FAF); + d = FF(d, a, b, c, x[k+5], S12, 0x4787C62A); + c = FF(c, d, a, b, x[k+6], S13, 0xA8304613); + b = FF(b, c, d, a, x[k+7], S14, 0xFD469501); + a = FF(a, b, c, d, x[k+8], S11, 0x698098D8); + d = FF(d, a, b, c, x[k+9], S12, 0x8B44F7AF); + c = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1); + b = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE); + a = FF(a, b, c, d, x[k+12], S11, 0x6B901122); + d = FF(d, a, b, c, x[k+13], S12, 0xFD987193); + c = FF(c, d, a, b, x[k+14], S13, 0xA679438E); + b = FF(b, c, d, a, x[k+15], S14, 0x49B40821); + a = GG(a, b, c, d, x[k+1], S21, 0xF61E2562); + d = GG(d, a, b, c, x[k+6], S22, 0xC040B340); + c = GG(c, d, a, b, x[k+11], S23, 0x265E5A51); + b = GG(b, c, d, a, x[k+0], S24, 0xE9B6C7AA); + a = GG(a, b, c, d, x[k+5], S21, 0xD62F105D); + d = GG(d, a, b, c, x[k+10], S22, 0x2441453); + c = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681); + b = GG(b, c, d, a, x[k+4], S24, 0xE7D3FBC8); + a = GG(a, b, c, d, x[k+9], S21, 0x21E1CDE6); + d = GG(d, a, b, c, x[k+14], S22, 0xC33707D6); + c = GG(c, d, a, b, x[k+3], S23, 0xF4D50D87); + b = GG(b, c, d, a, x[k+8], S24, 0x455A14ED); + a = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905); + d = GG(d, a, b, c, x[k+2], S22, 0xFCEFA3F8); + c = GG(c, d, a, b, x[k+7], S23, 0x676F02D9); + b = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A); + a = HH(a, b, c, d, x[k+5], S31, 0xFFFA3942); + d = HH(d, a, b, c, x[k+8], S32, 0x8771F681); + c = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122); + b = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C); + a = HH(a, b, c, d, x[k+1], S31, 0xA4BEEA44); + d = HH(d, a, b, c, x[k+4], S32, 0x4BDECFA9); + c = HH(c, d, a, b, x[k+7], S33, 0xF6BB4B60); + b = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70); + a = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6); + d = HH(d, a, b, c, x[k+0], S32, 0xEAA127FA); + c = HH(c, d, a, b, x[k+3], S33, 0xD4EF3085); + b = HH(b, c, d, a, x[k+6], S34, 0x4881D05); + a = HH(a, b, c, d, x[k+9], S31, 0xD9D4D039); + d = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5); + c = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8); + b = HH(b, c, d, a, x[k+2], S34, 0xC4AC5665); + a = II(a, b, c, d, x[k+0], S41, 0xF4292244); + d = II(d, a, b, c, x[k+7], S42, 0x432AFF97); + c = II(c, d, a, b, x[k+14], S43, 0xAB9423A7); + b = II(b, c, d, a, x[k+5], S44, 0xFC93A039); + a = II(a, b, c, d, x[k+12], S41, 0x655B59C3); + d = II(d, a, b, c, x[k+3], S42, 0x8F0CCC92); + c = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D); + b = II(b, c, d, a, x[k+1], S44, 0x85845DD1); + a = II(a, b, c, d, x[k+8], S41, 0x6FA87E4F); + d = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0); + c = II(c, d, a, b, x[k+6], S43, 0xA3014314); + b = II(b, c, d, a, x[k+13], S44, 0x4E0811A1); + a = II(a, b, c, d, x[k+4], S41, 0xF7537E82); + d = II(d, a, b, c, x[k+11], S42, 0xBD3AF235); + c = II(c, d, a, b, x[k+2], S43, 0x2AD7D2BB); + b = II(b, c, d, a, x[k+9], S44, 0xEB86D391); + a = addUnsigned(a, AA); + b = addUnsigned(b, BB); + c = addUnsigned(c, CC); + d = addUnsigned(d, DD); + } + var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d); + return tempValue.toLowerCase(); + } + }); + })(jQuery); \ No newline at end of file diff --git a/frontend/static/js/like.js b/frontend/static/js/like.js new file mode 100644 index 0000000..f564f4c --- /dev/null +++ b/frontend/static/js/like.js @@ -0,0 +1,97 @@ +var Like = + { + timeout: false, + likeVideoDelay: 1000, + likeMessageDelay: 10000, + favewords: + [ + 'dazzled', 'dangled', 'amazed', 'shocked', 'wowed', + 'spangled', 'glittered', 'blinged', 'jazzed', 'smoked', + 'rocked', 'jammed', 'stoked', 'blazed', 'pringled', 'engulfed', + ], + colors: + [ + "#ffa1b8","#ffb9a1","#ffe8a1","#ffa1e7","#a1a4ff","#cda1ff","#fca1ff","#a1d3ff","#e8a1ff","#a1f6ff","#a1ffaa","#c7ffa1" + ], + enqueue: function (username) + { + d.joy("liked by "+username) + $("#likereport").append( + $("").attr("href","/profile/"+username).html(username+" was "+d.choice(Like.favewords)+"!").attr("style","color:"+d.choice(Like.colors))) + if (Viewport.focused) + Like.fire() + else + Like.pending = true + }, + fire: function () + { + d.joy("LIKE ANIMATION GO") + Like.pending = false + $("#likereport").stop(false,false).show() + d.scrollToBottom("#likereport") + $("#plant").stop(true, true).show() + $("#flower").stop(true, true).show() + if (Like.timeout) + clearTimeout(Like.timeout) + Like.timeout = setTimeout(Like.queueFade, 1000) + }, + queueFade: function timeout() + { + d.joy("LIKE ANIMATION FADE") + Like.timeout = false + $("#plant").fadeOut(Like.likeVideoDelay) + $("#flower").fadeOut(Like.likeVideoDelay) + $("#likereport").fadeOut(Like.likeMessageDelay, function(){$("#likereport").html("")}) + }, + likeVideo: function (video) + { + if (! Auth.session) + return d.error("like: not logged in") + if (video.username === Auth.username) + return d.error("like: that's you") + var data = { video: video.id, session: Auth.session, } + if (Local.isLiked(video.id)) + { + d.joy("unliking "+video.key) + if (Player.currentKey === video.key) + $("#like").removeClass("liked") + $("#like_"+video.id).removeClass("liked").html("  like") + video.liked = false + Local.unlike(video.id) + if (video.score) + { + video.score -= 1 + if (video.score < 0) + { + video.score = 0 + $("#score_"+video.id).html(' ') + } + else + { + $("#score_"+video.id).html(video.score) + } + } + $.post(API.URL.video.unlike, data) + } + else + { + d.joy("liking "+video.key) + if (Player.currentKey === video.key) + $("#like").addClass("liked") + $("#like_"+video.id).addClass("liked").html("liked") + $("#flower").show().fadeOut(Like.likeVideoDelay) + video.liked = true + Local.like(video.id) + if (video.score) + { + video.score += 1 + $("#score_"+video.id).html(video.score) + } + $.post(API.URL.video.like, data) + } + }, + init: function () + { + } + } + diff --git a/frontend/static/js/main.js b/frontend/static/js/main.js new file mode 100644 index 0000000..8a3c3a1 --- /dev/null +++ b/frontend/static/js/main.js @@ -0,0 +1,662 @@ +var Keyboard = + { + enter: false, + enteredText: false, + altMode: false, + focusTextarea: function () + { + // $("#chat").append("TEXTAREA FOCUS") + $(window).unbind("keydown") + $("#chat-message").unbind("keydown").bind("keydown", Keyboard.textareaMap) + $("#chat-message").unbind("focus").focus().bind("focus", Keyboard.focusTextarea) + Search.close () + if ($("#chat-message").val().length === 0) + Keyboard.enteredText = false + }, + blurTextarea: function () + { + // $("#chat").append("TEXTAREA BLUR") + $(window).unbind("keydown") + if (Viewport.fullscreenMode && Viewport.fullscreenInterface) + $(window).bind("keydown", Keyboard.fullscreenInterfaceMap) + else if (Viewport.fullscreenMode) + $(window).bind("keydown", Keyboard.fullscreenMap) + else + $(window).bind("keydown", Keyboard.standardMap) + $("#chat-message").unbind("keydown") + }, + textareaMap: function (event) + { + var kc = event.keyCode + if (kc === 8) + { + var v = $("#chat-message").val() + if (v.length < 2) + Keyboard.enteredText = false + return true + } + if (kc === 13) + { + Keyboard.enteredText = false + if (Keyboard.enter) + Keyboard.enter() + if (Chat.callback) + { + Chat.callback(1) + } + return false + } + if (kc === 27) + { + Menu.close() + if (Viewport.fullscreenMode && Viewport.fullscreenInterface) + Viewport.fullscreenHideInterface() + else if (Viewport.fullscreenMode) + Viewport.fullscreenOff() + else + Viewport.fullscreenOn() + return false + } + if (! Keyboard.enteredText) + { + if (kc === 37) + { + Player.playPrev() + return + } + else if (kc === 39) + { + Player.playNext() + return + } + } + if (kc === 33) + return d.pageUp("#chat") + if (kc === 34) + return d.pageDown("#chat") + Keyboard.enteredText = true + return true + }, + standardMap: function (event) + { + kc = event.keyCode + if (kc === 91) + { + Keyboard.altMode = true + return true + } + else if (kc === 27) // && Room.loaded) + { + Menu.close() + Viewport.fullscreenOn() + return false + } + else if (! Menu.isOpen) + { + if (kc === 37 || kc === 177) + Player.playPrev() + else if (kc === 39 || kc === 176) + Player.playNext() + else if (kc === 32 || kc === 179) + Player.pause() + else if (! Keyboard.altMode && kc === 76) + Player.likeClick() + } + Keyboard.altMode = false + return true + }, + fullscreenInterfaceMap: function (event) + { + kc = event.keyCode + if (kc === 27) + Viewport.fullscreenHideInterface() + if (kc === 33) + d.pageUp("#chat") + if (kc === 34) + d.pageDown("#chat") + if (kc === 32 || kc === 179) + Player.pause() + if (kc === 37 || kc === 177) + Player.playPrev() + else if (kc === 39 || kc === 176) + Player.playNext() + if (! Keyboard.altMode && kc === 76) + Player.likeClick() + return false + }, + fullscreenMap: function (event) + { + kc = event.keyCode + if (kc === 27) + Viewport.fullscreenOff() + if (kc === 37 || kc === 177) + Player.playPrev() + if (kc === 39 || kc === 176) + Player.playNext() + if (kc === 32 || kc === 179) + Player.pause() + if (kc === 76) + Player.likeClick() + return false + } + } +var Viewport = + { + focused: true, + fullscreenMode: false, + fullscreenInterface: false, + fullscreenFocusTimer: false, + fullscreenOn: function () + { + var msg = $("#chat-message").val() + $(window).unbind("resize") + $(window).bind("resize", Viewport.fullscreenResize) + $("#chat").unbind("mouseover").unbind("mouseout") + $("#chat-message").focus() + Keyboard.focusTextarea() + $("#chat,#playlist").addClass("fullscreen") + $("#bg,#chatbg,#playlistbg,#playlist").hide() + $("#faqlink").hide() + $("#logobg").css("width",$("#logo").width()+60) + $("#like").show() + $("#controls").css("position", "fixed") + Menu.close () + Search.close () + $("#fullscreen").unbind("click") + $("#fullscreen").bind("click", Viewport.fullscreenOff) + $("#video-title").addClass("fullscreen") + Viewport.fullscreenInterface = true + Viewport.fullscreenMode = true + Viewport.fullscreenResize() + Viewport.chatMouseOut() + $("#chat-message").val(msg) + d.scrollToBottom("#chat") + }, + fullscreenOff: function () + { + $("#logobg").css("width","100%") + $(window).unbind("keydown") + // $(window).bind("keydown", Keyboard.standardMap) + $(window).unbind("resize") + $(window).bind("resize", Viewport.standardResize) + $("#chat").bind("mouseover", Viewport.chatMouseOver) + $("#chat").bind("mouseout", Viewport.chatMouseLaave) + $("#bg,#logo,#logobg,#form,#formbg,#chat,#chatbg,#playlist,#playlistbg,#lastlogbox,#lastlogbg,#sitez,#controls").show() + $("#controls").css("position", "absolute") + $("#controls").css("min-width", "auto").css('top','auto').css('bottom', 'auto').css('left','auto').css('right','auto') + $("#fullscreen").unbind("click") + $("#fullscreen").bind("click", Main.fullscreenOn) + $("#video-title").removeClass("fullscreen") + $("#chat,#playlist").removeClass("fullscreen") + $("#controls").css("padding", 0) + Viewport.standardResize() + setTimeout('d.scrollToBottom("#chat")', 500) + Keyboard.focusTextarea() + Viewport.fullscreenMode = false + clearInterval(Viewport.fullscreenFocusTimer) + Viewport.fullscreenFocusTimer = false + }, + fullscreenHideInterface: function () + { + Viewport.fullscreenInterface = false + Keyboard.blurTextarea() + $("#form,#formbg,#chat,#playlist,#lastlogbox,#lastlogbg,#sitez,#controls,#logo,#logobg").hide() + }, + fullscreenResize: function () + { + var w = $(window).width() + var h = $(window).height() + var fw = 4 * w / 7 - 40 + var ph = h / 3 - 30 + var ch = 2 * h / 3 + var fh = 50 + var clh = ch - fh - 50 + + var pw = w * 2 / 3 - 20 + + var chatwidth = (4*w)/5 - 20 + + var chatheight = h-fh-5 + var fbot = 20 + var chatbot = Viewport.chatBottom + + if (VideoChat.isOpen) + { + var vch = 150 + $("#tokbox-embed").css("width", fw-20) + chatheight -= vch + chatbot += vch + fbot += vch + } + + $("#player").css("top", -10).css("left", -10) + $("#screen,#ytscreen").css("width",w).css("height",h) + + $("#chat").css("left", 0).css("bottom", chatbot).css("width", chatwidth).css("height", chatheight) + d.scrollToBottom("#chat") + + var sendw = $("#chat-send").width() + var camw = $("#videochat-toggle").width() + $("#chat-message").css("width", fw-sendw-camw-50) + $("#form,#formbg").css("left", 0) + $("#form").css("bottom", fbot) + $("#form,#formbg").css("width", fw) + + var controlsw = $("#controls").width() + var controlsoffset = ( w - fw - controlsw ) / 2 + $("#controls").css({ "top": "auto", "bottom": fbot+2, "right": controlsoffset, "background": "black", "padding": 10, }) + + $("#lastlogbox,#lastlogbg").css("top", h/3).css("left", w*(7/8)-10) + $("#lastlogbg").css("height", $("#lastlogbox").height()) + }, + playerTop: 94, + chatWidth: 500, + chatBottom: 75, + formHeight: 50, + standardResize: function () + { + var w = $(window).width() + var h = $(window).height() + var ytw = 1 * w / 2 - 90 + if (ytw > 500) + ytw = 500 + var yth = ytw * 9/ 16 + + var fh = Viewport.formHeight + + var cw = w - ytw - 80 + var ch = 2 * h / 3 + var chatheight = h-fh-5 + Viewport.chatWidth = cw + + var pw = cw - 20 + var ph = h / 3 - 30 + + var fbot = 20 + var chatbot = Viewport.chatBottom + + var clw = cw*3/4 + var clh = ch - fh - 50 + + var llw = cw / 4 - 30 + var llh = ch - fh - 30 + + var sendw = $("#chat-send").width() + var camw = $("#videochat-toggle").width() + $("#chat-message").css("width", pw-sendw-camw-30) + + if (VideoChat.isOpen) + { + var vch = chatheight * 1 / 2 + if (vch < 280) + vch = 280 + $("#tokbox-embed").css({"width": cw+20, "height": vch}) + $("#tokbox-embedded").css({"height": vch}) + chatheight -= vch + chatbot += vch + fbot += vch + } + + var msgw = 0 + var buttonheight = $("#fullscreen").height() + + $("#bg img").css("width", w) + $("#bg img").css("height", h) + + $("#logo").css("left", 20) + + if (retrograde) + { + // PLAYER ON LEFT + $("#player").css("left", 20) + $("#player").css("top", Viewport.playerTop) + $("#player").css("height", yth+buttonheight+20) + $("#player,#projector,#screen,#ytscreen").width(ytw) + $("#projector,#screen,#ytscreen").height(yth) + Player.width = ytw + Player.height = yth + + $("#controls").css("top", yth+10+10) + var playerHeight = yth+buttonheight+Viewport.playerTop + 10 + + $("#playlist,#playlistbg").css("left", 20) + $("#playlist,#playlistbg").css("top", playerHeight+30) + $("#playlist,#playlistbg").css("width", ytw+19) + $("#playlist,#playlistbg,#queue").css("height", h-playerHeight-50) + + $("#chat,#chatbg").css("left", 60+ytw) + $("#chat,#chatbg").css("bottom", chatbot) + $("#chat,#chatbg").css("width", cw) + $("#chat,#chatbg").css("height", chatheight) + // $("#chat").css("overflow-y", "scroll") + // $("#chat").css("overflow-x", "hidden") + + $("#form,#formbg").css("left", 60+ytw) + $("#form,#formbg").css("bottom", fbot) + $("#form,#formbg").css("width", cw) + $("#form,#formbg").css("height", fh-15) + $("#formbg").css("opacity", 0.7) + + $("#lastlogbox,#lastlogbg").css("top", 90) + $("#lastlogbox,#lastlogbg").css("left", ytw+60+clw) + $("#lastlogbox,#lastlogbg").css("width", llw) + $("#lastlogbox").css("max-height", (h-fh-70-40)*3/4) + $("#lastlogbox").css("overflow-y", "auto") + $("#lastlogbox").css("overflow-x", "hidden") + + $("#likereport").css("bottom", 90) + $("#likereport").css("left", ytw+60+clw) + $("#likereport").css("width", llw-20) + $("#likereport").css("height", (h-fh-70-40)*1/4) + + $("#msg").css("max-height", h-130) + } + + else + { + // PLAYER ON RIGHT + $("#player").css("left", 40+pw+20) + $("#player").css("top", Viewport.playerTop) + $("#player").css("height", yth+buttonheight+20) + $("#player,#projector,#screen,#ytscreen").width(ytw) + $("#projector,#screen,#ytscreen").height(yth) + + $("#controls").css("top", yth+10+10) + var playerHeight = yth+buttonheight+Viewport.playerTop+10 + + $("#playlist,#playlistbg").css("left", 40+pw+20) + $("#playlist,#playlistbg").css("top", playerHeight+30) + $("#playlist,#playlistbg").css("width", ytw+19) + $("#playlist,#playlistbg,#queue").css("height", h-playerHeight-50) + + $("#chat,#chatbg").css("left", 0) + $("#chat,#chatbg").css("bottom", chatbot) + $("#chat,#chatbg").css("width", cw) + $("#chat,#chatbg").css("height", chatheight) + // $("#chat").css("overflow-y", "scroll") + // $("#chat").css("overflow-x", "hidden") + + $("#plant").css("left", cw-300) + + $("#form,#formbg").css("left", 0) + $("#form").css("bottom", fbot) + $("#form,#formbg").css("width", cw) + $("#form,#formbg").css("height", fh-15) + $("#formbg").css("opacity", 0.7) + + $("#lastlogbox,#lastlogbg").css("top", 90) + $("#lastlogbox,#lastlogbg").css("left", 10+clw) + $("#lastlogbox,#lastlogbg").css("width", llw) + $("#lastlogbox").css("max-height", (h-fh-70-40)*3/4) + $("#lastlogbox").css("overflow-y", "auto") + $("#lastlogbox").css("overflow-x", "hidden") + + var lrwidth = llw-20 + if (lrwidth < 150) lrwidth = 150 + $("#likereport").css("bottom", 90) + $("#likereport").css("left", cw-lrwidth-90) + $("#likereport").css("width", lrwidth) + $("#likereport").css("max-height", (h-fh-70-40)*1/4) + + $("#msg").css("max-height", h-130) + } + $("#lastlogbg").css("height", $("#lastlogbox").height()) + d.scrollToBottom("#chat") + }, + scrollbarWidth: 16, + getScrollbarWidth: function () + { + var initial = document.body.style.overflow + document.body.style.overflow = 'hidden'; + var width = document.body.clientWidth; + document.body.style.overflow = 'scroll' + width -= document.body.clientWidth + if (! width) + width = document.body.offsetWidth - document.body.clientWidth + document.body.style.overflow = initial + return width + }, + focus: function () + { + d.warn("VIEWPORT FOCUS") + if (! Viewport.fullscreenMode || Viewport.fullscreenInterface) + Keyboard.focusTextarea() + document.body.tabIndex = 0 + document.body.focus() + Viewport.focused = true + // Chat.delay = 1000 + if (Like.pending) + Like.fire() + // Chat.delay = Chat.delayShort + }, + blur: function () + { + d.warn("VIEWPORT BLUR") + Viewport.focused = false + // Chat.delay = Chat.delayLong + }, + chatMouseOver: function () + { + $("#chat").css({"overflow-y": "scroll", "width": Viewport.chatWidth + Viewport.scrollbarWidth }) + $("#chat").scrollTop( $("#chat").scrollTop() ) + }, + chatMouseOut: function () + { + $("#chat").css({"overflow-y": "hidden", "width": Viewport.chatWidth}) + }, + init: function () + { + Viewport.scrollbarWidth = Viewport.getScrollbarWidth () + $("#chat").bind("mouseover", Viewport.chatMouseOver) + $("#chat").bind("mouseout", Viewport.chatMouseOut) + } + } +var Background = + { + src: "http://lalalizard.com/bgz/jupiteraurora.jpg", + srcReset: "http://lalalizard.com/bgz/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif", + load: function () + { + $("#bg").show() + //setTimeout(function(){$("#bg img").attr("src", Background.src)}, 2000) + }, + init: function () + { + } + } +var Include = + { + glitter: function () + { + Room.ops = {} + $("body").append("") + $("body").append("") + d.enableStylesheet("glitter") + }, + avatar: function () + { + Room.ops = {} + $("body").append("") + $("body").append("") + d.enableStylesheet("avatar") + }, + jonomilo: function () + { + Room.ops = d.buildLookup(["daytimetelevision"]) + d.enableStylesheet("white") + $("#heading").remove() + $("#topic").remove() + $("#likebutton").before("

    ") + Include.middleColumn () + }, + middleColumn: function () + { + Chat.previousName = false + Chat.containsImage = function (s) + { + if (s.indexOf("http") === -1) + return false + var suffixes = ["jpg","jpeg","gif","png"] + for (var i = 0; i < suffixes.length; i++) + { + if (s.indexOf(suffixes[i]) !== -1) + { + // console.log(suffixes[i] + " " + s) + return true + } + } + return false + } + Chat.parse = function (row) + { + if (Chat.containsImage(row[3])) + { + var s = "
    " + s += "" + s += Chat.parseWords(row[3]) + s += "" + s += "
    " + return s + } + else + { + Chat.previousName = row[2] + var s = "
    " + s += '' + row[2] + "" + s += "" + s += Chat.parseWords(row[3]) + s += "" + s += "
    " + return s + } + } + }, + diornights: function () + { + $("#logo").append("

    OPEN RADIO

    ") + }, + disaro: function () + { + $("#logo").append("

    OPEN RADIO

    ") + }, + sewergreats: function () + { + $("#logo").append("

    OPEN RADIO

    ") + }, + dump: function () + { + Room.ops = d.buildLookup([""]) + $("body").append("") + }, + yhvh: function () + { + Room.ops = d.buildLookup(["greta"]) + }, +/* + icons: function () + { + $("#bg").html(''); + }, +*/ + feederbleeder: function () + { + Room.ops = {} + $("#preamblewords").remove() + $("#topic").remove() + $("#heading").after("

    ") + d.enableStylesheet("feederbleeder") + var oldsay = Chat.say + Chat.say = function () + { + var msg = $("#chat-message").val() + if (msg.indexOf("http") !== -1) + { + $("#chat").append("
    Sorry, only the Feederbleeder robot can post videos and images in this room. Please visit another room to post videos.
    ") + $("#chat-message").val("") + d.scrollToBottom("#chat") + } + else + { + oldsay () + } + } + }, + fred: function () + { + Room.ops = d.buildLookup(["scannerjammer"]) + }, + frederick: function () + { + Room.ops = d.buildLookup(["scannerjammer"]) + d.enableStylesheet("frederick") + }, + glasspopcorn: function () + { + Room.ops = d.buildLookup(["glasspopcorn"]) + setTimeout(VideoChat.toggle, 2000) + $("#plant img").attr("src", "/img/1309267681552dumpfmfrakbuddyglasscross_1310066105.gif") + $("#flower img").attr("src", "/img/1278131405573-dumpfm-glasspopcorn-sitmanpiano.gif") + $("#heading").remove() + $("#logo").append("

    OPEN RADIO

    ") + $("body").append("") + $("#preamblewords").html("Post GIFs and Soundclouds into the chat!
    Use arrow keys to switch videos
    Hit L key to LIKE
    Hit ESC to change modes") + Player.unregister("youtube") + Player.unregister("vimeo") + Player.unregister("audio") + }, + sfvacid: function () + { + // $("#logo").append("

    OPEN RADIO

    ") + }, + main: function () + { + Room.ops = false + $("#heading").remove() + $("#preamblewords").after("

     

    ") + $("#topic").remove() + // Room.loadCallback = function () + // { + // setTimeout(Viewport.fullscreenOn, 3000) + // } + // $("#likebutton").before("

    Post urls into the chat!
    Use arrow keys to switch videos

    ") + } + } + +var Main = + { + init: function () + { + d.warn("INIT MAIN") + + if (roomName in Include) + { + Include[roomName]() + } + + $(window).bind("focus", Viewport.focus) + $(window).bind("blur", Viewport.blur) + $(window).bind("resize", Viewport.standardResize) + $(window).bind("keydown", Keyboard.standardMap) + Viewport.standardResize() + Viewport.init() + Background.init() + $("#chat").append("
    ") + Room.init() + if ( Auth.init() ) + Room.connect() + else + Auth.load() + document.write('') + if (window.location.pathname.split("/")[2] == "read") + { + API.URL.room.join = API.BASE_URL + "/api/room/view" + // API.URL.room.poll = API.BASE_URL + "/api/room/read" + d.enableStylesheet("tiny") + Viewport.playerTop = 20 + Viewport.chatBottom = 20 + Viewport.formHeight = 5 + Player.mute() + } + } + } +Main.init () diff --git a/frontend/static/js/player.js b/frontend/static/js/player.js new file mode 100644 index 0000000..87973a4 --- /dev/null +++ b/frontend/static/js/player.js @@ -0,0 +1,546 @@ +var VIMEOregexp = /^(\bhttps?:\/\/)(www.)?vimeo.com\/([0-9]+).*$/i +var PLAY_BUTTONS = + { + prev: "
    ", + next: "
    ", + pause: "
    ", + play: "
    ", + } +var Player = + { + videos: {}, + queue: [], + projectors: {}, + projector: null, + newVideos: false, + currentIdx: 0, + video: false, + errors: 0, + width: '100%', + height: '100%', + playlistOffset: 30, + queueOffset: 60, + paused: false, + muted: false, + enqueue: function (video) + { + if (! (video.type in Player.projectors)) + return d.error("unknown video type "+video.type) + var key = video.type+"_"+video.name + if (key in Player.videos) + { + Player.videos[key].idx = Player.queue.length + Player.videos[key].seen = false + if (video.offset) + Player.videos[key].offset = video.offset + d.warn("bumped "+key) + } + else + { + video.key = key + video.idx = Player.queue.length + Player.videos[key] = video + Player.newVideos = true + d.warn("enqueued "+key) + } + $("#"+video.key).html(video.title) + Player.queue.push(key) + return true + }, + clearQueue: function () + { + Player.queue = [] + Player.currentIdx = 0 + Playlist.count = 0 + }, + register: function (projector) + { + d.warn("registered "+projector.type) + Player.projectors[projector.type] = projector + }, + unregister: function (projectortype) + { + d.warn("unregistered "+projectortype) + delete Player.projectors[projectortype] + }, + start: function () + { + d.warn("PLAYER START") + Player.currentIdx = Player.queue.length - 1 + if (! Player.queue.length) + return d.error("empty queue") + Player.playLatest() + }, + finish: function () + { + d.warn("PLAYER FINISH") + d.warn("____________") + Player.playLatest() + }, + error: function (s) + { + if (s) + d.error(Player.errors+" "+s) + else + d.error("PLAYER ERROR "+Player.errors) + $("li#queue_"+Player.video.idx+" span.title").html("This video cannot be embedded") + Player.video.error = true + }, + playLatest: function () + { + d.warn("PLAY LATEST") + var idx = Player.currentIdx + var len = Player.queue.length + if (Player.newVideos) + { + for (i = idx; i < len; i++) + { + var video = Player.videos[Player.queue[i]] + d.warn("check "+Player.queue[i]) + if (video.seen) + continue + Player.currentIdx = i + d.joy("new video! "+video.key+" at "+i) + Player.queueJumpToCurrentVideo(Player.currentIdx) + Player.playVideo(video) + return + } + for (i = idx - 1; i >= 0; i--) + { + var video = Player.videos[Player.queue[i]] + d.warn("check "+Player.queue[i]) + if (video.seen) + continue + Player.currentIdx = i + d.joy("new video! "+video.key+" at "+i) + Player.queueJumpToCurrentVideo(Player.currentIdx) + Player.playVideo(video) + return + } + Player.newVideos = false + d.warn("no new videos") + } + Player.playNext() + }, + playNext: function () + { + d.warn("____________") + d.warn("PLAY NEXT") + var idx = Player.currentIdx + do + { + idx -= 1 + if (Player.queue[idx] === Player.video.key) + idx -= 1 + if (idx < 0) + idx = Player.queue.length - 1 + } + while (Player.videos[ Player.queue[idx] ].error === true) + Player.queueJumpToCurrentVideo(idx) + Player.playIdx(idx) + }, + playPrev: function () + { + d.warn("____________") + d.warn("PLAY PREV") + var idx = Player.currentIdx + do + { + idx = (idx + 1) % Player.queue.length + if (Player.queue[idx] === Player.video.key) + continue + } + while (Player.videos[ Player.queue[idx] ].error === true) + Player.queueJumpToCurrentVideo(idx) + Player.playIdx(idx) + }, + playKey: function (key) + { + Player.playVideo( Player.videos[key] ) + }, + playIdx: function (idx) + { + d.warn("play idx: "+idx) + Player.currentIdx = idx + Player.playVideo( Player.videos[Player.queue[idx]] ) + }, + throttle: function () + { + d.error("THROTTLED") + Player.stop() + Player.errors = 0 + }, + stop: function () + { + Player.projector.stop() + }, + playVideo: function (video) + { + if (! video) + { + d.error("GOT EMPTY VIDEO") + d.warn(Player.currentIdx) + d.warn(Player.queue[ Player.currentIdx ]) + d.warn(Player.videos[ Player.queue[ Player.currentIdx ] ]) + return + } + if (video.error === true) + { + Player.errors += 1 + d.error(video.key) + if (Player.errors > Player.queue.length) + return Player.throttle() + return Player.finish() + } + d.warn("PLAY VIDEO: "+video.key) + if (video.type !== Player.projector.type) + { + d.warn("SWITCHING PROJECTORS") + d.warn([Player.projector.type, video.type].join(" → ")) + Player.projector.unload() + Player.projector = Player.projectors[video.type] + Player.projector.load() + if (Player.muted) + Player.projector.setVolume(0) + } + video.seen = true + if (! Player.fullscreenMode) + { + $("#video-title").hide().html(video.title).fadeIn(100, function () { + setTimeout("$('#video-title').fadeOut(2000)", 4000) + }) + } + + Player.errors = 0 + Player.video = video + Player.projector.play(video) + Player.linkUpdate(video) + Player.currentIdx = video.idx + $("#queue li.playing").removeClass("playing") + $("#chat a.ytlink.playing").removeClass("playing") + $("#queue li").removeClass("playing") + $("li#queue_"+video.idx).addClass("playing") + $("#"+video.key).addClass("playing") + $("#"+video.key).html(video.title) + $("#like").removeClass("liked").html("LIKE") + $("#pause").html(PLAY_BUTTONS.pause) + if (Local.isLiked(video.id)) + { + $("#like").addClass("liked").html("LIKED") + } + }, + queueJumpToCurrentVideo: function (idx) + { + $("#playlist").scrollTop( $("li#queue_"+idx)[0].offsetTop - Player.playlistOffset ) + $("#queue").scrollTop( $("li#queue_"+idx)[0].offsetTop - Player.queueOffset ) + }, + toggle: function () + { + Player.projector.toggle() + }, + pause: function () + { + Player.projector.pause() + $("#pause").html(PLAY_BUTTONS.play) + }, + mute: function () + { + if (Player.projector) + { + if (Player.muted) + Player.projector.setVolume(100) + else + Player.projector.setVolume(0) + } + Player.muted = ! Player.muted + }, + muteClick: function () + { + if (Player.muted) + $("#mute").removeClass("muted") + else + $("#mute").addClass("muted") + Player.mute() + }, + prevClick: function () + { + d.act("+ clicked prev") + Player.playPrev() + }, + pauseClick: function () + { + d.act("+ clicked pause") + Player.errors = 0 + if (Player.projector.toggle()) + { + $("#pause").html(PLAY_BUTTONS.play) + d.warn("set to play") + } + else + { + $("#pause").html(PLAY_BUTTONS.pause) + d.warn("set to pause") + } + }, + nextClick: function () + { + d.act("+ clicked next") + Player.playNext() + }, + scanClick: function () + { + d.act("+ clicked scan") + Scanner.scan() + }, + likeClick: function () + { + d.act("+ clicked player like") + Like.likeVideo(Player.video) + }, + linkClick: function () + { + d.act("+ clicked permalink") + Player.pause() + }, + linkUpdate: function (video) + { + d.warn("UPDATING LINK") + $("#video-link").attr("href", video.src) + var vidurl = "http://scannerjammer.com/" + if (Room.name !== "main") + vidurl += Room.name+"/" + vidurl += "#v="+video.id + $("#sharebutton").attr("st_url", vidurl).attr("st_title", video.title) +/* + stWidget.addEntry({ + service: "sharethis", + element: document.getElementById("sharebutton"), + url: vidurl, + title: video.title, + summary: "ScannerJammer: Youtube video chat", + }) +*/ + }, + + fullscreenClick: function () + { + d.act("+ clicked fullscreen") + }, + setVolume: function (vol) + { + if (Player.projector && Player.projector.type !== 'null') + { + // alert(Player.projector.type) + Player.projector.setVolume(vol) + } + }, + init: function () + { + d.warn("PLAYER INIT") + $("#prev").html(PLAY_BUTTONS.prev) + $("#pause").html(PLAY_BUTTONS.play) + $("#next").html(PLAY_BUTTONS.next) + $("#prev").bind("click", Player.prevClick) + $("#pause").bind("click", Player.pauseClick) + $("#next").bind("click", Player.nextClick) + $("#scan").bind("click", Player.scanClick) + $("#like").bind("click", Player.likeClick) + $("#video-link").bind("click", Player.linkClick) + $("#fullscreen").bind("click", Viewport.fullscreenOn) + Player.projector = {type:"null",load:d.noop,unload:Youtube.unload,} + for (i in Player.projectors) + Player.projectors[i].init() + if (Player.queue.length > 0) + Player.currentIdx = Player.queue.length + Playlist.init() + } + } + +var Playlist = + { + count: 0, + showScores: false, + enqueue: function (videos) + { + if (! (videos instanceof Array)) + videos = [videos] + // d.warn("PLAYLIST ENQUEUE "+videos.length) + var rows = [] + var clickables = [] + for (i in videos) + { + var video = videos[i] + $("#"+video.key).html(video.title) + if (Player.enqueue(video)) + { + rows.push(Playlist.display(video)) + Playlist.count += 1 + } + } + $("#queue").prepend(rows.reverse().join("")) + }, + enqueueOldVideoFormat: function (videos) + { + // d.warn("ENQUEUING "+videos.length+" OLD FORMAT") + for (i in videos) + { + // 0 id 1 date 2 userid 3 user 4 url 5 title + var row = videos[i] + var video = + { + id: row[0], + date: row[1], + userid: row[2], + username: row[3], + src: row[4], + title: row[5] || '___', + seen: false, + error: false, + } + if (row.length > 6) + { + video.score = parseInt(row[6]) || 0 + // block video if it's a duplicate + } + var url = row[4] + if (url.indexOf("youtube.com") !== -1) + { + var ytid = Youtube.getYtid(url) + video.type = "youtube" + video.name = ytid + } + else if (url.indexOf("vimeo.com") !== -1) + { + var vimeoid = url.replace(VIMEOregexp, "$3") + video.type = "vimeo" + video.name = vimeoid + } + else if (url.indexOf("soundcloud.com") !== -1) + { + video.type = "soundcloud" + video.name = $.md5(video.src) + } + else if (url.indexOf("mp3") !== -1) + { + video.type = "audio" + video.name = $.md5(video.src) + } + else + { + d.error("bad video id in "+url) + continue + } + video.key = video.type + "_" + video.name + Playlist.enqueue(video) + // d.joy("GOT VIDEO: "+key) + } + }, + clickTitle: function (e) + { + var id = $(this).parent().attr("id") + var idx = id.substr(id.indexOf("_")+1) + d.act("+ clicked playlist "+idx) + Player.playIdx(parseInt(idx)) + }, + clickLike: function (e) + { + var id = $(this).parent().attr("id") + var idx = id.substr(id.indexOf("_")+1) + var videokey = Player.queue[idx] + var video = Player.videos[videokey] + d.act("+ clicked playlist like "+video.key) + Like.likeVideo(video) + }, + clickChatlink: function (e) + { + e.preventDefault() + var key = $(this).attr("id") + var video = Player.videos[key] + d.act("+ clicked link "+video.key) + Player.playVideo(video) + }, + display: function (video) + { + var likeClass = '' + var likeWord = "  like" + if (video.username === Auth.username) + { + likeClass = "you" + } + else if (Local.isLiked(video.id)) + { + likeClass = 'liked' + likeWord = 'liked' + } + var s = "
  • " + if (Playlist.showScores) + { + score = video.score + if (score < 1) + score = ' ' + s += ""+score+"" + } + s += "" + s += ""+video.username+"" + s += ""+video.title+"" + s += "
  • " + return s + }, + init: function () + { + d.warn("PLAYLIST INIT") + $("#queue li span.title").live("click", Playlist.clickTitle) + $("#queue li span.like").live("click", Playlist.clickLike) + $("#chat a.ytlink").live("click", Playlist.clickChatlink) + } + } + +var Scanner = + { + scanMode: false, + scanTimeout: false, + scanBlinkTimeout: false, + scanBlinkState: false, + scanBlinkRate: 200, + scanRate: 9000, + scanBlink: function () + { + if (Scanner.scanBlinkState) + { + $("#scan").addClass("blinkOff") + $("#scan").removeClass("blinkOn") + Scanner.scanBlinkState = false + } + else + { + $("#scan").addClass("blinkOn") + $("#scan").removeClass("blinkOff") + Scanner.scanBlinkState = true + } + Scanner.scanBlinkTimeout = setTimeout(Scanner.scanBlink, Scanner.scanBlinkRate) + }, + scanGo: function () + { + Player.playNext() + Scanner.scanTimeout = setTimeout(Scanner.scanGo, Scanner.scanRate) + }, + scan: function () + { + if (Scanner.scanMode) + { + d.warn("SCANNER ON") + Scanner.scanMode = false + clearTimeout(Scanner.scanTimeout) + clearTimeout(Scanner.scanBlinkTimeout) + $("#scan").removeClass("blinkOn") + $("#scan").removeClass("blinkOff") + } + else + { + d.warn("SCANNER OFF") + Scanner.scanMode = true + Scanner.scanBlink() + Scanner.scanGo() + } + } + } diff --git a/frontend/static/js/poll.js b/frontend/static/js/poll.js new file mode 100644 index 0000000..01f480b --- /dev/null +++ b/frontend/static/js/poll.js @@ -0,0 +1,53 @@ +var Poll = + { + room: "main", + delay: 5000, + init: function () + { + if (document.cookie) + { + var cookies = document.cookie.split(";") + for (i in cookies) + { + var cookie = cookies[i].split("=") + if (cookie[0].indexOf("room") !== -1) + { + if (cookie[1] !== 'false' && cookie[1] !== 'undefined') + { + Poll.room = cookie[1] + break + } + } + } + } + Poll.poll() + }, + poll: function () + { + $.post(API.URL.room.poll, + { + room: Poll.room, + session: Auth.session, + last: 1, + }).success(Poll.pollCallback).error(Poll.pollErrorCallback) + }, + pollErrorCallback: function () + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + }, + pollCallback: function (raw) + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + } + } +var Main = + { + init: function () + { + Auth.success = Poll.init + if (Auth.init()) + Auth.checkin() + } + } +Main.init() + diff --git a/frontend/static/js/profile.js b/frontend/static/js/profile.js new file mode 100644 index 0000000..6005e79 --- /dev/null +++ b/frontend/static/js/profile.js @@ -0,0 +1,540 @@ +var Keyboard = + { + altMode: false, + fullscreenKeys: function (event) + { + kc = event.keyCode + if (kc === 27) + Viewport.fullscreenOff() + if (kc === 37 || kc === 177) + Player.playPrev() + if (kc === 39 || kc === 176) + Player.playNext() + if (kc === 32 || kc === 179) + Player.toggle() + if (kc === 76) + Player.likeClick() + return false + }, + standardKeys: function (event) + { + kc = event.keyCode + if (kc === 91) + { + Keyboard.altMode = true + return true + } + if (kc === 27) + { + Viewport.fullscreenOn() + return false + } + if (kc === 37 || kc === 177) + { + Player.playPrev() + return false + } + else if (kc === 39 || kc === 176) + { + Player.playNext() + return false + } + if (! Menu.isOpen && ! Keyboard.altMode && kc === 76) + { + Player.likeClick() + return false + } + if (kc === 32 || kc === 179) + { + Player.toggle() + return false + } + Keyboard.altMode = false + return true + } + } +var Viewport = + { + fullscreenMode: false, + fullscreenOn: function () + { + $("#logo,#logobg,#sitez,#playlist,#playlistbg,#contact,#bg,#gif-container,#controls").hide() + $("#settings-container").hide() + $(window).unbind("resize") + $(window).bind("resize", Viewport.fullscreenResize) + $(window).unbind("keydown") + $(window).bind("keydown", Keyboard.fullscreenKeys) + // 1) HIDDEN + // $("body").css("overflow-y", "hidden") + d.scrollToTop("body") + Viewport.fullscreenResize() + Viewport.fullscreenMode = true + // $("#fullscreen").unbind("click") + // $("#fullscreen").bind("click", Viewport.fullscreenOff) + $("#fullscreen-warning").show().fadeOut(3000) + $("#video-title").addClass("fullscreen") + }, + fullscreenResize: function () + { + // 2) FIXED + // $("#projector").css({ position: 'fixed', top: 0, left: 0, width: $(window).width(), height: $(window).height() }) + $("#player").css({ top: 0, left: 0, width: $(window).width(), height: $(window).height() }) + $("#screen,#ytscreen").css({ width: $(window).width(), height: $(window).height() }) + }, + fullscreenOff: function () + { + $("#logo,#logobg,#sitez,#playlist,#playlistbg,#contact,#bg,#gif-container,#controls").show() + // $("body").css("overflow-y", "scroll") + $(window).unbind("resize") + $(window).bind("resize", Viewport.standardResize) + Viewport.standardResize() + Viewport.fullscreenMode = false + $(window).unbind("keydown") + $(window).bind("keydown", Keyboard.standardKeys) + $("#fullscreen").unbind("click") + $("#fullscreen").bind("click", Viewport.fullscreenOn) + $("#video-title").removeClass("fullscreen") + }, + standardResize: function () + { + var w = $(window).width() + var h = $(window).height() + var contact = w * 200 / 1425 + var ytw = (w-contact-40)*4/7 + var yth = ytw * 9/16 + var plw = (w-contact-40)*3/7 + + $("#contact img").css("max-width", contact) + var conheight = $("#controls").height() + var contactheight = $("#contact").height() + var qheight = Math.max(yth+conheight+40, h - 94 - 60) // Math.max(yth+conheight+40, contactheight) + + $("#playlist").css("top", 94).css("left", contact+40) + $("#playlist,#playlistbg").css("width", plw-20) + $("#playlist,#playlistbg").css("height", qheight) + $("#queue").css("height", qheight) + var queuetop = $("#queue").offset().top + $("#playlistbg").css("top", queuetop).css("left", contact+40) + + $("#contact").css("width", contact).css("top", 94).css("left", 20) + + $("#projector").css({ position: 'absolute', }) + $("#player").css("height", yth+conheight+10) + $("#player").css("top", queuetop).css("left", plw+contact+40) + $("#projector").css("left", 0) + $("#player,#projector,#screen,#ytscreen").width(ytw-40) + $("#projector,#screen,#ytscreen").height(yth) + + $("#controls").css({ position: 'absolute', top: yth+20, bottom: 'auto', right: 'auto', }) + + $("#gif-container").css("top", qheight+30+134) + }, + focus: function () + { + d.warn("VIEWPORT FOCUS") + // if (! Viewport.fullscreenMode || Viewport.fullscreenInterface) + // Keyboard.focusTextarea() + document.body.tabIndex = 0 + document.body.focus() + Viewport.focused = true + // Chat.delay = 1000 + // if (Like.pending) + // Like.fire() + // Chat.delay = Chat.delayShort + }, + blur: function () + { + d.warn("VIEWPORT BLUR") + Viewport.focused = false + // Chat.delay = Chat.delayLong + } + } +var Room = + { + load: function () + { + Settings.open() + } + } +var Settings = + { + bio: "", + data: {}, + eventSet: false, + defaults: + { + avatar: "http://scannerjammer.com/img/runner.gif", + bg: "http://scannerjammer.com/bgz/scannerjammer_cyberspace.jpg", + }, + open: function () + { + if (parseInt(Auth.userid) !== userProfile[0]) + return + $("#settings-hook").show() + $("#profile-avatar").val(Settings.data.avatar) + $("#profile-bg").val(Settings.data.bg) + $("#profile-bio").html(Settings.bio) + if (! Profile.eventSet) + { + $("#profile-settings-save").bind("click", Settings.save) + Profile.eventSet = true + } + }, + save: function () + { + d.warn("saving profile") + var avatar = d.sanitize( $("#profile-avatar").val() ) + Settings.data.avatar = avatar + var bg = d.sanitize( $("#profile-bg").val() ) + Settings.data.bg = bg + var bio = d.sanitizeWithNewlines( $("#profile-bio").val() ) + Settings.bio = bio + Settings.load() + var s = "avatar\t"+avatar+"\n" + s += "bg\t"+bg+"\n" + var data = { + userid: userProfile[0], + settings: s, + bio: bio, + session: Auth.session, + } + $.post(API.URL.user.settings, data).success(Settings.saveCallback).error(Settings.errorCallback) + }, + errorCallback: function (raw) + { + }, + saveCallback: function (raw) + { + Menu.settings.close() + }, + load: function () + { + if (Settings.data.avatar.indexOf("http://") === 0) + $(".avatar").attr("src", Settings.data.avatar).show() + else + $(".avatar").hide() + if (Settings.data.bg.indexOf("http://") === 0) + { + $("#bg img").attr("src", Settings.data.bg) + $("#bg").show() + } + else + $("#bg").hide() + var bio = '' + if (! Settings.bio.length) + { + bio = "" + } + var lines = d.trim( Settings.bio ).split("\n") + for (i in lines) + { + if (lines[i].length === 0) + continue + var s = Chat.parseWords(lines[i]) + if (s.indexOf("" + } + $("#bio").html(bio) + Settings.open() + Viewport.standardResize() + }, + init: function () + { + if (userProfile[6]) + { + Settings.bio = userProfile[6] + } + if (userProfile[7]) + { + var lines = userProfile[7].split("\n") + for (i in lines) + { + var pair = lines[i].split("\t") + Settings.data[pair[0]] = pair[1] + } + } + for (i in Settings.defaults) + { + if (! (i in Settings.data)) + Settings.data[i] = Settings.defaults[i] + } + Settings.load() + } + } +function menu (key, loadCallback) + { + d.warn("MENU INIT "+key) + this.show = function () + { + if (! Menu.isOpen) + { + $("#"+key+"-container").show() + Menu.current = key + loadCallback() + } + } + this.hide = function () + { + if (! Menu.isOpen) + $("#"+key+"-container").hide() + } + this.close = function () + { + $("#"+key+"-container").hide() + $(".opened").removeClass("opened") + Menu.isOpen = false + } + this.click = function () + { + for (i in Menu.keys) + { + $("#"+Menu.keys[i]+"-container").hide() + } + $("#"+key+"-container").show() + if (Menu.current !== key) + loadCallback() + Menu.current = key + $(".opened").removeClass("opened") + $("#"+key+"-hook").addClass("opened") + Menu.isOpen = true + } + $("#"+key+"-hook").hover(this.show, this.hide).click(this.click) + $("#"+key+"-close").click(this.close) + $("#"+key+"-container").hover(this.click, function(){}) + } +var Menu = + { + isOpen: false, + current: false, + keys: ["settings"], + close: function () + { + if (Menu.current) + Menu[Menu.current].close() + }, + settings: new menu("settings", Settings.open) + } +var Profile = + { + mode: false, + page: 0, + pages: [], + loadMore: function () + { + var api = "" + // console.log(Profile.mode) + if (Profile.mode === "user") + api = API.URL.user.videos + else if (Profile.mode === "like") + api = API.URL.user.likes + else + return + var data = + { + user: userProfile[1], + start: Player.videos[Player.queue[0]].date, + } + d.scrollToTop(window) + $("#queueMore").unbind("click") + $("#queue").html("
  • LOADING
  • ") + $.post(api, data).success(Profile.loadMoreCallback) + }, + loadMoreCallback: function (raw) + { + var lines = API.parse("/user/load", raw) + if (! lines) return + if (lines[0].indexOf("0\t") === 0) + return // console.log(lines.split("\t")[1]) + queue = [] + for (i in lines) + { + if (lines[i].length < 2) + continue + line = lines[i].split("\t") + queue.push(line) + } + Profile.page += 1 + Profile.pages[Profile.page] = queue + Profile.loadQueue(queue) + $("#queue").prepend("
  • Go Back
  • ") + $("#queueLess").unbind("click") + $("#queueLess").bind("click", Profile.loadLess) + if (queue.length < 50) + $("#queue").append("
  • That's all the videos!
  • ") + }, + loadLess: function () + { + Profile.page -= 1 + Profile.loadQueue(Profile.pages[Profile.page]) + if (Profile.page !== 0) + { + $("#queue").prepend("
  • Go Back
  • ") + $("#queueLess").unbind("click") + $("#queueLess").bind("click", Profile.loadLess) + return + } + }, + loadQueue: function (queue) + { + if (! queue || ! queue.length) + return + Player.clearQueue() + $("#queueMore").unbind("click") + $("#queue").html("") + Playlist.enqueueOldVideoFormat(queue) + d.scrollToTop("#queue") + if (Profile.mode !== "top") + { + if (queue.length > 49) + { + $("#queue").append("
  • Load More Videos
  • ") + $("#queueMore").bind("click", Profile.loadMore) + } + } + }, + loadLikeQueue: function () + { + if (Profile.mode === "like") + return + Profile.page = 0 + Profile.pages = [likeVideoQueue] + Profile.mode = "like" + $(".mode").removeClass("mode") + $("#likeQueue").addClass("mode") + Profile.loadQueue(likeVideoQueue) + }, + loadTopQueue: function () + { + if (Profile.mode === "top") + return + Profile.mode = "top" + $(".mode").removeClass("mode") + $("#topQueue").addClass("mode") + Profile.loadQueue(topVideoQueue) + }, + loadUserQueue: function () + { + if (Profile.mode === "user") + return + Profile.page = 0 + Profile.pages = [userVideoQueue] + Profile.mode = "user" + $(".mode").removeClass("mode") + $("#userQueue").addClass("mode") + Profile.loadQueue(userVideoQueue) + }, + loadImages: function () + { + var lastDate = imageQueue[0][0] + var bars = [] + var s = "" + + for (i in imageQueue) + { + img = imageQueue[i] + if (img[0] !== lastDate) + { + bars.push('
    '+s+'
    ') + s = "" + lastDate = img[0] + } + s += '' + } + bars.push('
    '+s+'
    ') + $("#gifs").html(bars.join("")) + }, + init: function () + { + if (userVideoQueue && userVideoQueue.length && userVideoQueueTitle) + { + $("#queueLinks").append('
  • '+userVideoQueueTitle+'
  • ') + $("#userQueue").bind("click", Profile.loadUserQueue) + } + if (likeVideoQueue && likeVideoQueue.length && likeVideoQueueTitle) + { + $("#queueLinks").append('
  • '+likeVideoQueueTitle+'
  • ') + $("#likeQueue").bind("click", Profile.loadLikeQueue) + likeVideoQueue.reverse() + } + if (topVideoQueue && topVideoQueue.length && topVideoQueueTitle) + { + $("#queueLinks").append('
  • '+topVideoQueueTitle+'
  • ') + $("#topQueue").bind("click", Profile.loadTopQueue) + topVideoQueue.reverse() + } + if (userVideoQueue && userVideoQueue.length) + Profile.loadUserQueue() + else if (likeVideoQueue && likeVideoQueue.length) + Profile.loadLikeQueue() + // if (imageQueue && imageQueue.length) + // Profile.loadImages() + } + } +var Poll = + { + room: "main", + delay: 5000, + init: function () + { + if (document.cookie) + { + var cookies = document.cookie.split(";") + for (i in cookies) + { + var cookie = cookies[i].split("=") + if (cookie[0].indexOf("room") !== -1) + { + if (cookie[1] !== 'false' && cookie[1] !== 'undefined') + { + Poll.room = cookie[1] + break + } + } + } + } + Poll.poll() + Settings.open() + }, + poll: function () + { + $.post(API.URL.room.poll, + { + room: Poll.room, + session: Auth.session, + last: 1, + }).success(Poll.pollCallback).error(Poll.pollErrorCallback) + }, + pollErrorCallback: function () + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + }, + pollCallback: function (raw) + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + } + } + +var Main = + { + init: function () + { + $(window).bind("focus", Viewport.focus) + $(window).bind("blur", Viewport.blur) + $(window).bind("resize", Viewport.standardResize) + $(window).bind("keydown", Keyboard.standardKeys) + Playlist.showScores = true + Auth.success = Poll.init + if (Auth.init()) + Auth.checkin() + Profile.init() + Player.init() + Settings.init() + $("#controls").fadeIn(2000) + $("#contact").fadeIn(2000) + setTimeout('Viewport.standardResize()', 1000) + } + } +Main.init() + diff --git a/frontend/static/js/register.js b/frontend/static/js/register.js new file mode 100644 index 0000000..24e8fa0 --- /dev/null +++ b/frontend/static/js/register.js @@ -0,0 +1,292 @@ +function warn (s) + { + $('#msg').append(s+"
    ") + scrollToBottom('#msg') + } +function scrollToTop (div) + { $(div).scrollTop( 0 ) } +function scrollToBottom (div) + { $(div).scrollTop( $(div)[0].scrollHeight ) } +function trim (s) + { if (s) { return s.replace(/^\s+|\s+$/g,"") } else { return s } } +function supports_html5_storage () + { + try + { return 'localStorage' in window && window['localStorage'] !== null; } + catch (e) + { return false } + } +function noop() { return false } +var API = + { + HEADER: "#@scanjam 0.2", + LIKE_STRING: "like", + HAS_LOCAL_STORAGE: supports_html5_storage(), + BASE_URL: "http://scannerjammer.com:19898", + URL: + { + auth: + { + register: "/api/auth/register", + available: "/api/auth/available", + login: "/api/auth/login", + logout: "/api/auth/logout", + }, + room: + { + join: "/api/room/join", + poll: "/api/room/poll", + say: "/api/room/say", + }, + video: + { + like: "/api/video/like", + unlike: "/api/video/unlike", + }, + }, + parse: function (api,raw) + { + if (! raw) + { warn(api+": no result"); return false } + var lines = raw.split("\n") + if (lines.shift() !== API.HEADER) + { warn(api+": no header"); return false } + if (! lines.length) + { warn(api+": no content"); return false } + return lines + }, + init: function () + { + for (type in API.URL) + { + for (name in API.URL[type]) + { + API.URL[type][name] = API.BASE_URL + API.URL[type][name] + } + } + }, + } +var Local = API.HAS_LOCAL_STORAGE ? + { + getOrSet: function (key, value) + { + if (value) + localStorage["scanjam."+key] = value + else + return localStorage.getItem("scanjam."+key) + }, + userid: function (id) + { return Local.getOrSet("userid", id) }, + username: function (name) + { return Local.getOrSet("username", name) }, + isLiked: function (videoid) + { return localStorage.getItem("scanjam.like."+videoid) === "true" }, + unlike: function (videoid) + { localStorage["scanjam.like."+videoid] = false }, + like: function (videoid) + { localStorage["scanjam.like."+videoid] = true }, + } : { isLiked: noop, unlike: noop, like: noop, getOrSet: noop, username: noop, userid: noop, } +var Register = + { + userok: false, + pwok: false, + username: false, + pwtimeout: false, + activated: false, + submit: function () + { + if (! Register.userok || ! Register.pwok) + return + $("#register-go").unbind("click") + var username = $("#register-username").val() + var password = $("#register-pw2").val() + var pwhash = $.md5("scanjam"+password) + Register.username = username + var data = + { + 'username': username, + 'password': pwhash, + } + $("#success-username").html(username) + $.post(API.URL.auth.register, data).success(Register.submitCallback).error(Register.errorCallback) + }, + errorCallback: function (raw) + { + Register.error("#username-available","weird problem, err try again") + Register.error("#password-match", "") + Register.deactivateGoButton() + Register.activateGoButton() + return + }, + submitCallback: function (raw) + { + lines = API.parse("/api/register",raw) + if (! lines || lines[0] !== "OK") + return Register.errorCallback() + var u = lines[1].split("\t") + Local.userid(u[0]) + Local.username(u[1]) + document.cookie = "session="+u[2]+";path=/;domain=.scannerjammer.com;max-age=1086400" + + $("#register").fadeOut(1000, function () + { + $("#success").fadeIn(1000, function() + { + $("#bg").fadeIn(700, 'linear') + }) + }) + }, + checkPassword: function () + { + var pw1 = $("#register-pw").val() + var pw2 = $("#register-pw2").val() + if (! pw1 && ! pw2) + return + if (pw1 && ! pw2) + return + if (pw1 !== pw2) + { + Register.error("#password-match", "passwords don't match..") + Register.pwok = false + return + } + $("#password-match").removeClass("error") + $("#password-match").html("passwords match!") + Register.pwok = true + if (Register.userok) + Register.activateGoButton() + }, + deactivateGoButton: function () + { + $("#register-go").css("color", "#000") + $("#register-go").animate({opacity: 0.2}, 500) + Register.activated = false + }, + activateGoButton: function () + { + $("#register-go").css("color", "#00f") + $("#register-go").animate({opacity: 1.0}, 500) + if (! Register.activated) + { + Register.activated = true + $("#register-go").bind("click", Register.submit) + } + }, + error: function (id, msg) + { + $(id).addClass("error") + $(id).html(msg) + Register.deactivateGoButton() + }, + checkAvailability: function () + { + var isalphanumeric = /^[a-zA-Z0-9]+$/ + var username = $("#register-username").val() + if (! username) + { + Register.error("#username-available", "please enter a username..") + Register.userok = false + return + } + if (isalphanumeric.test(username) === false) + { + Register.error("#username-available", "just letters/numbers plz..") + Register.userok = false + return + } + $.post(API.URL.auth.available, {'username':username}, Register.checkAvailabilityCallback) + }, + checkAvailabilityCallback: function (raw) + { + lines = API.parse("/user/register", raw) + if (! lines || lines[0] !== "OK") + { + alert(raw) + Register.error("#username-available", "name already taken..") + Register.userok = false + return + } + $("#username-available").removeClass("error") + $("#username-available").html("available!") + Register.userok = true + if (Register.pwok) + Register.activateGoButton() + }, + usernameUpdate: function (event) + { + Register.userok = false + return true + }, + pwUpdate: function (event) + { + // if (event.keyCode === 13) + // { + // Register.submit() + // return false + // } + if (Register.pwtimeout) + clearTimeout(Register.pwtimeout) + Register.pwtimeout = setTimeout(Register.checkPassword, 100) + return true + }, + init: function () + { + $("#register-username").val("") + $("#register-pw").val("") + $("#register-pw2").val("") + $("#register-username").bind("blur", Register.checkAvailability) + $("#register-pw2").bind("blur", Register.checkPassword) + $("#register-username").bind("keydown", Register.usernameUpdate) + $("#register-pw").bind("keydown", Register.pwUpdate) + $("#register-pw2").bind("keydown", Register.pwUpdate) + $("#register").fadeIn(1000, function () + { + $("#plant").fadeIn(1000) + }) + $("#register-username").focus() + }, + } +var Main = + { + roomName: false, + enter: false, + resize: function () + { + var w = $(window).width() + var h = $(window).height() + + $("#bg img").css("width", w) + $("#bg img").css("height", h) + + $("#msg").css("max-height", h-130) + }, + kp: function (event) + { + if (event.keyCode === 13) + { + if (Main.enter) + Main.enter() + return false + } + return true + }, + init: function () + { + warn("INIT") + $("#msg").hide() + + $(window).resize(Main.resize) + Main.resize() + + API.init() + $(window).load(Register.init) + + if (window.location.hash) + { + Main.roomName = window.location.hash.replace("#","") + $("#sj-link").attr("href", "/"+Main.roomName+"/") + } + }, + } +Main.init() + diff --git a/frontend/static/js/room.js b/frontend/static/js/room.js new file mode 100644 index 0000000..48924d9 --- /dev/null +++ b/frontend/static/js/room.js @@ -0,0 +1,459 @@ +var Menu = {} +var Room = + { + loaded: false, + ops: {}, + settings: {}, + settingsButtonBound: false, + updateSettingMethods: + { + bg: function (url) + { + if (url === Room.settings.bg) + return + d.warn("clearing bg") + $("#bg").fadeOut(500, function () + { + if (url) + { + d.warn("updating bg to "+url) + $("#bg img").attr('src', url).bind("load", function(){$("#bg").fadeIn(2000);d.warn("bg updated")}) + } + }) + }, + title: function (s) + { + if (s.length === 0) + s = " " + $("#heading").html( s.replace(">",">").replace("<","<") ) + }, + topic: function (s) + { + if (s.length === 0) + s = " " + $("#topic").html( d.linkify(s.replace(">",">").replace("<","<")) ) + }, + phase: function (s) + { + if (s === 'light') + { + // turn on lookit stylesheet + } + else + { + // turn off lookit stylesheet + } + }, + bgcolor: function (s) + { + if (s) + $('body').css("background-color", s) + } + }, + updateSetting: function (k, v) + { + d.warn( "update setting: "+k ) + $("room-"+k).val(v) + if (k in Room.updateSettingMethods) + var f = Room.updateSettingMethods[k](v) + Room.settings[k] = v + }, + settingsOpen: function () + { + d.warn("ROOM SETTINGS LOAD") + $("#room-id").html(Room.id) + $("#room-name").html(Room.name) + $("#room-path").html(Room.path) + $("#room-title").val(Room.settings['title']) + $("#room-topic").val(Room.settings['topic']) + $("#room-phase").val(Room.settings['phase']) + $("#room-bg").val(Room.settings['bg']) + $("#room-bgcolor").val(Room.settings['bgcolor']) + $("#room-plant").val(Room.settings['plant']) + $("#room-flower").val(Room.settings['flower']) + $("#room-updater").html(Room.settings['updater']) + if (! Room.settingsButtonBound) + { + Room.settingsButtonBound = true + $("#room-settings-save").bind("click", Room.settingsSaveClick) + } + $("#room-settings-unload").bind("click", Room.settingsClose) + if (Auth.access > 0) + $("#room-mod-tag").html("Moderate room") + else + $("#room-mod-tag").html("") + d.warn("LOADED") + }, + settingsClose: function () + { + d.warn("ROOM SETTINGS UNLOAD") + Room.settingsButtonBound = false + $("#room-settings-save").unbind("click") + }, + settingsKeys: ["title","topic","bg"], + last_bg: "", + settingsSaveClick: function () + { + $("#room-settings-save").unbind("click") + var set = [] + if (Room.ops !== false) + { + if (Auth.access < 1 && !(Auth.username in Room.ops)) + { + Menu.settings.close() + return + } + } + Room.last_bg = Room.settingsKeys['bg'] + for (i in Room.settingsKeys) + { + var k = Room.settingsKeys[i] + var v = d.sanitize( $("#room-"+k).val() ) + Room.updateSetting(k, v) + set.push(k+"\t"+v) + } + set.push("updater\t"+Auth.username) + var s = set.join("\n") + $.post(API.URL.room.settings, {room: Room.name, session: Auth.session, settings: s}, Room.settingsCallback) + Menu.settings.close() + }, + settingsCallback: function (raw) + { + var lines = API.parse("/room/say", raw) + if (! lines) + return + if (lines[0].indexOf("OK") !== -1) + { + d.warn("settings updated: "+lines.shift()) + $("#room-updater").hide().html("you!").fadeIn(500) + } + else if (lines[0].indexOf("BG_SIZE") !== -1) + { + var partz = lines[0].split("\t") + setTimeout('Room.updateSettingMethods.bg(Room.last_bg)', 2000) + alert("Background too large!\n\nYour image: "+ partz[2]+" bytes\nMax size: " + partz[3] + " bytes") + } + else if (lines[0].indexOf("BG_DATA") !== -1) + { + setTimeout('Room.updateSettingMethods.bg(Room.last_bg)', 2000) + alert("Unable to retrieve background image") + } + $("#room-settings-save").bind("click", Room.settingsSaveClick) + }, + connect: function () + { + var videoKey = '' + var hash = document.location.hash + if (hash.indexOf("#") !== -1) + hash = hash.substr(1) + var partz = hash.split("&") + for (i in partz) + { + var pair = partz[i].split("=") + if (pair[0] === "v") + videoKey = pair[1] + } + d.warn("JOINING ROOM "+Room.name) + $.ajax({ + type: 'POST', + url: API.URL.room.join, + data: {'room':Room.name,'session':Auth.session,'enqueue':videoKey}, + timeout: 2000, + }).success(Room.joinCallback).error(Room.joinErrorCallback) + }, + joinErrorCallback: function (jqXHR, textStatus, errorThrown) + { + d.warn("JOIN ERROR") + if (Room.loaded) + return + if (textStatus === "timeout") + Room.connect() + else + Auth.load() + }, + joinCallback: function (raw) + { + var lines = API.parse("/room/join", raw) + if (!lines){ + d.error("UNABLE TO LOAD ROOM"); + setTimeout(Room.load, 500); + return; + } + var u = lines.shift().split("\t") + + if (u[0] === '0') + return Auth.load() + d.warn("JOINED ROOM") + Auth.unload() + Auth.userid = u[0] + Auth.username = u[1] + Auth.access = u[2] + d.joy("logged in as "+Auth.username) + + Lastlog.update(lines.shift()) + Chat.store(lines) + + d.warn("__________") + d.warn("__________") + d.warn("__________") + Room.load() + d.warn("__________") + d.warn("__________") + d.warn("__________") + }, + load: function () + { + d.warn("LOAD ROOM") + $("#loading").fadeOut(500, function() + { + Background.load() + Player.init() + VideoChat.init() + Chat.poll() + }) + $("#loading").fadeOut(1500, Room.loadFinish) + }, + loadFinish: function () + { + setTimeout("d.scrollToBottom('#chat')", 500) + $("#logo").show() + $("#logobg,#logobar").show() + $("#likebutton").css("display", "inline-block") + + $("#player").show() + $("#playlist").show() + $("#playlistbg").show() + + $("#form").show() + $("#formbg").show() + $("#chat").fadeIn(200) + d.scrollToBottom("#chat") + $("#chatbg").show() + $("#lastlogbox").show() + $("#lastlogbg").show() + + Keyboard.enter = Chat.say + $("#chat-message").bind("focus", Keyboard.focusTextarea) + $("#chat-message").bind("blur", Keyboard.blurTextarea) + $("#chat-message").focus() + Keyboard.focusTextarea() + $("#chat-send").bind("click", Chat.say) + $("#fullscreen").bind("click", Viewport.fullscreenOn) + $("#sitez").show() + $("#logout").click(Auth.logout) + if (Room.name === "feederbleeder") + { + $("#heading").css({ "color": "#ff3333" }) + // Viewport.fullscreenOn() + } + //else + Viewport.standardResize() + // $(".ytlink").live("click", Player.ytLinkClick, false) + + if (Auth.access > 0) + { + // var div = $("
    ").addClass("modhello").html("Congratulations new moderator! Click on the cube icon in the upper right corner and you will see the MODERATE ROOM link.").click(function(){$(this).fadeOut(1000)}) + // $("#chat").append(div) + } + // var div = $("
    ").addClass("modhello").html("Hey! You can now use the LEFT AND RIGHT ARROW KEYS to browse the playlist, and the L key to like a video!").click(function(){$(this).fadeOut(1000)}) + // $("#chat").append(div) + setTimeout(Player.start, 2000) + Room.loaded = true + document.cookie = "room="+Room.name+";path=/;domain=.scannerjammer.com;max-age=86400" + if (Room.loadCallback) + Room.loadCallback() + }, + loadCallback: false, + unload: function () + { + $("#logo,#logobg,#player,#playlist,#playlistbg,#form,#formbg,#chat,#chatbg,#lastlogbox,#lastlogbg,#sitez").hide() + Menu.close() + }, + init: function () + { + d.warn("INIT ROOM") + if (roomName !== undefined) + Room.name = roomName + else + Room.name = "main" + d.warn("room: "+Room.name) + // $("#chat").show() + } + } + +var Rooms = + { + loaded: false, + queue: [ + [0, "rooms", "/", "http://scannerjammer.com/bgz/gridzy9.jpg", "→ SEE ALL OPEN ROOMS"], + [1, "main", "/main", "http://scannerjammer.com/bgz/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif", "MAIN ROOM"], + [12, "FEEDERBLEEDER", "/feederbleeder", "http://scannerjammer.com/img/Tropic_Of_Cancer__The_Sorrow_Of_Two_Blooms_1308602037.jpg", "FEEDERBLEEDER"], + [2, "avatar", "/avatar", "http://scannerjammer.com/img/avatar2.png", "avatar"], + [3, "glitter", "/glitter", "http://scannerjammer.com/bgz/argus.gif", "glitter"], + [10, 'jono', '/jonomilo', 'http://scannerjammer.com/bgz/whitesquare.gif', 'jònò mì lò'], + //[11, 'SJD', 'http://lolz.biz/sjd', 'http://scannerjammer.com/img/idgiguy2.png', 'SJD'], + [4, "waterfall", "/waterfall", "http://i.imgur.com/QEZRF.gif", "waterfall"], + ], + list: function () + { + if (Rooms.loaded) + return + Rooms.listDisplay(Rooms.queue) + // $.post(API.URL.room.list, {session:Auth.session}).success(Rooms.listCallback).error(Rooms.listError) + }, + listCallback: function (raw) + { + // parse API + Rooms.listDisplay(lines) + }, + listError: function () + { + Rooms.listDisplay(Rooms.queue) + }, + listDisplay: function (rooms) + { + $("#rooms-loading").hide() + var divz = [] + for (i in rooms) + { + var r = rooms[i] + var s = "
  • "+r[4] + if (r[1] === Room.name) + s += " < YOU ARE HERE" + s += "
  • " + divz.push(s) + } + $("#rooms-list").html(divz.join('')) + Rooms.loaded = true + } + } +var About = + { + loaded: false, + init: function () + { + $("#your-profile").attr('href', 'http://scannerjammer.com/profile/'+Auth.username) + About.loaded = true + } + } +function menu (key, loadCallback) + { + d.warn("MENU INIT "+key) + this.appear = function () + { + if (! Menu.isOpen) + { + $("#"+key+"-container").show() + Menu.current = key + loadCallback() + $("#chat-message").blur() + Keyboard.blurTextarea() + } + } + this.disappear = function () + { + if (! Menu.isOpen) + $("#"+key+"-container").hide() + } + this.close = function () + { + $("#"+key+"-container").hide() + $(".opened").removeClass("opened") + Menu.isOpen = false + } + this.click = function () + { + for (i in Menu.keys) + { + $("#"+Menu.keys[i]+"-container").hide() + } + $("#"+key+"-container").show() + if (Menu.current !== key) + loadCallback() + Menu.current = key + $(".opened").removeClass("opened") + $("#"+key+"-hook").addClass("opened") + Menu.isOpen = true + } + $("#"+key+"-hook").hover(this.appear, this.disappear).click(this.click) + $("#"+key+"-close").click(this.close) + $("#"+key+"-container").hover(this.click, this.close) + } +var VideoChat = + { + isOpen: false, + badgePositioned: false, + suppressBadge: 0, + updateCount: function (count) + { + /* + if (VideoChat.suppressBadge > 0) + { + VideoChat.suppressBadge -= 1 + return + } + */ + if (parseInt(count) > 0) + { + if (! VideoChat.badgePositioned) + { + VideoChat.badgePositioned = true + $("#videochat-badge").css({ + right: 5, + top: 5, + }).show() + } + $("#videochat-badge").html(count).show() + } + else + { + $("#videochat-badge").hide() + } + }, + open: function () + { + // $("#tokbox-embed").html('') + // $("#tokbox-embed").show() + // $(window).trigger('resize') + VideoChat.isOpen = true + // Webcam.load() + Tokbox.load() + }, + close: function () + { + // $("#tokbox-embed").hide().html("") + // $("#tokbox-close").hide() + // $(window).trigger('resize') + VideoChat.isOpen = false + VideoChat.suppressBadge = 20 + // Webcam.unload() + Tokbox.unload() + }, + toggle: function () + { + if (VideoChat.isOpen) + VideoChat.close() + else + VideoChat.open() + }, + init: function () + { + // Webcam.init() + $("#tokbox").show() + $("#videochat-toggle").click(VideoChat.toggle) + } + } +var Menu = + { + isOpen: false, + current: false, + keys: ["settings","about","rooms"], + close: function () + { + if (Menu.current) + Menu[Menu.current].close() + }, + settings: new menu("settings", Room.settingsOpen), + rooms: new menu("rooms", Rooms.list), + about: new menu("about", About.init), + } diff --git a/frontend/static/js/roomlist.js b/frontend/static/js/roomlist.js new file mode 100644 index 0000000..1b6c6d8 --- /dev/null +++ b/frontend/static/js/roomlist.js @@ -0,0 +1,166 @@ +var Keyboard = + { + enter: false, + textareaMap: function (event) + { + var kc = event.keyCode + if (kc === 13) + { + if (Keyboard.enter) + Keyboard.enter() + return false + } + return true + }, + } +var Poll = + { + room: "main", + delay: 5000, + init: function () + { + if (document.cookie) + { + var cookies = document.cookie.split(";") + for (i in cookies) + { + var cookie = cookies[i].split("=") + if (cookie[0].indexOf("room") !== -1) + { + if (cookie[1] !== 'false' && cookie[1] !== 'undefined') + { + Poll.room = cookie[1] + break + } + } + } + } + Poll.poll() + }, + poll: function () + { + $.post(API.URL.room.poll, + { + room: Poll.room, + session: Auth.session, + last: 1, + }).success(Poll.pollCallback).error(Poll.pollErrorCallback) + }, + pollErrorCallback: function () + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + }, + pollCallback: function (raw) + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + }, + } +var Roomlist = + { + minwidth: 200, + width: 200, + list: function () + { + var roomz = {} + var keys = [] + var sorted = [] + var presortOrder = + [ + "main", + "nightschool", + "waterfall", + "feederbleeder", + "diornights", + "classical", + "jonomilo", + "dump", + "tang", + "avatar", + "glitter", + "yhvh", + "los7angele55", + //"sjd", + "frederick", + "icons", + // "gorgeoustaps", "psychichandbook", + // "tense", + ] + var presortMap = {} + for (var i = 0; i < presortOrder.length; i++) + presortMap[presortOrder[i]] = true + //roomz['sjd'] = Roomlist.newRecord([0,"sjd",0,0,"http://scannerjammer.com/img/sjd.jpg"]) + for (var i = 0; i < ROOM_LIST.length; i++) + { + var row = ROOM_LIST[i] + if (row.length < 4) + continue + roomz[row[1]] = Roomlist.newRecord(row) + if (! (presortMap.hasOwnProperty(row[1]))) + keys.push(row[1]) + } + for (var i = 0; i < presortOrder.length; i++) + { + sorted.push(roomz[presortOrder[i]]) + } + for (i in keys.sort()) + { + // console.log(keys[i]) + sorted.push(roomz[keys[i]]) + } + $("#roomlist").html(sorted.join("")) + }, + newRecord: function (row) + { + var rotation = function(x) { + var pre = " -moz- -webkit- -o-".split(" "); + var r = ""; + var d = Math.floor(Math.random()*2 * x - x); + //console.log(d); + for (var i in pre) { + r += pre[i] + "transform:rotate(" + d + "deg);" + } + r += "\">"; + return r; + }; + //console.log(rotation); + var s = "" + //if (row[1] === "sjd") + // s += " 0) + s += "" + row[3] + "" + s += "" + row[1] + "" + s += "
    " + s += "" + return s + }, + init: function () + { + if (Auth.loaded) + Auth.unload() + Poll.init() + }, + } +var Main = + { + resize: function () + { + var w = $(window).width() + var cols = 4 // Math.floor(w / Roomlist.minwidth) + Roomlist.width = Math.floor(w / cols) + }, + init: function () + { + $(window).resize(Main.resize) + Main.resize() + Roomlist.list() + Auth.success = Roomlist.init + if (! Auth.init()) + Auth.load() + }, + } +Main.init() + diff --git a/frontend/static/js/search.js b/frontend/static/js/search.js new file mode 100644 index 0000000..e644026 --- /dev/null +++ b/frontend/static/js/search.js @@ -0,0 +1,191 @@ +YOUTUBE_SEARCH_URL = "https://gdata.youtube.com/feeds/api/videos" +YOUTUBE_URL_PREFIX = "http://youtube.com/watch?v=" +function courtesy_s (quantity, noun) + { + if (quantity > 1) + return quantity + " " + noun + "s" + return quantity + " " + noun + } +var Search = + { + start: 0, + limit: 20, + sj: function () + { + Search.start = 0 + Search.terms = $("#search-terms").val() + Search.sjSearch (Search.terms, Search.start) + }, + sjSearch: function (terms, start) + { + var params = + { + "q": terms, + "start": Search.start, + "limit": Search.limit, + "session": Auth.session, + } + $.post(API.URL.video.search, params, Search.sjCallback) + $("#search-instructions").hide() + $("#search-results").html("").hide() + $("#search-loading").show() + $("#search-results-container").show() + }, + sjCallback: function (raw) + { + var lines = API.parse ("/video/search", raw) + var items = [] + for (var i = 0; i < lines.length; i++) + { + // 0 id 1 score 2 user 3 usercount 4 title 5 url 6 thumbnail + var line = lines[i].split("\t") + if (line.length < 7) + continue + var video = + { + url: line[5], + thumbnail: line[6], + title: line[4], + user: line[2], + quantify: "", + } + if (parseInt(line[3]) > 1) + video['user'] += " + " + courtesy_s (parseInt(line[3])-1, "other") + if (parseInt(line[1]) > 0) + video['quantify'] = courtesy_s (parseInt(line[1]), "like") + var tag = Search.resultTag (video) + items.push(tag) + } + if (items.length === Search.limit) + { + Search.start += Search.limit + $("#search-next-page").show() + } + else + { + $("#search-next-page").hide() + } + $("#search-loading").hide() + $("#search-results").html(items.join("")).show() + $("#search-instructions").show() + $("#curtain").bind("click", Search.close).css({"background-color": "transparent", "z-index": 99}).show() + }, + youtube: function () + { + var terms = $("#search-terms").val() + var params = + { + "q": terms, + "v": 2, + "alt": "jsonc", + } + $.get(YOUTUBE_SEARCH_URL, params, Search.youtubeCallback, "jsonp") + $("#search-results-container").show() + $("#search-results").html("").hide() + $("#search-loading").show() + }, + durationToString: function (duration) + { + return Math.floor(duration / 60) + ":" + (duration % 60) + }, + viewCountToString: function (viewCount) + { + if (! viewCount) + return '0' + var vc = viewCount.toString () + var commas = /(\d+)(\d{3})/; + while (commas.test(vc)) + { + vc = vc.replace(commas, '$1' + ',' + '$2'); + } + return vc + }, + resultTag: function (video) + { + var tag = "
  • " + tag += "
    " + tag += "

    " + video['title'] + "

    " + tag += "" + tag += "Preview" + tag += "
  • " + return tag + }, + youtubeCallback: function (data) + { + var items = [] + for (var i = 0; i < data['data']['items'].length; i++) + { + var item = data['data']['items'][i] + var video = + { + url: YOUTUBE_URL_PREFIX+item['id'], + thumbnail: item['thumbnail']['sqDefault'], + title: item['title'], + user: item['uploader'], + quantify: Search.viewCountToString(item['viewCount']) + "views", + } + var tag = Search.resultTag (video) + items.push(tag) + } + $("#search-loading").hide() + $("#search-results").html(items.join("")).show() + }, + keydown: function (e) + { + if (e.keyCode === 13) + { + Search.sj () + } + if (e.keyCode === 27) + { + Search.close () + Keyboard.focusTextarea () + } + }, + nextPage: function () + { + Search.sjSearch (Search.terms, Search.start) + }, + loadResult: function () + { + var url = $(this).parent().data("url") + $.post(API.URL.room.say, {room: Room.name, session: Auth.session, msg: url}) + Search.close () + }, + close: function () + { + $("#curtain").unbind("click", Search.close).hide() + $("#search-results-container").hide() + $("#search-terms").val("") + }, + blurSearchTextarea: function () + { + $(window).unbind("keydown") + $("#chat-message").unbind("keydown").bind("keydown", Keyboard.textareaMap) + $("#chat-message").unbind("focus").focus().bind("focus", Keyboard.focusTextarea) + if ($("#chat-message").val().length === 0) + Keyboard.enteredText = false + }, + focusSearchTextarea: function () + { + $(window).unbind("keydown") + $("#chat-message").unbind("keydown") + }, + init: function () + { + $("#search-results li div").live("click", Search.loadResult) + $("#search-results li h4").live("click", Search.loadResult) + $("#search-results li span").live("click", Search.loadResult) + $("#search-terms").bind("keydown", Search.keydown) + $("#search-terms").bind("focus", Search.focusSearchTextarea) + $("#search-terms").bind("blur", Search.blurSearchTextarea) + // $("#search-terms").val("glock n my hand") + // Search.sj () + } + } +Search.init () + diff --git a/frontend/static/js/sj6.js b/frontend/static/js/sj6.js new file mode 100644 index 0000000..7da01a0 --- /dev/null +++ b/frontend/static/js/sj6.js @@ -0,0 +1,6505 @@ +/*! + * jQuery JavaScript Library v1.5.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Mar 31 15:28:23 2011 -0400 + */ +(function(a,b){function ci(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cf(a){if(!b_[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";b_[a]=c}return b_[a]}function ce(a,b){var c={};d.each(cd.concat.apply([],cd.slice(0,b)),function(){c[this]=a});return c}function b$(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bZ(){try{return new a.XMLHttpRequest}catch(b){}}function bY(){d(a).unload(function(){for(var a in bW)bW[a](0,1)})}function bS(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function P(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function H(a,b){return(a&&a!=="*"?a+".":"")+b.replace(t,"`").replace(u,"&")}function G(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,p=[],q=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function E(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function y(){return!0}function x(){return!1}function i(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function h(a,c,e){if(e===b&&a.nodeType===1){e=a.getAttribute("data-"+c);if(typeof e==="string"){try{e=e==="true"?!0:e==="false"?!1:e==="null"?null:d.isNaN(e)?g.test(e)?d.parseJSON(e):e:parseFloat(e)}catch(f){}d.data(a,c,e)}else e=b}return e}var c=a.document,d=function(){function G(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(G,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x,y,z=Object.prototype.toString,A=Object.prototype.hasOwnProperty,B=Array.prototype.push,C=Array.prototype.slice,D=String.prototype.trim,E=Array.prototype.indexOf,F={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.2",length:0,size:function(){return this.length},toArray:function(){return C.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?B.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),x.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(C.apply(this,arguments),"slice",C.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:B,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;x.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=d._Deferred();if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",y,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",y),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&G()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):F[z.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!A.call(a,"constructor")&&!A.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||A.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1?f.call(arguments,0):c,--g||h.resolveWith(h,f.call(b,0))}}var b=arguments,c=0,e=b.length,g=e,h=e<=1&&a&&d.isFunction(a.promise)?a:d.Deferred();if(e>1){for(;c
    a";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0,reliableMarginRight:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e)}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(a.style.width="1px",a.style.marginRight="0",d.support.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(a,null).marginRight,10)||0)===0),b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function");return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}}();var g=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!i(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,g=b.nodeType,h=g?d.cache:b,j=g?b[d.expando]:d.expando;if(!h[j])return;if(c){var k=e?h[j][f]:h[j];if(k){delete k[c];if(!i(k))return}}if(e){delete h[j][f];if(!i(h[j]))return}var l=h[j][f];d.support.deleteExpando||h!=a?delete h[j]:h[j]=null,l?(h[j]={},g||(h[j].toJSON=d.noop),h[j][f]=l):g&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var f=this[0].attributes,g;for(var i=0,j=f.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var j=i?f:0,k=i?f+1:h.length;j=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=m.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&n.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var k=a.getAttributeNode("tabIndex");return k&&k.specified?k.value:o.test(a.nodeName)||p.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var l=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return l===null?b:l}h&&(a[c]=e);return a[c]}});var r=/\.(.*)$/,s=/^(?:textarea|input|select)$/i,t=/\./g,u=/ /g,v=/[^\w\s.|`]/g,w=function(a){return a.replace(v,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=x;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(a){return typeof d!=="undefined"&&d.event.triggered!==a.type?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=x);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),w).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(r,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=a.type,l[m]())}catch(p){}k&&(l["on"+m]=k),d.event.triggered=b}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},D=function D(a){var c=a.target,e,f;if(s.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=C(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:D,beforedeactivate:D,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&D.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&D.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",C(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in B)d.event.add(this,c+".specialChange",B[c]);return s.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return s.test(this.nodeName)}},B=d.event.special.change.filters,B.focus=B.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function f(a){var c=d.event.fix(a);c.type=b,c.originalEvent={},d.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var e=0;d.event.special[b]={setup:function(){e++===0&&c.addEventListener(a,f,!0)},teardown:function(){--e===0&&c.removeEventListener(a,f,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return"text"===c&&(b===c||b===null)},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=N.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(P(c[0])||P(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=M.call(arguments);I.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!O[a]?d.unique(f):f,(this.length>1||K.test(e))&&J.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var R=/ jQuery\d+="(?:\d+|null)"/g,S=/^\s+/,T=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,U=/<([\w:]+)/,V=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};Z.optgroup=Z.option,Z.tbody=Z.tfoot=Z.colgroup=Z.caption=Z.thead,Z.th=Z.td,d.support.htmlSerialize||(Z._default=[1,"div
    ","
    "]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(R,""):null;if(typeof a!=="string"||X.test(a)||!d.support.leadingWhitespace&&S.test(a)||Z[(U.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(T,"<$1>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){ba(a,e),f=bb(a),g=bb(e);for(h=0;f[h];++h)ba(f[h],g[h])}if(b){_(a,e);if(c){f=bb(a),g=bb(e);for(h=0;f[h];++h)_(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||W.test(i)){if(typeof i==="string"){i=i.replace(T,"<$1>");var j=(U.exec(i)||["",""])[1].toLowerCase(),k=Z[j]||Z._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=V.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&S.test(i)&&m.insertBefore(b.createTextNode(S.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bd=/alpha\([^)]*\)/i,be=/opacity=([^)]*)/,bf=/-([a-z])/ig,bg=/([A-Z]|^ms)/g,bh=/^-?\d+(?:px)?$/i,bi=/^-?\d/,bj={position:"absolute",visibility:"hidden",display:"block"},bk=["Left","Right"],bl=["Top","Bottom"],bm,bn,bo,bp=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bm(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bm)return bm(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bf,bp)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bq(a,b,e):d.swap(a,bj,function(){f=bq(a,b,e)});if(f<=0){f=bm(a,b,b),f==="0px"&&bo&&(f=bo(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bh.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return be.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bd.test(f)?f.replace(bd,e):c.filter+" "+e}}),d(function(){d.support.reliableMarginRight||(d.cssHooks.marginRight={get:function(a,b){var c;d.swap(a,{display:"inline-block"},function(){b?c=bm(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bn=function(a,c,e){var f,g,h;e=e.replace(bg,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bo=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bh.test(d)&&bi.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bm=bn||bo,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var br=/%20/g,bs=/\[\]$/,bt=/\r?\n/g,bu=/#.*$/,bv=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bw=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bx=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,by=/^(?:GET|HEAD)$/,bz=/^\/\//,bA=/\?/,bB=/)<[^<]*)*<\/script>/gi,bC=/^(?:select|textarea)/i,bD=/\s+/,bE=/([?&])_=[^&]*/,bF=/(^|\-)([a-z])/g,bG=function(a,b,c){return b+c.toUpperCase()},bH=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bI=d.fn.load,bJ={},bK={},bL,bM;try{bL=c.location.href}catch(bN){bL=c.createElement("a"),bL.href="",bL=bL.href}bM=bH.exec(bL.toLowerCase())||[],d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bI)return bI.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("
    ").append(c.replace(bB,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bC.test(this.nodeName)||bw.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(bt,"\r\n")}}):{name:b.name,value:c.replace(bt,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bL,isLocal:bx.test(bM[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bO(bJ),ajaxTransport:bO(bK),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bR(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bS(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bF,bG)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bv.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bu,"").replace(bz,bM[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bD),e.crossDomain==null&&(q=bH.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bM[1]||q[2]!=bM[2]||(q[3]||(q[1]==="http:"?80:443))!=(bM[3]||(bM[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bP(bJ,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!by.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(bA.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bE,"$1_="+w);e.url=x+(x===e.url?(bA.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bP(bK,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bQ(g,a[g],c,f);return e.join("&").replace(br,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bT=d.now(),bU=/(\=)\?(&|$)|\?\?/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bT++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bU.test(b.url)||f&&bU.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bU,l),b.url===j&&(f&&(k=k.replace(bU,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bV=d.now(),bW,bX;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bZ()||b$()}:bZ,bX=d.ajaxSettings.xhr(),d.support.ajax=!!bX,d.support.cors=bX&&"withCredentials"in bX,bX=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),!a.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bW[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bW||(bW={},bY()),h=bV++,g.onreadystatechange=bW[h]=c):c()},abort:function(){c&&c(0,1)}}}});var b_={},ca=/^(?:toggle|show|hide)$/,cb=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cc,cd=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(ce("show",3),a,b,c);for(var g=0,h=this.length;g=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:ce("show",1),slideUp:ce("hide",1),slideToggle:ce("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!cc&&(cc=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b
    ";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=(e==="absolute"||e==="fixed")&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=ch.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!ch.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=ci(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=ci(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window); + /** + * jQuery MD5 hash algorithm function + * + * + * Calculate the md5 hash of a String + * String $.md5 ( String str ) + * + * + * Calculates the MD5 hash of str using the » RSA Data Security, Inc. MD5 Message-Digest Algorithm, and returns that hash. + * MD5 (Message-Digest algorithm 5) is a widely-used cryptographic hash function with a 128-bit hash value. MD5 has been employed in a wide variety of security applications, and is also commonly used to check the integrity of data. The generated hash is also non-reversable. Data cannot be retrieved from the message digest, the digest uniquely identifies the data. + * MD5 was developed by Professor Ronald L. Rivest in 1994. Its 128 bit (16 byte) message digest makes it a faster implementation than SHA-1. + * This script is used to process a variable length message into a fixed-length output of 128 bits using the MD5 algorithm. It is fully compatible with UTF-8 encoding. It is very useful when u want to transfer encrypted passwords over the internet. If you plan using UTF-8 encoding in your project don't forget to set the page encoding to UTF-8 (Content-Type meta tag). + * This function orginally get from the WebToolkit and rewrite for using as the jQuery plugin. + * + * Example + * Code + * + * $.md5("I'm Persian."); + * + * Result + * + * "b8c901d0f02223f9761016cfff9d68df" + * + * + * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com > + * @link http://www.semnanweb.com/jquery-plugin/md5.html + * @see http://www.webtoolkit.info/ + * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License] + * @param {jQuery} {md5:function(string)) + * @return string + */ + + (function($){ + + var rotateLeft = function(lValue, iShiftBits) { + return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); + } + + var addUnsigned = function(lX, lY) { + var lX4, lY4, lX8, lY8, lResult; + lX8 = (lX & 0x80000000); + lY8 = (lY & 0x80000000); + lX4 = (lX & 0x40000000); + lY4 = (lY & 0x40000000); + lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); + if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8); + if (lX4 | lY4) { + if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); + else return (lResult ^ 0x40000000 ^ lX8 ^ lY8); + } else { + return (lResult ^ lX8 ^ lY8); + } + } + + var F = function(x, y, z) { + return (x & y) | ((~ x) & z); + } + + var G = function(x, y, z) { + return (x & z) | (y & (~ z)); + } + + var H = function(x, y, z) { + return (x ^ y ^ z); + } + + var I = function(x, y, z) { + return (y ^ (x | (~ z))); + } + + var FF = function(a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); + }; + + var GG = function(a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); + }; + + var HH = function(a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); + }; + + var II = function(a, b, c, d, x, s, ac) { + a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac)); + return addUnsigned(rotateLeft(a, s), b); + }; + + var convertToWordArray = function(string) { + var lWordCount; + var lMessageLength = string.length; + var lNumberOfWordsTempOne = lMessageLength + 8; + var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64; + var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16; + var lWordArray = Array(lNumberOfWords - 1); + var lBytePosition = 0; + var lByteCount = 0; + while (lByteCount < lMessageLength) { + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition)); + lByteCount++; + } + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); + lWordArray[lNumberOfWords - 2] = lMessageLength << 3; + lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; + return lWordArray; + }; + + var wordToHex = function(lValue) { + var WordToHexValue = "", WordToHexValueTemp = "", lByte, lCount; + for (lCount = 0; lCount <= 3; lCount++) { + lByte = (lValue >>> (lCount * 8)) & 255; + WordToHexValueTemp = "0" + lByte.toString(16); + WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2); + } + return WordToHexValue; + }; + + var uTF8Encode = function(string) { + string = string.replace(/\x0d\x0a/g, "\x0a"); + var output = ""; + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + if (c < 128) { + output += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + output += String.fromCharCode((c >> 6) | 192); + output += String.fromCharCode((c & 63) | 128); + } else { + output += String.fromCharCode((c >> 12) | 224); + output += String.fromCharCode(((c >> 6) & 63) | 128); + output += String.fromCharCode((c & 63) | 128); + } + } + return output; + }; + + $.extend({ + md5: function(string) { + var x = Array(); + var k, AA, BB, CC, DD, a, b, c, d; + var S11=7, S12=12, S13=17, S14=22; + var S21=5, S22=9 , S23=14, S24=20; + var S31=4, S32=11, S33=16, S34=23; + var S41=6, S42=10, S43=15, S44=21; + string = uTF8Encode(string); + x = convertToWordArray(string); + a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; + for (k = 0; k < x.length; k += 16) { + AA = a; BB = b; CC = c; DD = d; + a = FF(a, b, c, d, x[k+0], S11, 0xD76AA478); + d = FF(d, a, b, c, x[k+1], S12, 0xE8C7B756); + c = FF(c, d, a, b, x[k+2], S13, 0x242070DB); + b = FF(b, c, d, a, x[k+3], S14, 0xC1BDCEEE); + a = FF(a, b, c, d, x[k+4], S11, 0xF57C0FAF); + d = FF(d, a, b, c, x[k+5], S12, 0x4787C62A); + c = FF(c, d, a, b, x[k+6], S13, 0xA8304613); + b = FF(b, c, d, a, x[k+7], S14, 0xFD469501); + a = FF(a, b, c, d, x[k+8], S11, 0x698098D8); + d = FF(d, a, b, c, x[k+9], S12, 0x8B44F7AF); + c = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1); + b = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE); + a = FF(a, b, c, d, x[k+12], S11, 0x6B901122); + d = FF(d, a, b, c, x[k+13], S12, 0xFD987193); + c = FF(c, d, a, b, x[k+14], S13, 0xA679438E); + b = FF(b, c, d, a, x[k+15], S14, 0x49B40821); + a = GG(a, b, c, d, x[k+1], S21, 0xF61E2562); + d = GG(d, a, b, c, x[k+6], S22, 0xC040B340); + c = GG(c, d, a, b, x[k+11], S23, 0x265E5A51); + b = GG(b, c, d, a, x[k+0], S24, 0xE9B6C7AA); + a = GG(a, b, c, d, x[k+5], S21, 0xD62F105D); + d = GG(d, a, b, c, x[k+10], S22, 0x2441453); + c = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681); + b = GG(b, c, d, a, x[k+4], S24, 0xE7D3FBC8); + a = GG(a, b, c, d, x[k+9], S21, 0x21E1CDE6); + d = GG(d, a, b, c, x[k+14], S22, 0xC33707D6); + c = GG(c, d, a, b, x[k+3], S23, 0xF4D50D87); + b = GG(b, c, d, a, x[k+8], S24, 0x455A14ED); + a = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905); + d = GG(d, a, b, c, x[k+2], S22, 0xFCEFA3F8); + c = GG(c, d, a, b, x[k+7], S23, 0x676F02D9); + b = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A); + a = HH(a, b, c, d, x[k+5], S31, 0xFFFA3942); + d = HH(d, a, b, c, x[k+8], S32, 0x8771F681); + c = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122); + b = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C); + a = HH(a, b, c, d, x[k+1], S31, 0xA4BEEA44); + d = HH(d, a, b, c, x[k+4], S32, 0x4BDECFA9); + c = HH(c, d, a, b, x[k+7], S33, 0xF6BB4B60); + b = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70); + a = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6); + d = HH(d, a, b, c, x[k+0], S32, 0xEAA127FA); + c = HH(c, d, a, b, x[k+3], S33, 0xD4EF3085); + b = HH(b, c, d, a, x[k+6], S34, 0x4881D05); + a = HH(a, b, c, d, x[k+9], S31, 0xD9D4D039); + d = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5); + c = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8); + b = HH(b, c, d, a, x[k+2], S34, 0xC4AC5665); + a = II(a, b, c, d, x[k+0], S41, 0xF4292244); + d = II(d, a, b, c, x[k+7], S42, 0x432AFF97); + c = II(c, d, a, b, x[k+14], S43, 0xAB9423A7); + b = II(b, c, d, a, x[k+5], S44, 0xFC93A039); + a = II(a, b, c, d, x[k+12], S41, 0x655B59C3); + d = II(d, a, b, c, x[k+3], S42, 0x8F0CCC92); + c = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D); + b = II(b, c, d, a, x[k+1], S44, 0x85845DD1); + a = II(a, b, c, d, x[k+8], S41, 0x6FA87E4F); + d = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0); + c = II(c, d, a, b, x[k+6], S43, 0xA3014314); + b = II(b, c, d, a, x[k+13], S44, 0x4E0811A1); + a = II(a, b, c, d, x[k+4], S41, 0xF7537E82); + d = II(d, a, b, c, x[k+11], S42, 0xBD3AF235); + c = II(c, d, a, b, x[k+2], S43, 0x2AD7D2BB); + b = II(b, c, d, a, x[k+9], S44, 0xEB86D391); + a = addUnsigned(a, AA); + b = addUnsigned(b, BB); + c = addUnsigned(c, CC); + d = addUnsigned(d, DD); + } + var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d); + return tempValue.toLowerCase(); + } + }); + })(jQuery);/* SWFObject v2.2 + is released under the MIT License +*/ +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab0) + 'onid3': null, // callback function for "ID3 data is added/available" + 'onload': null, // callback function for "load finished" + 'whileloading': null, // callback function for "download progress update" (X of Y bytes received) + 'onplay': null, // callback for "play" start + 'onpause': null, // callback for "pause" + 'onresume': null, // callback for "resume" (pause toggle) + 'whileplaying': null, // callback during play (position update) + 'onstop': null, // callback for "user stop" + 'onfailure': null, // callback function for when playing fails + 'onfinish': null, // callback function for "sound finished playing" + 'onbeforefinish': null, // callback for "before sound finished playing (at [time])" + 'onbeforefinishtime': 5000, // offset (milliseconds) before end of sound to trigger beforefinish (eg. 1000 msec = 1 second) + 'onbeforefinishcomplete': null,// function to call when said sound finishes playing + 'onjustbeforefinish': null, // callback for [n] msec before end of current sound + 'onjustbeforefinishtime': 200, // [n] - if not using, set to 0 (or null handler) and event will not fire. + 'multiShot': true, // let sounds "restart" or layer on top of each other when played multiple times, rather than one-shot/one at a time + 'multiShotEvents': false, // fire multiple sound events (currently onfinish() only) when multiShot is enabled + 'position': null, // offset (milliseconds) to seek to within loaded sound data. + 'pan': 0, // "pan" settings, left-to-right, -100 to 100 + 'type': null, // MIME-like hint for file pattern / canPlay() tests, eg. audio/mp3 + 'usePolicyFile': false, // enable crossdomain.xml request for audio on remote domains (for ID3/waveform access) + 'volume': 100 // self-explanatory. 0-100, the latter being the max. + }; + + this.flash9Options = { // flash 9-only options, merged into defaultOptions if flash 9 is being used + 'isMovieStar': null, // "MovieStar" MPEG4 audio mode. Null (default) = auto detect MP4, AAC etc. based on URL. true = force on, ignore URL + 'usePeakData': false, // enable left/right channel peak (level) data + 'useWaveformData': false, // enable sound spectrum (raw waveform data) - WARNING: CPU-INTENSIVE: may set CPUs on fire. + 'useEQData': false, // enable sound EQ (frequency spectrum data) - WARNING: Also CPU-intensive. + 'onbufferchange': null, // callback for "isBuffering" property change + 'ondataerror': null, // callback for waveform/eq data access error (flash playing audio in other tabs/domains) + 'onstats': null // callback for when connection & play times have been measured + }; + + this.movieStarOptions = { // flash 9.0r115+ MPEG4 audio options, merged into defaultOptions if flash 9+movieStar mode is enabled + 'bufferTime': 3, // seconds of data to buffer before playback begins (null = flash default of 0.1 seconds - if AAC playback is gappy, try increasing.) + 'serverURL': null, // rtmp: FMS or FMIS server to connect to, required when requesting media via RTMP or one of its variants + 'onconnect': null, // rtmp: callback for connection to flash media server + 'bufferTimes': null, // array of buffer sizes to use. Size increases as buffer fills up. + 'duration': null // rtmp: song duration (msec) + }; + + this.version = null; + this.versionNumber = 'V2.97a.20101010'; + this.movieURL = null; + this.url = (smURL || null); + this.altURL = null; + this.swfLoaded = false; + this.enabled = false; + this.o = null; + this.movieID = 'sm2-container'; + this.id = (smID || 'sm2movie'); + this.swfCSS = { + 'swfBox': 'sm2-object-box', + 'swfDefault': 'movieContainer', + 'swfError': 'swf_error', // SWF loaded, but SM2 couldn't start (other error) + 'swfTimedout': 'swf_timedout', + 'swfUnblocked': 'swf_unblocked', // or loaded OK + 'sm2Debug': 'sm2_debug', + 'highPerf': 'high_performance', + 'flashDebug': 'flash_debug' + }; + this.oMC = null; + this.sounds = {}; + this.soundIDs = []; + this.muted = false; + this.debugID = 'soundmanager-debug'; + this.debugURLParam = /([#?&])debug=1/i; + this.specialWmodeCase = false; + this.didFlashBlock = false; + + this.filePattern = null; + this.filePatterns = { + 'flash8': /\.mp3(\?.*)?$/i, + 'flash9': /\.mp3(\?.*)?$/i + }; + + this.baseMimeTypes = /^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i; // mp3 + this.netStreamMimeTypes = /^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i; // mp3, mp4, aac etc. + this.netStreamTypes = ['aac', 'flv', 'mov', 'mp4', 'm4v', 'f4v', 'm4a', 'mp4v', '3gp', '3g2']; // Flash v9.0r115+ "moviestar" formats + this.netStreamPattern = new RegExp('\\.(' + this.netStreamTypes.join('|') + ')(\\?.*)?$', 'i'); + this.mimePattern = this.baseMimeTypes; + + this.features = { + 'buffering': false, + 'peakData': false, + 'waveformData': false, + 'eqData': false, + 'movieStar': false + }; + + this.sandbox = { + // + 'type': null, + 'types': { + 'remote': 'remote (domain-based) rules', + 'localWithFile': 'local with file access (no internet access)', + 'localWithNetwork': 'local with network (internet access only, no local access)', + 'localTrusted': 'local, trusted (local+internet access)' + }, + 'description': null, + 'noRemote': null, + 'noLocal': null + // + }; + + this.hasHTML5 = null; // switch for handling logic + this.html5 = { // stores canPlayType() results, etc. treat as read-only. + // mp3: boolean + // mp4: boolean + 'usingFlash': null // set if/when flash fallback is needed + }; + this.ignoreFlash = false; // used for special cases (eg. iPad/iPhone/palm OS?) + + // --- private SM2 internals --- + + var SMSound, + _s = this, _sm = 'soundManager', _id, _ua = navigator.userAgent, _wl = window.location.href.toString(), _fV = this.flashVersion, _doc = document, _win = window, _doNothing, _init, _onready = [], _debugOpen = true, _debugTS, _didAppend = false, _appendSuccess = false, _didInit = false, _disabled = false, _windowLoaded = false, _wDS, _wdCount = 0, _initComplete, _mixin, _addOnReady, _processOnReady, _initUserOnload, _go, _delayWaitForEI, _waitForEI, _setVersionInfo, _handleFocus, _beginInit, _strings, _initMovie, _dcLoaded, _didDCLoaded, _getDocument, _createMovie, _die, _mobileFlash, _setPolling, _debugLevels = ['log', 'info', 'warn', 'error'], _defaultFlashVersion = 8, _disableObject, _failSafely, _normalizeMovieURL, _oRemoved = null, _oRemovedHTML = null, _str, _flashBlockHandler, _getSWFCSS, _toggleDebug, _loopFix, _policyFix, _complain, _idCheck, _waitingForEI = false, _initPending = false, _smTimer, _onTimer, _startTimer, _stopTimer, _needsFlash = null, _featureCheck, _html5OK, _html5Only = false, _html5CanPlay, _html5Ext, _dcIE, _testHTML5, _addEvt, _removeEvt, _slice = Array.prototype.slice, + _is_pre = _ua.match(/pre\//i), + _iPadOrPhone = _ua.match(/(ipad|iphone)/i), + _isMobile = (_ua.match(/mobile/i) || _is_pre || _iPadOrPhone), + _isIE = (_ua.match(/MSIE/i)), + _isSafari = (_ua.match(/safari/i) && !_ua.match(/chrome/i)), + _hasConsole = (typeof console !== 'undefined' && typeof console.log !== 'undefined'), + _isFocused = (typeof _doc.hasFocus !== 'undefined'?_doc.hasFocus():null), + _tryInitOnFocus = (typeof _doc.hasFocus === 'undefined' && _isSafari), + _okToDisable = !_tryInitOnFocus; + + this._use_maybe = (_wl.match(/sm2\-useHTML5Maybe\=1/i)); // temporary feature: #sm2-useHTML5Maybe=1 forces loose canPlay() check + this._overHTTP = (_doc.location?_doc.location.protocol.match(/http/i):null); + this.useAltURL = !this._overHTTP; // use altURL if not "online" + + if (_iPadOrPhone || _is_pre) { + // might as well force it on Apple + Palm, flash support unlikely + _s.useHTML5Audio = true; + _s.ignoreFlash = true; + } + + if (_is_pre || this._use_maybe) { + // less-strict canPlayType() checking option + _s.html5Test = /^(probably|maybe)$/i; + } + + // Temporary feature: allow force of HTML5 via URL: #sm2-usehtml5audio=0 or 1 + // + (function(){ + var a = '#sm2-usehtml5audio=', l = _wl, b = null; + if (l.indexOf(a) !== -1) { + b = (l.substr(l.indexOf(a)+a.length) === '1'); + if (typeof console !== 'undefined' && typeof console.log !== 'undefined') { + console.log((b?'Enabling ':'Disabling ')+'useHTML5Audio via URL parameter'); + } + _s.useHTML5Audio = b; + } + }()); + // + + // --- public API methods --- + + this.supported = function() { + return (_needsFlash?(_didInit && !_disabled):(_s.useHTML5Audio && _s.hasHTML5)); + }; + + this.getMovie = function(smID) { + return _isIE?_win[smID]:(_isSafari?_id(smID) || _doc[smID]:_id(smID)); + }; + + this.loadFromXML = function(sXmlUrl) { + try { + _s.o._loadFromXML(sXmlUrl); + } catch(e) { + _failSafely(); + } + return true; + }; + + this.createSound = function(oOptions) { + var _cs = 'soundManager.createSound(): ', + thisOptions = null, oSound = null, _tO = null; + if (!_didInit || !_s.supported()) { + _complain(_cs + _str(!_didInit?'notReady':'notOK')); + return false; + } + if (arguments.length === 2) { + // function overloading in JS! :) ..assume simple createSound(id,url) use case + oOptions = { + 'id': arguments[0], + 'url': arguments[1] + }; + } + thisOptions = _mixin(oOptions); // inherit from defaultOptions + _tO = thisOptions; // alias + // + if (_tO.id.toString().charAt(0).match(/^[0-9]$/)) { + _s._wD(_cs + _str('badID', _tO.id), 2); + } + _s._wD(_cs + _tO.id + ' (' + _tO.url + ')', 1); + // + if (_idCheck(_tO.id, true)) { + _s._wD(_cs + _tO.id + ' exists', 1); + return _s.sounds[_tO.id]; + } + + function make() { + thisOptions = _loopFix(thisOptions); + _s.sounds[_tO.id] = new SMSound(_tO); + _s.soundIDs.push(_tO.id); + return _s.sounds[_tO.id]; + } + + if (_html5OK(_tO)) { + oSound = make(); + _s._wD('Loading sound '+_tO.id+' from HTML5'); + oSound._setup_html5(_tO); + } else { + if (_fV > 8 && _s.useMovieStar) { + if (_tO.isMovieStar === null) { + _tO.isMovieStar = ((_tO.serverURL || (_tO.type?_tO.type.match(_s.netStreamPattern):false)||_tO.url.match(_s.netStreamPattern))?true:false); + } + if (_tO.isMovieStar) { + _s._wD(_cs + 'using MovieStar handling'); + } + if (_tO.isMovieStar) { + if (_tO.usePeakData) { + _wDS('noPeak'); + _tO.usePeakData = false; + } + if (_tO.loops > 1) { + _wDS('noNSLoop'); + } + } + } + _tO = _policyFix(_tO, _cs); + oSound = make(); + if (_fV === 8) { + _s.o._createSound(_tO.id, _tO.onjustbeforefinishtime, _tO.loops||1, _tO.usePolicyFile); + } else { + _s.o._createSound(_tO.id, _tO.url, _tO.onjustbeforefinishtime, _tO.usePeakData, _tO.useWaveformData, _tO.useEQData, _tO.isMovieStar, (_tO.isMovieStar?_tO.bufferTime:false), _tO.loops||1, _tO.serverURL, _tO.duration||null, _tO.autoPlay, true, _tO.bufferTimes, _tO.onstats ? true : false, _tO.autoLoad, _tO.usePolicyFile); + if (!_tO.serverURL) { + // We are connected immediately + oSound.connected = true; + if (_tO.onconnect) { + _tO.onconnect.apply(oSound); + } + } + } + } + if (_tO.autoLoad || _tO.autoPlay) { + if (oSound) { + if (_s.isHTML5) { + oSound.autobuffer = 'auto'; // early HTML5 implementation (non-standard) + oSound.preload = 'auto'; // standard + } else { + oSound.load(_tO); + } + } + } + if (_tO.autoPlay) { + oSound.play(); + } + return oSound; + }; + + this.destroySound = function(sID, _bFromSound) { + // explicitly destroy a sound before normal page unload, etc. + if (!_idCheck(sID)) { + return false; + } + var oS = _s.sounds[sID], i; + oS._iO = {}; // Disable all callbacks while the sound is being destroyed + oS.stop(); + oS.unload(); + for (i = 0; i < _s.soundIDs.length; i++) { + if (_s.soundIDs[i] === sID) { + _s.soundIDs.splice(i, 1); + break; + } + } + if (!_bFromSound) { + // ignore if being called from SMSound instance + oS.destruct(true); + } + oS = null; + delete _s.sounds[sID]; + return true; + }; + + this.load = function(sID, oOptions) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].load(oOptions); + }; + + this.unload = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].unload(); + }; + + this.play = function(sID, oOptions) { + var fN = 'soundManager.play(): '; + if (!_didInit || !_s.supported()) { + _complain(fN + _str(!_didInit?'notReady':'notOK')); + return false; + } + if (!_idCheck(sID)) { + if (!(oOptions instanceof Object)) { + oOptions = { + url: oOptions + }; // overloading use case: play('mySound','/path/to/some.mp3'); + } + if (oOptions && oOptions.url) { + // overloading use case, create+play: .play('someID',{url:'/path/to.mp3'}); + _s._wD(fN + 'attempting to create "' + sID + '"', 1); + oOptions.id = sID; + return _s.createSound(oOptions).play(); + } else { + return false; + } + } + return _s.sounds[sID].play(oOptions); + }; + + this.start = this.play; // just for convenience + + this.setPosition = function(sID, nMsecOffset) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].setPosition(nMsecOffset); + }; + + this.stop = function(sID) { + if (!_idCheck(sID)) { + return false; + } + _s._wD('soundManager.stop(' + sID + ')', 1); + return _s.sounds[sID].stop(); + }; + + this.stopAll = function() { + _s._wD('soundManager.stopAll()', 1); + for (var oSound in _s.sounds) { + if (_s.sounds[oSound] instanceof SMSound) { + _s.sounds[oSound].stop(); // apply only to sound objects + } + } + }; + + this.pause = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].pause(); + }; + + this.pauseAll = function() { + for (var i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].pause(); + } + }; + + this.resume = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].resume(); + }; + + this.resumeAll = function() { + for (var i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].resume(); + } + }; + + this.togglePause = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].togglePause(); + }; + + this.setPan = function(sID, nPan) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].setPan(nPan); + }; + + this.setVolume = function(sID, nVol) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].setVolume(nVol); + }; + + this.mute = function(sID) { + var fN = 'soundManager.mute(): ', + i = 0; + if (typeof sID !== 'string') { + sID = null; + } + if (!sID) { + _s._wD(fN + 'Muting all sounds'); + for (i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].mute(); + } + _s.muted = true; + } else { + if (!_idCheck(sID)) { + return false; + } + _s._wD(fN + 'Muting "' + sID + '"'); + return _s.sounds[sID].mute(); + } + return true; + }; + + this.muteAll = function() { + _s.mute(); + }; + + this.unmute = function(sID) { + var fN = 'soundManager.unmute(): ', i; + if (typeof sID !== 'string') { + sID = null; + } + if (!sID) { + _s._wD(fN + 'Unmuting all sounds'); + for (i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].unmute(); + } + _s.muted = false; + } else { + if (!_idCheck(sID)) { + return false; + } + _s._wD(fN + 'Unmuting "' + sID + '"'); + return _s.sounds[sID].unmute(); + } + return true; + }; + + this.unmuteAll = function() { + _s.unmute(); + }; + + this.toggleMute = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].toggleMute(); + }; + + this.getMemoryUse = function() { + if (_fV === 8) { + return 0; + } + if (_s.o) { + return parseInt(_s.o._getMemoryUse(), 10); + } + }; + + this.disable = function(bNoDisable) { + // destroy all functions + if (typeof bNoDisable === 'undefined') { + bNoDisable = false; + } + if (_disabled) { + return false; + } + _disabled = true; + _wDS('shutdown', 1); + for (var i = _s.soundIDs.length; i--;) { + _disableObject(_s.sounds[_s.soundIDs[i]]); + } + _initComplete(bNoDisable); // fire "complete", despite fail + _removeEvt(_win, 'load', _initUserOnload); + return true; + }; + + this.canPlayMIME = function(sMIME) { + var result; + if (_s.hasHTML5) { + result = _html5CanPlay({type:sMIME}); + } + if (!_needsFlash || result) { + // no flash, or OK + return result; + } else { + return (sMIME?(sMIME.match(_s.mimePattern)?true:false):null); + } + }; + + this.canPlayURL = function(sURL) { + var result; + if (_s.hasHTML5) { + result = _html5CanPlay(sURL); + } + if (!_needsFlash || result) { + // no flash, or OK + return result; + } else { + return (sURL?(sURL.match(_s.filePattern)?true:false):null); + } + }; + + this.canPlayLink = function(oLink) { + if (typeof oLink.type !== 'undefined' && oLink.type) { + if (_s.canPlayMIME(oLink.type)) { + return true; + } + } + return _s.canPlayURL(oLink.href); + }; + + this.getSoundById = function(sID, suppressDebug) { + if (!sID) { + throw new Error('SoundManager.getSoundById(): sID is null/undefined'); + } + var result = _s.sounds[sID]; + if (!result && !suppressDebug) { + _s._wD('"' + sID + '" is an invalid sound ID.', 2); + } + return result; + }; + + this.onready = function(oMethod, oScope) { + if (oMethod && oMethod instanceof Function) { + if (_didInit) { + _wDS('queue'); + } + if (!oScope) { + oScope = _win; + } + _addOnReady(oMethod, oScope); + _processOnReady(); + return true; + } else { + throw _str('needFunction'); + } + }; + + this.getMoviePercent = function() { + return (_s.o && typeof _s.o.PercentLoaded !== 'undefined'?_s.o.PercentLoaded():null); + }; + + this._writeDebug = function(sText, sType, bTimestamp) { + // If the debug log callback is set, always call it, regardless of debugMode + if (_s.ondebuglog) { + _s.ondebuglog(sText, sType, bTimestamp); + } + // pseudo-private console.log()-style output + // + var sDID = 'soundmanager-debug', o, oItem, sMethod; + if (!_s.debugMode) { + return false; + } + if (typeof bTimestamp !== 'undefined' && bTimestamp) { + sText = sText + ' | ' + new Date().getTime(); + } + if (_hasConsole && _s.useConsole) { + sMethod = _debugLevels[sType]; + if (typeof console[sMethod] !== 'undefined') { + console[sMethod](sText); + } else { + console.log(sText); + } + if (_s.useConsoleOnly) { + return true; + } + } + try { + o = _id(sDID); + if (!o) { + return false; + } + oItem = _doc.createElement('div'); + if (++_wdCount % 2 === 0) { + oItem.className = 'sm2-alt'; + } + if (typeof sType === 'undefined') { + sType = 0; + } else { + sType = parseInt(sType, 10); + } + oItem.appendChild(_doc.createTextNode(sText)); + if (sType) { + if (sType >= 2) { + oItem.style.fontWeight = 'bold'; + } + if (sType === 3) { + oItem.style.color = '#ff3333'; + } + } + // o.appendChild(oItem); // top-to-bottom + o.insertBefore(oItem, o.firstChild); // bottom-to-top + } catch(e) { + // oh well + } + o = null; + // + return true; + }; + this._wD = this._writeDebug; // alias + + this._debug = function() { + // + _wDS('currentObj', 1); + for (var i = 0, j = _s.soundIDs.length; i < j; i++) { + _s.sounds[_s.soundIDs[i]]._debug(); + } + // + }; + + this.reboot = function() { + // attempt to reset and init SM2 + _s._wD('soundManager.reboot()'); + if (_s.soundIDs.length) { + _s._wD('Destroying ' + _s.soundIDs.length + ' SMSound objects...'); + } + for (var i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].destruct(); + } + // trash ze flash + try { + if (_isIE) { + _oRemovedHTML = _s.o.innerHTML; + } + _oRemoved = _s.o.parentNode.removeChild(_s.o); + _s._wD('Flash movie removed.'); + } catch(e) { + // uh-oh. + _wDS('badRemove', 2); + } + // actually, force recreate of movie. + _oRemovedHTML = _oRemoved = null; + _s.enabled = _didInit = _waitingForEI = _initPending = _didAppend = _appendSuccess = _disabled = _s.swfLoaded = false; + _s.soundIDs = _s.sounds = []; + _s.o = null; + for (i = _onready.length; i--;) { + _onready[i].fired = false; + } + _s._wD(_sm + ': Rebooting...'); + _win.setTimeout(function() { + _s.beginDelayedInit(); + }, 20); + }; + + this.destruct = function() { + _s._wD('soundManager.destruct()'); + _s.disable(true); + }; + + this.beginDelayedInit = function() { + // _s._wD('soundManager.beginDelayedInit()'); + _windowLoaded = true; + _dcLoaded(); + setTimeout(_beginInit, 20); + _delayWaitForEI(); + }; + + // --- SMSound (sound object) instance --- + + SMSound = function(oOptions) { + var _t = this, _resetProperties, _add_html5_events, _stop_html5_timer, _start_html5_timer, _get_html5_duration, _a; + this.sID = oOptions.id; + this.url = oOptions.url; + this.options = _mixin(oOptions); + this.instanceOptions = this.options; // per-play-instance-specific options + this._iO = this.instanceOptions; // short alias + // assign property defaults + this.pan = this.options.pan; + this.volume = this.options.volume; + this._lastURL = null; + this.isHTML5 = false; + + // --- public methods --- + + this.id3 = {}; + + this._debug = function() { + // + // pseudo-private console.log()-style output + if (_s.debugMode) { + var stuff = null, msg = [], sF, sfBracket, maxLength = 64; + for (stuff in _t.options) { + if (_t.options[stuff] !== null) { + if (_t.options[stuff] instanceof Function) { + // handle functions specially + sF = _t.options[stuff].toString(); + sF = sF.replace(/\s\s+/g, ' '); // normalize spaces + sfBracket = sF.indexOf('{'); + msg.push(' ' + stuff + ': {' + sF.substr(sfBracket + 1, (Math.min(Math.max(sF.indexOf('\n') - 1, maxLength), maxLength))).replace(/\n/g, '') + '... }'); + } else { + msg.push(' ' + stuff + ': ' + _t.options[stuff]); + } + } + } + _s._wD('SMSound() merged options: {\n' + msg.join(', \n') + '\n}'); + } + // + }; + + this._debug(); + + this.load = function(oOptions) { + var oS = null; + if (typeof oOptions !== 'undefined') { + _t._iO = _mixin(oOptions); + _t.instanceOptions = _t._iO; + } else { + oOptions = _t.options; + _t._iO = oOptions; + _t.instanceOptions = _t._iO; + if (_t._lastURL && _t._lastURL !== _t.url) { + _wDS('manURL'); + _t._iO.url = _t.url; + _t.url = null; + } + } + _s._wD('soundManager.load(): ' + _t._iO.url, 1); + if (_t._iO.url === _t.url && _t.readyState !== 0 && _t.readyState !== 2) { + _wDS('onURL', 1); + return _t; + } + _t._lastURL = _t.url; + _t.loaded = false; + _t.readyState = 1; + _t.playState = 0; + if (_html5OK(_t._iO)) { + _s._wD('HTML 5 load: '+_t._iO.url); + oS = _t._setup_html5(_t._iO); + oS.load(); + if (_t._iO.autoPlay) { + _t.play(); + } + } else { + try { + _t.isHTML5 = false; + _t._iO = _policyFix(_loopFix(_t._iO)); + if (_fV === 8) { + _s.o._load(_t.sID, _t._iO.url, _t._iO.stream, _t._iO.autoPlay, (_t._iO.whileloading?1:0), _t._iO.loops||1, _t._iO.usePolicyFile); + } else { + _s.o._load(_t.sID, _t._iO.url, _t._iO.stream?true:false, _t._iO.autoPlay?true:false, _t._iO.loops||1, _t._iO.autoLoad?true:false, _t._iO.usePolicyFile); + } + } catch(e) { + _wDS('smError', 2); + _debugTS('onload', false); + _die(); + } + } + return _t; + }; + + this.unload = function() { + // Flash 8/AS2 can't "close" a stream - fake it by loading an empty MP3 + // Flash 9/AS3: Close stream, preventing further load + if (_t.readyState !== 0) { + _s._wD('SMSound.unload(): "' + _t.sID + '"'); + if (!_t.isHTML5) { + if (_fV === 8) { + _s.o._unload(_t.sID, _s.nullURL); + } else { + _s.o._unload(_t.sID); + } + } else { + _stop_html5_timer(); + if (_a) { + // abort()-style method here, stop loading? (doesn't exist?) + _a.pause(); + _a.src = _s.nullURL; // needed? does nulling object work? any better way to cancel/unload/abort? + _a.load(); + _t._audio = null; + _a = null; + // delete _t._audio; + } + } + // reset load/status flags + _resetProperties(); + } + return _t; + }; + + this.destruct = function(_bFromSM) { + _s._wD('SMSound.destruct(): "' + _t.sID + '"'); + if (!_t.isHTML5) { + // kill sound within Flash + // Disable the onfailure handler + _t._iO.onfailure = null; + _s.o._destroySound(_t.sID); + } else { + _stop_html5_timer(); + if (_a) { + _a.pause(); + _a.src = 'about:blank'; + _a.load(); + _t._audio = null; + _a = null; + // delete _t._audio; + } + } + if (!_bFromSM) { + _s.destroySound(_t.sID, true); // ensure deletion from controller + } + }; + + this.play = function(oOptions, _updatePlayState) { + var fN = 'SMSound.play(): ', allowMulti; + _updatePlayState = (typeof _updatePlayState === 'undefined' ? true : _updatePlayState); + if (!oOptions) { + oOptions = {}; + } + _t._iO = _mixin(oOptions, _t._iO); + _t._iO = _mixin(_t._iO, _t.options); + _t.instanceOptions = _t._iO; + if (_t._iO.serverURL) { + if (!_t.connected) { + if (!_t.getAutoPlay()) { + _s._wD(fN+' Netstream not connected yet - setting autoPlay'); + _t.setAutoPlay(true); + } + return _t; + } + } + if (_html5OK(_t._iO)) { + _t._setup_html5(_t._iO); + _start_html5_timer(); + } + // KJV paused sounds have playState 1. We want these sounds to play. + if (_t.playState === 1 && !_t.paused) { + allowMulti = _t._iO.multiShot; + if (!allowMulti) { + _s._wD(fN + '"' + _t.sID + '" already playing (one-shot)', 1); + return _t; + } else { + _s._wD(fN + '"' + _t.sID + '" already playing (multi-shot)', 1); + if (_t.isHTML5) { + // TODO: BUG? + _t.setPosition(_t._iO.position); + } + } + } + if (!_t.loaded) { + if (_t.readyState === 0) { + _s._wD(fN + 'Attempting to load "' + _t.sID + '"', 1); + // try to get this sound playing ASAP + if (!_t.isHTML5) { + if (!_t._iO.serverURL) { + _t._iO.autoPlay = true; + _t.load(_t._iO); + } + } else { + _t.load(_t._iO); + _t.readyState = 1; + } + } else if (_t.readyState === 2) { + _s._wD(fN + 'Could not load "' + _t.sID + '" - exiting', 2); + return _t; + } else { + _s._wD(fN + '"' + _t.sID + '" is loading - attempting to play..', 1); + } + } else { + _s._wD(fN + '"' + _t.sID + '"'); + } + // Streams will pause when their buffer is full if they are not auto-playing. + // In this case paused is true, but the song hasn't started playing yet. If + // we just call resume() the onplay() callback will never be called. + + // Also, if we just call resume() in this case and the sound has been muted + // (volume is 0), it will never have its volume set so sound will be heard + // when it shouldn't. + if (_t.paused && _t.position && _t.position > 0) { // https://gist.github.com/37b17df75cc4d7a90bf6 + _s._wD(fN + '"' + _t.sID + '" is resuming from paused state',1); + _t.resume(); + } else { + _s._wD(fN+'"'+ _t.sID+'" is starting to play'); + _t.playState = 1; + _t.paused = false; + if (!_t.instanceCount || _t._iO.multiShotEvents || (_fV > 8 && !_t.isHTML5 && !_t.getAutoPlay())) { + _t.instanceCount++; + } + _t.position = (typeof _t._iO.position !== 'undefined' && !isNaN(_t._iO.position)?_t._iO.position:0); + _t._iO = _policyFix(_loopFix(_t._iO)); + if (_t._iO.onplay && _updatePlayState) { + _t._iO.onplay.apply(_t); + } + _t.setVolume(_t._iO.volume, true); + _t.setPan(_t._iO.pan, true); + if (!_t.isHTML5) { + _s.o._start(_t.sID, _t._iO.loops || 1, (_fV === 9?_t.position:_t.position / 1000)); + } else { + _start_html5_timer(); + _t._setup_html5().play(); + } + } + return _t; + }; + + this.start = this.play; // just for convenience + + this.stop = function(bAll) { + if (_t.playState === 1) { + _t._onbufferchange(0); + _t.resetOnPosition(0); + if (!_t.isHTML5) { + _t.playState = 0; + } + _t.paused = false; + if (_t._iO.onstop) { + _t._iO.onstop.apply(_t); + } + if (!_t.isHTML5) { + _s.o._stop(_t.sID, bAll); + // hack for netStream: just unload + if (_t._iO.serverURL) { + _t.unload(); + } + } else { + if (_a) { + _t.setPosition(0); // act like Flash, though + _a.pause(); // html5 has no stop() + _t.playState = 0; + _t._onTimer(); // and update UI + _stop_html5_timer(); + _t.unload(); + } + } + _t.instanceCount = 0; + _t._iO = {}; + } + return _t; + }; + + this.setAutoPlay = function(autoPlay) { + _s._wD('sound '+_t.sID+' turned autoplay ' + (autoPlay ? 'on' : 'off')); + _t._iO.autoPlay = autoPlay; + _s.o._setAutoPlay(_t.sID, autoPlay); + if (autoPlay) { + // KJV Only increment the instanceCount if the sound isn't loaded (TODO: verify RTMP) + if (!_t.instanceCount && _t.readyState === 1) { + _t.instanceCount++; + _s._wD('sound '+_t.sID+' incremented instance count to '+_t.instanceCount); + } + } + }; + + this.getAutoPlay = function() { + return _t._iO.autoPlay; + }; + + this.setPosition = function(nMsecOffset, bNoDebug) { + if (nMsecOffset === undefined) { + nMsecOffset = 0; + } + // KJV Use the duration from the instance options, if we don't have a track duration yet. + // Auto-loading streams with a starting position in their options will start playing + // as soon as they connect. In the start() call we set the position on the stream, + // but because the stream hasn't played _t.duration won't have been set (that is + // done in whileloading()). So if we don't have a duration yet, use the duration + // from the instance options, if available. + var position, offset = (_t.isHTML5 ? Math.max(nMsecOffset,0) : Math.min(_t.duration || _t._iO.duration, Math.max(nMsecOffset, 0))); // position >= 0 and <= current available (loaded) duration + _t.position = offset; + _t.resetOnPosition(_t.position); + if (!_t.isHTML5) { + position = _fV === 9 ? _t.position : _t.position / 1000; + // KJV We want our sounds to play on seek. A progressive download that + // is loaded has paused = false so resume() does nothing and the sound + // doesn't play. Handle that case here. + if (_t.playState === 0) { + _t.play({ position: position }); + } else { + _s.o._setPosition(_t.sID, position, (_t.paused || !_t.playState)); // if paused or not playing, will not resume (by playing) + // if (_t.paused) { + // _t.resume(); + // } + } + } else if (_a) { + _s._wD('setPosition(): setting position to '+(_t.position / 1000)); + if (_t.playState) { + // DOM/JS errors/exceptions to watch out for: + // if seek is beyond (loaded?) position, "DOM exception 11" + // "INDEX_SIZE_ERR": DOM exception 1 + try { + _a.currentTime = _t.position / 1000; + } catch(e) { + _s._wD('setPosition('+_t.position+'): WARN: Caught exception: '+e.message, 2); + } + } else { + _s._wD('HTML 5 warning: cannot set position while playState == 0 (not playing)',2); + } + if (_t.paused) { // if paused, refresh UI right away + _t._onTimer(true); // force update + if (_t._iO.useMovieStar) { + _t.resume(); + } + } + } + return _t; + }; + + this.pause = function(bCallFlash) { + if (_t.paused || (_t.playState === 0 && _t.readyState !== 1)) { + return _t; + } + _s._wD('SMSound.pause()'); + _t.paused = true; + if (!_t.isHTML5) { + if (bCallFlash || bCallFlash === undefined) { + _s.o._pause(_t.sID); + } + } else { + _t._setup_html5().pause(); + _stop_html5_timer(); + } + if (_t._iO.onpause) { + _t._iO.onpause.apply(_t); + } + return _t; + }; + + this.resume = function() { + // When auto-loaded streams pause on buffer full they have a playState of 0. + // We need to make sure that the playState is set to 1 when these streams "resume". + if (!_t.paused) { + return _t; + } + _s._wD('SMSound.resume()'); + _t.paused = false; + _t.playState = 1; // TODO: verify that this is needed. + if (!_t.isHTML5) { + _s.o._pause(_t.sID); // flash method is toggle-based (pause/resume) + } else { + _t._setup_html5().play(); + _start_html5_timer(); + } + if (_t._iO.onresume) { + _t._iO.onresume.apply(_t); + } + return _t; + }; + + this.togglePause = function() { + _s._wD('SMSound.togglePause()'); + if (_t.playState === 0) { + _t.play({ + position: (_fV === 9 && !_t.isHTML5 ? _t.position:_t.position / 1000) + }); + return _t; + } + if (_t.paused) { + _t.resume(); + } else { + _t.pause(); + } + return _t; + }; + + this.setPan = function(nPan, bInstanceOnly) { + if (typeof nPan === 'undefined') { + nPan = 0; + } + if (typeof bInstanceOnly === 'undefined') { + bInstanceOnly = false; + } + if (!_t.isHTML5) { + _s.o._setPan(_t.sID, nPan); + } // else { no HTML5 pan? } + _t._iO.pan = nPan; + if (!bInstanceOnly) { + _t.pan = nPan; + } + return _t; + }; + + this.setVolume = function(nVol, bInstanceOnly) { + if (typeof nVol === 'undefined') { + nVol = 100; + } + if (typeof bInstanceOnly === 'undefined') { + bInstanceOnly = false; + } + if (!_t.isHTML5) { + _s.o._setVolume(_t.sID, (_s.muted && !_t.muted) || _t.muted?0:nVol); + } else if (_a) { + _a.volume = nVol/100; + } + _t._iO.volume = nVol; + if (!bInstanceOnly) { + _t.volume = nVol; + } + return _t; + }; + + this.mute = function() { + _t.muted = true; + if (!_t.isHTML5) { + _s.o._setVolume(_t.sID, 0); + } else if (_a) { + _a.muted = true; + } + return _t; + }; + + this.unmute = function() { + _t.muted = false; + var hasIO = typeof _t._iO.volume !== 'undefined'; + if (!_t.isHTML5) { + _s.o._setVolume(_t.sID, hasIO?_t._iO.volume:_t.options.volume); + } else if (_a) { + _a.muted = false; + } + return _t; + }; + + this.toggleMute = function() { + return (_t.muted?_t.unmute():_t.mute()); + }; + + this.onposition = function(nPosition, oMethod, oScope) { + // TODO: allow for ranges, too? eg. (nPosition instanceof Array) + _t._onPositionItems.push({ + position: nPosition, + method: oMethod, + scope: (typeof oScope !== 'undefined'?oScope:_t), + fired: false + }); + return _t; + }; + + this.processOnPosition = function() { + var i, item, j = _t._onPositionItems.length; + if (!j || !_t.playState || _t._onPositionFired >= j) { + return false; + } + for (i=j; i--;) { + item = _t._onPositionItems[i]; + if (!item.fired && _t.position >= item.position) { + item.method.apply(item.scope,[item.position]); + item.fired = true; + _s._onPositionFired++; + } + } + return true; + }; + + this.resetOnPosition = function(nPosition) { + // reset "fired" for items interested in this position + var i, item, j = _t._onPositionItems.length; + if (!j) { + return false; + } + for (i=j; i--;) { + item = _t._onPositionItems[i]; + if (item.fired && nPosition <= item.position) { + item.fired = false; + _s._onPositionFired--; + } + } + return true; + }; + + // pseudo-private soundManager reference + + this._onTimer = function(bForce) { + // HTML 5-only _whileplaying() etc. + var time, x = {}; + if (_t._hasTimer || bForce) { + if (_a && (bForce || ((_t.playState > 0 || _t.readyState === 1) && !_t.paused))) { // TODO: May not need to track readyState (1 = loading) + _t.duration = _get_html5_duration(); + _t.durationEstimate = _t.duration; + time = _a.currentTime?_a.currentTime*1000:0; + _t._whileplaying(time,x,x,x,x); + return true; + } else { + _s._wD('_onTimer: Warn for "'+_t.sID+'": '+(!_a?'Could not find element. ':'')+(_t.playState === 0?'playState bad, 0?':'playState = '+_t.playState+', OK')); + return false; + } + } + }; + + // --- private internals --- + + _get_html5_duration = function() { + var d = (_a?_a.duration*1000:undefined); + return (d && !isNaN(d)?d:null); + }; + + _start_html5_timer = function() { + if (_t.isHTML5) { + _startTimer(_t); + } + }; + + _stop_html5_timer = function() { + if (_t.isHTML5) { + _stopTimer(_t); + } + }; + + _resetProperties = function(bLoaded) { + _t._onPositionItems = []; + _t._onPositionFired = 0; + _t._hasTimer = null; + _t._added_events = null; + _t._audio = null; + _a = null; + _t.bytesLoaded = null; + _t.bytesTotal = null; + _t.position = null; + _t.duration = (_t._iO && _t._iO.duration?_t._iO.duration:null); + _t.durationEstimate = null; + _t.failures = 0; + _t.loaded = false; + _t.playState = 0; + _t.paused = false; + _t.readyState = 0; // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success + _t.muted = false; + _t.didBeforeFinish = false; + _t.didJustBeforeFinish = false; + _t.isBuffering = false; + _t.instanceOptions = {}; + _t.instanceCount = 0; + _t.peakData = { + left: 0, + right: 0 + }; + _t.waveformData = { + left: [], + right: [] + }; + _t.eqData = []; // legacy: 1D array + _t.eqData.left = []; + _t.eqData.right = []; + }; + + _resetProperties(); + + // pseudo-private methods used by soundManager + + this._setup_html5 = function(oOptions) { + var _iO = _mixin(_t._iO, oOptions); + if (_a) { + if (_t.url !== _iO.url) { + _s._wD('setting new URL on existing object: '+_iO.url); + _a.src = _iO.url; + } + } else { + _s._wD('creating HTML 5 audio element with URL: '+_iO.url); + _t._audio = new Audio(_iO.url); + _a = _t._audio; + _t.isHTML5 = true; + _add_html5_events(); + } + _a.loop = (_iO.loops>1?'loop':''); + return _t._audio; + }; + + // related private methods + + _add_html5_events = function() { + if (_t._added_events) { + return false; + } + _t._added_events = true; + + function _add(oEvt, oFn, bCapture) { + return (_a ? _a.addEventListener(oEvt, oFn, bCapture||false) : null); + } + + _add('load', function(e) { + _s._wD('HTML5::load: '+_t.sID); + if (_a) { + _t._onbufferchange(0); + _t._whileloading(_t.bytesTotal, _t.bytesTotal, _get_html5_duration()); + _t._onload(true); + } + }, false); + + _add('canplay', function(e) { + _s._wD('HTML5::canplay: '+_t.sID); + // enough has loaded to play + _t._onbufferchange(0); + },false); + + _add('waiting', function(e) { + _s._wD('HTML5::waiting: '+_t.sID); + // playback faster than download rate, etc. + _t._onbufferchange(1); + },false); + + _add('progress', function(e) { // not supported everywhere yet.. + _s._wD('HTML5::progress: '+_t.sID+': loaded/total: '+(e.loaded||0)+'/'+(e.total||1)); + if (!_t.loaded && _a) { + _t._onbufferchange(0); // if progress, likely not buffering + _t._whileloading(e.loaded||0, e.total||1, _get_html5_duration()); + } + }, false); + + _add('error', function(e) { + if (_a) { + _s._wD('HTML5::error: '+_a.error.code); + // call load with error state? + _t._onload(false); + } + }, false); + + _add('loadstart', function(e) { + _s._wD('HTML5::loadstart: '+_t.sID); + // assume buffering at first + _t._onbufferchange(1); + }, false); + + _add('play', function(e) { + _s._wD('HTML5::play: '+_t.sID); + // once play starts, no buffering + _t._onbufferchange(0); + }, false); + + // TODO: verify if this is actually implemented anywhere yet. + _add('playing', function(e) { + _s._wD('HTML5::playing: '+_t.sID); + // once play starts, no buffering + _t._onbufferchange(0); + }, false); + + _add('timeupdate', function(e) { + _t._onTimer(); + }, false); + + // avoid stupid premature event-firing bug in Safari(?) + setTimeout(function(){ + if (_t && _a) { + _add('ended',function(e) { + _s._wD('HTML5::ended: '+_t.sID); + _t._onfinish(); + }, false); + } + }, 250); + return true; + }; + + // --- "private" methods called by Flash --- + + this._whileloading = function(nBytesLoaded, nBytesTotal, nDuration, nBufferLength) { + _t.bytesLoaded = nBytesLoaded; + _t.bytesTotal = nBytesTotal; + _t.duration = Math.floor(nDuration); + _t.bufferLength = nBufferLength; + if (!_t._iO.isMovieStar) { + if (_t._iO.duration) { + // use options, if specified and larger + _t.durationEstimate = (_t.duration > _t._iO.duration) ? _t.duration : _t._iO.duration; + } else { + _t.durationEstimate = parseInt((_t.bytesTotal / _t.bytesLoaded) * _t.duration, 10); + } + if (_t.durationEstimate === undefined) { + _t.durationEstimate = _t.duration; + } + _t.bufferLength = nBufferLength; + if (_t.readyState !== 3 && _t._iO.whileloading) { + _t._iO.whileloading.apply(_t); + } + } else { + _t.durationEstimate = _t.duration; + if (_t.readyState !== 3 && _t._iO.whileloading) { + _t._iO.whileloading.apply(_t); + } + } + }; + + this._onid3 = function(oID3PropNames, oID3Data) { + // oID3PropNames: string array (names) + // ID3Data: string array (data) + _s._wD('SMSound._onid3(): "' + this.sID + '" ID3 data received.'); + var oData = [], i, j; + for (i = 0, j = oID3PropNames.length; i < j; i++) { + oData[oID3PropNames[i]] = oID3Data[i]; + } + _t.id3 = _mixin(_t.id3, oData); + if (_t._iO.onid3) { + _t._iO.onid3.apply(_t); + } + }; + + this._whileplaying = function(nPosition, oPeakData, oWaveformDataLeft, oWaveformDataRight, oEQData) { + if (isNaN(nPosition) || nPosition === null) { + return false; // Flash may return NaN at times + } + if (_t.playState === 0 && nPosition > 0) { + // invalid position edge case for end/stop + nPosition = 0; + } + _t.position = nPosition; + _t.processOnPosition(); + if (_fV > 8 && !_t.isHTML5) { + if (_t._iO.usePeakData && typeof oPeakData !== 'undefined' && oPeakData) { + _t.peakData = { + left: oPeakData.leftPeak, + right: oPeakData.rightPeak + }; + } + if (_t._iO.useWaveformData && typeof oWaveformDataLeft !== 'undefined' && oWaveformDataLeft) { + _t.waveformData = { + left: oWaveformDataLeft.split(','), + right: oWaveformDataRight.split(',') + }; + } + if (_t._iO.useEQData) { + if (typeof oEQData !== 'undefined' && oEQData && oEQData.leftEQ) { + var eqLeft = oEQData.leftEQ.split(','); + _t.eqData = eqLeft; + _t.eqData.left = eqLeft; + if (typeof oEQData.rightEQ !== 'undefined' && oEQData.rightEQ) { + _t.eqData.right = oEQData.rightEQ.split(','); + } + } + } + } + if (_t.playState === 1) { + // special case/hack: ensure buffering is false if loading from cache (and not yet started) + if (!_t.isHTML5 && _s.flashVersion === 8 && !_t.position && _t.isBuffering) { + _t._onbufferchange(0); + } + if (_t._iO.whileplaying) { + _t._iO.whileplaying.apply(_t); // flash may call after actual finish + } + if ((_t.loaded || (!_t.loaded && _t._iO.isMovieStar)) && _t._iO.onbeforefinish && _t._iO.onbeforefinishtime && !_t.didBeforeFinish && _t.duration - _t.position <= _t._iO.onbeforefinishtime) { + _t._onbeforefinish(); + } + } + return true; + }; + + this._onconnect = function(bSuccess) { + var fN = 'SMSound._onconnect(): '; + bSuccess = (bSuccess === 1); + _s._wD(fN+'"'+_t.sID+'"'+(bSuccess?' connected.':' failed to connect? - '+_t.url), (bSuccess?1:2)); + _t.connected = bSuccess; + if (bSuccess) { + _t.failures = 0; + if (_t._iO.onconnect) { + _t._iO.onconnect.apply(_t,[bSuccess]); + } + // don't play if the sound is being destroyed + if (_idCheck(_t.sID) && (_t.options.autoLoad || _t.getAutoPlay())) { + _t.play(undefined, _t.getAutoPlay()); // only update the play state if auto playing + } + } + }; + + this._onload = function(nSuccess) { + var fN = 'SMSound._onload(): ', loadOK = (nSuccess?true:false); + _s._wD(fN + '"' + _t.sID + '"' + (loadOK?' loaded.':' failed to load? - ' + _t.url), (loadOK?1:2)); + // + if (!loadOK && !_t.isHTML5) { + if (_s.sandbox.noRemote === true) { + _s._wD(fN + _str('noNet'), 1); + } + if (_s.sandbox.noLocal === true) { + _s._wD(fN + _str('noLocal'), 1); + } + } + // + _t.loaded = loadOK; + _t.readyState = loadOK?3:2; + _t._onbufferchange(0); + if (_t._iO.onload) { + _t._iO.onload.apply(_t, [loadOK]); + } + return true; + }; + + // fire onfailure() only once at most + // at this point we just recreate failed sounds rather than trying to reconnect. + this._onfailure = function(msg, level, code) { + _t.failures++; + _s._wD('SMSound._onfailure(): "'+_t.sID+'" count '+_t.failures); + if (_t._iO.onfailure && _t.failures === 1) { + _t._iO.onfailure(_t, msg, level, code); + } else { + _s._wD('SMSound._onfailure(): ignoring'); + } + }; + + this._onbeforefinish = function() { + if (!_t.didBeforeFinish) { + _t.didBeforeFinish = true; + if (_t._iO.onbeforefinish) { + _s._wD('SMSound._onbeforefinish(): "' + _t.sID + '"'); + _t._iO.onbeforefinish.apply(_t); + } + } + }; + + this._onjustbeforefinish = function(msOffset) { + if (!_t.didJustBeforeFinish) { + _t.didJustBeforeFinish = true; + if (_t._iO.onjustbeforefinish) { + _s._wD('SMSound._onjustbeforefinish(): "' + _t.sID + '"'); + _t._iO.onjustbeforefinish.apply(_t); + } + } + }; + + // KJV - connect & play time callback from Flash + this._onstats = function(stats) { + if (_t._iO.onstats) { + _t._iO.onstats(_t, stats); + } + }; + + this._onfinish = function() { + // _s._wD('SMSound._onfinish(): "' + _t.sID + '" got instanceCount '+_t.instanceCount); + _t._onbufferchange(0); + _t.resetOnPosition(0); + if (_t._iO.onbeforefinishcomplete) { + _t._iO.onbeforefinishcomplete.apply(_t); + } + // reset some state items + _t.didBeforeFinish = false; + _t.didJustBeforeFinish = false; + if (_t.instanceCount) { + _t.instanceCount--; + if (!_t.instanceCount) { + // reset instance options + _t.playState = 0; + _t.paused = false; + _t.instanceCount = 0; + _t.instanceOptions = {}; + _stop_html5_timer(); + } + if (!_t.instanceCount || _t._iO.multiShotEvents) { + // fire onfinish for last, or every instance + if (_t._iO.onfinish) { + _s._wD('SMSound._onfinish(): "' + _t.sID + '"'); + _t._iO.onfinish.apply(_t); + } + } + } + }; + + this._onbufferchange = function(nIsBuffering) { + var fN = 'SMSound._onbufferchange()'; + if (_t.playState === 0) { + // ignore if not playing + return false; + } + if ((nIsBuffering && _t.isBuffering) || (!nIsBuffering && !_t.isBuffering)) { + return false; + } + _t.isBuffering = (nIsBuffering === 1); + if (_t._iO.onbufferchange) { + _s._wD(fN + ': ' + nIsBuffering); + _t._iO.onbufferchange.apply(_t); + } + return true; + }; + + this._ondataerror = function(sError) { + // flash 9 wave/eq data handler + if (_t.playState > 0) { // hack: called at start, and end from flash at/after onfinish() + _s._wD('SMSound._ondataerror(): ' + sError); + if (_t._iO.ondataerror) { + _t._iO.ondataerror.apply(_t); + } + } + }; + + }; // SMSound() + + // --- private SM2 internals --- + + _getDocument = function() { + return (_doc.body?_doc.body:(_doc._docElement?_doc.documentElement:_doc.getElementsByTagName('div')[0])); + }; + + _id = function(sID) { + return _doc.getElementById(sID); + }; + + _mixin = function(oMain, oAdd) { + // non-destructive merge + var o1 = {}, i, o2, o; + for (i in oMain) { // clone c1 + if (oMain.hasOwnProperty(i)) { + o1[i] = oMain[i]; + } + } + o2 = (typeof oAdd === 'undefined'?_s.defaultOptions:oAdd); + for (o in o2) { + if (o2.hasOwnProperty(o) && typeof o1[o] === 'undefined') { + o1[o] = o2[o]; + } + } + return o1; + }; + + (function() { + var old = (_win.attachEvent), + evt = { + add: (old?'attachEvent':'addEventListener'), + remove: (old?'detachEvent':'removeEventListener') + }; + + function getArgs(oArgs) { + var args = _slice.call(oArgs), len = args.length; + if (old) { + args[1] = 'on' + args[1]; // prefix + if (len > 3) { + args.pop(); // no capture + } + } else if (len === 3) { + args.push(false); + } + return args; + } + + function apply(args, sType) { + var oFunc = args.shift()[evt[sType]]; + if (old) { + oFunc(args[0], args[1]); + } else { + oFunc.apply(this, args); + } + } + + _addEvt = function() { + apply(getArgs(arguments), 'add'); + }; + + _removeEvt = function() { + apply(getArgs(arguments), 'remove'); + }; + }()); + + _html5OK = function(iO) { + return ((iO.type?_html5CanPlay({type:iO.type}):false)||_html5CanPlay(iO.url)); + }; + + _html5CanPlay = function(sURL) { + // try to find MIME, test and return truthiness + if (!_s.useHTML5Audio || !_s.hasHTML5) { + return false; + } + var result, mime, fileExt, item, aF = _s.audioFormats; + if (!_html5Ext) { + _html5Ext = []; + for (item in aF) { + if (aF.hasOwnProperty(item)) { + _html5Ext.push(item); + if (aF[item].related) { + _html5Ext = _html5Ext.concat(aF[item].related); + } + } + } + _html5Ext = new RegExp('\\.('+_html5Ext.join('|')+')','i'); + } + mime = (typeof sURL.type !== 'undefined'?sURL.type:null); + fileExt = (typeof sURL === 'string'?sURL.toLowerCase().match(_html5Ext):null); // TODO: Strip URL queries, etc. + if (!fileExt || !fileExt.length) { + if (!mime) { + return false; + } + } else { + fileExt = fileExt[0].substr(1); // "mp3", for example + } + if (fileExt && typeof _s.html5[fileExt] !== 'undefined') { + // result known + return _s.html5[fileExt]; + } else { + if (!mime) { + if (fileExt && _s.html5[fileExt]) { + return _s.html5[fileExt]; + } else { + // best-case guess, audio/whatever-dot-filename-format-you're-playing + mime = 'audio/'+fileExt; + } + } + result = _s.html5.canPlayType(mime); + _s.html5[fileExt] = result; + // _s._wD('canPlayType, found result: '+result); + return result; + } + }; + + _testHTML5 = function() { + if (!_s.useHTML5Audio || typeof Audio === 'undefined') { + return false; + } + var a = (typeof Audio !== 'undefined' ? new Audio():null), item, support = {}, aF, i; + function _cp(m) { + var canPlay, i, j, isOK = false; + if (!a || typeof a.canPlayType !== 'function') { + return false; + } + if (m instanceof Array) { + // iterate through all mime types, return any successes + for (i=0, j=m.length; i + notReady: 'Not loaded yet - wait for soundManager.onload()/onready()', + notOK: 'Audio support is not available.', + appXHTML: _sm + '::createMovie(): appendChild/innerHTML set failed. May be app/xhtml+xml DOM-related.', + spcWmode: _sm + '::createMovie(): Removing wmode, preventing win32 below-the-fold SWF loading issue', + swf404: _sm + ': Verify that %s is a valid path.', + tryDebug: 'Try ' + _sm + '.debugFlash = true for more security details (output goes to SWF.)', + checkSWF: 'See SWF output for more debug info.', + localFail: _sm + ': Non-HTTP page (' + _doc.location.protocol + ' URL?) Review Flash player security settings for this special case:\nhttp://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html\nMay need to add/allow path, eg. c:/sm2/ or /users/me/sm2/', + waitFocus: _sm + ': Special case: Waiting for focus-related event..', + waitImpatient: _sm + ': Getting impatient, still waiting for Flash%s...', + waitForever: _sm + ': Waiting indefinitely for Flash (will recover if unblocked)...', + needFunction: _sm + '.onready(): Function object expected', + badID: 'Warning: Sound ID "%s" should be a string, starting with a non-numeric character', + noMS: 'MovieStar mode not enabled. Exiting.', + currentObj: '--- ' + _sm + '._debug(): Current sound objects ---', + waitEI: _sm + '::initMovie(): Waiting for ExternalInterface call from Flash..', + waitOnload: _sm + ': Waiting for window.onload()', + docLoaded: _sm + ': Document already loaded', + onload: _sm + '::initComplete(): calling soundManager.onload()', + onloadOK: _sm + '.onload() complete', + init: '-- ' + _sm + '::init() --', + didInit: _sm + '::init(): Already called?', + flashJS: _sm + ': Attempting to call Flash from JS..', + noPolling: _sm + ': Polling (whileloading()/whileplaying() support) is disabled.', + secNote: 'Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html', + badRemove: 'Warning: Failed to remove flash movie.', + noPeak: 'Warning: peakData features unsupported for movieStar formats', + shutdown: _sm + '.disable(): Shutting down', + queue: _sm + '.onready(): Queueing handler', + smFail: _sm + ': Failed to initialise.', + smError: 'SMSound.load(): Exception: JS-Flash communication failed, or JS error.', + fbTimeout: 'No flash response, applying .'+_s.swfCSS.swfTimedout+' CSS..', + fbLoaded: 'Flash loaded', + fbHandler: 'soundManager::flashBlockHandler()', + manURL: 'SMSound.load(): Using manually-assigned URL', + onURL: _sm + '.load(): current URL already assigned.', + badFV: 'soundManager.flashVersion must be 8 or 9. "%s" is invalid. Reverting to %s.', + as2loop: 'Note: Setting stream:false so looping can work (flash 8 limitation)', + noNSLoop: 'Note: Looping not implemented for MovieStar formats', + needfl9: 'Note: Switching to flash 9, required for MP4 formats.', + mfTimeout: 'Setting flashLoadTimeout = 0 (infinite) for off-screen, mobile flash case', + mfOn: 'mobileFlash::enabling on-screen flash repositioning', + policy: 'Enabling usePolicyFile for data access' + // + }; + + _id = function(sID) { + return _doc.getElementById(sID); + }; + + _str = function() { // o [,items to replace] + // + var args = _slice.call(arguments), // real array, please + o = args.shift(), // first arg + str = (_strings && _strings[o]?_strings[o]:''), i, j; + if (str && args && args.length) { + for (i = 0, j = args.length; i < j; i++) { + str = str.replace('%s', args[i]); + } + } + return str; + // + }; + + _loopFix = function(sOpt) { + // flash 8 requires stream = false for looping to work + if (_fV === 8 && sOpt.loops > 1 && sOpt.stream) { + _wDS('as2loop'); + sOpt.stream = false; + } + return sOpt; + }; + + _policyFix = function(sOpt, sPre) { + if (sOpt && !sOpt.usePolicyFile && (sOpt.onid3 || sOpt.usePeakData || sOpt.useWaveformData || sOpt.useEQData)) { + _s._wD((sPre?sPre+':':'') + _str('policy')); + sOpt.usePolicyFile = true; + } + return sOpt; + }; + + _complain = function(sMsg) { + if (typeof console !== 'undefined' && typeof console.warn !== 'undefined') { + console.warn(sMsg); + } else { + _s._wD(sMsg); + } + }; + + _doNothing = function() { + return false; + }; + + _disableObject = function(o) { + for (var oProp in o) { + if (o.hasOwnProperty(oProp) && typeof o[oProp] === 'function') { + o[oProp] = _doNothing; + } + } + oProp = null; + }; + + _failSafely = function(bNoDisable) { + // general failure exception handler + if (typeof bNoDisable === 'undefined') { + bNoDisable = false; + } + if (_disabled || bNoDisable) { + _wDS('smFail', 2); + _s.disable(bNoDisable); + } + }; + + _normalizeMovieURL = function(smURL) { + var urlParams = null; + if (smURL) { + if (smURL.match(/\.swf(\?\.*)?$/i)) { + urlParams = smURL.substr(smURL.toLowerCase().lastIndexOf('.swf?') + 4); + if (urlParams) { + return smURL; // assume user knows what they're doing + } + } else if (smURL.lastIndexOf('/') !== smURL.length - 1) { + smURL = smURL + '/'; + } + } + return (smURL && smURL.lastIndexOf('/') !== - 1?smURL.substr(0, smURL.lastIndexOf('/') + 1):'./') + _s.movieURL; + }; + + _setVersionInfo = function() { + if (_fV !== 8 && _fV !== 9) { + _s._wD(_str('badFV', _fV, _defaultFlashVersion)); + _s.flashVersion = _defaultFlashVersion; + } + var isDebug = (_s.debugMode || _s.debugFlash?'_debug.swf':'.swf'); // debug flash movie, if applicable + if (_s.flashVersion < 9 && _s.useHTML5Audio && _s.audioFormats.mp4.required) { + _s._wD(_str('needfl9')); + _s.flashVersion = 9; + } + _fV = _s.flashVersion; // short-hand for internal use + _s.version = _s.versionNumber + (_html5Only?' (HTML5-only mode)':(_fV === 9?' (AS3/Flash 9)':' (AS2/Flash 8)')); + // set up default options + if (_fV > 8) { + _s.defaultOptions = _mixin(_s.defaultOptions, _s.flash9Options); + _s.features.buffering = true; + } + if (_fV > 8 && _s.useMovieStar) { + // flash 9+ support for movieStar formats as well as MP3 + _s.defaultOptions = _mixin(_s.defaultOptions, _s.movieStarOptions); + _s.filePatterns.flash9 = new RegExp('\\.(mp3|' + _s.netStreamTypes.join('|') + ')(\\?.*)?$', 'i'); + _s.mimePattern = _s.netStreamMimeTypes; + _s.features.movieStar = true; + } else { + _s.features.movieStar = false; + } + _s.filePattern = _s.filePatterns[(_fV !== 8?'flash9':'flash8')]; + _s.movieURL = (_fV === 8?'soundmanager2.swf':'soundmanager2_flash9.swf').replace('.swf',isDebug); + _s.features.peakData = _s.features.waveformData = _s.features.eqData = (_fV > 8); + }; + + _setPolling = function(bPolling, bHighPerformance) { + if (!_s.o || !_s.allowPolling) { + return false; + } + _s.o._setPolling(bPolling, bHighPerformance); + }; + + (function() { + var old = (_win.attachEvent), + evt = { + add: (old?'attachEvent':'addEventListener'), + remove: (old?'detachEvent':'removeEventListener') + }; + + function getArgs(oArgs) { + var args = _slice.call(oArgs), len = args.length; + if (old) { + args[1] = 'on' + args[1]; // prefix + if (len > 3) { + args.pop(); // no capture + } + } else if (len === 3) { + args.push(false); + } + return args; + } + + function apply(args, sType) { + var oFunc = args.shift()[evt[sType]]; + if (old) { + oFunc(args[0], args[1]); + } else { + oFunc.apply(this, args); + } + } + + _addEvt = function() { + apply(getArgs(arguments), 'add'); + }; + + _removeEvt = function() { + apply(getArgs(arguments), 'remove'); + }; + }()); + + function _initDebug() { + if (_s.debugURLParam.test(_wl)) { + _s.debugMode = true; // allow force of debug mode via URL + } + // + if (_id(_s.debugID)) { + return false; + } + var oD, oDebug, oTarget, oToggle, tmp; + if (_s.debugMode && !_id(_s.debugID) && ((!_hasConsole || !_s.useConsole) || (_s.useConsole && _hasConsole && !_s.consoleOnly))) { + oD = _doc.createElement('div'); + oD.id = _s.debugID + '-toggle'; + oToggle = { + 'position': 'fixed', + 'bottom': '0px', + 'right': '0px', + 'width': '1.2em', + 'height': '1.2em', + 'lineHeight': '1.2em', + 'margin': '2px', + 'textAlign': 'center', + 'border': '1px solid #999', + 'cursor': 'pointer', + 'background': '#fff', + 'color': '#333', + 'zIndex': 10001 + }; + oD.appendChild(_doc.createTextNode('-')); + oD.onclick = _toggleDebug; + oD.title = 'Toggle SM2 debug console'; + if (_ua.match(/msie 6/i)) { + oD.style.position = 'absolute'; + oD.style.cursor = 'hand'; + } + for (tmp in oToggle) { + if (oToggle.hasOwnProperty(tmp)) { + oD.style[tmp] = oToggle[tmp]; + } + } + oDebug = _doc.createElement('div'); + oDebug.id = _s.debugID; + oDebug.style.display = (_s.debugMode?'block':'none'); + if (_s.debugMode && !_id(oD.id)) { + try { + oTarget = _getDocument(); + oTarget.appendChild(oD); + } catch(e2) { + throw new Error(_str('appXHTML')); + } + oTarget.appendChild(oDebug); + } + } + oTarget = null; + // + } + + _mobileFlash = (function(){ + + var oM = null; + + function resetPosition() { + if (oM) { + oM.left = oM.top = '-9999px'; + } + } + + function reposition() { + oM.left = _win.scrollX+'px'; + oM.top = _win.scrollY+'px'; + } + + function setReposition(bOn) { + _s._wD('mobileFlash::flash on-screen hack: '+(bOn?'ON':'OFF')); + var f = _win[(bOn?'add':'remove')+'EventListener']; + f('resize', reposition, false); + f('scroll', reposition, false); + } + + function check(inDoc) { + // mobile flash (Android for starters) check + oM = _s.oMC.style; + if (_ua.match(/android/i)) { + if (inDoc) { + if (_s.flashLoadTimeout) { + _s._wDS('mfTimeout'); + _s.flashLoadTimeout = 0; + } + return false; + } + _s._wD('mfOn'); + oM.position = 'absolute'; + oM.left = oM.top = '0px'; + setReposition(true); + _s.onready(function(){ + setReposition(false); // detach + resetPosition(); // restore when OK/timed out + }); + reposition(); + } + return true; + } + + return { + 'check': check + }; + + }()); + + _createMovie = function(smID, smURL) { + + var specialCase = null, + remoteURL = (smURL?smURL:_s.url), + localURL = (_s.altURL?_s.altURL:remoteURL), + oEmbed, oMovie, oTarget = _getDocument(), tmp, movieHTML, oEl, extraClass = _getSWFCSS(), s, x, sClass, side = '100%', isRTL = null, html = _doc.getElementsByTagName('html')[0]; + isRTL = (html && html.dir && html.dir.match(/rtl/i)); + smID = (typeof smID === 'undefined'?_s.id:smID); + + if (_didAppend && _appendSuccess) { + return false; // ignore if already succeeded + } + + function _initMsg() { + _s._wD('-- SoundManager 2 ' + _s.version + (!_html5Only && _s.useHTML5Audio?(_s.hasHTML5?' + HTML5 audio':', no HTML5 audio support'):'') + (_s.useMovieStar?', MovieStar mode':'') + (_s.useHighPerformance?', high performance mode, ':', ') + ((_s.useFastPolling?'fast':'normal') + ' polling') + (_s.wmode?', wmode: ' + _s.wmode:'') + (_s.debugFlash?', flash debug mode':'') + (_s.useFlashBlock?', flashBlock mode':'') + ' --', 1); + } + + if (_html5Only) { + _setVersionInfo(); + _initMsg(); + _s.oMC = _id(_s.movieID); + _init(); + // prevent multiple init attempts + _didAppend = true; + _appendSuccess = true; + return false; + } + + _didAppend = true; + + // safety check for legacy (change to Flash 9 URL) + _setVersionInfo(); + _s.url = _normalizeMovieURL(this._overHTTP?remoteURL:localURL); + smURL = _s.url; + + _s.wmode = (!_s.wmode && _s.useHighPerformance && !_s.useMovieStar?'transparent':_s.wmode); + + if (_s.wmode !== null && !_isIE && !_s.useHighPerformance && navigator.platform.match(/win32/i)) { + _s.specialWmodeCase = true; + // extra-special case: movie doesn't load until scrolled into view when using wmode = anything but 'window' here + // does not apply when using high performance (position:fixed means on-screen), OR infinite flash load timeout + _wDS('spcWmode'); + _s.wmode = null; + } + + oEmbed = { + 'name': smID, + 'id': smID, + 'src': smURL, + 'width': side, + 'height': side, + 'quality': 'high', + 'allowScriptAccess': _s.allowScriptAccess, + 'bgcolor': _s.bgColor, + 'pluginspage': 'http://www.macromedia.com/go/getflashplayer', + 'type': 'application/x-shockwave-flash', + 'wmode': _s.wmode + }; + + if (_s.debugFlash) { + oEmbed.FlashVars = 'debug=1'; + } + + if (!_s.wmode) { + delete oEmbed.wmode; // don't write empty attribute + } + + if (_isIE) { + // IE is "special". + oMovie = _doc.createElement('div'); + movieHTML = '' + (_s.wmode?' ':'') + '' + (_s.debugFlash?'':'') + ''; + } else { + oMovie = _doc.createElement('embed'); + for (tmp in oEmbed) { + if (oEmbed.hasOwnProperty(tmp)) { + oMovie.setAttribute(tmp, oEmbed[tmp]); + } + } + } + + _initDebug(); + extraClass = _getSWFCSS(); + oTarget = _getDocument(); + + if (oTarget) { + _s.oMC = _id(_s.movieID)?_id(_s.movieID):_doc.createElement('div'); + if (!_s.oMC.id) { + _s.oMC.id = _s.movieID; + _s.oMC.className = _s.swfCSS.swfDefault + ' ' + extraClass; + // "hide" flash movie + s = null; + oEl = null; + if (!_s.useFlashBlock) { + if (_s.useHighPerformance) { + s = { + 'position': 'fixed', + 'width': '8px', + 'height': '8px', + // >= 6px for flash to run fast, >= 8px to start up under Firefox/win32 in some cases. odd? yes. + 'bottom': '0px', + 'left': '0px', + 'overflow': 'hidden' + }; + } else { + s = { + 'position': 'absolute', + 'width': '6px', + 'height': '6px', + 'top': '-9999px', + 'left': '-9999px' + }; + if (isRTL) { + s.left = Math.abs(parseInt(s.left,10))+'px'; + } + } + } + if (_ua.match(/webkit/i)) { + _s.oMC.style.zIndex = 10000; // soundcloud-reported render/crash fix, safari 5 + } + if (!_s.debugFlash) { + for (x in s) { + if (s.hasOwnProperty(x)) { + _s.oMC.style[x] = s[x]; + } + } + } + try { + if (!_isIE) { + _s.oMC.appendChild(oMovie); + } + oTarget.appendChild(_s.oMC); + if (_isIE) { + oEl = _s.oMC.appendChild(_doc.createElement('div')); + oEl.className = _s.swfCSS.swfBox; + oEl.innerHTML = movieHTML; + } + _appendSuccess = true; + } catch(e) { + throw new Error(_str('appXHTML')); + } + _mobileFlash.check(); + } else { + // it's already in the document. + sClass = _s.oMC.className; + _s.oMC.className = (sClass?sClass+' ':_s.swfCSS.swfDefault) + (extraClass?' '+extraClass:''); + _s.oMC.appendChild(oMovie); + if (_isIE) { + oEl = _s.oMC.appendChild(_doc.createElement('div')); + oEl.className = _s.swfCSS.swfBox; + oEl.innerHTML = movieHTML; + } + _appendSuccess = true; + _mobileFlash.check(true); + } + } + + if (specialCase) { + _s._wD(specialCase); + } + + _initMsg(); + _s._wD('soundManager::createMovie(): Trying to load ' + smURL + (!this._overHTTP && _s.altURL?' (alternate URL)':''), 1); + + return true; + }; + + _idCheck = this.getSoundById; + + _initMovie = function() { + if (_html5Only) { + _createMovie(); + return false; + } + // attempt to get, or create, movie + if (_s.o) { + return false; // may already exist + } + _s.o = _s.getMovie(_s.id); // inline markup + if (!_s.o) { + if (!_oRemoved) { + // try to create + _createMovie(_s.id, _s.url); + } else { + // try to re-append removed movie after reboot() + if (!_isIE) { + _s.oMC.appendChild(_oRemoved); + } else { + _s.oMC.innerHTML = _oRemovedHTML; + } + _oRemoved = null; + _didAppend = true; + } + _s.o = _s.getMovie(_s.id); + } + if (_s.o) { + _s._wD('soundManager::initMovie(): Got '+_s.o.nodeName+' element ('+(_didAppend?'created via JS':'static HTML')+')'); + _wDS('waitEI'); + } + if (_s.oninitmovie instanceof Function) { + setTimeout(_s.oninitmovie, 1); + } + return true; + }; + + _go = function(sURL) { + // where it all begins. + if (sURL) { + _s.url = sURL; + } + _initMovie(); + }; + + _delayWaitForEI = function() { + setTimeout(_waitForEI, 500); + }; + + _waitForEI = function() { + if (_waitingForEI) { + return false; + } + _waitingForEI = true; + _removeEvt(_win, 'load', _delayWaitForEI); + if (_tryInitOnFocus && !_isFocused) { + _wDS('waitFocus'); + return false; + } + var p; + if (!_didInit) { + p = _s.getMoviePercent(); + _s._wD(_str('waitImpatient', (p === 100?' (SWF loaded)':(p > 0?' (SWF ' + p + '% loaded)':'')))); + } + setTimeout(function() { + p = _s.getMoviePercent(); + if (!_didInit) { + _s._wD(_sm + ': No Flash response within expected time.\nLikely causes: ' + (p === 0?'Loading ' + _s.movieURL + ' may have failed (and/or Flash ' + _fV + '+ not present?), ':'') + 'Flash blocked or JS-Flash security error.' + (_s.debugFlash?' ' + _str('checkSWF'):''), 2); + if (!this._overHTTP && p) { + _wDS('localFail', 2); + if (!_s.debugFlash) { + _wDS('tryDebug', 2); + } + } + if (p === 0) { + // if 0 (not null), probably a 404. + _s._wD(_str('swf404', _s.url)); + } + _debugTS('flashtojs', false, ': Timed out' + this._overHTTP?' (Check flash security or flash blockers)':' (No plugin/missing SWF?)'); + } + // give up / time-out, depending + if (!_didInit && _okToDisable) { + if (p === null) { + // SWF failed. Maybe blocked. + if (_s.useFlashBlock || _s.flashLoadTimeout === 0) { + if (_s.useFlashBlock) { + _flashBlockHandler(); + } + _wDS('waitForever'); + } else { + // old SM2 behaviour, simply fail + _failSafely(true); + } + } else { + // flash loaded? Shouldn't be a blocking issue, then. + if (_s.flashLoadTimeout === 0) { + _wDS('waitForever'); + } else { + _failSafely(true); + } + } + } + }, _s.flashLoadTimeout); + }; + + _go = function(sURL) { + // where it all begins. + if (sURL) { + _s.url = sURL; + } + _initMovie(); + }; + + // + _wDS = function(o, errorLevel) { + if (!o) { + return ''; + } else { + return _s._wD(_str(o), errorLevel); + } + }; + + if (_wl.indexOf('debug=alert') + 1 && _s.debugMode) { + _s._wD = function(sText) {alert(sText);}; + } + + _toggleDebug = function() { + var o = _id(_s.debugID), + oT = _id(_s.debugID + '-toggle'); + if (!o) { + return false; + } + if (_debugOpen) { + // minimize + oT.innerHTML = '+'; + o.style.display = 'none'; + } else { + oT.innerHTML = '-'; + o.style.display = 'block'; + } + _debugOpen = !_debugOpen; + }; + + _debugTS = function(sEventType, bSuccess, sMessage) { + // troubleshooter debug hooks + if (typeof sm2Debugger !== 'undefined') { + try { + sm2Debugger.handleEvent(sEventType, bSuccess, sMessage); + } catch(e) { + // oh well + } + } + return true; + }; + // + + _getSWFCSS = function() { + var css = []; + if (_s.debugMode) { + css.push(_s.swfCSS.sm2Debug); + } + if (_s.debugFlash) { + css.push(_s.swfCSS.flashDebug); + } + if (_s.useHighPerformance) { + css.push(_s.swfCSS.highPerf); + } + return css.join(' '); + }; + + _flashBlockHandler = function() { + // *possible* flash block situation. + var name = _str('fbHandler'), p = _s.getMoviePercent(); + if (!_s.supported()) { + if (_needsFlash) { + // make the movie more visible, so user can fix + _s.oMC.className = _getSWFCSS() + ' ' + _s.swfCSS.swfDefault + ' ' + (p === null?_s.swfCSS.swfTimedout:_s.swfCSS.swfError); + _s._wD(name+': '+_str('fbTimeout')+(p?' ('+_str('fbLoaded')+')':'')); + } + _s.didFlashBlock = true; + _processOnReady(true); // fire onready(), complain lightly + if (_s.onerror instanceof Function) { + _s.onerror.apply(_win); + } + } else { + // SM2 loaded OK (or recovered) + if (_s.didFlashBlock) { + _s._wD(name+': Unblocked'); + } + if (_s.oMC) { + _s.oMC.className = _getSWFCSS() + ' ' + _s.swfCSS.swfDefault + (' '+_s.swfCSS.swfUnblocked); + } + } + }; + + _handleFocus = function() { + function cleanup() { + _removeEvt(_win, 'focus', _handleFocus); + _removeEvt(_win, 'load', _handleFocus); + } + if (_isFocused || !_tryInitOnFocus) { + cleanup(); + return true; + } + _okToDisable = true; + _isFocused = true; + _s._wD('soundManager::handleFocus()'); + if (_isSafari && _tryInitOnFocus) { + // giant Safari 3.1 hack - assume mousemove = focus given lack of focus event + _removeEvt(_win, 'mousemove', _handleFocus); + } + // allow init to restart + _waitingForEI = false; + cleanup(); + return true; + }; + + _initComplete = function(bNoDisable) { + if (_didInit) { + return false; + } + if (_html5Only) { + // all good. + _s._wD('-- SoundManager 2: loaded --'); + _didInit = true; + _processOnReady(); + _initUserOnload(); + return true; + } + var sClass = _s.oMC.className, + wasTimeout = (_s.useFlashBlock && _s.flashLoadTimeout && !_s.getMoviePercent()); + if (!wasTimeout) { + _didInit = true; + } + _s._wD('-- SoundManager 2 ' + (_disabled?'failed to load':'loaded') + ' (' + (_disabled?'security/load error':'OK') + ') --', 1); + if (_disabled || bNoDisable) { + if (_s.useFlashBlock) { + _s.oMC.className = _getSWFCSS() + ' ' + (_s.getMoviePercent() === null?_s.swfCSS.swfTimedout:_s.swfCSS.swfError); + } + _processOnReady(); + _debugTS('onload', false); + if (_s.onerror instanceof Function) { + _s.onerror.apply(_win); + } + return false; + } else { + _debugTS('onload', true); + } + if (_s.waitForWindowLoad && !_windowLoaded) { + _wDS('waitOnload'); + _addEvt(_win, 'load', _initUserOnload); + return false; + } else { + if (_s.waitForWindowLoad && _windowLoaded) { + _wDS('docLoaded'); + } + _initUserOnload(); + } + return true; + }; + + _addOnReady = function(oMethod, oScope) { + _onready.push({ + 'method': oMethod, + 'scope': (oScope || null), + 'fired': false + }); + }; + + _processOnReady = function(ignoreInit) { + if (!_didInit && !ignoreInit) { + // not ready yet. + return false; + } + var status = { + success: (ignoreInit?_s.supported():!_disabled) + }, + queue = [], i, j, + canRetry = (!_s.useFlashBlock || (_s.useFlashBlock && !_s.supported())); + for (i = 0, j = _onready.length; i < j; i++) { + if (_onready[i].fired !== true) { + queue.push(_onready[i]); + } + } + if (queue.length) { + _s._wD(_sm + ': Firing ' + queue.length + ' onready() item' + (queue.length > 1?'s':'')); + for (i = 0, j = queue.length; i < j; i++) { + if (queue[i].scope) { + queue[i].method.apply(queue[i].scope, [status]); + } else { + queue[i].method(status); + } + if (!canRetry) { // flashblock case doesn't count here + queue[i].fired = true; + } + } + } + return true; + }; + + _initUserOnload = function() { + _win.setTimeout(function() { + if (_s.useFlashBlock) { + _flashBlockHandler(); + } + _processOnReady(); + _wDS('onload', 1); + // call user-defined "onload", scoped to window + if (_s.onload instanceof Function) { + _s.onload.apply(_win); + } + _wDS('onloadOK', 1); + if (_s.waitForWindowLoad) { + _addEvt(_win, 'load', _initUserOnload); + } + },1); + }; + + _featureCheck = function() { + var needsFlash, item, + isBadSafari = (!_wl.match(/usehtml5audio/i) && !_wl.match(/sm2\-ignorebadua/i) && _isSafari && _ua.match(/OS X 10_6_(3|4)/i)), // Safari 4 and 5 occasionally fail to load/play HTML5 audio on Snow Leopard due to bug(s) in QuickTime X and/or other underlying frameworks. :/ Known Apple "radar" bug. https://bugs.webkit.org/show_bug.cgi?id=32159 + isSpecial = (_ua.match(/iphone os (1|2|3_0|3_1)/i)?true:false); // iPhone <= 3.1 has broken HTML5 audio(), but firmware 3.2 (iPad) + iOS4 works. + if (isSpecial) { + _s.hasHTML5 = false; // has Audio(), but is broken; let it load links directly. + _html5Only = true; // ignore flash case, however + if (_s.oMC) { + _s.oMC.style.display = 'none'; + } + return false; + } + if (_s.useHTML5Audio) { + if (!_s.html5 || !_s.html5.canPlayType) { + _s._wD('SoundManager: No HTML5 Audio() support detected.'); + _s.hasHTML5 = false; + return true; + } else { + _s.hasHTML5 = true; + } + if (isBadSafari) { + _s._wD('SoundManager::Note: Buggy HTML5 Audio in Safari on OS X 10.6.[3|4], see https://bugs.webkit.org/show_bug.cgi?id=32159 - disabling HTML5 audio',1); + _s.useHTML5Audio = false; + _s.hasHTML5 = false; + return true; + } + } else { + // flash required. + return true; + } + for (item in _s.audioFormats) { + if (_s.audioFormats.hasOwnProperty(item) && _s.audioFormats[item].required && !_s.html5.canPlayType(_s.audioFormats[item].type)) { + // may need flash for this format? + needsFlash = true; + } + } + // sanity check.. + if (_s.ignoreFlash) { + needsFlash = false; + } + _html5Only = (_s.useHTML5Audio && _s.hasHTML5 && !needsFlash); + return needsFlash; + }; + + _init = function() { + var item, tests = []; + _wDS('init'); + + // called after onload() + if (_didInit) { + _wDS('didInit'); + return false; + } + + function _cleanup() { + _removeEvt(_win, 'load', _s.beginDelayedInit); + } + + if (_s.hasHTML5) { + for (item in _s.audioFormats) { + if (_s.audioFormats.hasOwnProperty(item)) { + tests.push(item+': '+_s.html5[item]); + } + } + _s._wD('-- SoundManager 2: HTML5 support tests ('+_s.html5Test+'): '+tests.join(', ')+' --',1); + } + + if (_html5Only) { + if (!_didInit) { + // we don't need no steenking flash! + _cleanup(); + _s.enabled = true; + _initComplete(); + } + return true; + } + + // flash path + _initMovie(); + try { + _wDS('flashJS'); + _s.o._externalInterfaceTest(false); // attempt to talk to Flash + if (!_s.allowPolling) { + _wDS('noPolling', 1); + } else { + _setPolling(true, _s.useFastPolling?true:false); + } + if (!_s.debugMode) { + _s.o._disableDebug(); + } + _s.enabled = true; + _debugTS('jstoflash', true); + } catch(e) { + _s._wD('js/flash exception: ' + e.toString()); + _debugTS('jstoflash', false); + _failSafely(true); // don't disable, for reboot() + _initComplete(); + return false; + } + _initComplete(); + // event cleanup + _cleanup(); + return true; + }; + + _beginInit = function() { + if (_initPending) { + return false; + } + _createMovie(); + _initMovie(); + _initPending = true; + return true; + }; + + _dcLoaded = function() { + if (_didDCLoaded) { + return false; + } + _didDCLoaded = true; + _initDebug(); + _testHTML5(); + _s.html5.usingFlash = _featureCheck(); + _needsFlash = _s.html5.usingFlash; + _didDCLoaded = true; + if (_doc.removeEventListener) { + _doc.removeEventListener('DOMContentLoaded', _dcLoaded, false); + } + _go(); + return true; + }; + + _startTimer = function(oSound) { + if (!oSound._hasTimer) { + oSound._hasTimer = true; + } + }; + + _stopTimer = function(oSound) { + if (oSound._hasTimer) { + oSound._hasTimer = false; + } + }; + + _die = function() { + if (_s.onerror instanceof Function) { + _s.onerror(); + } + _s.disable(); + }; + + // pseudo-private methods called by Flash + + this._setSandboxType = function(sandboxType) { + // + var sb = _s.sandbox; + sb.type = sandboxType; + sb.description = sb.types[(typeof sb.types[sandboxType] !== 'undefined'?sandboxType:'unknown')]; + _s._wD('Flash security sandbox type: ' + sb.type); + if (sb.type === 'localWithFile') { + sb.noRemote = true; + sb.noLocal = false; + _wDS('secNote', 2); + } else if (sb.type === 'localWithNetwork') { + sb.noRemote = false; + sb.noLocal = true; + } else if (sb.type === 'localTrusted') { + sb.noRemote = false; + sb.noLocal = false; + } + // + }; + + this._externalInterfaceOK = function(flashDate) { + // flash callback confirming flash loaded, EI working etc. + // flashDate = approx. timing/delay info for JS/flash bridge + if (_s.swfLoaded) { + return false; + } + var eiTime = new Date().getTime(); + _s._wD('soundManager::externalInterfaceOK()' + (flashDate?' (~' + (eiTime - flashDate) + ' ms)':'')); + _debugTS('swf', true); + _debugTS('flashtojs', true); + _s.swfLoaded = true; + _tryInitOnFocus = false; + if (_isIE) { + // IE needs a timeout OR delay until window.onload - may need TODO: investigating + setTimeout(_init, 100); + } else { + _init(); + } + }; + + _dcIE = function() { + if (_doc.readyState === 'complete') { + _dcLoaded(); + _doc.detachEvent('onreadystatechange', _dcIE); + } + return true; + }; + + // focus and window load, init + if (!_s.hasHTML5 || _needsFlash) { + // only applies to Flash mode + _addEvt(_win, 'focus', _handleFocus); + _addEvt(_win, 'load', _handleFocus); + _addEvt(_win, 'load', _delayWaitForEI); + if (_isSafari && _tryInitOnFocus) { + _addEvt(_win, 'mousemove', _handleFocus); // massive Safari focus hack + } + } + + if (_doc.addEventListener) { + _doc.addEventListener('DOMContentLoaded', _dcLoaded, false); + } else if (_doc.attachEvent) { + _doc.attachEvent('onreadystatechange', _dcIE); + } else { + // no add/attachevent support - safe to assume no JS -> Flash either + _debugTS('onload', false); + _die(); + } + + if (_doc.readyState === 'complete') { + setTimeout(_dcLoaded,100); + } + +} // SoundManager() + +// var SM2_DEFER = true; +// details: http://www.schillmania.com/projects/soundmanager2/doc/getstarted/#lazy-loading + +if (typeof SM2_DEFER === 'undefined' || !SM2_DEFER) { + soundManager = new SoundManager(); +} + +// public interfaces +window.SoundManager = SoundManager; // constructor +window.soundManager = soundManager; // public instance: API, Flash callbacks etc. + +}(window)); +var d = + { + DEBUG: false, + act: function (s) + { + // $('#msg').append(''+s+'
    ') + // d.scrollToBottom("#msg") + // if (d.DEBUG) + // console.log(s) + return false + }, + joy: function (s) + { + // $('#msg').append(''+s+'
    ') + // d.scrollToBottom("#msg") + // if (d.DEBUG) + // console.log(s) + return false + }, + warn: function (s) + { + // $('#msg').append(s+'
    ') + // d.scrollToBottom("#msg") + // if (d.DEBUG) + // console.log(s) + return false + }, + error: function (s) + { + // $('#msg').append('ERROR: '+s+'
    ') + // d.scrollToBottom("#msg") + // console.log(s) + return false + }, + noop: function () {}, + scrollToTop: function (elem) + { + $(elem).scrollTop( 0 ) + }, + scrollToBottom: function (elem) + { + try + { + $(elem).scrollTop( $(elem)[0].scrollHeight ) + } + catch (err) + { + } + }, + pageUp: function (div) + { + var st = $(div).scrollTop() + var h = $(window).height() + d.warn("PAGEUP: "+st+" "+h) + $(div).scrollTop( st - (2/3) * h ) + var st = $(div).scrollTop() + d.warn("ST NOW: "+st+" "+h) + }, + pageDown: function (div) + { + var st = $(div).scrollTop() + var h = $(window).height() + $(div).scrollTop( st + (2/3) * h ) + }, + choice: function (list) + { + return list[Math.floor (Math.random () * list.length)] + }, + trim: function (s) + { + if (s) + return s.replace(/^\s+|\s+$/g,"") + else + return "" + }, + sanitizeWithNewlines: function (s) + { + if (s) + return d.trim( s ).replace(//g,">").replace(/\"/g,""").replace(/\0/g,"") + return "" + }, + sanitize: function (s) + { + if (s) + return d.trim( s ).replace(//g,">").replace(/\"/g,""").replace(/\n/g,"").replace(/\r/g,"").replace(/\0/g,"") + return "" + }, + linkify: function (s) + { + var words = s.split(" ") + var checked = [] + for (i in words) + { + var word = words[i] + if (words[i].indexOf("http") === 0) + { + var poffset = word.indexOf('//') + var linktext = word.substr(poffset+2, word.indexOf('/', poffset+2)) + checked.push(''+linktext+'') + } + else + checked.push(word) + } + return checked.join(" ") + }, + enableStylesheet: function (style) + { + $("link[@rel*=style][title]").each(function (i) + { + if (this.getAttribute('title') == style) + this.disabled = false + }) + }, + disableStylesheet: function (style) + { + $("link[@rel*=style][title]").each(function (i) + { + if (this.getAttribute('title') == style) + this.disabled = true + }) + }, + buildLookup: function (list) + { + var lookup = {} + for (var i = 0; i < list.length; i++) + lookup[list[i]] = true + return lookup + } + } + +var API = + { + HEADER: "#@scanjam 0.2", + BASE_URL: "http://"+serverHost+":"+serverPort, + URL: + { + auth: + { + login: "/api/auth/login", + logout: "/api/auth/logout", + checkin: "/api/auth/checkin", + sneakin: "/api/auth/sneakin", + }, + room: + { + join: "/api/room/join", + list: "/api/room/list", + view: "/api/room/view", + poll: "/api/room/poll", + watch: "/api/room/watch", + say: "/api/room/say", + settings: "/api/room/settings", + stats: "/stats", + }, + video: + { + date: "/api/video/date", + like: "/api/video/like", + unlike: "/api/video/unlike", + remove: "/api/video/remove", + search: "/api/video/search", + }, + user: + { + settings: "/api/user/settings", + videos: "/api/user/videos", + likes: "/api/user/likes", + }, + }, + error: function (s) + { + d.error("API: "+s) + return false + }, + parse: function (api, raw) + { + if (! raw) + return API.error("no result") + var lines = raw.split("\n") + if (lines.shift() !== API.HEADER) + return API.error("bad header") + if (! lines.length) + return API.error("no content") + return lines + }, + init: function () + { + d.warn("INIT API") + for (type in API.URL) + { + for (name in API.URL[type]) + { + API.URL[type][name] = API.BASE_URL + API.URL[type][name] + } + } + // $.ajaxSetup({ timeout: 1000 }) + } + } +var Local = + { + support: false, + hash: null, + get: null, + set: null, + _html5_get: function (key) + { + var val = localStorage["scanjam."+key] + if (val === "true") return true + if (val === "false") return false + if (val === "undefined") return undefined + return val + }, + _html5_set: function (key, val) + { + if (val === undefined) + localStorage["scanjam."+key] = "" + else + localStorage["scanjam."+key] = val + }, + _hash_get: function (key) + { + if (key in Local.hash) + return Local.hash[key] + }, + _hash_set: function (key, val) + { + Local.hash[key] = val + }, + _supports_html5_storage: function () + { + try + { return 'localStorage' in window && window['localStorage'] !== null; } + catch (e) + { return false } + }, + like: function (videoid) + { Local.set("like."+videoid, true) }, + unlike: function (videoid) + { Local.set("like."+videoid, false) }, + isLiked: function (videoid) + { return Local.get("like."+videoid) }, + init: function () + { + Local.support = Local._supports_html5_storage() + if (Local.support) + { + d.warn("SUPPORTS LOCAL STORAGE") + Local.get = Local._html5_get + Local.set = Local._html5_set + } + else + { + d.error("NO LOCAL STORAGE") + Local.hash = {} + Local.get = Local._hash_get + Local.set = Local._hash_set + } + } + } +API.init() +Local.init() + +var Auth = + { + userid: false, + username: false, + session: false, + loaded: false, + access: 0, + login: function () + { + d.warn("LOG IN") + var username = d.trim( $("#login-username").val() ) + var password = d.trim( $("#login-password").val() ) + var pwhash = $.md5("scanjam"+password) + if (! username || ! password) return + Main.enter = false + d.warn("LOGGING IN") + $.post(API.URL.auth.login, {'username':username, 'password': pwhash}, Auth.loginCallback) + $("#chat").hide() + }, + loginCallback: function (raw) + { + var lines = API.parse("/auth/login", raw) + if (! lines.length) return + if (lines[0] !== "OK") + { + alert(lines[0].split("\t")[1]) + return Auth.error() + } + u = lines[1].split("\t") + + Auth.userid = u[0] + Auth.username = u[1] + Auth.session = u[2] + Auth.access = u[3] + + document.cookie = "session="+Auth.session+";path=/;domain=.scannerjammer.com;max-age=1086400" + Auth.success() + }, + checkin: function () + { + d.warn("CHECK IN") + $.post(API.URL.auth.checkin, {'session':Auth.session}, Auth.checkinCallback) + }, + checkinCallback: function (raw) + { + var lines = API.parse("/auth/checkin", raw) + if (! lines.length) return + if (lines[0] !== "OK") + { + alert(lines[0].split("\t")[1]) + return Auth.error() + } + u = lines[1].split("\t") + Auth.userid = u[0] + Auth.username = u[1] + Auth.success() + }, + sneakin: function (userid,username) + { + d.warn("SNEAK IN") + $.post(API.URL.auth.sneakin, {'userid':userid,'username':username}).success(Auth.sneakinCallback) + }, + sneakinCallback: function (raw) + { + var lines = API.parse("/auth/sneakin", raw) + if (! lines.length) return + if (lines[0] !== "OK") + { + alert(lines[0].split("\t")[1]) + return Auth.error() + } + d.joy("snuck in!") + u = lines[1].split("\t") + + Auth.userid = u[0] + Auth.username = u[1] + Auth.session = u[2] + Auth.access = u[3] + + d.warn(lines[1]) + if (! Auth.session) + return + document.cookie = "session="+Auth.session+";path=/;domain=.scannerjammer.com;max-age=1086400" + Auth.success() + }, + logout: function () + { + d.warn("LOG OUT") + clearTimeout(Room.timer) + Room.unload() + Auth.userid = false + Auth.username = false + Local.set('userid', false) + Local.set('username', false) + document.cookie = "session=false;path=/;domain=.scannerjammer.com;max-age=0" + Auth.session = "" + Auth.load() + }, + error: function () + { + Auth.load() + }, + success: function () + { + d.joy("logged in as "+Auth.username) + Auth.unload() + Room.load() + }, + unload: function () + { + d.warn("AUTH UNLOAD") + $("#login").hide() + $("#loading").show() + Keyboard.enter = false + Auth.loaded = false + }, + load: function () + { + d.warn("AUTH LOAD") + $("#loading").hide() + $("#login").show() + $("#login-username").focus() + $("#login-username").keydown(Keyboard.textareaMap) + $("#login-password").keydown(Keyboard.textareaMap) + $("#login-password").val("") + $("#login-go").click(Auth.login) + Keyboard.enter = Auth.login + $("#bg").show() + Auth.loaded = true + }, + init: function () + { + d.warn("INIT AUTH") + if (document.cookie) + { + d.warn("got a cookie") + d.warn(document.cookie) + var cookies = document.cookie.split(";") + for (i in cookies) + { + var cookie = cookies[i].split("=") + if (cookie[0].indexOf("session") !== -1) + { + if (cookie[1] !== 'false' && cookie[1] !== 'undefined') + { + Auth.session = cookie[1] + break + } + } + } + d.warn("got sessionid "+Auth.session) + if (Auth.session) + return true + } + var userid = Local.get('userid') + var username = Local.get('username') + if (userid && username) + { + d.warn("attempting to sneak in "+username) + Auth.sneakin(userid,username) + return true + } + return false + } + } + +var Like = + { + timeout: false, + likeVideoDelay: 1000, + likeMessageDelay: 10000, + favewords: + [ + 'dazzled', 'dangled', 'amazed', 'shocked', 'wowed', + 'spangled', 'glittered', 'blinged', 'jazzed', 'smoked', + 'rocked', 'jammed', 'stoked', 'blazed', 'pringled', 'engulfed', + ], + colors: + [ + "#ffa1b8","#ffb9a1","#ffe8a1","#ffa1e7","#a1a4ff","#cda1ff","#fca1ff","#a1d3ff","#e8a1ff","#a1f6ff","#a1ffaa","#c7ffa1" + ], + enqueue: function (username) + { + d.joy("liked by "+username) + $("#likereport").append( + $("").attr("href","/profile/"+username).html(username+" was "+d.choice(Like.favewords)+"!").attr("style","color:"+d.choice(Like.colors))) + if (Viewport.focused) + Like.fire() + else + Like.pending = true + }, + fire: function () + { + d.joy("LIKE ANIMATION GO") + Like.pending = false + $("#likereport").stop(false,false).show() + d.scrollToBottom("#likereport") + $("#plant").stop(true, true).show() + $("#flower").stop(true, true).show() + if (Like.timeout) + clearTimeout(Like.timeout) + Like.timeout = setTimeout(Like.queueFade, 1000) + }, + queueFade: function timeout() + { + d.joy("LIKE ANIMATION FADE") + Like.timeout = false + $("#plant").fadeOut(Like.likeVideoDelay) + $("#flower").fadeOut(Like.likeVideoDelay) + $("#likereport").fadeOut(Like.likeMessageDelay, function(){$("#likereport").html("")}) + }, + likeVideo: function (video) + { + if (! Auth.session) + return d.error("like: not logged in") + if (video.username === Auth.username) + return d.error("like: that's you") + var data = { video: video.id, session: Auth.session, } + if (Local.isLiked(video.id)) + { + d.joy("unliking "+video.key) + if (Player.currentKey === video.key) + $("#like").removeClass("liked") + $("#like_"+video.id).removeClass("liked").html("  like") + video.liked = false + Local.unlike(video.id) + if (video.score) + { + video.score -= 1 + if (video.score < 0) + { + video.score = 0 + $("#score_"+video.id).html(' ') + } + else + { + $("#score_"+video.id).html(video.score) + } + } + $.post(API.URL.video.unlike, data) + } + else + { + d.joy("liking "+video.key) + if (Player.currentKey === video.key) + $("#like").addClass("liked") + $("#like_"+video.id).addClass("liked").html("liked") + $("#flower").show().fadeOut(Like.likeVideoDelay) + video.liked = true + Local.like(video.id) + if (video.score) + { + video.score += 1 + $("#score_"+video.id).html(video.score) + } + $.post(API.URL.video.like, data) + } + }, + init: function () + { + } + } + +YOUTUBE_SEARCH_URL = "https://gdata.youtube.com/feeds/api/videos" +YOUTUBE_URL_PREFIX = "http://youtube.com/watch?v=" +function courtesy_s (quantity, noun) + { + if (quantity > 1) + return quantity + " " + noun + "s" + return quantity + " " + noun + } +var Search = + { + start: 0, + limit: 20, + sj: function () + { + Search.start = 0 + Search.terms = $("#search-terms").val() + Search.sjSearch (Search.terms, Search.start) + }, + sjSearch: function (terms, start) + { + var params = + { + "q": terms, + "start": Search.start, + "limit": Search.limit, + "session": Auth.session, + } + $.post(API.URL.video.search, params, Search.sjCallback) + $("#search-instructions").hide() + $("#search-results").html("").hide() + $("#search-loading").show() + $("#search-results-container").show() + }, + sjCallback: function (raw) + { + var lines = API.parse ("/video/search", raw) + var items = [] + for (var i = 0; i < lines.length; i++) + { + // 0 id 1 score 2 user 3 usercount 4 title 5 url 6 thumbnail + var line = lines[i].split("\t") + if (line.length < 7) + continue + var video = + { + url: line[5], + thumbnail: line[6], + title: line[4], + user: line[2], + quantify: "", + } + if (parseInt(line[3]) > 1) + video['user'] += " + " + courtesy_s (parseInt(line[3])-1, "other") + if (parseInt(line[1]) > 0) + video['quantify'] = courtesy_s (parseInt(line[1]), "like") + var tag = Search.resultTag (video) + items.push(tag) + } + if (items.length === Search.limit) + { + Search.start += Search.limit + $("#search-next-page").show() + } + else + { + $("#search-next-page").hide() + } + $("#search-loading").hide() + $("#search-results").html(items.join("")).show() + $("#search-instructions").show() + $("#curtain").bind("click", Search.close).css({"background-color": "transparent", "z-index": 99}).show() + }, + youtube: function () + { + var terms = $("#search-terms").val() + var params = + { + "q": terms, + "v": 2, + "alt": "jsonc", + } + $.get(YOUTUBE_SEARCH_URL, params, Search.youtubeCallback, "jsonp") + $("#search-results-container").show() + $("#search-results").html("").hide() + $("#search-loading").show() + }, + durationToString: function (duration) + { + return Math.floor(duration / 60) + ":" + (duration % 60) + }, + viewCountToString: function (viewCount) + { + if (! viewCount) + return '0' + var vc = viewCount.toString () + var commas = /(\d+)(\d{3})/; + while (commas.test(vc)) + { + vc = vc.replace(commas, '$1' + ',' + '$2'); + } + return vc + }, + resultTag: function (video) + { + var tag = "
  • " + tag += "
    " + tag += "

    " + video['title'] + "

    " + tag += "" + tag += "
    Preview" + tag += "
  • " + return tag + }, + youtubeCallback: function (data) + { + var items = [] + for (var i = 0; i < data['data']['items'].length; i++) + { + var item = data['data']['items'][i] + var video = + { + url: YOUTUBE_URL_PREFIX+item['id'], + thumbnail: item['thumbnail']['sqDefault'], + title: item['title'], + user: item['uploader'], + quantify: Search.viewCountToString(item['viewCount']) + "views", + } + var tag = Search.resultTag (video) + items.push(tag) + } + $("#search-loading").hide() + $("#search-results").html(items.join("")).show() + }, + keydown: function (e) + { + if (e.keyCode === 13) + { + Search.sj () + } + if (e.keyCode === 27) + { + Search.close () + Keyboard.focusTextarea () + } + }, + nextPage: function () + { + Search.sjSearch (Search.terms, Search.start) + }, + loadResult: function () + { + var url = $(this).parent().data("url") + $.post(API.URL.room.say, {room: Room.name, session: Auth.session, msg: url}) + Search.close () + }, + close: function () + { + $("#curtain").unbind("click", Search.close).hide() + $("#search-results-container").hide() + $("#search-terms").val("") + }, + blurSearchTextarea: function () + { + $(window).unbind("keydown") + $("#chat-message").unbind("keydown").bind("keydown", Keyboard.textareaMap) + $("#chat-message").unbind("focus").focus().bind("focus", Keyboard.focusTextarea) + if ($("#chat-message").val().length === 0) + Keyboard.enteredText = false + }, + focusSearchTextarea: function () + { + $(window).unbind("keydown") + $("#chat-message").unbind("keydown") + }, + init: function () + { + $("#search-results li div").live("click", Search.loadResult) + $("#search-results li h4").live("click", Search.loadResult) + $("#search-results li span").live("click", Search.loadResult) + $("#search-terms").bind("keydown", Search.keydown) + $("#search-terms").bind("focus", Search.focusSearchTextarea) + $("#search-terms").bind("blur", Search.blurSearchTextarea) + // $("#search-terms").val("glock n my hand") + // Search.sj () + } + } +Search.init () + +var VIMEOregexp = /^(\bhttps?:\/\/)(www.)?vimeo.com\/([0-9]+).*$/i +var PLAY_BUTTONS = + { + prev: "
    ", + next: "
    ", + pause: "
    ", + play: "
    ", + } +var Player = + { + videos: {}, + queue: [], + projectors: {}, + projector: null, + newVideos: false, + currentIdx: 0, + video: false, + errors: 0, + width: '100%', + height: '100%', + playlistOffset: 30, + queueOffset: 60, + paused: false, + muted: false, + enqueue: function (video) + { + if (! (video.type in Player.projectors)) + return d.error("unknown video type "+video.type) + var key = video.type+"_"+video.name + if (key in Player.videos) + { + Player.videos[key].idx = Player.queue.length + Player.videos[key].seen = false + if (video.offset) + Player.videos[key].offset = video.offset + d.warn("bumped "+key) + } + else + { + video.key = key + video.idx = Player.queue.length + Player.videos[key] = video + Player.newVideos = true + d.warn("enqueued "+key) + } + $("#"+video.key).html(video.title) + Player.queue.push(key) + return true + }, + clearQueue: function () + { + Player.queue = [] + Player.currentIdx = 0 + Playlist.count = 0 + }, + register: function (projector) + { + d.warn("registered "+projector.type) + Player.projectors[projector.type] = projector + }, + unregister: function (projectortype) + { + d.warn("unregistered "+projectortype) + delete Player.projectors[projectortype] + }, + start: function () + { + d.warn("PLAYER START") + Player.currentIdx = Player.queue.length - 1 + if (! Player.queue.length) + return d.error("empty queue") + Player.playLatest() + }, + finish: function () + { + d.warn("PLAYER FINISH") + d.warn("____________") + Player.playLatest() + }, + error: function (s) + { + if (s) + d.error(Player.errors+" "+s) + else + d.error("PLAYER ERROR "+Player.errors) + $("li#queue_"+Player.video.idx+" span.title").html("This video cannot be embedded") + Player.video.error = true + }, + playLatest: function () + { + d.warn("PLAY LATEST") + var idx = Player.currentIdx + var len = Player.queue.length + if (Player.newVideos) + { + for (i = idx; i < len; i++) + { + var video = Player.videos[Player.queue[i]] + d.warn("check "+Player.queue[i]) + if (video.seen) + continue + Player.currentIdx = i + d.joy("new video! "+video.key+" at "+i) + Player.queueJumpToCurrentVideo(Player.currentIdx) + Player.playVideo(video) + return + } + for (i = idx - 1; i >= 0; i--) + { + var video = Player.videos[Player.queue[i]] + d.warn("check "+Player.queue[i]) + if (video.seen) + continue + Player.currentIdx = i + d.joy("new video! "+video.key+" at "+i) + Player.queueJumpToCurrentVideo(Player.currentIdx) + Player.playVideo(video) + return + } + Player.newVideos = false + d.warn("no new videos") + } + Player.playNext() + }, + playNext: function () + { + d.warn("____________") + d.warn("PLAY NEXT") + var idx = Player.currentIdx + do + { + idx -= 1 + if (Player.queue[idx] === Player.video.key) + idx -= 1 + if (idx < 0) + idx = Player.queue.length - 1 + } + while (Player.videos[ Player.queue[idx] ].error === true) + Player.queueJumpToCurrentVideo(idx) + Player.playIdx(idx) + }, + playPrev: function () + { + d.warn("____________") + d.warn("PLAY PREV") + var idx = Player.currentIdx + do + { + idx = (idx + 1) % Player.queue.length + if (Player.queue[idx] === Player.video.key) + continue + } + while (Player.videos[ Player.queue[idx] ].error === true) + Player.queueJumpToCurrentVideo(idx) + Player.playIdx(idx) + }, + playKey: function (key) + { + Player.playVideo( Player.videos[key] ) + }, + playIdx: function (idx) + { + d.warn("play idx: "+idx) + Player.currentIdx = idx + Player.playVideo( Player.videos[Player.queue[idx]] ) + }, + throttle: function () + { + d.error("THROTTLED") + Player.stop() + Player.errors = 0 + }, + stop: function () + { + Player.projector.stop() + }, + playVideo: function (video) + { + if (! video) + { + d.error("GOT EMPTY VIDEO") + d.warn(Player.currentIdx) + d.warn(Player.queue[ Player.currentIdx ]) + d.warn(Player.videos[ Player.queue[ Player.currentIdx ] ]) + return + } + if (video.error === true) + { + Player.errors += 1 + d.error(video.key) + if (Player.errors > Player.queue.length) + return Player.throttle() + return Player.finish() + } + d.warn("PLAY VIDEO: "+video.key) + if (video.type !== Player.projector.type) + { + d.warn("SWITCHING PROJECTORS") + d.warn([Player.projector.type, video.type].join(" → ")) + Player.projector.unload() + Player.projector = Player.projectors[video.type] + Player.projector.load() + if (Player.muted) + Player.projector.setVolume(0) + } + video.seen = true + if (! Player.fullscreenMode) + { + $("#video-title").hide().html(video.title).fadeIn(100, function () { + setTimeout("$('#video-title').fadeOut(2000)", 4000) + }) + } + + Player.errors = 0 + Player.video = video + Player.projector.play(video) + Player.linkUpdate(video) + Player.currentIdx = video.idx + $("#queue li.playing").removeClass("playing") + $("#chat a.ytlink.playing").removeClass("playing") + $("#queue li").removeClass("playing") + $("li#queue_"+video.idx).addClass("playing") + $("#"+video.key).addClass("playing") + $("#"+video.key).html(video.title) + $("#like").removeClass("liked").html("LIKE") + $("#pause").html(PLAY_BUTTONS.pause) + if (Local.isLiked(video.id)) + { + $("#like").addClass("liked").html("LIKED") + } + }, + queueJumpToCurrentVideo: function (idx) + { + $("#playlist").scrollTop( $("li#queue_"+idx)[0].offsetTop - Player.playlistOffset ) + $("#queue").scrollTop( $("li#queue_"+idx)[0].offsetTop - Player.queueOffset ) + }, + toggle: function () + { + Player.projector.toggle() + }, + pause: function () + { + Player.projector.pause() + $("#pause").html(PLAY_BUTTONS.play) + }, + mute: function () + { + if (Player.projector) + { + if (Player.muted) + Player.projector.setVolume(100) + else + Player.projector.setVolume(0) + } + Player.muted = ! Player.muted + }, + muteClick: function () + { + if (Player.muted) + $("#mute").removeClass("muted") + else + $("#mute").addClass("muted") + Player.mute() + }, + prevClick: function () + { + d.act("+ clicked prev") + Player.playPrev() + }, + pauseClick: function () + { + d.act("+ clicked pause") + Player.errors = 0 + if (Player.projector.toggle()) + { + $("#pause").html(PLAY_BUTTONS.play) + d.warn("set to play") + } + else + { + $("#pause").html(PLAY_BUTTONS.pause) + d.warn("set to pause") + } + }, + nextClick: function () + { + d.act("+ clicked next") + Player.playNext() + }, + scanClick: function () + { + d.act("+ clicked scan") + Scanner.scan() + }, + likeClick: function () + { + d.act("+ clicked player like") + Like.likeVideo(Player.video) + }, + linkClick: function () + { + d.act("+ clicked permalink") + Player.pause() + }, + linkUpdate: function (video) + { + d.warn("UPDATING LINK") + $("#video-link").attr("href", video.src) + var vidurl = "http://scannerjammer.com/" + if (Room.name !== "main") + vidurl += Room.name+"/" + vidurl += "#v="+video.id + $("#sharebutton").attr("st_url", vidurl).attr("st_title", video.title) +/* + stWidget.addEntry({ + service: "sharethis", + element: document.getElementById("sharebutton"), + url: vidurl, + title: video.title, + summary: "ScannerJammer: Youtube video chat", + }) +*/ + }, + + fullscreenClick: function () + { + d.act("+ clicked fullscreen") + }, + setVolume: function (vol) + { + if (Player.projector && Player.projector.type !== 'null') + { + // alert(Player.projector.type) + Player.projector.setVolume(vol) + } + }, + init: function () + { + d.warn("PLAYER INIT") + $("#prev").html(PLAY_BUTTONS.prev) + $("#pause").html(PLAY_BUTTONS.play) + $("#next").html(PLAY_BUTTONS.next) + $("#prev").bind("click", Player.prevClick) + $("#pause").bind("click", Player.pauseClick) + $("#next").bind("click", Player.nextClick) + $("#scan").bind("click", Player.scanClick) + $("#like").bind("click", Player.likeClick) + $("#video-link").bind("click", Player.linkClick) + $("#fullscreen").bind("click", Viewport.fullscreenOn) + Player.projector = {type:"null",load:d.noop,unload:Youtube.unload,} + for (i in Player.projectors) + Player.projectors[i].init() + if (Player.queue.length > 0) + Player.currentIdx = Player.queue.length + Playlist.init() + } + } + +var Playlist = + { + count: 0, + showScores: false, + enqueue: function (videos) + { + if (! (videos instanceof Array)) + videos = [videos] + // d.warn("PLAYLIST ENQUEUE "+videos.length) + var rows = [] + var clickables = [] + for (i in videos) + { + var video = videos[i] + $("#"+video.key).html(video.title) + if (Player.enqueue(video)) + { + rows.push(Playlist.display(video)) + Playlist.count += 1 + } + } + $("#queue").prepend(rows.reverse().join("")) + }, + enqueueOldVideoFormat: function (videos) + { + // d.warn("ENQUEUING "+videos.length+" OLD FORMAT") + for (i in videos) + { + // 0 id 1 date 2 userid 3 user 4 url 5 title + var row = videos[i] + var video = + { + id: row[0], + date: row[1], + userid: row[2], + username: row[3], + src: row[4], + title: row[5] || '___', + seen: false, + error: false, + } + if (row.length > 6) + { + video.score = parseInt(row[6]) || 0 + // block video if it's a duplicate + } + var url = row[4] + if (url.indexOf("youtube.com") !== -1) + { + var ytid = Youtube.getYtid(url) + video.type = "youtube" + video.name = ytid + } + else if (url.indexOf("vimeo.com") !== -1) + { + var vimeoid = url.replace(VIMEOregexp, "$3") + video.type = "vimeo" + video.name = vimeoid + } + else if (url.indexOf("soundcloud.com") !== -1) + { + video.type = "soundcloud" + video.name = $.md5(video.src) + } + else if (url.indexOf("mp3") !== -1) + { + video.type = "audio" + video.name = $.md5(video.src) + } + else + { + d.error("bad video id in "+url) + continue + } + video.key = video.type + "_" + video.name + Playlist.enqueue(video) + // d.joy("GOT VIDEO: "+key) + } + }, + clickTitle: function (e) + { + var id = $(this).parent().attr("id") + var idx = id.substr(id.indexOf("_")+1) + d.act("+ clicked playlist "+idx) + Player.playIdx(parseInt(idx)) + }, + clickLike: function (e) + { + var id = $(this).parent().attr("id") + var idx = id.substr(id.indexOf("_")+1) + var videokey = Player.queue[idx] + var video = Player.videos[videokey] + d.act("+ clicked playlist like "+video.key) + Like.likeVideo(video) + }, + clickChatlink: function (e) + { + e.preventDefault() + var key = $(this).attr("id") + var video = Player.videos[key] + d.act("+ clicked link "+video.key) + Player.playVideo(video) + }, + display: function (video) + { + var likeClass = '' + var likeWord = "  like" + if (video.username === Auth.username) + { + likeClass = "you" + } + else if (Local.isLiked(video.id)) + { + likeClass = 'liked' + likeWord = 'liked' + } + var s = "
  • " + if (Playlist.showScores) + { + score = video.score + if (score < 1) + score = ' ' + s += ""+score+"" + } + s += "" + s += ""+video.username+"" + s += ""+video.title+"" + s += "
  • " + return s + }, + init: function () + { + d.warn("PLAYLIST INIT") + $("#queue li span.title").live("click", Playlist.clickTitle) + $("#queue li span.like").live("click", Playlist.clickLike) + $("#chat a.ytlink").live("click", Playlist.clickChatlink) + } + } + +var Scanner = + { + scanMode: false, + scanTimeout: false, + scanBlinkTimeout: false, + scanBlinkState: false, + scanBlinkRate: 200, + scanRate: 9000, + scanBlink: function () + { + if (Scanner.scanBlinkState) + { + $("#scan").addClass("blinkOff") + $("#scan").removeClass("blinkOn") + Scanner.scanBlinkState = false + } + else + { + $("#scan").addClass("blinkOn") + $("#scan").removeClass("blinkOff") + Scanner.scanBlinkState = true + } + Scanner.scanBlinkTimeout = setTimeout(Scanner.scanBlink, Scanner.scanBlinkRate) + }, + scanGo: function () + { + Player.playNext() + Scanner.scanTimeout = setTimeout(Scanner.scanGo, Scanner.scanRate) + }, + scan: function () + { + if (Scanner.scanMode) + { + d.warn("SCANNER ON") + Scanner.scanMode = false + clearTimeout(Scanner.scanTimeout) + clearTimeout(Scanner.scanBlinkTimeout) + $("#scan").removeClass("blinkOn") + $("#scan").removeClass("blinkOff") + } + else + { + d.warn("SCANNER OFF") + Scanner.scanMode = true + Scanner.scanBlink() + Scanner.scanGo() + } + } + } +var Vimeo = + { + type: "vimeo", + loaded: false, + pending: false, + playing: false, + player: null, + playerId: null, + timeout: null, + video: null, + width: "100%", + height: "100%", + volume: 1,//from 100...some sort of error + play: function (video) + { + d.warn("VIMEO PLAY "+video.key) + if (video.error) + return Vimeo.error() + if (Vimeo.playing) + Vimeo.stop() + $("#screen").html("
    ") + Vimeo.video = video + Vimeo.playing = true + var params = { allowScriptAccess: "always", wmode: "opaque", } + var atts = { id: "vimeo" } + var flashvars = { api: 1 } + swfobject.embedSWF("http://vimeo.com/moogaloop.swf?clip_id="+video.name+"&server=vimeo.com&color=00adef&api=1", + "vimeo", "100%","100%", "8", null, flashvars, params, atts) + // $("#vimeo").html('') + }, + toggle: function () + { + if (Vimeo.player.api_paused()) + return Vimeo.resume() + else + return Vimeo.pause() + }, + error: function (s) + { + Player.error("VIMEO "+s) + Vimeo.finish() + }, + setVolume: function (vol) + { + Vimeo.volume = vol + Vimeo.player.api_setVolume(vol) + }, + pause: function () + { + d.warn("PAUSED PLAYBACK") + Vimeo.playing = false + Vimeo.player.api_pause() + return true + }, + resume: function () + { + d.warn("RESUME PLAYBACK") + Vimeo.playing = true + Vimeo.player.api_play() + return false + }, + stop: function () + { + d.warn("VIMEO STOP") + Vimeo.playing = false + }, + finish: function () + { + d.warn("VIMEO FINISH") + Vimeo.playing = false + swfobject.removeSWF("vimeo") + Player.finish() + }, + load: function () + { + d.warn("LOADING VIMEO") + Vimeo.loaded = true + }, + unload: function () + { + d.warn("VIMEO UNLOADED") + swfobject.removeSWF("vimeo") + Vimeo.loaded = false + }, + init: function () + { + d.warn("VIMEO INIT") + } + } +function vimeo_player_loaded() + { + d.warn("VIMEO LOADED") + Vimeo.player = document.getElementById('vimeo') + Vimeo.player.api_play() + // Vimeo.player.addEventListener("finish", "Vimeo.finish") + Vimeo.player.api_addEventListener("finish", "Vimeo.finish") + Vimeo.player.api_setVolume(Vimeo.volume) + } +Player.register(Vimeo) + +var Youtube = + { + type: "youtube", + loaded: false, + pending: false, + playing: false, + player: null, + playerId: null, + timeout: null, + video: null, + width: "100%", + height: "100%", + getYtid: function (url) + { + if (! url) return + var ytid = url.substr(url.indexOf("v=")+2,11) + if (ytid.indexOf("&") !== -1) + ytid = ytid.substr(0, ytid.indexOf("&")) + if (ytid.indexOf("#") !== -1) + ytid = ytid.substr(0, ytid.indexOf("#")) + return ytid + }, + play: function (video) + { + d.warn("YOUTUBE PLAY "+video.key) + if (video.error) + return Youtube.error() + if (Youtube.playing) + Youtube.stop() + Youtube.video = video + Youtube.playing = true + if (Youtube.ready) + { + d.warn("ORDERING VIDEO LOAD "+video.name) + Youtube.player.loadVideoById(video.name) + Youtube.pending = false + } + else + { + d.error("YOUTUBE PLAYER NOT READY") + Youtube.pending = true + } + }, + toggle: function () + { + if (Youtube.playing) + return Youtube.pause() + else + return Youtube.resume() + }, + error: function (s) + { + Player.error("YOUTUBE "+s) + $("li#queue_"+Youtube.video.idx+" span.title").html("This video cannot be embedded") + setTimeout(Youtube.finish, 1000) + }, + onStateChange: function (state) + { + Youtube.state = state + if (state === -1) + { + d.warn("YOUTUBE: UNSTARTED") + Youtube.playing = false + } + else if (state === 0) + { + d.warn("YOUTUBE: ENDED") + Youtube.playing = false + return Youtube.finish() + } + else if (state === 1) + { + d.warn("YOUTUBE: PLAYING") + Youtube.playing = true + if (! Youtube.loaded) + return Youtube.unload() + } + else if (state === 2) + { + d.warn("YOUTUBE: PAUSED") + Youtube.playing = false + } + else if (state === 3) + { + d.warn("YOUTUBE: BUFFERING") + } + else if (state === 5) + { + d.warn("YOUTUBE: CUED") + } + else + { + d.error("YOUTUBE: UNKNOWN") + } + }, + onError: function (error) + { + var errorStr = 'UNKNOWN' + if (error === 2) + errorStr = "INVALID PARAMETER" + if (error === 100) + errorStr = "NOT FOUND" + if (error === 101 || error === 150) + errorStr = "EMBED FORBIDDEN" + Youtube.error(errorStr) + }, + setVolume: function (vol) + { + Youtube.player.setVolume(vol) + }, + pause: function () + { + d.warn("PAUSED PLAYBACK") + Youtube.playing = false + Youtube.player.pauseVideo() + return true + }, + resume: function () + { + d.warn("RESUME PLAYBACK") + Youtube.playing = true + Youtube.player.playVideo() + return false + }, + stop: function () + { + d.warn("YOUTUBE STOP") + Youtube.player.stopVideo() + Youtube.playing = false + }, + finish: function () + { + d.warn("YOUTUBE FINISH") + Youtube.playing = false + Player.finish() + }, + load: function () + { + d.warn("LOADING YOUTUBE") + $("#ytscreen").css("z-index", 19) + Youtube.loaded = true + }, + unload: function () + { + d.warn("YOUTUBE UNLOADED") + $("#ytscreen").css("z-index", -3) + if (Youtube.player) + Youtube.player.stopVideo() + Youtube.playing = false + Youtube.loaded = false + Youtube.pending = false + }, + init: function () + { + d.warn("YOUTUBE INIT") + var params = { allowScriptAccess: "always", wmode: "opaque" } + var atts = { id: "ytscreen" } + swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&version=3&playerapiid=ytscreen", + "ytscreen", Player.width, Player.height, "8", null, null, params, atts) + } + } +function onYouTubePlayerReady (playerId) + { + d.warn("YOUTUBE READY") + Youtube.player = document.getElementById(playerId) + Youtube.playerId = playerId + Youtube.player.addEventListener("onStateChange", "Youtube.onStateChange") + Youtube.player.addEventListener("onError", "Youtube.onError") + Youtube.ready = true + if (! Youtube.loaded) + return Youtube.unload() + if (Youtube.pending) + Youtube.player.loadVideoById(Youtube.video.name) + Youtube.pending = false + } +Player.register(Youtube) + +var Soundcloud = + { + type: "soundcloud", + loaded: false, + pending: false, + playing: false, + player: null, + playerId: null, + timeout: null, + video: null, + width: "100%", + height: "100%", + volume: 100, + play: function (video) + { + d.warn("SOUNDCLOUD PLAY "+video.key) + if (video.error) + return Soundcloud.error() + if (Soundcloud.playing) + Soundcloud.stop() + $("#screen").html("
    ") + Soundcloud.video = video + Soundcloud.playing = false + + if (Soundcloud.player) + { + Soundcloud.player = null + swfobject.removeSWF("soundcloud") + } + + var flashvars = { enable_api: true, object_id: "soundcloud", url: video.src, theme_color: "#657b83", } + var attributes = { id: "soundcloud", name: "soundcloud" } + var params = { allowscriptaccess: "always", wmode: "opaque", } + + swfobject.embedSWF("http://player.soundcloud.com/player.swf", "soundcloud", "81", "81", "9.0.0", + "expressInstall.swf", flashvars, params, attributes, Soundcloud.playerDidLoad); + }, + playerDidLoad: function (e) + { + if (e.success === false) + return Soundcloud.error("failed to load") + d.warn("LOADED") + Soundcloud.player = swfobject.getObjectById('soundcloud') + $("#ytscreen").css("z-index", -2) + // instead of raising events, the soundcloud swf calls it's js api directly + window.soundcloud = { onPlayerReady: Soundcloud.ready, onMediaEnd: Soundcloud.finish } + }, + ready: function () + { + d.warn("READY") + Soundcloud.playing = true + Soundcloud.player = swfobject.getObjectById('soundcloud') + if (Soundcloud.player) + { + Soundcloud.player.api_play() + Soundcloud.player.api_setVolume(Soundcloud.volume) + } + Soundcloud.report() + }, + report: function () + { + if (! Soundcloud.player) + return Soundcloud.error() + var track = Soundcloud.player.api_getCurrentTrack() + $("#video-title").html(track.title) + if (track.downloadable && track.download_url !== "undefined" && track.download_url !== undefined) + $("#soundcloud-dl").html('download') + else + $("#soundcloud-dl").html("") + var art = '' + if (track.artwork) + art = track.artwork.split("?")[0].replace('large','original') + else if (track.user && track.user.avatarUrl) + art = track.user.avatarUrl.split("?")[0].replace('large','crop') + if (art.length) + { + $("#soundcloud-img").html("") + $("#sc-art").bind("error", function(){$("#sc-art").hide()}) + } + return + d.warn("____________") + for (i in track) + d.warn(""+i+": "+track[i]) + d.warn("____________") + var user = track.user + for (i in user) + d.warn(""+i+": "+user[i]) + d.warn("____________") + }, + toggle: function () + { + d.warn("TOGGLE PLAYBACK") + if (Soundcloud.player) + return Soundcloud.player.api_toggle() + return false + }, + error: function (s) + { + Player.error("SOUNDCLOUD "+s) + Soundcloud.finish() + }, + setVolume: function (vol) + { + Soundcloud.volume = vol + if (Soundcloud.player) + Soundcloud.player.api_setVolume(vol) + }, + pause: function () + { + d.warn("PAUSED PLAYBACK") + Soundcloud.playing = false + if (Soundcloud.player) + Soundcloud.player.api_pause() + return true + }, + resume: function () + { + d.warn("RESUME PLAYBACK") + Soundcloud.playing = true + if (Soundcloud.player) + Soundcloud.player.api_play() + return false + }, + stop: function () + { + d.warn("SOUNDCLOUD STOP") + if (Soundcloud.player) + Soundcloud.player.api_stop() + Soundcloud.playing = false + }, + finish: function () + { + d.warn("SOUNDCLOUD FINISH") + Soundcloud.playing = false + swfobject.removeSWF("soundcloud") + Player.finish() + }, + load: function () + { + d.warn("LOADING SOUNDCLOUD") + Soundcloud.loaded = true + }, + unload: function () + { + d.warn("SOUNDCLOUD UNLOADED") + swfobject.removeSWF("soundcloud") + Soundcloud.loaded = false + Soundcloud.playing = false + }, + init: function () + { + d.warn("SOUNDCLOUD INIT") + window.soundcloud = Soundcloud + } + } +Player.register(Soundcloud) + +var Audio = + { + type: "audio", + loaded: false, + pending: false, + playing: false, + paused: false, + player: null, + playerId: null, + timeout: null, + video: null, + width: "100%", + height: "100%", + volume: 100, + play: function (video) + { + d.warn("AUDIO PLAY "+video.key) + if (video.error) + return Audio.error() + if (Audio.playing) + Audio.stop() + $("#screen").html("
    ") + $("#ytscreen").css("z-index", -2) + Audio.video = video + Audio.playing = false + + var partz = video.src.split(" ") + var img = partz[0] + var url = partz[1] + var title = partz.slice(2).join(" ") + + if (Audio.player) + { + Audio.player.stop() + Audio.player.destruct() + } + Audio.player = soundManager.createSound + ({ + id: "player-"+video.id, + url: url, + volume: Audio.volume, + onfinish: Audio.finish, + onerror: Audio.error, + onload: Audio.onload, + }) + if (! Audio.player) + return Audio.error("no player") + Audio.player.play() + + $("#video-title").html(title) + $("#video-link").attr("href", url) + $("#audio-dl").html('download') + $("#audio-img").html("") + $("#audio-art").bind("error", function(){$("#audio-art").hide()}) + }, + onload: function (success) + { + if (! success) + return Audio.error("failed to load") + }, + toggle: function () + { + d.warn("TOGGLE PLAYBACK") + if (Audio.paused) + return Audio.resume() + else + return Audio.pause() + }, + error: function (s) + { + if (! s) + s = "unspecified error" + Player.error("AUDIO "+s) + Audio.finish() + }, + setVolume: function (vol) + { + Audio.volume = vol + if (Audio.player) + Audio.player.setVolume(vol) + }, + pause: function () + { + d.warn("PAUSED PLAYBACK") + Audio.paused = true + Audio.playing = false + if (Audio.player) + Audio.player.pause() + return true + }, + resume: function () + { + d.warn("RESUME PLAYBACK") + Audio.paused = false + Audio.playing = true + if (Audio.player) + Audio.player.resume() + return false + }, + stop: function () + { + d.warn("AUDIO STOP") + if (Audio.player) + Audio.player.stop() + Audio.playing = false + }, + finish: function () + { + d.warn("AUDIO FINISH") + Audio.playing = false + if (Audio.player) + { + Audio.player.stop() + Audio.player.destruct() + } + Player.finish() + }, + load: function () + { + d.warn("LOADING AUDIO") + Audio.loaded = true + }, + unload: function () + { + d.warn("AUDIO UNLOADED") + if (Audio.player) + { + Audio.player.stop() + Audio.player.destruct() + } + Audio.loaded = false + Audio.playing = false + }, + init: function () + { + d.warn("AUDIO INIT") + } + } +Player.register(Audio) +soundManager.url = '/swf/' +soundManager.useFlashBlock = false +soundManager.debugMode = false + +function Toggler (div, on, off) + { + var state = false + function activate () + { + $(div).addClass("on").html("ON") + on () + } + function deactivate () + { + $(div).removeClass("on").html("off") + off () + } + function toggle () + { + state = ! state + if (state) + activate () + else + deactivate () + } + function destroy () + { + $(div).unbind("click") + } + $(div).bind("click", toggle) + } + +var Tokbox = + { + height: 150, + width: null, + token_url: "/cgi-bin/tokbox_room.cgi", + sessionid: null, + token: null, + togglers: [], + + session: null, + publisher: null, + subscribers: [], + + subscribeToStreams: function (streams) + { + for (var i = 0; i < streams.length; i++) + { + var stream = streams[i] + if (stream.connection.connectionId != Tokbox.session.connection.connectionId) + { + var parentDiv = document.getElementById("tokbox-subscribers") + var stubDiv = document.createElement("div") + stubDiv.id = "opentok_subscriber_"+stream.connection.connectionId + parentDiv.appendChild(stubDiv) + + var subscriberProps = {width: Tokbox.width, height: Tokbox.height, audioEnabled: true} + var subscriber = Tokbox.session.subscribe(stream, stubDiv.id, subscriberProps) + Tokbox.subscribers.push(subscriber) + } + } + }, + sessionConnectedHandler: function (event) + { + Tokbox.height = $("#tokbox-embed").height() + Tokbox.width = Math.floor( Tokbox.height / 1.618 ) + $("#tokbox-loading").hide() + + Tokbox.subscribeToStreams(event.streams) + + var parentDiv = document.getElementById("tokbox-publisher") + var stubDiv = document.createElement("div") + stubDiv.id = "opentok_publisher" + parentDiv.appendChild(stubDiv) + + var publisherProps = {width: Tokbox.width, height: Tokbox.height, microphoneEnabled: false} + Tokbox.publisher = Tokbox.session.publish(stubDiv.id, publisherProps) + $("#tokbox-loading").hide() + $("#tokbox-settings").fadeIn(1000) + }, + streamCreatedHandler: function (event) + { + Tokbox.subscribeToStreams(event.streams) + }, + tokenCallback: function (raw) + { + var lines = API.parse("/tokbox", raw) + if (! lines) + return d.error("API ERROR") + for (i in lines) + { + pair = lines[i].split("\t") + if (pair[0] === "ERROR") + return d.error(pair[1]) + else if (pair[0] === "SESSION") + Tokbox.sessionid = d.trim(pair[1]) + else if (pair[0] === "TOKEN") + Tokbox.token = d.trim(pair[1]) + } + if (Tokbox.sessionid && Tokbox.token) + Tokbox.activate() + }, + activate: function () + { + Tokbox.session = TB.initSession(Tokbox.sessionid) + Tokbox.session.addEventListener("sessionConnected", Tokbox.sessionConnectedHandler) + Tokbox.session.addEventListener("streamCreated", Tokbox.streamCreatedHandler) + Tokbox.session.connect(626221, Tokbox.token) + }, + microphoneOn: function () + { + Tokbox.publisher.publishAudio(true) + d.warn(">>>> MICROPHONE ON") + }, + microphoneOff: function () + { + Tokbox.publisher.publishAudio(false) + d.warn(">>>> MICROPHONE OFF") + }, + mute: function () + { + for (var i = 0; i < Tokbox.subscribers.length; i++) + { + try + { + Tokbox.subscribers[i].subscribeToAudio(false) + d.warn("MUTED "+i) + } + catch (err) + { + d.warn("UNMUTE ERROR "+i+" "+ err.description) + } + } + d.warn(">>>> MUTE ALL") + }, + unmute: function () + { + for (var i = 0; i < Tokbox.subscribers.length; i++) + { + try + { + Tokbox.subscribers[i].subscribeToAudio(true) + d.warn("UNMUTED "+i) + } + catch (err) + { + d.warn("UNMUTE ERROR "+i+" "+ err.description) + } + } + d.warn(">>>> UNMUTE ALL") + }, + load: function () + { + $("#tokbox-embed").show() + $("#tokbox-settings").hide() + $("#tokbox-loading").show() + $(window).trigger("resize") + $.get(Tokbox.token_url, {room:Room.name}).success(Tokbox.tokenCallback) + Tokbox.togglers.push( new Toggler ("#tokbox-microphone", Tokbox.microphoneOn, Tokbox.microphoneOff) ) + Tokbox.togglers.push( new Toggler ("#tokbox-mute-all", Tokbox.mute, Tokbox.unmute) ) + }, + unload: function () + { + $("#tokbox-embed").hide() + $(window).trigger("resize") + if (Tokbox.session) + { + if (Tokbox.publisher) + Tokbox.session.unpublish(Tokbox.publisher) + Tokbox.session.disconnect() + } + Tokbox.publisher = null + Tokbox.session = null + $("#tokbox-publisher").html("") + $("#tokbox-subscriber").html("") + for (t in Tokbox.togglers) + Tokbox.togglers[i].destroy () + Tokbox.togglers = [] + }, + init: function () + { + } + } +var VIMEOregexp = /^(\bhttps?:\/\/)(www.)?vimeo.com\/([0-9]+).*$/i +var Chat = + { + timer: null, + oldChat: {}, + oldVideo: {}, + lastPoll: 0, + delay: 1000, + delayShort: 1000, + delayLong: 5000, + messages: {}, + callback: false, + parse: function (row) + { + var s = '' + row[2] + " " + s += Chat.parseWords(row[3]) + s += "
    " + return s + }, + parseWords: function (raw) + { + if (! raw) + return "" + var words = raw.split(" ") + var s = "" + for (i in words) + { + var word = words[i] + if (word.indexOf("http") !== -1) + { + if (word.indexOf("youtube.com/watch?") !== -1) + { + var ytid = "youtube_"+Youtube.getYtid(word) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("youtube.com/v/") !== -1) + { + var index = word.indexOf("/v/") + var ytid = "youtube_"+word.substr(index+3,11) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("youtu.be") !== -1) + { + var ytid = "youtube_"+word.substr(16,11) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + // http://www.youtube.com/user/ahchachachacha#p/f/28/1GSBekxLR1E + else if (word.indexOf("youtube.com/user") !== -1) + { + var ytid = "youtube_"+word.substr(-11) + var txt + if (ytid in Player.videos) + txt = Player.videos[ytid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("vimeo.com") !== -1) + { + var vimeoid = word.replace(VIMEOregexp, "vimeo_$3") + if (vimeoid in Player.videos) + txt = Player.videos[vimeoid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf("soundcloud.com") !== -1) + { + var scid = "soundcloud_" + $.md5(word) + if (scid in Player.videos) + txt = Player.videos[scid].title + else + txt = word + s += ''+txt+' ' + } + else if (word.indexOf(".jpeg") !== -1 || + word.indexOf(".JPG") !== -1 || + word.indexOf(".GIF") !== -1 || + word.indexOf(".PNG") !== -1 || + word.indexOf(".JPEG") !== -1 || + word.indexOf(".jpg") !== -1 || + word.indexOf(".gif") !== -1 || + word.indexOf(".png") !== -1) + { + s += '' + } + else if (word.indexOf("scannerjammer.com/profile") !== -1) + { + var username = word.substr( word.indexOf("profile")+8 ).replace("/","") + s += '@'+username+'' + } + // else if (word.indexOf("@") === 0 && word.length > 2) + // { + // } + else + { + var poffset = word.indexOf('//') + var linktext = word.substr(poffset+2, word.indexOf('/', poffset+2) - 2).replace("www.","").replace(/\/+$/,"") + s += ''+linktext+' ' + } + } + else if (word.indexOf(".com") !== -1 || + word.indexOf(".net") !== -1 || + word.indexOf(".org") !== -1 || + word.indexOf(".us") !== -1 || + word.indexOf(".nu") !== -1 || + word.indexOf(".uk") !== -1 || + word.indexOf(".fr") !== -1 || + word.indexOf(".de") !== -1 || + word.indexOf(".fm") !== -1) + { + var txt = word.replace("www.","") + s += ''+txt+' ' + } + else + s += word + " " + } + return s + }, + store: function (lines) + { + var newVideos = [] + var newChat = [] + var postponeScroll = false + for (i in lines) + { + if (! lines[i]) + continue + row = lines[i].split("\t") + if (row[0] === 'VIDEO') + { + row.shift() + if (row[0] in Chat.oldVideo) + continue + Chat.oldVideo[row[0]] = row + Playlist.enqueueOldVideoFormat([row]) + } + else if (row[0] === 'ROOM') + { + Room.updateSetting(row[1],row[2]) + } + else if (row[0] === 'LIKE') + { + username = row[1] + Like.enqueue(username) + } + else if (row[0] === 'CAM') + { + VideoChat.updateCount(row[1]) + } + else + { + // 0 id 1 date 2 user 3 msg + if (row[0] in Chat.oldChat) + continue + Chat.oldChat[row[0]] = row + var c = Chat.parse(row) + if (c.indexOf("> POSTPONING") + } + if (row[2] === Auth.username && $.md5(row[3]) in Chat.messages) + continue + newChat.push(c) + } + } + if (newChat.length) + { + $("#chat").append(newChat.join("")) + if (postponeScroll) + setTimeout('d.scrollToBottom("#chat")', 2000) + else + d.scrollToBottom("#chat") + } + }, + say: function () + { + d.act("+ sent message") + var msg = d.sanitize( $("#chat-message").val() ) + $("#chat-message").val("") + if (! msg) return + if (msg === "debug=1") { $("#msg").show(); d.scrollToBottom("#msg"); return } + if (msg === "debug=0") { $("#msg").hide(); return } + if (msg === "poll=0") { d.error("+ DISABLED POLLING"); clearTimeout(Chat.timer); return} + var hash = $.md5(msg) + Chat.messages[hash] = true + var newrow = [0, 0, Auth.username, msg] + var newdiv = Chat.parse(newrow) + $("#chat").append(newdiv) + // if (Chat.callback) + // Chat.callback(1) + if (newdiv.indexOf(""+names[i]+"" + } + $("#lastlog").html(s) + $("#lastlogbg").css("height", $("#lastlogbox").height()) + } + } +var Menu = {} +var Room = + { + loaded: false, + ops: {}, + settings: {}, + settingsButtonBound: false, + updateSettingMethods: + { + bg: function (url) + { + if (url === Room.settings.bg) + return + d.warn("clearing bg") + $("#bg").fadeOut(500, function () + { + if (url) + { + d.warn("updating bg to "+url) + $("#bg img").attr('src', url).bind("load", function(){$("#bg").fadeIn(2000);d.warn("bg updated")}) + } + }) + }, + title: function (s) + { + if (s.length === 0) + s = " " + $("#heading").html( s.replace(">",">").replace("<","<") ) + }, + topic: function (s) + { + if (s.length === 0) + s = " " + $("#topic").html( d.linkify(s.replace(">",">").replace("<","<")) ) + }, + phase: function (s) + { + if (s === 'light') + { + // turn on lookit stylesheet + } + else + { + // turn off lookit stylesheet + } + }, + bgcolor: function (s) + { + if (s) + $('body').css("background-color", s) + } + }, + updateSetting: function (k, v) + { + d.warn( "update setting: "+k ) + $("room-"+k).val(v) + if (k in Room.updateSettingMethods) + var f = Room.updateSettingMethods[k](v) + Room.settings[k] = v + }, + settingsOpen: function () + { + d.warn("ROOM SETTINGS LOAD") + $("#room-id").html(Room.id) + $("#room-name").html(Room.name) + $("#room-path").html(Room.path) + $("#room-title").val(Room.settings['title']) + $("#room-topic").val(Room.settings['topic']) + $("#room-phase").val(Room.settings['phase']) + $("#room-bg").val(Room.settings['bg']) + $("#room-bgcolor").val(Room.settings['bgcolor']) + $("#room-plant").val(Room.settings['plant']) + $("#room-flower").val(Room.settings['flower']) + $("#room-updater").html(Room.settings['updater']) + if (! Room.settingsButtonBound) + { + Room.settingsButtonBound = true + $("#room-settings-save").bind("click", Room.settingsSaveClick) + } + $("#room-settings-unload").bind("click", Room.settingsClose) + if (Auth.access > 0) + $("#room-mod-tag").html("Moderate room") + else + $("#room-mod-tag").html("") + d.warn("LOADED") + }, + settingsClose: function () + { + d.warn("ROOM SETTINGS UNLOAD") + Room.settingsButtonBound = false + $("#room-settings-save").unbind("click") + }, + settingsKeys: ["title","topic","bg"], + last_bg: "", + settingsSaveClick: function () + { + $("#room-settings-save").unbind("click") + var set = [] + if (Room.ops !== false) + { + if (Auth.access < 1 && !(Auth.username in Room.ops)) + { + Menu.settings.close() + return + } + } + Room.last_bg = Room.settingsKeys['bg'] + for (i in Room.settingsKeys) + { + var k = Room.settingsKeys[i] + var v = d.sanitize( $("#room-"+k).val() ) + Room.updateSetting(k, v) + set.push(k+"\t"+v) + } + set.push("updater\t"+Auth.username) + var s = set.join("\n") + $.post(API.URL.room.settings, {room: Room.name, session: Auth.session, settings: s}, Room.settingsCallback) + Menu.settings.close() + }, + settingsCallback: function (raw) + { + var lines = API.parse("/room/say", raw) + if (! lines) + return + if (lines[0].indexOf("OK") !== -1) + { + d.warn("settings updated: "+lines.shift()) + $("#room-updater").hide().html("you!").fadeIn(500) + } + else if (lines[0].indexOf("BG_SIZE") !== -1) + { + var partz = lines[0].split("\t") + setTimeout('Room.updateSettingMethods.bg(Room.last_bg)', 2000) + alert("Background too large!\n\nYour image: "+ partz[2]+" bytes\nMax size: " + partz[3] + " bytes") + } + else if (lines[0].indexOf("BG_DATA") !== -1) + { + setTimeout('Room.updateSettingMethods.bg(Room.last_bg)', 2000) + alert("Unable to retrieve background image") + } + $("#room-settings-save").bind("click", Room.settingsSaveClick) + }, + connect: function () + { + var videoKey = '' + var hash = document.location.hash + if (hash.indexOf("#") !== -1) + hash = hash.substr(1) + var partz = hash.split("&") + for (i in partz) + { + var pair = partz[i].split("=") + if (pair[0] === "v") + videoKey = pair[1] + } + d.warn("JOINING ROOM "+Room.name) + $.ajax({ + type: 'POST', + url: API.URL.room.join, + data: {'room':Room.name,'session':Auth.session,'enqueue':videoKey}, + timeout: 2000, + }).success(Room.joinCallback).error(Room.joinErrorCallback) + }, + joinErrorCallback: function (jqXHR, textStatus, errorThrown) + { + d.warn("JOIN ERROR") + if (Room.loaded) + return + if (textStatus === "timeout") + Room.connect() + else + Auth.load() + }, + joinCallback: function (raw) + { + var lines = API.parse("/room/join", raw) + if (!lines){ + d.error("UNABLE TO LOAD ROOM"); + setTimeout(Room.load, 500); + return; + } + var u = lines.shift().split("\t") + + if (u[0] === '0') + return Auth.load() + d.warn("JOINED ROOM") + Auth.unload() + Auth.userid = u[0] + Auth.username = u[1] + Auth.access = u[2] + d.joy("logged in as "+Auth.username) + + Lastlog.update(lines.shift()) + Chat.store(lines) + + d.warn("__________") + d.warn("__________") + d.warn("__________") + Room.load() + d.warn("__________") + d.warn("__________") + d.warn("__________") + }, + load: function () + { + d.warn("LOAD ROOM") + $("#loading").fadeOut(500, function() + { + Background.load() + Player.init() + VideoChat.init() + Chat.poll() + }) + $("#loading").fadeOut(1500, Room.loadFinish) + }, + loadFinish: function () + { + setTimeout("d.scrollToBottom('#chat')", 500) + $("#logo").show() + $("#logobg,#logobar").show() + $("#likebutton").css("display", "inline-block") + + $("#player").show() + $("#playlist").show() + $("#playlistbg").show() + + $("#form").show() + $("#formbg").show() + $("#chat").fadeIn(200) + d.scrollToBottom("#chat") + $("#chatbg").show() + $("#lastlogbox").show() + $("#lastlogbg").show() + + Keyboard.enter = Chat.say + $("#chat-message").bind("focus", Keyboard.focusTextarea) + $("#chat-message").bind("blur", Keyboard.blurTextarea) + $("#chat-message").focus() + Keyboard.focusTextarea() + $("#chat-send").bind("click", Chat.say) + $("#fullscreen").bind("click", Viewport.fullscreenOn) + $("#sitez").show() + $("#logout").click(Auth.logout) + if (Room.name === "feederbleeder") + { + $("#heading").css({ "color": "#ff3333" }) + // Viewport.fullscreenOn() + } + //else + Viewport.standardResize() + // $(".ytlink").live("click", Player.ytLinkClick, false) + + if (Auth.access > 0) + { + // var div = $("
    ").addClass("modhello").html("Congratulations new moderator! Click on the cube icon in the upper right corner and you will see the MODERATE ROOM link.").click(function(){$(this).fadeOut(1000)}) + // $("#chat").append(div) + } + // var div = $("
    ").addClass("modhello").html("Hey! You can now use the LEFT AND RIGHT ARROW KEYS to browse the playlist, and the L key to like a video!").click(function(){$(this).fadeOut(1000)}) + // $("#chat").append(div) + setTimeout(Player.start, 2000) + Room.loaded = true + document.cookie = "room="+Room.name+";path=/;domain=.scannerjammer.com;max-age=86400" + if (Room.loadCallback) + Room.loadCallback() + }, + loadCallback: false, + unload: function () + { + $("#logo,#logobg,#player,#playlist,#playlistbg,#form,#formbg,#chat,#chatbg,#lastlogbox,#lastlogbg,#sitez").hide() + Menu.close() + }, + init: function () + { + d.warn("INIT ROOM") + if (roomName !== undefined) + Room.name = roomName + else + Room.name = "main" + d.warn("room: "+Room.name) + // $("#chat").show() + } + } + +var Rooms = + { + loaded: false, + queue: [ + [0, "rooms", "/", "http://scannerjammer.com/bgz/gridzy9.jpg", "→ SEE ALL OPEN ROOMS"], + [1, "main", "/main", "http://scannerjammer.com/bgz/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif", "MAIN ROOM"], + [12, "FEEDERBLEEDER", "/feederbleeder", "http://scannerjammer.com/img/Tropic_Of_Cancer__The_Sorrow_Of_Two_Blooms_1308602037.jpg", "FEEDERBLEEDER"], + [2, "avatar", "/avatar", "http://scannerjammer.com/img/avatar2.png", "avatar"], + [3, "glitter", "/glitter", "http://scannerjammer.com/bgz/argus.gif", "glitter"], + [10, 'jono', '/jonomilo', 'http://scannerjammer.com/bgz/whitesquare.gif', 'jònò mì lò'], + //[11, 'SJD', 'http://lolz.biz/sjd', 'http://scannerjammer.com/img/idgiguy2.png', 'SJD'], + [4, "waterfall", "/waterfall", "http://i.imgur.com/QEZRF.gif", "waterfall"], + ], + list: function () + { + if (Rooms.loaded) + return + Rooms.listDisplay(Rooms.queue) + // $.post(API.URL.room.list, {session:Auth.session}).success(Rooms.listCallback).error(Rooms.listError) + }, + listCallback: function (raw) + { + // parse API + Rooms.listDisplay(lines) + }, + listError: function () + { + Rooms.listDisplay(Rooms.queue) + }, + listDisplay: function (rooms) + { + $("#rooms-loading").hide() + var divz = [] + for (i in rooms) + { + var r = rooms[i] + var s = "
  • "+r[4] + if (r[1] === Room.name) + s += " < YOU ARE HERE" + s += "
  • " + divz.push(s) + } + $("#rooms-list").html(divz.join('')) + Rooms.loaded = true + } + } +var About = + { + loaded: false, + init: function () + { + $("#your-profile").attr('href', 'http://scannerjammer.com/profile/'+Auth.username) + About.loaded = true + } + } +function menu (key, loadCallback) + { + d.warn("MENU INIT "+key) + this.appear = function () + { + if (! Menu.isOpen) + { + $("#"+key+"-container").show() + Menu.current = key + loadCallback() + $("#chat-message").blur() + Keyboard.blurTextarea() + } + } + this.disappear = function () + { + if (! Menu.isOpen) + $("#"+key+"-container").hide() + } + this.close = function () + { + $("#"+key+"-container").hide() + $(".opened").removeClass("opened") + Menu.isOpen = false + } + this.click = function () + { + for (i in Menu.keys) + { + $("#"+Menu.keys[i]+"-container").hide() + } + $("#"+key+"-container").show() + if (Menu.current !== key) + loadCallback() + Menu.current = key + $(".opened").removeClass("opened") + $("#"+key+"-hook").addClass("opened") + Menu.isOpen = true + } + $("#"+key+"-hook").hover(this.appear, this.disappear).click(this.click) + $("#"+key+"-close").click(this.close) + $("#"+key+"-container").hover(this.click, this.close) + } +var VideoChat = + { + isOpen: false, + badgePositioned: false, + suppressBadge: 0, + updateCount: function (count) + { + /* + if (VideoChat.suppressBadge > 0) + { + VideoChat.suppressBadge -= 1 + return + } + */ + if (parseInt(count) > 0) + { + if (! VideoChat.badgePositioned) + { + VideoChat.badgePositioned = true + $("#videochat-badge").css({ + right: 5, + top: 5, + }).show() + } + $("#videochat-badge").html(count).show() + } + else + { + $("#videochat-badge").hide() + } + }, + open: function () + { + // $("#tokbox-embed").html('') + // $("#tokbox-embed").show() + // $(window).trigger('resize') + VideoChat.isOpen = true + // Webcam.load() + Tokbox.load() + }, + close: function () + { + // $("#tokbox-embed").hide().html("") + // $("#tokbox-close").hide() + // $(window).trigger('resize') + VideoChat.isOpen = false + VideoChat.suppressBadge = 20 + // Webcam.unload() + Tokbox.unload() + }, + toggle: function () + { + if (VideoChat.isOpen) + VideoChat.close() + else + VideoChat.open() + }, + init: function () + { + // Webcam.init() + $("#tokbox").show() + $("#videochat-toggle").click(VideoChat.toggle) + } + } +var Menu = + { + isOpen: false, + current: false, + keys: ["settings","about","rooms"], + close: function () + { + if (Menu.current) + Menu[Menu.current].close() + }, + settings: new menu("settings", Room.settingsOpen), + rooms: new menu("rooms", Rooms.list), + about: new menu("about", About.init), + } +var Keyboard = + { + enter: false, + enteredText: false, + altMode: false, + focusTextarea: function () + { + // $("#chat").append("TEXTAREA FOCUS") + $(window).unbind("keydown") + $("#chat-message").unbind("keydown").bind("keydown", Keyboard.textareaMap) + $("#chat-message").unbind("focus").focus().bind("focus", Keyboard.focusTextarea) + Search.close () + if ($("#chat-message").val().length === 0) + Keyboard.enteredText = false + }, + blurTextarea: function () + { + // $("#chat").append("TEXTAREA BLUR") + $(window).unbind("keydown") + if (Viewport.fullscreenMode && Viewport.fullscreenInterface) + $(window).bind("keydown", Keyboard.fullscreenInterfaceMap) + else if (Viewport.fullscreenMode) + $(window).bind("keydown", Keyboard.fullscreenMap) + else + $(window).bind("keydown", Keyboard.standardMap) + $("#chat-message").unbind("keydown") + }, + textareaMap: function (event) + { + var kc = event.keyCode + if (kc === 8) + { + var v = $("#chat-message").val() + if (v.length < 2) + Keyboard.enteredText = false + return true + } + if (kc === 13) + { + Keyboard.enteredText = false + if (Keyboard.enter) + Keyboard.enter() + if (Chat.callback) + { + Chat.callback(1) + } + return false + } + if (kc === 27) + { + Menu.close() + if (Viewport.fullscreenMode && Viewport.fullscreenInterface) + Viewport.fullscreenHideInterface() + else if (Viewport.fullscreenMode) + Viewport.fullscreenOff() + else + Viewport.fullscreenOn() + return false + } + if (! Keyboard.enteredText) + { + if (kc === 37) + { + Player.playPrev() + return + } + else if (kc === 39) + { + Player.playNext() + return + } + } + if (kc === 33) + return d.pageUp("#chat") + if (kc === 34) + return d.pageDown("#chat") + Keyboard.enteredText = true + return true + }, + standardMap: function (event) + { + kc = event.keyCode + if (kc === 91) + { + Keyboard.altMode = true + return true + } + else if (kc === 27) // && Room.loaded) + { + Menu.close() + Viewport.fullscreenOn() + return false + } + else if (! Menu.isOpen) + { + if (kc === 37 || kc === 177) + Player.playPrev() + else if (kc === 39 || kc === 176) + Player.playNext() + else if (kc === 32 || kc === 179) + Player.pause() + else if (! Keyboard.altMode && kc === 76) + Player.likeClick() + } + Keyboard.altMode = false + return true + }, + fullscreenInterfaceMap: function (event) + { + kc = event.keyCode + if (kc === 27) + Viewport.fullscreenHideInterface() + if (kc === 33) + d.pageUp("#chat") + if (kc === 34) + d.pageDown("#chat") + if (kc === 32 || kc === 179) + Player.pause() + if (kc === 37 || kc === 177) + Player.playPrev() + else if (kc === 39 || kc === 176) + Player.playNext() + if (! Keyboard.altMode && kc === 76) + Player.likeClick() + return false + }, + fullscreenMap: function (event) + { + kc = event.keyCode + if (kc === 27) + Viewport.fullscreenOff() + if (kc === 37 || kc === 177) + Player.playPrev() + if (kc === 39 || kc === 176) + Player.playNext() + if (kc === 32 || kc === 179) + Player.pause() + if (kc === 76) + Player.likeClick() + return false + } + } +var Viewport = + { + focused: true, + fullscreenMode: false, + fullscreenInterface: false, + fullscreenFocusTimer: false, + fullscreenOn: function () + { + var msg = $("#chat-message").val() + $(window).unbind("resize") + $(window).bind("resize", Viewport.fullscreenResize) + $("#chat").unbind("mouseover").unbind("mouseout") + $("#chat-message").focus() + Keyboard.focusTextarea() + $("#chat,#playlist").addClass("fullscreen") + $("#bg,#chatbg,#playlistbg,#playlist").hide() + $("#faqlink").hide() + $("#logobg").css("width",$("#logo").width()+60) + $("#like").show() + $("#controls").css("position", "fixed") + Menu.close () + Search.close () + $("#fullscreen").unbind("click") + $("#fullscreen").bind("click", Viewport.fullscreenOff) + $("#video-title").addClass("fullscreen") + Viewport.fullscreenInterface = true + Viewport.fullscreenMode = true + Viewport.fullscreenResize() + Viewport.chatMouseOut() + $("#chat-message").val(msg) + d.scrollToBottom("#chat") + }, + fullscreenOff: function () + { + $("#logobg").css("width","100%") + $(window).unbind("keydown") + // $(window).bind("keydown", Keyboard.standardMap) + $(window).unbind("resize") + $(window).bind("resize", Viewport.standardResize) + $("#chat").bind("mouseover", Viewport.chatMouseOver) + $("#chat").bind("mouseout", Viewport.chatMouseLaave) + $("#bg,#logo,#logobg,#form,#formbg,#chat,#chatbg,#playlist,#playlistbg,#lastlogbox,#lastlogbg,#sitez,#controls").show() + $("#controls").css("position", "absolute") + $("#controls").css("min-width", "auto").css('top','auto').css('bottom', 'auto').css('left','auto').css('right','auto') + $("#fullscreen").unbind("click") + $("#fullscreen").bind("click", Main.fullscreenOn) + $("#video-title").removeClass("fullscreen") + $("#chat,#playlist").removeClass("fullscreen") + $("#controls").css("padding", 0) + Viewport.standardResize() + setTimeout('d.scrollToBottom("#chat")', 500) + Keyboard.focusTextarea() + Viewport.fullscreenMode = false + clearInterval(Viewport.fullscreenFocusTimer) + Viewport.fullscreenFocusTimer = false + }, + fullscreenHideInterface: function () + { + Viewport.fullscreenInterface = false + Keyboard.blurTextarea() + $("#form,#formbg,#chat,#playlist,#lastlogbox,#lastlogbg,#sitez,#controls,#logo,#logobg").hide() + }, + fullscreenResize: function () + { + var w = $(window).width() + var h = $(window).height() + var fw = 4 * w / 7 - 40 + var ph = h / 3 - 30 + var ch = 2 * h / 3 + var fh = 50 + var clh = ch - fh - 50 + + var pw = w * 2 / 3 - 20 + + var chatwidth = (4*w)/5 - 20 + + var chatheight = h-fh-5 + var fbot = 20 + var chatbot = Viewport.chatBottom + + if (VideoChat.isOpen) + { + var vch = 150 + $("#tokbox-embed").css("width", fw-20) + chatheight -= vch + chatbot += vch + fbot += vch + } + + $("#player").css("top", -10).css("left", -10) + $("#screen,#ytscreen").css("width",w).css("height",h) + + $("#chat").css("left", 0).css("bottom", chatbot).css("width", chatwidth).css("height", chatheight) + d.scrollToBottom("#chat") + + var sendw = $("#chat-send").width() + var camw = $("#videochat-toggle").width() + $("#chat-message").css("width", fw-sendw-camw-50) + $("#form,#formbg").css("left", 0) + $("#form").css("bottom", fbot) + $("#form,#formbg").css("width", fw) + + var controlsw = $("#controls").width() + var controlsoffset = ( w - fw - controlsw ) / 2 + $("#controls").css({ "top": "auto", "bottom": fbot+2, "right": controlsoffset, "background": "black", "padding": 10, }) + + $("#lastlogbox,#lastlogbg").css("top", h/3).css("left", w*(7/8)-10) + $("#lastlogbg").css("height", $("#lastlogbox").height()) + }, + playerTop: 94, + chatWidth: 500, + chatBottom: 75, + formHeight: 50, + standardResize: function () + { + var w = $(window).width() + var h = $(window).height() + var ytw = 1 * w / 2 - 90 + if (ytw > 500) + ytw = 500 + var yth = ytw * 9/ 16 + + var fh = Viewport.formHeight + + var cw = w - ytw - 80 + var ch = 2 * h / 3 + var chatheight = h-fh-5 + Viewport.chatWidth = cw + + var pw = cw - 20 + var ph = h / 3 - 30 + + var fbot = 20 + var chatbot = Viewport.chatBottom + + var clw = cw*3/4 + var clh = ch - fh - 50 + + var llw = cw / 4 - 30 + var llh = ch - fh - 30 + + var sendw = $("#chat-send").width() + var camw = $("#videochat-toggle").width() + $("#chat-message").css("width", pw-sendw-camw-30) + + if (VideoChat.isOpen) + { + var vch = chatheight * 1 / 2 + if (vch < 280) + vch = 280 + $("#tokbox-embed").css({"width": cw+20, "height": vch}) + $("#tokbox-embedded").css({"height": vch}) + chatheight -= vch + chatbot += vch + fbot += vch + } + + var msgw = 0 + var buttonheight = $("#fullscreen").height() + + $("#bg img").css("width", w) + $("#bg img").css("height", h) + + $("#logo").css("left", 20) + + if (retrograde) + { + // PLAYER ON LEFT + $("#player").css("left", 20) + $("#player").css("top", Viewport.playerTop) + $("#player").css("height", yth+buttonheight+20) + $("#player,#projector,#screen,#ytscreen").width(ytw) + $("#projector,#screen,#ytscreen").height(yth) + Player.width = ytw + Player.height = yth + + $("#controls").css("top", yth+10+10) + var playerHeight = yth+buttonheight+Viewport.playerTop + 10 + + $("#playlist,#playlistbg").css("left", 20) + $("#playlist,#playlistbg").css("top", playerHeight+30) + $("#playlist,#playlistbg").css("width", ytw+19) + $("#playlist,#playlistbg,#queue").css("height", h-playerHeight-50) + + $("#chat,#chatbg").css("left", 60+ytw) + $("#chat,#chatbg").css("bottom", chatbot) + $("#chat,#chatbg").css("width", cw) + $("#chat,#chatbg").css("height", chatheight) + // $("#chat").css("overflow-y", "scroll") + // $("#chat").css("overflow-x", "hidden") + + $("#form,#formbg").css("left", 60+ytw) + $("#form,#formbg").css("bottom", fbot) + $("#form,#formbg").css("width", cw) + $("#form,#formbg").css("height", fh-15) + $("#formbg").css("opacity", 0.7) + + $("#lastlogbox,#lastlogbg").css("top", 90) + $("#lastlogbox,#lastlogbg").css("left", ytw+60+clw) + $("#lastlogbox,#lastlogbg").css("width", llw) + $("#lastlogbox").css("max-height", (h-fh-70-40)*3/4) + $("#lastlogbox").css("overflow-y", "auto") + $("#lastlogbox").css("overflow-x", "hidden") + + $("#likereport").css("bottom", 90) + $("#likereport").css("left", ytw+60+clw) + $("#likereport").css("width", llw-20) + $("#likereport").css("height", (h-fh-70-40)*1/4) + + $("#msg").css("max-height", h-130) + } + + else + { + // PLAYER ON RIGHT + $("#player").css("left", 40+pw+20) + $("#player").css("top", Viewport.playerTop) + $("#player").css("height", yth+buttonheight+20) + $("#player,#projector,#screen,#ytscreen").width(ytw) + $("#projector,#screen,#ytscreen").height(yth) + + $("#controls").css("top", yth+10+10) + var playerHeight = yth+buttonheight+Viewport.playerTop+10 + + $("#playlist,#playlistbg").css("left", 40+pw+20) + $("#playlist,#playlistbg").css("top", playerHeight+30) + $("#playlist,#playlistbg").css("width", ytw+19) + $("#playlist,#playlistbg,#queue").css("height", h-playerHeight-50) + + $("#chat,#chatbg").css("left", 0) + $("#chat,#chatbg").css("bottom", chatbot) + $("#chat,#chatbg").css("width", cw) + $("#chat,#chatbg").css("height", chatheight) + // $("#chat").css("overflow-y", "scroll") + // $("#chat").css("overflow-x", "hidden") + + $("#plant").css("left", cw-300) + + $("#form,#formbg").css("left", 0) + $("#form").css("bottom", fbot) + $("#form,#formbg").css("width", cw) + $("#form,#formbg").css("height", fh-15) + $("#formbg").css("opacity", 0.7) + + $("#lastlogbox,#lastlogbg").css("top", 90) + $("#lastlogbox,#lastlogbg").css("left", 10+clw) + $("#lastlogbox,#lastlogbg").css("width", llw) + $("#lastlogbox").css("max-height", (h-fh-70-40)*3/4) + $("#lastlogbox").css("overflow-y", "auto") + $("#lastlogbox").css("overflow-x", "hidden") + + var lrwidth = llw-20 + if (lrwidth < 150) lrwidth = 150 + $("#likereport").css("bottom", 90) + $("#likereport").css("left", cw-lrwidth-90) + $("#likereport").css("width", lrwidth) + $("#likereport").css("max-height", (h-fh-70-40)*1/4) + + $("#msg").css("max-height", h-130) + } + $("#lastlogbg").css("height", $("#lastlogbox").height()) + d.scrollToBottom("#chat") + }, + scrollbarWidth: 16, + getScrollbarWidth: function () + { + var initial = document.body.style.overflow + document.body.style.overflow = 'hidden'; + var width = document.body.clientWidth; + document.body.style.overflow = 'scroll' + width -= document.body.clientWidth + if (! width) + width = document.body.offsetWidth - document.body.clientWidth + document.body.style.overflow = initial + return width + }, + focus: function () + { + d.warn("VIEWPORT FOCUS") + if (! Viewport.fullscreenMode || Viewport.fullscreenInterface) + Keyboard.focusTextarea() + document.body.tabIndex = 0 + document.body.focus() + Viewport.focused = true + // Chat.delay = 1000 + if (Like.pending) + Like.fire() + // Chat.delay = Chat.delayShort + }, + blur: function () + { + d.warn("VIEWPORT BLUR") + Viewport.focused = false + // Chat.delay = Chat.delayLong + }, + chatMouseOver: function () + { + $("#chat").css({"overflow-y": "scroll", "width": Viewport.chatWidth + Viewport.scrollbarWidth }) + $("#chat").scrollTop( $("#chat").scrollTop() ) + }, + chatMouseOut: function () + { + $("#chat").css({"overflow-y": "hidden", "width": Viewport.chatWidth}) + }, + init: function () + { + Viewport.scrollbarWidth = Viewport.getScrollbarWidth () + $("#chat").bind("mouseover", Viewport.chatMouseOver) + $("#chat").bind("mouseout", Viewport.chatMouseOut) + } + } +var Background = + { + src: "http://lalalizard.com/bgz/jupiteraurora.jpg", + srcReset: "http://lalalizard.com/bgz/1302474305250-dumpfm-GucciSoFlosy-pattern4.gif", + load: function () + { + $("#bg").show() + //setTimeout(function(){$("#bg img").attr("src", Background.src)}, 2000) + }, + init: function () + { + } + } +var Include = + { + glitter: function () + { + Room.ops = {} + $("body").append("") + $("body").append("") + d.enableStylesheet("glitter") + }, + avatar: function () + { + Room.ops = {} + $("body").append("") + $("body").append("") + d.enableStylesheet("avatar") + }, + jonomilo: function () + { + Room.ops = d.buildLookup(["daytimetelevision"]) + d.enableStylesheet("white") + $("#heading").remove() + $("#topic").remove() + $("#likebutton").before("

    ") + Include.middleColumn () + }, + middleColumn: function () + { + Chat.previousName = false + Chat.containsImage = function (s) + { + if (s.indexOf("http") === -1) + return false + var suffixes = ["jpg","jpeg","gif","png"] + for (var i = 0; i < suffixes.length; i++) + { + if (s.indexOf(suffixes[i]) !== -1) + { + // console.log(suffixes[i] + " " + s) + return true + } + } + return false + } + Chat.parse = function (row) + { + if (Chat.containsImage(row[3])) + { + var s = "
    " + s += "" + s += Chat.parseWords(row[3]) + s += "" + s += "
    " + return s + } + else + { + Chat.previousName = row[2] + var s = "
    " + s += '' + row[2] + "" + s += "" + s += Chat.parseWords(row[3]) + s += "" + s += "
    " + return s + } + } + }, + diornights: function () + { + $("#logo").append("

    OPEN RADIO

    ") + }, + disaro: function () + { + $("#logo").append("

    OPEN RADIO

    ") + }, + sewergreats: function () + { + $("#logo").append("

    OPEN RADIO

    ") + }, + dump: function () + { + Room.ops = d.buildLookup([""]) + $("body").append("") + }, + yhvh: function () + { + Room.ops = d.buildLookup(["greta"]) + }, +/* + icons: function () + { + $("#bg").html(''); + }, +*/ + feederbleeder: function () + { + Room.ops = {} + $("#preamblewords").remove() + $("#topic").remove() + $("#heading").after("

    ") + d.enableStylesheet("feederbleeder") + var oldsay = Chat.say + Chat.say = function () + { + var msg = $("#chat-message").val() + if (msg.indexOf("http") !== -1) + { + $("#chat").append("
    Sorry, only the Feederbleeder robot can post videos and images in this room. Please visit another room to post videos.
    ") + $("#chat-message").val("") + d.scrollToBottom("#chat") + } + else + { + oldsay () + } + } + }, + fred: function () + { + Room.ops = d.buildLookup(["scannerjammer"]) + }, + frederick: function () + { + Room.ops = d.buildLookup(["scannerjammer"]) + d.enableStylesheet("frederick") + }, + glasspopcorn: function () + { + Room.ops = d.buildLookup(["glasspopcorn"]) + setTimeout(VideoChat.toggle, 2000) + $("#plant img").attr("src", "/static/img/1309267681552dumpfmfrakbuddyglasscross_1310066105.gif") + $("#flower img").attr("src", "/static/img/1278131405573-dumpfm-glasspopcorn-sitmanpiano.gif") + $("#heading").remove() + $("#logo").append("

    OPEN RADIO

    ") + $("body").append("") + $("#preamblewords").html("Post GIFs and Soundclouds into the chat!
    Use arrow keys to switch videos
    Hit L key to LIKE
    Hit ESC to change modes") + Player.unregister("youtube") + Player.unregister("vimeo") + Player.unregister("audio") + }, + sfvacid: function () + { + // $("#logo").append("

    OPEN RADIO

    ") + }, + main: function () + { + Room.ops = false + $("#heading").remove() + $("#preamblewords").after("

     

    ") + $("#topic").remove() + // Room.loadCallback = function () + // { + // setTimeout(Viewport.fullscreenOn, 3000) + // } + // $("#likebutton").before("

    Post urls into the chat!
    Use arrow keys to switch videos

    ") + } + } + +var Main = + { + init: function () + { + d.warn("INIT MAIN") + + if (roomName in Include) + { + Include[roomName]() + } + + $(window).bind("focus", Viewport.focus) + $(window).bind("blur", Viewport.blur) + $(window).bind("resize", Viewport.standardResize) + $(window).bind("keydown", Keyboard.standardMap) + Viewport.standardResize() + Viewport.init() + Background.init() + $("#chat").append("
    ") + Room.init() + if ( Auth.init() ) + Room.connect() + else + Auth.load() + document.write('') + if (window.location.pathname.split("/")[2] == "read") + { + API.URL.room.join = API.BASE_URL + "/api/room/view" + // API.URL.room.poll = API.BASE_URL + "/api/room/read" + d.enableStylesheet("tiny") + Viewport.playerTop = 20 + Viewport.chatBottom = 20 + Viewport.formHeight = 5 + Player.mute() + } + } + } +Main.init () diff --git a/frontend/static/js/soundcloud.js b/frontend/static/js/soundcloud.js new file mode 100644 index 0000000..1ff6c45 --- /dev/null +++ b/frontend/static/js/soundcloud.js @@ -0,0 +1,157 @@ +var Soundcloud = + { + type: "soundcloud", + loaded: false, + pending: false, + playing: false, + player: null, + playerId: null, + timeout: null, + video: null, + width: "100%", + height: "100%", + volume: 100, + play: function (video) + { + d.warn("SOUNDCLOUD PLAY "+video.key) + if (video.error) + return Soundcloud.error() + if (Soundcloud.playing) + Soundcloud.stop() + $("#screen").html("
    ") + Soundcloud.video = video + Soundcloud.playing = false + + if (Soundcloud.player) + { + Soundcloud.player = null + swfobject.removeSWF("soundcloud") + } + + var flashvars = { enable_api: true, object_id: "soundcloud", url: video.src, theme_color: "#657b83", } + var attributes = { id: "soundcloud", name: "soundcloud" } + var params = { allowscriptaccess: "always", wmode: "opaque", } + + swfobject.embedSWF("http://player.soundcloud.com/player.swf", "soundcloud", "81", "81", "9.0.0", + "expressInstall.swf", flashvars, params, attributes, Soundcloud.playerDidLoad); + }, + playerDidLoad: function (e) + { + if (e.success === false) + return Soundcloud.error("failed to load") + d.warn("LOADED") + Soundcloud.player = swfobject.getObjectById('soundcloud') + $("#ytscreen").css("z-index", -2) + // instead of raising events, the soundcloud swf calls it's js api directly + window.soundcloud = { onPlayerReady: Soundcloud.ready, onMediaEnd: Soundcloud.finish } + }, + ready: function () + { + d.warn("READY") + Soundcloud.playing = true + Soundcloud.player = swfobject.getObjectById('soundcloud') + if (Soundcloud.player) + { + Soundcloud.player.api_play() + Soundcloud.player.api_setVolume(Soundcloud.volume) + } + Soundcloud.report() + }, + report: function () + { + if (! Soundcloud.player) + return Soundcloud.error() + var track = Soundcloud.player.api_getCurrentTrack() + $("#video-title").html(track.title) + if (track.downloadable && track.download_url !== "undefined" && track.download_url !== undefined) + $("#soundcloud-dl").html('download') + else + $("#soundcloud-dl").html("") + var art = '' + if (track.artwork) + art = track.artwork.split("?")[0].replace('large','original') + else if (track.user && track.user.avatarUrl) + art = track.user.avatarUrl.split("?")[0].replace('large','crop') + if (art.length) + { + $("#soundcloud-img").html("") + $("#sc-art").bind("error", function(){$("#sc-art").hide()}) + } + return + d.warn("____________") + for (i in track) + d.warn(""+i+": "+track[i]) + d.warn("____________") + var user = track.user + for (i in user) + d.warn(""+i+": "+user[i]) + d.warn("____________") + }, + toggle: function () + { + d.warn("TOGGLE PLAYBACK") + if (Soundcloud.player) + return Soundcloud.player.api_toggle() + return false + }, + error: function (s) + { + Player.error("SOUNDCLOUD "+s) + Soundcloud.finish() + }, + setVolume: function (vol) + { + Soundcloud.volume = vol + if (Soundcloud.player) + Soundcloud.player.api_setVolume(vol) + }, + pause: function () + { + d.warn("PAUSED PLAYBACK") + Soundcloud.playing = false + if (Soundcloud.player) + Soundcloud.player.api_pause() + return true + }, + resume: function () + { + d.warn("RESUME PLAYBACK") + Soundcloud.playing = true + if (Soundcloud.player) + Soundcloud.player.api_play() + return false + }, + stop: function () + { + d.warn("SOUNDCLOUD STOP") + if (Soundcloud.player) + Soundcloud.player.api_stop() + Soundcloud.playing = false + }, + finish: function () + { + d.warn("SOUNDCLOUD FINISH") + Soundcloud.playing = false + swfobject.removeSWF("soundcloud") + Player.finish() + }, + load: function () + { + d.warn("LOADING SOUNDCLOUD") + Soundcloud.loaded = true + }, + unload: function () + { + d.warn("SOUNDCLOUD UNLOADED") + swfobject.removeSWF("soundcloud") + Soundcloud.loaded = false + Soundcloud.playing = false + }, + init: function () + { + d.warn("SOUNDCLOUD INIT") + window.soundcloud = Soundcloud + } + } +Player.register(Soundcloud) + diff --git a/frontend/static/js/soundmanager2.js b/frontend/static/js/soundmanager2.js new file mode 100644 index 0000000..46528c9 --- /dev/null +++ b/frontend/static/js/soundmanager2.js @@ -0,0 +1,2838 @@ +/** @license + * SoundManager 2: Javascript Sound for the Web + * -------------------------------------------- + * http://schillmania.com/projects/soundmanager2/ + * + * Copyright (c) 2007, Scott Schiller. All rights reserved. + * Code provided under the BSD License: + * http://schillmania.com/projects/soundmanager2/license.txt + * + * V2.97a.20101010 + */ + +/*jslint white: false, onevar: true, undef: true, nomen: false, eqeqeq: true, plusplus: false, bitwise: true, regexp: true, newcap: true, immed: true, regexp: false */ +/*global window, SM2_DEFER, sm2Debugger, alert, console, document, navigator, setTimeout, setInterval, clearInterval, Audio */ + +(function(window) { + +var soundManager = null; + +function SoundManager(smURL, smID) { + + this.flashVersion = 8; // version of flash to require, either 8 or 9. Some API features require Flash 9. + this.debugMode = true; // enable debugging output (div#soundmanager-debug, OR console if available+configured) + this.debugFlash = false; // enable debugging output inside SWF, troubleshoot Flash/browser issues + this.useConsole = true; // use firebug/safari console.log()-type debug console if available + this.consoleOnly = false; // if console is being used, do not create/write to #soundmanager-debug + this.waitForWindowLoad = false; // force SM2 to wait for window.onload() before trying to call soundManager.onload() + this.nullURL = 'about:blank'; // path to "null" (empty) MP3 file, used to unload sounds (Flash 8 only) + this.allowPolling = true; // allow flash to poll for status update (required for whileplaying() events, peak, sound spectrum functions to work.) + this.useFastPolling = false; // uses lower flash timer interval for higher callback frequency, best combined with useHighPerformance + this.useMovieStar = true; // enable support for Flash 9.0r115+ (codename "MovieStar") MPEG4 audio formats (AAC, M4V, FLV, MOV etc.) + this.bgColor = '#ffffff'; // movie (.swf) background color, eg. '#000000' + this.useHighPerformance = false; // position:fixed flash movie can help increase js/flash speed, minimize lag + this.flashLoadTimeout = 1000; // msec to wait for flash movie to load before failing (0 = infinity) + this.wmode = null; // string: flash rendering mode - null, transparent, opaque (last two allow layering of HTML on top) + this.allowScriptAccess = 'always'; // for scripting the SWF (object/embed property), either 'always' or 'sameDomain' + this.useFlashBlock = false; // *requires flashblock.css, see demos* - allow recovery from flash blockers. Wait indefinitely and apply timeout CSS to SWF, if applicable. + this.useHTML5Audio = false; // Beta feature: Use HTML 5 Audio() where API is supported (most Safari, Chrome versions), Firefox (no MP3/MP4.) Ideally, transparent vs. Flash API where possible. + this.html5Test = /^probably$/i; // HTML5 Audio().canPlayType() test. /^(probably|maybe)$/i if you want to be more liberal/risky. + this.ondebuglog = false; // callback made with each log message, regardless of debugMode + + this.audioFormats = { + // determines HTML5 support, flash requirements + // eg. if MP3 or MP4 required, Flash fallback is used if HTML5 can't play it + // shotgun approach to MIME testing due to browser variance + 'mp3': { + 'type': ['audio/mpeg; codecs="mp3"','audio/mpeg','audio/mp3','audio/MPA','audio/mpa-robust'], + 'required': true + }, + 'mp4': { + 'related': ['aac','m4a'], // additional formats under the MP4 container + 'type': ['audio/mp4; codecs="mp4a.40.2"','audio/aac','audio/x-m4a','audio/MP4A-LATM','audio/mpeg4-generic'], + 'required': true + }, + 'ogg': { + 'type': ['audio/ogg; codecs=vorbis'], + 'required': false + }, + 'wav': { + 'type': ['audio/wav; codecs="1"','audio/wav','audio/wave','audio/x-wav'], + 'required': false + } + }; + + this.defaultOptions = { + 'autoLoad': false, // enable automatic loading (otherwise .load() will be called on demand with .play(), the latter being nicer on bandwidth - if you want to .load yourself, you also can) + 'stream': true, // allows playing before entire file has loaded (recommended) + 'autoPlay': false, // enable playing of file as soon as possible (much faster if "stream" is true) + 'loops': 1, // how many times to repeat the sound (position will wrap around to 0, setPosition() will break out of loop when >0) + 'onid3': null, // callback function for "ID3 data is added/available" + 'onload': null, // callback function for "load finished" + 'whileloading': null, // callback function for "download progress update" (X of Y bytes received) + 'onplay': null, // callback for "play" start + 'onpause': null, // callback for "pause" + 'onresume': null, // callback for "resume" (pause toggle) + 'whileplaying': null, // callback during play (position update) + 'onstop': null, // callback for "user stop" + 'onfailure': null, // callback function for when playing fails + 'onfinish': null, // callback function for "sound finished playing" + 'onbeforefinish': null, // callback for "before sound finished playing (at [time])" + 'onbeforefinishtime': 5000, // offset (milliseconds) before end of sound to trigger beforefinish (eg. 1000 msec = 1 second) + 'onbeforefinishcomplete': null,// function to call when said sound finishes playing + 'onjustbeforefinish': null, // callback for [n] msec before end of current sound + 'onjustbeforefinishtime': 200, // [n] - if not using, set to 0 (or null handler) and event will not fire. + 'multiShot': true, // let sounds "restart" or layer on top of each other when played multiple times, rather than one-shot/one at a time + 'multiShotEvents': false, // fire multiple sound events (currently onfinish() only) when multiShot is enabled + 'position': null, // offset (milliseconds) to seek to within loaded sound data. + 'pan': 0, // "pan" settings, left-to-right, -100 to 100 + 'type': null, // MIME-like hint for file pattern / canPlay() tests, eg. audio/mp3 + 'usePolicyFile': false, // enable crossdomain.xml request for audio on remote domains (for ID3/waveform access) + 'volume': 100 // self-explanatory. 0-100, the latter being the max. + }; + + this.flash9Options = { // flash 9-only options, merged into defaultOptions if flash 9 is being used + 'isMovieStar': null, // "MovieStar" MPEG4 audio mode. Null (default) = auto detect MP4, AAC etc. based on URL. true = force on, ignore URL + 'usePeakData': false, // enable left/right channel peak (level) data + 'useWaveformData': false, // enable sound spectrum (raw waveform data) - WARNING: CPU-INTENSIVE: may set CPUs on fire. + 'useEQData': false, // enable sound EQ (frequency spectrum data) - WARNING: Also CPU-intensive. + 'onbufferchange': null, // callback for "isBuffering" property change + 'ondataerror': null, // callback for waveform/eq data access error (flash playing audio in other tabs/domains) + 'onstats': null // callback for when connection & play times have been measured + }; + + this.movieStarOptions = { // flash 9.0r115+ MPEG4 audio options, merged into defaultOptions if flash 9+movieStar mode is enabled + 'bufferTime': 3, // seconds of data to buffer before playback begins (null = flash default of 0.1 seconds - if AAC playback is gappy, try increasing.) + 'serverURL': null, // rtmp: FMS or FMIS server to connect to, required when requesting media via RTMP or one of its variants + 'onconnect': null, // rtmp: callback for connection to flash media server + 'bufferTimes': null, // array of buffer sizes to use. Size increases as buffer fills up. + 'duration': null // rtmp: song duration (msec) + }; + + this.version = null; + this.versionNumber = 'V2.97a.20101010'; + this.movieURL = null; + this.url = (smURL || null); + this.altURL = null; + this.swfLoaded = false; + this.enabled = false; + this.o = null; + this.movieID = 'sm2-container'; + this.id = (smID || 'sm2movie'); + this.swfCSS = { + 'swfBox': 'sm2-object-box', + 'swfDefault': 'movieContainer', + 'swfError': 'swf_error', // SWF loaded, but SM2 couldn't start (other error) + 'swfTimedout': 'swf_timedout', + 'swfUnblocked': 'swf_unblocked', // or loaded OK + 'sm2Debug': 'sm2_debug', + 'highPerf': 'high_performance', + 'flashDebug': 'flash_debug' + }; + this.oMC = null; + this.sounds = {}; + this.soundIDs = []; + this.muted = false; + this.debugID = 'soundmanager-debug'; + this.debugURLParam = /([#?&])debug=1/i; + this.specialWmodeCase = false; + this.didFlashBlock = false; + + this.filePattern = null; + this.filePatterns = { + 'flash8': /\.mp3(\?.*)?$/i, + 'flash9': /\.mp3(\?.*)?$/i + }; + + this.baseMimeTypes = /^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i; // mp3 + this.netStreamMimeTypes = /^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i; // mp3, mp4, aac etc. + this.netStreamTypes = ['aac', 'flv', 'mov', 'mp4', 'm4v', 'f4v', 'm4a', 'mp4v', '3gp', '3g2']; // Flash v9.0r115+ "moviestar" formats + this.netStreamPattern = new RegExp('\\.(' + this.netStreamTypes.join('|') + ')(\\?.*)?$', 'i'); + this.mimePattern = this.baseMimeTypes; + + this.features = { + 'buffering': false, + 'peakData': false, + 'waveformData': false, + 'eqData': false, + 'movieStar': false + }; + + this.sandbox = { + // + 'type': null, + 'types': { + 'remote': 'remote (domain-based) rules', + 'localWithFile': 'local with file access (no internet access)', + 'localWithNetwork': 'local with network (internet access only, no local access)', + 'localTrusted': 'local, trusted (local+internet access)' + }, + 'description': null, + 'noRemote': null, + 'noLocal': null + // + }; + + this.hasHTML5 = null; // switch for handling logic + this.html5 = { // stores canPlayType() results, etc. treat as read-only. + // mp3: boolean + // mp4: boolean + 'usingFlash': null // set if/when flash fallback is needed + }; + this.ignoreFlash = false; // used for special cases (eg. iPad/iPhone/palm OS?) + + // --- private SM2 internals --- + + var SMSound, + _s = this, _sm = 'soundManager', _id, _ua = navigator.userAgent, _wl = window.location.href.toString(), _fV = this.flashVersion, _doc = document, _win = window, _doNothing, _init, _onready = [], _debugOpen = true, _debugTS, _didAppend = false, _appendSuccess = false, _didInit = false, _disabled = false, _windowLoaded = false, _wDS, _wdCount = 0, _initComplete, _mixin, _addOnReady, _processOnReady, _initUserOnload, _go, _delayWaitForEI, _waitForEI, _setVersionInfo, _handleFocus, _beginInit, _strings, _initMovie, _dcLoaded, _didDCLoaded, _getDocument, _createMovie, _die, _mobileFlash, _setPolling, _debugLevels = ['log', 'info', 'warn', 'error'], _defaultFlashVersion = 8, _disableObject, _failSafely, _normalizeMovieURL, _oRemoved = null, _oRemovedHTML = null, _str, _flashBlockHandler, _getSWFCSS, _toggleDebug, _loopFix, _policyFix, _complain, _idCheck, _waitingForEI = false, _initPending = false, _smTimer, _onTimer, _startTimer, _stopTimer, _needsFlash = null, _featureCheck, _html5OK, _html5Only = false, _html5CanPlay, _html5Ext, _dcIE, _testHTML5, _addEvt, _removeEvt, _slice = Array.prototype.slice, + _is_pre = _ua.match(/pre\//i), + _iPadOrPhone = _ua.match(/(ipad|iphone)/i), + _isMobile = (_ua.match(/mobile/i) || _is_pre || _iPadOrPhone), + _isIE = (_ua.match(/MSIE/i)), + _isSafari = (_ua.match(/safari/i) && !_ua.match(/chrome/i)), + _hasConsole = (typeof console !== 'undefined' && typeof console.log !== 'undefined'), + _isFocused = (typeof _doc.hasFocus !== 'undefined'?_doc.hasFocus():null), + _tryInitOnFocus = (typeof _doc.hasFocus === 'undefined' && _isSafari), + _okToDisable = !_tryInitOnFocus; + + this._use_maybe = (_wl.match(/sm2\-useHTML5Maybe\=1/i)); // temporary feature: #sm2-useHTML5Maybe=1 forces loose canPlay() check + this._overHTTP = (_doc.location?_doc.location.protocol.match(/http/i):null); + this.useAltURL = !this._overHTTP; // use altURL if not "online" + + if (_iPadOrPhone || _is_pre) { + // might as well force it on Apple + Palm, flash support unlikely + _s.useHTML5Audio = true; + _s.ignoreFlash = true; + } + + if (_is_pre || this._use_maybe) { + // less-strict canPlayType() checking option + _s.html5Test = /^(probably|maybe)$/i; + } + + // Temporary feature: allow force of HTML5 via URL: #sm2-usehtml5audio=0 or 1 + // + (function(){ + var a = '#sm2-usehtml5audio=', l = _wl, b = null; + if (l.indexOf(a) !== -1) { + b = (l.substr(l.indexOf(a)+a.length) === '1'); + if (typeof console !== 'undefined' && typeof console.log !== 'undefined') { + console.log((b?'Enabling ':'Disabling ')+'useHTML5Audio via URL parameter'); + } + _s.useHTML5Audio = b; + } + }()); + // + + // --- public API methods --- + + this.supported = function() { + return (_needsFlash?(_didInit && !_disabled):(_s.useHTML5Audio && _s.hasHTML5)); + }; + + this.getMovie = function(smID) { + return _isIE?_win[smID]:(_isSafari?_id(smID) || _doc[smID]:_id(smID)); + }; + + this.loadFromXML = function(sXmlUrl) { + try { + _s.o._loadFromXML(sXmlUrl); + } catch(e) { + _failSafely(); + } + return true; + }; + + this.createSound = function(oOptions) { + var _cs = 'soundManager.createSound(): ', + thisOptions = null, oSound = null, _tO = null; + if (!_didInit || !_s.supported()) { + _complain(_cs + _str(!_didInit?'notReady':'notOK')); + return false; + } + if (arguments.length === 2) { + // function overloading in JS! :) ..assume simple createSound(id,url) use case + oOptions = { + 'id': arguments[0], + 'url': arguments[1] + }; + } + thisOptions = _mixin(oOptions); // inherit from defaultOptions + _tO = thisOptions; // alias + // + if (_tO.id.toString().charAt(0).match(/^[0-9]$/)) { + _s._wD(_cs + _str('badID', _tO.id), 2); + } + _s._wD(_cs + _tO.id + ' (' + _tO.url + ')', 1); + // + if (_idCheck(_tO.id, true)) { + _s._wD(_cs + _tO.id + ' exists', 1); + return _s.sounds[_tO.id]; + } + + function make() { + thisOptions = _loopFix(thisOptions); + _s.sounds[_tO.id] = new SMSound(_tO); + _s.soundIDs.push(_tO.id); + return _s.sounds[_tO.id]; + } + + if (_html5OK(_tO)) { + oSound = make(); + _s._wD('Loading sound '+_tO.id+' from HTML5'); + oSound._setup_html5(_tO); + } else { + if (_fV > 8 && _s.useMovieStar) { + if (_tO.isMovieStar === null) { + _tO.isMovieStar = ((_tO.serverURL || (_tO.type?_tO.type.match(_s.netStreamPattern):false)||_tO.url.match(_s.netStreamPattern))?true:false); + } + if (_tO.isMovieStar) { + _s._wD(_cs + 'using MovieStar handling'); + } + if (_tO.isMovieStar) { + if (_tO.usePeakData) { + _wDS('noPeak'); + _tO.usePeakData = false; + } + if (_tO.loops > 1) { + _wDS('noNSLoop'); + } + } + } + _tO = _policyFix(_tO, _cs); + oSound = make(); + if (_fV === 8) { + _s.o._createSound(_tO.id, _tO.onjustbeforefinishtime, _tO.loops||1, _tO.usePolicyFile); + } else { + _s.o._createSound(_tO.id, _tO.url, _tO.onjustbeforefinishtime, _tO.usePeakData, _tO.useWaveformData, _tO.useEQData, _tO.isMovieStar, (_tO.isMovieStar?_tO.bufferTime:false), _tO.loops||1, _tO.serverURL, _tO.duration||null, _tO.autoPlay, true, _tO.bufferTimes, _tO.onstats ? true : false, _tO.autoLoad, _tO.usePolicyFile); + if (!_tO.serverURL) { + // We are connected immediately + oSound.connected = true; + if (_tO.onconnect) { + _tO.onconnect.apply(oSound); + } + } + } + } + if (_tO.autoLoad || _tO.autoPlay) { + if (oSound) { + if (_s.isHTML5) { + oSound.autobuffer = 'auto'; // early HTML5 implementation (non-standard) + oSound.preload = 'auto'; // standard + } else { + oSound.load(_tO); + } + } + } + if (_tO.autoPlay) { + oSound.play(); + } + return oSound; + }; + + this.destroySound = function(sID, _bFromSound) { + // explicitly destroy a sound before normal page unload, etc. + if (!_idCheck(sID)) { + return false; + } + var oS = _s.sounds[sID], i; + oS._iO = {}; // Disable all callbacks while the sound is being destroyed + oS.stop(); + oS.unload(); + for (i = 0; i < _s.soundIDs.length; i++) { + if (_s.soundIDs[i] === sID) { + _s.soundIDs.splice(i, 1); + break; + } + } + if (!_bFromSound) { + // ignore if being called from SMSound instance + oS.destruct(true); + } + oS = null; + delete _s.sounds[sID]; + return true; + }; + + this.load = function(sID, oOptions) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].load(oOptions); + }; + + this.unload = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].unload(); + }; + + this.play = function(sID, oOptions) { + var fN = 'soundManager.play(): '; + if (!_didInit || !_s.supported()) { + _complain(fN + _str(!_didInit?'notReady':'notOK')); + return false; + } + if (!_idCheck(sID)) { + if (!(oOptions instanceof Object)) { + oOptions = { + url: oOptions + }; // overloading use case: play('mySound','/path/to/some.mp3'); + } + if (oOptions && oOptions.url) { + // overloading use case, create+play: .play('someID',{url:'/path/to.mp3'}); + _s._wD(fN + 'attempting to create "' + sID + '"', 1); + oOptions.id = sID; + return _s.createSound(oOptions).play(); + } else { + return false; + } + } + return _s.sounds[sID].play(oOptions); + }; + + this.start = this.play; // just for convenience + + this.setPosition = function(sID, nMsecOffset) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].setPosition(nMsecOffset); + }; + + this.stop = function(sID) { + if (!_idCheck(sID)) { + return false; + } + _s._wD('soundManager.stop(' + sID + ')', 1); + return _s.sounds[sID].stop(); + }; + + this.stopAll = function() { + _s._wD('soundManager.stopAll()', 1); + for (var oSound in _s.sounds) { + if (_s.sounds[oSound] instanceof SMSound) { + _s.sounds[oSound].stop(); // apply only to sound objects + } + } + }; + + this.pause = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].pause(); + }; + + this.pauseAll = function() { + for (var i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].pause(); + } + }; + + this.resume = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].resume(); + }; + + this.resumeAll = function() { + for (var i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].resume(); + } + }; + + this.togglePause = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].togglePause(); + }; + + this.setPan = function(sID, nPan) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].setPan(nPan); + }; + + this.setVolume = function(sID, nVol) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].setVolume(nVol); + }; + + this.mute = function(sID) { + var fN = 'soundManager.mute(): ', + i = 0; + if (typeof sID !== 'string') { + sID = null; + } + if (!sID) { + _s._wD(fN + 'Muting all sounds'); + for (i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].mute(); + } + _s.muted = true; + } else { + if (!_idCheck(sID)) { + return false; + } + _s._wD(fN + 'Muting "' + sID + '"'); + return _s.sounds[sID].mute(); + } + return true; + }; + + this.muteAll = function() { + _s.mute(); + }; + + this.unmute = function(sID) { + var fN = 'soundManager.unmute(): ', i; + if (typeof sID !== 'string') { + sID = null; + } + if (!sID) { + _s._wD(fN + 'Unmuting all sounds'); + for (i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].unmute(); + } + _s.muted = false; + } else { + if (!_idCheck(sID)) { + return false; + } + _s._wD(fN + 'Unmuting "' + sID + '"'); + return _s.sounds[sID].unmute(); + } + return true; + }; + + this.unmuteAll = function() { + _s.unmute(); + }; + + this.toggleMute = function(sID) { + if (!_idCheck(sID)) { + return false; + } + return _s.sounds[sID].toggleMute(); + }; + + this.getMemoryUse = function() { + if (_fV === 8) { + return 0; + } + if (_s.o) { + return parseInt(_s.o._getMemoryUse(), 10); + } + }; + + this.disable = function(bNoDisable) { + // destroy all functions + if (typeof bNoDisable === 'undefined') { + bNoDisable = false; + } + if (_disabled) { + return false; + } + _disabled = true; + _wDS('shutdown', 1); + for (var i = _s.soundIDs.length; i--;) { + _disableObject(_s.sounds[_s.soundIDs[i]]); + } + _initComplete(bNoDisable); // fire "complete", despite fail + _removeEvt(_win, 'load', _initUserOnload); + return true; + }; + + this.canPlayMIME = function(sMIME) { + var result; + if (_s.hasHTML5) { + result = _html5CanPlay({type:sMIME}); + } + if (!_needsFlash || result) { + // no flash, or OK + return result; + } else { + return (sMIME?(sMIME.match(_s.mimePattern)?true:false):null); + } + }; + + this.canPlayURL = function(sURL) { + var result; + if (_s.hasHTML5) { + result = _html5CanPlay(sURL); + } + if (!_needsFlash || result) { + // no flash, or OK + return result; + } else { + return (sURL?(sURL.match(_s.filePattern)?true:false):null); + } + }; + + this.canPlayLink = function(oLink) { + if (typeof oLink.type !== 'undefined' && oLink.type) { + if (_s.canPlayMIME(oLink.type)) { + return true; + } + } + return _s.canPlayURL(oLink.href); + }; + + this.getSoundById = function(sID, suppressDebug) { + if (!sID) { + throw new Error('SoundManager.getSoundById(): sID is null/undefined'); + } + var result = _s.sounds[sID]; + if (!result && !suppressDebug) { + _s._wD('"' + sID + '" is an invalid sound ID.', 2); + } + return result; + }; + + this.onready = function(oMethod, oScope) { + if (oMethod && oMethod instanceof Function) { + if (_didInit) { + _wDS('queue'); + } + if (!oScope) { + oScope = _win; + } + _addOnReady(oMethod, oScope); + _processOnReady(); + return true; + } else { + throw _str('needFunction'); + } + }; + + this.getMoviePercent = function() { + return (_s.o && typeof _s.o.PercentLoaded !== 'undefined'?_s.o.PercentLoaded():null); + }; + + this._writeDebug = function(sText, sType, bTimestamp) { + // If the debug log callback is set, always call it, regardless of debugMode + if (_s.ondebuglog) { + _s.ondebuglog(sText, sType, bTimestamp); + } + // pseudo-private console.log()-style output + // + var sDID = 'soundmanager-debug', o, oItem, sMethod; + if (!_s.debugMode) { + return false; + } + if (typeof bTimestamp !== 'undefined' && bTimestamp) { + sText = sText + ' | ' + new Date().getTime(); + } + if (_hasConsole && _s.useConsole) { + sMethod = _debugLevels[sType]; + if (typeof console[sMethod] !== 'undefined') { + console[sMethod](sText); + } else { + console.log(sText); + } + if (_s.useConsoleOnly) { + return true; + } + } + try { + o = _id(sDID); + if (!o) { + return false; + } + oItem = _doc.createElement('div'); + if (++_wdCount % 2 === 0) { + oItem.className = 'sm2-alt'; + } + if (typeof sType === 'undefined') { + sType = 0; + } else { + sType = parseInt(sType, 10); + } + oItem.appendChild(_doc.createTextNode(sText)); + if (sType) { + if (sType >= 2) { + oItem.style.fontWeight = 'bold'; + } + if (sType === 3) { + oItem.style.color = '#ff3333'; + } + } + // o.appendChild(oItem); // top-to-bottom + o.insertBefore(oItem, o.firstChild); // bottom-to-top + } catch(e) { + // oh well + } + o = null; + // + return true; + }; + this._wD = this._writeDebug; // alias + + this._debug = function() { + // + _wDS('currentObj', 1); + for (var i = 0, j = _s.soundIDs.length; i < j; i++) { + _s.sounds[_s.soundIDs[i]]._debug(); + } + // + }; + + this.reboot = function() { + // attempt to reset and init SM2 + _s._wD('soundManager.reboot()'); + if (_s.soundIDs.length) { + _s._wD('Destroying ' + _s.soundIDs.length + ' SMSound objects...'); + } + for (var i = _s.soundIDs.length; i--;) { + _s.sounds[_s.soundIDs[i]].destruct(); + } + // trash ze flash + try { + if (_isIE) { + _oRemovedHTML = _s.o.innerHTML; + } + _oRemoved = _s.o.parentNode.removeChild(_s.o); + _s._wD('Flash movie removed.'); + } catch(e) { + // uh-oh. + _wDS('badRemove', 2); + } + // actually, force recreate of movie. + _oRemovedHTML = _oRemoved = null; + _s.enabled = _didInit = _waitingForEI = _initPending = _didAppend = _appendSuccess = _disabled = _s.swfLoaded = false; + _s.soundIDs = _s.sounds = []; + _s.o = null; + for (i = _onready.length; i--;) { + _onready[i].fired = false; + } + _s._wD(_sm + ': Rebooting...'); + _win.setTimeout(function() { + _s.beginDelayedInit(); + }, 20); + }; + + this.destruct = function() { + _s._wD('soundManager.destruct()'); + _s.disable(true); + }; + + this.beginDelayedInit = function() { + // _s._wD('soundManager.beginDelayedInit()'); + _windowLoaded = true; + _dcLoaded(); + setTimeout(_beginInit, 20); + _delayWaitForEI(); + }; + + // --- SMSound (sound object) instance --- + + SMSound = function(oOptions) { + var _t = this, _resetProperties, _add_html5_events, _stop_html5_timer, _start_html5_timer, _get_html5_duration, _a; + this.sID = oOptions.id; + this.url = oOptions.url; + this.options = _mixin(oOptions); + this.instanceOptions = this.options; // per-play-instance-specific options + this._iO = this.instanceOptions; // short alias + // assign property defaults + this.pan = this.options.pan; + this.volume = this.options.volume; + this._lastURL = null; + this.isHTML5 = false; + + // --- public methods --- + + this.id3 = {}; + + this._debug = function() { + // + // pseudo-private console.log()-style output + if (_s.debugMode) { + var stuff = null, msg = [], sF, sfBracket, maxLength = 64; + for (stuff in _t.options) { + if (_t.options[stuff] !== null) { + if (_t.options[stuff] instanceof Function) { + // handle functions specially + sF = _t.options[stuff].toString(); + sF = sF.replace(/\s\s+/g, ' '); // normalize spaces + sfBracket = sF.indexOf('{'); + msg.push(' ' + stuff + ': {' + sF.substr(sfBracket + 1, (Math.min(Math.max(sF.indexOf('\n') - 1, maxLength), maxLength))).replace(/\n/g, '') + '... }'); + } else { + msg.push(' ' + stuff + ': ' + _t.options[stuff]); + } + } + } + _s._wD('SMSound() merged options: {\n' + msg.join(', \n') + '\n}'); + } + // + }; + + this._debug(); + + this.load = function(oOptions) { + var oS = null; + if (typeof oOptions !== 'undefined') { + _t._iO = _mixin(oOptions); + _t.instanceOptions = _t._iO; + } else { + oOptions = _t.options; + _t._iO = oOptions; + _t.instanceOptions = _t._iO; + if (_t._lastURL && _t._lastURL !== _t.url) { + _wDS('manURL'); + _t._iO.url = _t.url; + _t.url = null; + } + } + _s._wD('soundManager.load(): ' + _t._iO.url, 1); + if (_t._iO.url === _t.url && _t.readyState !== 0 && _t.readyState !== 2) { + _wDS('onURL', 1); + return _t; + } + _t._lastURL = _t.url; + _t.loaded = false; + _t.readyState = 1; + _t.playState = 0; + if (_html5OK(_t._iO)) { + _s._wD('HTML 5 load: '+_t._iO.url); + oS = _t._setup_html5(_t._iO); + oS.load(); + if (_t._iO.autoPlay) { + _t.play(); + } + } else { + try { + _t.isHTML5 = false; + _t._iO = _policyFix(_loopFix(_t._iO)); + if (_fV === 8) { + _s.o._load(_t.sID, _t._iO.url, _t._iO.stream, _t._iO.autoPlay, (_t._iO.whileloading?1:0), _t._iO.loops||1, _t._iO.usePolicyFile); + } else { + _s.o._load(_t.sID, _t._iO.url, _t._iO.stream?true:false, _t._iO.autoPlay?true:false, _t._iO.loops||1, _t._iO.autoLoad?true:false, _t._iO.usePolicyFile); + } + } catch(e) { + _wDS('smError', 2); + _debugTS('onload', false); + _die(); + } + } + return _t; + }; + + this.unload = function() { + // Flash 8/AS2 can't "close" a stream - fake it by loading an empty MP3 + // Flash 9/AS3: Close stream, preventing further load + if (_t.readyState !== 0) { + _s._wD('SMSound.unload(): "' + _t.sID + '"'); + if (!_t.isHTML5) { + if (_fV === 8) { + _s.o._unload(_t.sID, _s.nullURL); + } else { + _s.o._unload(_t.sID); + } + } else { + _stop_html5_timer(); + if (_a) { + // abort()-style method here, stop loading? (doesn't exist?) + _a.pause(); + _a.src = _s.nullURL; // needed? does nulling object work? any better way to cancel/unload/abort? + _a.load(); + _t._audio = null; + _a = null; + // delete _t._audio; + } + } + // reset load/status flags + _resetProperties(); + } + return _t; + }; + + this.destruct = function(_bFromSM) { + _s._wD('SMSound.destruct(): "' + _t.sID + '"'); + if (!_t.isHTML5) { + // kill sound within Flash + // Disable the onfailure handler + _t._iO.onfailure = null; + _s.o._destroySound(_t.sID); + } else { + _stop_html5_timer(); + if (_a) { + _a.pause(); + _a.src = 'about:blank'; + _a.load(); + _t._audio = null; + _a = null; + // delete _t._audio; + } + } + if (!_bFromSM) { + _s.destroySound(_t.sID, true); // ensure deletion from controller + } + }; + + this.play = function(oOptions, _updatePlayState) { + var fN = 'SMSound.play(): ', allowMulti; + _updatePlayState = (typeof _updatePlayState === 'undefined' ? true : _updatePlayState); + if (!oOptions) { + oOptions = {}; + } + _t._iO = _mixin(oOptions, _t._iO); + _t._iO = _mixin(_t._iO, _t.options); + _t.instanceOptions = _t._iO; + if (_t._iO.serverURL) { + if (!_t.connected) { + if (!_t.getAutoPlay()) { + _s._wD(fN+' Netstream not connected yet - setting autoPlay'); + _t.setAutoPlay(true); + } + return _t; + } + } + if (_html5OK(_t._iO)) { + _t._setup_html5(_t._iO); + _start_html5_timer(); + } + // KJV paused sounds have playState 1. We want these sounds to play. + if (_t.playState === 1 && !_t.paused) { + allowMulti = _t._iO.multiShot; + if (!allowMulti) { + _s._wD(fN + '"' + _t.sID + '" already playing (one-shot)', 1); + return _t; + } else { + _s._wD(fN + '"' + _t.sID + '" already playing (multi-shot)', 1); + if (_t.isHTML5) { + // TODO: BUG? + _t.setPosition(_t._iO.position); + } + } + } + if (!_t.loaded) { + if (_t.readyState === 0) { + _s._wD(fN + 'Attempting to load "' + _t.sID + '"', 1); + // try to get this sound playing ASAP + if (!_t.isHTML5) { + if (!_t._iO.serverURL) { + _t._iO.autoPlay = true; + _t.load(_t._iO); + } + } else { + _t.load(_t._iO); + _t.readyState = 1; + } + } else if (_t.readyState === 2) { + _s._wD(fN + 'Could not load "' + _t.sID + '" - exiting', 2); + return _t; + } else { + _s._wD(fN + '"' + _t.sID + '" is loading - attempting to play..', 1); + } + } else { + _s._wD(fN + '"' + _t.sID + '"'); + } + // Streams will pause when their buffer is full if they are not auto-playing. + // In this case paused is true, but the song hasn't started playing yet. If + // we just call resume() the onplay() callback will never be called. + + // Also, if we just call resume() in this case and the sound has been muted + // (volume is 0), it will never have its volume set so sound will be heard + // when it shouldn't. + if (_t.paused && _t.position && _t.position > 0) { // https://gist.github.com/37b17df75cc4d7a90bf6 + _s._wD(fN + '"' + _t.sID + '" is resuming from paused state',1); + _t.resume(); + } else { + _s._wD(fN+'"'+ _t.sID+'" is starting to play'); + _t.playState = 1; + _t.paused = false; + if (!_t.instanceCount || _t._iO.multiShotEvents || (_fV > 8 && !_t.isHTML5 && !_t.getAutoPlay())) { + _t.instanceCount++; + } + _t.position = (typeof _t._iO.position !== 'undefined' && !isNaN(_t._iO.position)?_t._iO.position:0); + _t._iO = _policyFix(_loopFix(_t._iO)); + if (_t._iO.onplay && _updatePlayState) { + _t._iO.onplay.apply(_t); + } + _t.setVolume(_t._iO.volume, true); + _t.setPan(_t._iO.pan, true); + if (!_t.isHTML5) { + _s.o._start(_t.sID, _t._iO.loops || 1, (_fV === 9?_t.position:_t.position / 1000)); + } else { + _start_html5_timer(); + _t._setup_html5().play(); + } + } + return _t; + }; + + this.start = this.play; // just for convenience + + this.stop = function(bAll) { + if (_t.playState === 1) { + _t._onbufferchange(0); + _t.resetOnPosition(0); + if (!_t.isHTML5) { + _t.playState = 0; + } + _t.paused = false; + if (_t._iO.onstop) { + _t._iO.onstop.apply(_t); + } + if (!_t.isHTML5) { + _s.o._stop(_t.sID, bAll); + // hack for netStream: just unload + if (_t._iO.serverURL) { + _t.unload(); + } + } else { + if (_a) { + _t.setPosition(0); // act like Flash, though + _a.pause(); // html5 has no stop() + _t.playState = 0; + _t._onTimer(); // and update UI + _stop_html5_timer(); + _t.unload(); + } + } + _t.instanceCount = 0; + _t._iO = {}; + } + return _t; + }; + + this.setAutoPlay = function(autoPlay) { + _s._wD('sound '+_t.sID+' turned autoplay ' + (autoPlay ? 'on' : 'off')); + _t._iO.autoPlay = autoPlay; + _s.o._setAutoPlay(_t.sID, autoPlay); + if (autoPlay) { + // KJV Only increment the instanceCount if the sound isn't loaded (TODO: verify RTMP) + if (!_t.instanceCount && _t.readyState === 1) { + _t.instanceCount++; + _s._wD('sound '+_t.sID+' incremented instance count to '+_t.instanceCount); + } + } + }; + + this.getAutoPlay = function() { + return _t._iO.autoPlay; + }; + + this.setPosition = function(nMsecOffset, bNoDebug) { + if (nMsecOffset === undefined) { + nMsecOffset = 0; + } + // KJV Use the duration from the instance options, if we don't have a track duration yet. + // Auto-loading streams with a starting position in their options will start playing + // as soon as they connect. In the start() call we set the position on the stream, + // but because the stream hasn't played _t.duration won't have been set (that is + // done in whileloading()). So if we don't have a duration yet, use the duration + // from the instance options, if available. + var position, offset = (_t.isHTML5 ? Math.max(nMsecOffset,0) : Math.min(_t.duration || _t._iO.duration, Math.max(nMsecOffset, 0))); // position >= 0 and <= current available (loaded) duration + _t.position = offset; + _t.resetOnPosition(_t.position); + if (!_t.isHTML5) { + position = _fV === 9 ? _t.position : _t.position / 1000; + // KJV We want our sounds to play on seek. A progressive download that + // is loaded has paused = false so resume() does nothing and the sound + // doesn't play. Handle that case here. + if (_t.playState === 0) { + _t.play({ position: position }); + } else { + _s.o._setPosition(_t.sID, position, (_t.paused || !_t.playState)); // if paused or not playing, will not resume (by playing) + // if (_t.paused) { + // _t.resume(); + // } + } + } else if (_a) { + _s._wD('setPosition(): setting position to '+(_t.position / 1000)); + if (_t.playState) { + // DOM/JS errors/exceptions to watch out for: + // if seek is beyond (loaded?) position, "DOM exception 11" + // "INDEX_SIZE_ERR": DOM exception 1 + try { + _a.currentTime = _t.position / 1000; + } catch(e) { + _s._wD('setPosition('+_t.position+'): WARN: Caught exception: '+e.message, 2); + } + } else { + _s._wD('HTML 5 warning: cannot set position while playState == 0 (not playing)',2); + } + if (_t.paused) { // if paused, refresh UI right away + _t._onTimer(true); // force update + if (_t._iO.useMovieStar) { + _t.resume(); + } + } + } + return _t; + }; + + this.pause = function(bCallFlash) { + if (_t.paused || (_t.playState === 0 && _t.readyState !== 1)) { + return _t; + } + _s._wD('SMSound.pause()'); + _t.paused = true; + if (!_t.isHTML5) { + if (bCallFlash || bCallFlash === undefined) { + _s.o._pause(_t.sID); + } + } else { + _t._setup_html5().pause(); + _stop_html5_timer(); + } + if (_t._iO.onpause) { + _t._iO.onpause.apply(_t); + } + return _t; + }; + + this.resume = function() { + // When auto-loaded streams pause on buffer full they have a playState of 0. + // We need to make sure that the playState is set to 1 when these streams "resume". + if (!_t.paused) { + return _t; + } + _s._wD('SMSound.resume()'); + _t.paused = false; + _t.playState = 1; // TODO: verify that this is needed. + if (!_t.isHTML5) { + _s.o._pause(_t.sID); // flash method is toggle-based (pause/resume) + } else { + _t._setup_html5().play(); + _start_html5_timer(); + } + if (_t._iO.onresume) { + _t._iO.onresume.apply(_t); + } + return _t; + }; + + this.togglePause = function() { + _s._wD('SMSound.togglePause()'); + if (_t.playState === 0) { + _t.play({ + position: (_fV === 9 && !_t.isHTML5 ? _t.position:_t.position / 1000) + }); + return _t; + } + if (_t.paused) { + _t.resume(); + } else { + _t.pause(); + } + return _t; + }; + + this.setPan = function(nPan, bInstanceOnly) { + if (typeof nPan === 'undefined') { + nPan = 0; + } + if (typeof bInstanceOnly === 'undefined') { + bInstanceOnly = false; + } + if (!_t.isHTML5) { + _s.o._setPan(_t.sID, nPan); + } // else { no HTML5 pan? } + _t._iO.pan = nPan; + if (!bInstanceOnly) { + _t.pan = nPan; + } + return _t; + }; + + this.setVolume = function(nVol, bInstanceOnly) { + if (typeof nVol === 'undefined') { + nVol = 100; + } + if (typeof bInstanceOnly === 'undefined') { + bInstanceOnly = false; + } + if (!_t.isHTML5) { + _s.o._setVolume(_t.sID, (_s.muted && !_t.muted) || _t.muted?0:nVol); + } else if (_a) { + _a.volume = nVol/100; + } + _t._iO.volume = nVol; + if (!bInstanceOnly) { + _t.volume = nVol; + } + return _t; + }; + + this.mute = function() { + _t.muted = true; + if (!_t.isHTML5) { + _s.o._setVolume(_t.sID, 0); + } else if (_a) { + _a.muted = true; + } + return _t; + }; + + this.unmute = function() { + _t.muted = false; + var hasIO = typeof _t._iO.volume !== 'undefined'; + if (!_t.isHTML5) { + _s.o._setVolume(_t.sID, hasIO?_t._iO.volume:_t.options.volume); + } else if (_a) { + _a.muted = false; + } + return _t; + }; + + this.toggleMute = function() { + return (_t.muted?_t.unmute():_t.mute()); + }; + + this.onposition = function(nPosition, oMethod, oScope) { + // TODO: allow for ranges, too? eg. (nPosition instanceof Array) + _t._onPositionItems.push({ + position: nPosition, + method: oMethod, + scope: (typeof oScope !== 'undefined'?oScope:_t), + fired: false + }); + return _t; + }; + + this.processOnPosition = function() { + var i, item, j = _t._onPositionItems.length; + if (!j || !_t.playState || _t._onPositionFired >= j) { + return false; + } + for (i=j; i--;) { + item = _t._onPositionItems[i]; + if (!item.fired && _t.position >= item.position) { + item.method.apply(item.scope,[item.position]); + item.fired = true; + _s._onPositionFired++; + } + } + return true; + }; + + this.resetOnPosition = function(nPosition) { + // reset "fired" for items interested in this position + var i, item, j = _t._onPositionItems.length; + if (!j) { + return false; + } + for (i=j; i--;) { + item = _t._onPositionItems[i]; + if (item.fired && nPosition <= item.position) { + item.fired = false; + _s._onPositionFired--; + } + } + return true; + }; + + // pseudo-private soundManager reference + + this._onTimer = function(bForce) { + // HTML 5-only _whileplaying() etc. + var time, x = {}; + if (_t._hasTimer || bForce) { + if (_a && (bForce || ((_t.playState > 0 || _t.readyState === 1) && !_t.paused))) { // TODO: May not need to track readyState (1 = loading) + _t.duration = _get_html5_duration(); + _t.durationEstimate = _t.duration; + time = _a.currentTime?_a.currentTime*1000:0; + _t._whileplaying(time,x,x,x,x); + return true; + } else { + _s._wD('_onTimer: Warn for "'+_t.sID+'": '+(!_a?'Could not find element. ':'')+(_t.playState === 0?'playState bad, 0?':'playState = '+_t.playState+', OK')); + return false; + } + } + }; + + // --- private internals --- + + _get_html5_duration = function() { + var d = (_a?_a.duration*1000:undefined); + return (d && !isNaN(d)?d:null); + }; + + _start_html5_timer = function() { + if (_t.isHTML5) { + _startTimer(_t); + } + }; + + _stop_html5_timer = function() { + if (_t.isHTML5) { + _stopTimer(_t); + } + }; + + _resetProperties = function(bLoaded) { + _t._onPositionItems = []; + _t._onPositionFired = 0; + _t._hasTimer = null; + _t._added_events = null; + _t._audio = null; + _a = null; + _t.bytesLoaded = null; + _t.bytesTotal = null; + _t.position = null; + _t.duration = (_t._iO && _t._iO.duration?_t._iO.duration:null); + _t.durationEstimate = null; + _t.failures = 0; + _t.loaded = false; + _t.playState = 0; + _t.paused = false; + _t.readyState = 0; // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success + _t.muted = false; + _t.didBeforeFinish = false; + _t.didJustBeforeFinish = false; + _t.isBuffering = false; + _t.instanceOptions = {}; + _t.instanceCount = 0; + _t.peakData = { + left: 0, + right: 0 + }; + _t.waveformData = { + left: [], + right: [] + }; + _t.eqData = []; // legacy: 1D array + _t.eqData.left = []; + _t.eqData.right = []; + }; + + _resetProperties(); + + // pseudo-private methods used by soundManager + + this._setup_html5 = function(oOptions) { + var _iO = _mixin(_t._iO, oOptions); + if (_a) { + if (_t.url !== _iO.url) { + _s._wD('setting new URL on existing object: '+_iO.url); + _a.src = _iO.url; + } + } else { + _s._wD('creating HTML 5 audio element with URL: '+_iO.url); + _t._audio = new Audio(_iO.url); + _a = _t._audio; + _t.isHTML5 = true; + _add_html5_events(); + } + _a.loop = (_iO.loops>1?'loop':''); + return _t._audio; + }; + + // related private methods + + _add_html5_events = function() { + if (_t._added_events) { + return false; + } + _t._added_events = true; + + function _add(oEvt, oFn, bCapture) { + return (_a ? _a.addEventListener(oEvt, oFn, bCapture||false) : null); + } + + _add('load', function(e) { + _s._wD('HTML5::load: '+_t.sID); + if (_a) { + _t._onbufferchange(0); + _t._whileloading(_t.bytesTotal, _t.bytesTotal, _get_html5_duration()); + _t._onload(true); + } + }, false); + + _add('canplay', function(e) { + _s._wD('HTML5::canplay: '+_t.sID); + // enough has loaded to play + _t._onbufferchange(0); + },false); + + _add('waiting', function(e) { + _s._wD('HTML5::waiting: '+_t.sID); + // playback faster than download rate, etc. + _t._onbufferchange(1); + },false); + + _add('progress', function(e) { // not supported everywhere yet.. + _s._wD('HTML5::progress: '+_t.sID+': loaded/total: '+(e.loaded||0)+'/'+(e.total||1)); + if (!_t.loaded && _a) { + _t._onbufferchange(0); // if progress, likely not buffering + _t._whileloading(e.loaded||0, e.total||1, _get_html5_duration()); + } + }, false); + + _add('error', function(e) { + if (_a) { + _s._wD('HTML5::error: '+_a.error.code); + // call load with error state? + _t._onload(false); + } + }, false); + + _add('loadstart', function(e) { + _s._wD('HTML5::loadstart: '+_t.sID); + // assume buffering at first + _t._onbufferchange(1); + }, false); + + _add('play', function(e) { + _s._wD('HTML5::play: '+_t.sID); + // once play starts, no buffering + _t._onbufferchange(0); + }, false); + + // TODO: verify if this is actually implemented anywhere yet. + _add('playing', function(e) { + _s._wD('HTML5::playing: '+_t.sID); + // once play starts, no buffering + _t._onbufferchange(0); + }, false); + + _add('timeupdate', function(e) { + _t._onTimer(); + }, false); + + // avoid stupid premature event-firing bug in Safari(?) + setTimeout(function(){ + if (_t && _a) { + _add('ended',function(e) { + _s._wD('HTML5::ended: '+_t.sID); + _t._onfinish(); + }, false); + } + }, 250); + return true; + }; + + // --- "private" methods called by Flash --- + + this._whileloading = function(nBytesLoaded, nBytesTotal, nDuration, nBufferLength) { + _t.bytesLoaded = nBytesLoaded; + _t.bytesTotal = nBytesTotal; + _t.duration = Math.floor(nDuration); + _t.bufferLength = nBufferLength; + if (!_t._iO.isMovieStar) { + if (_t._iO.duration) { + // use options, if specified and larger + _t.durationEstimate = (_t.duration > _t._iO.duration) ? _t.duration : _t._iO.duration; + } else { + _t.durationEstimate = parseInt((_t.bytesTotal / _t.bytesLoaded) * _t.duration, 10); + } + if (_t.durationEstimate === undefined) { + _t.durationEstimate = _t.duration; + } + _t.bufferLength = nBufferLength; + if (_t.readyState !== 3 && _t._iO.whileloading) { + _t._iO.whileloading.apply(_t); + } + } else { + _t.durationEstimate = _t.duration; + if (_t.readyState !== 3 && _t._iO.whileloading) { + _t._iO.whileloading.apply(_t); + } + } + }; + + this._onid3 = function(oID3PropNames, oID3Data) { + // oID3PropNames: string array (names) + // ID3Data: string array (data) + _s._wD('SMSound._onid3(): "' + this.sID + '" ID3 data received.'); + var oData = [], i, j; + for (i = 0, j = oID3PropNames.length; i < j; i++) { + oData[oID3PropNames[i]] = oID3Data[i]; + } + _t.id3 = _mixin(_t.id3, oData); + if (_t._iO.onid3) { + _t._iO.onid3.apply(_t); + } + }; + + this._whileplaying = function(nPosition, oPeakData, oWaveformDataLeft, oWaveformDataRight, oEQData) { + if (isNaN(nPosition) || nPosition === null) { + return false; // Flash may return NaN at times + } + if (_t.playState === 0 && nPosition > 0) { + // invalid position edge case for end/stop + nPosition = 0; + } + _t.position = nPosition; + _t.processOnPosition(); + if (_fV > 8 && !_t.isHTML5) { + if (_t._iO.usePeakData && typeof oPeakData !== 'undefined' && oPeakData) { + _t.peakData = { + left: oPeakData.leftPeak, + right: oPeakData.rightPeak + }; + } + if (_t._iO.useWaveformData && typeof oWaveformDataLeft !== 'undefined' && oWaveformDataLeft) { + _t.waveformData = { + left: oWaveformDataLeft.split(','), + right: oWaveformDataRight.split(',') + }; + } + if (_t._iO.useEQData) { + if (typeof oEQData !== 'undefined' && oEQData && oEQData.leftEQ) { + var eqLeft = oEQData.leftEQ.split(','); + _t.eqData = eqLeft; + _t.eqData.left = eqLeft; + if (typeof oEQData.rightEQ !== 'undefined' && oEQData.rightEQ) { + _t.eqData.right = oEQData.rightEQ.split(','); + } + } + } + } + if (_t.playState === 1) { + // special case/hack: ensure buffering is false if loading from cache (and not yet started) + if (!_t.isHTML5 && _s.flashVersion === 8 && !_t.position && _t.isBuffering) { + _t._onbufferchange(0); + } + if (_t._iO.whileplaying) { + _t._iO.whileplaying.apply(_t); // flash may call after actual finish + } + if ((_t.loaded || (!_t.loaded && _t._iO.isMovieStar)) && _t._iO.onbeforefinish && _t._iO.onbeforefinishtime && !_t.didBeforeFinish && _t.duration - _t.position <= _t._iO.onbeforefinishtime) { + _t._onbeforefinish(); + } + } + return true; + }; + + this._onconnect = function(bSuccess) { + var fN = 'SMSound._onconnect(): '; + bSuccess = (bSuccess === 1); + _s._wD(fN+'"'+_t.sID+'"'+(bSuccess?' connected.':' failed to connect? - '+_t.url), (bSuccess?1:2)); + _t.connected = bSuccess; + if (bSuccess) { + _t.failures = 0; + if (_t._iO.onconnect) { + _t._iO.onconnect.apply(_t,[bSuccess]); + } + // don't play if the sound is being destroyed + if (_idCheck(_t.sID) && (_t.options.autoLoad || _t.getAutoPlay())) { + _t.play(undefined, _t.getAutoPlay()); // only update the play state if auto playing + } + } + }; + + this._onload = function(nSuccess) { + var fN = 'SMSound._onload(): ', loadOK = (nSuccess?true:false); + _s._wD(fN + '"' + _t.sID + '"' + (loadOK?' loaded.':' failed to load? - ' + _t.url), (loadOK?1:2)); + // + if (!loadOK && !_t.isHTML5) { + if (_s.sandbox.noRemote === true) { + _s._wD(fN + _str('noNet'), 1); + } + if (_s.sandbox.noLocal === true) { + _s._wD(fN + _str('noLocal'), 1); + } + } + // + _t.loaded = loadOK; + _t.readyState = loadOK?3:2; + _t._onbufferchange(0); + if (_t._iO.onload) { + _t._iO.onload.apply(_t, [loadOK]); + } + return true; + }; + + // fire onfailure() only once at most + // at this point we just recreate failed sounds rather than trying to reconnect. + this._onfailure = function(msg, level, code) { + _t.failures++; + _s._wD('SMSound._onfailure(): "'+_t.sID+'" count '+_t.failures); + if (_t._iO.onfailure && _t.failures === 1) { + _t._iO.onfailure(_t, msg, level, code); + } else { + _s._wD('SMSound._onfailure(): ignoring'); + } + }; + + this._onbeforefinish = function() { + if (!_t.didBeforeFinish) { + _t.didBeforeFinish = true; + if (_t._iO.onbeforefinish) { + _s._wD('SMSound._onbeforefinish(): "' + _t.sID + '"'); + _t._iO.onbeforefinish.apply(_t); + } + } + }; + + this._onjustbeforefinish = function(msOffset) { + if (!_t.didJustBeforeFinish) { + _t.didJustBeforeFinish = true; + if (_t._iO.onjustbeforefinish) { + _s._wD('SMSound._onjustbeforefinish(): "' + _t.sID + '"'); + _t._iO.onjustbeforefinish.apply(_t); + } + } + }; + + // KJV - connect & play time callback from Flash + this._onstats = function(stats) { + if (_t._iO.onstats) { + _t._iO.onstats(_t, stats); + } + }; + + this._onfinish = function() { + // _s._wD('SMSound._onfinish(): "' + _t.sID + '" got instanceCount '+_t.instanceCount); + _t._onbufferchange(0); + _t.resetOnPosition(0); + if (_t._iO.onbeforefinishcomplete) { + _t._iO.onbeforefinishcomplete.apply(_t); + } + // reset some state items + _t.didBeforeFinish = false; + _t.didJustBeforeFinish = false; + if (_t.instanceCount) { + _t.instanceCount--; + if (!_t.instanceCount) { + // reset instance options + _t.playState = 0; + _t.paused = false; + _t.instanceCount = 0; + _t.instanceOptions = {}; + _stop_html5_timer(); + } + if (!_t.instanceCount || _t._iO.multiShotEvents) { + // fire onfinish for last, or every instance + if (_t._iO.onfinish) { + _s._wD('SMSound._onfinish(): "' + _t.sID + '"'); + _t._iO.onfinish.apply(_t); + } + } + } + }; + + this._onbufferchange = function(nIsBuffering) { + var fN = 'SMSound._onbufferchange()'; + if (_t.playState === 0) { + // ignore if not playing + return false; + } + if ((nIsBuffering && _t.isBuffering) || (!nIsBuffering && !_t.isBuffering)) { + return false; + } + _t.isBuffering = (nIsBuffering === 1); + if (_t._iO.onbufferchange) { + _s._wD(fN + ': ' + nIsBuffering); + _t._iO.onbufferchange.apply(_t); + } + return true; + }; + + this._ondataerror = function(sError) { + // flash 9 wave/eq data handler + if (_t.playState > 0) { // hack: called at start, and end from flash at/after onfinish() + _s._wD('SMSound._ondataerror(): ' + sError); + if (_t._iO.ondataerror) { + _t._iO.ondataerror.apply(_t); + } + } + }; + + }; // SMSound() + + // --- private SM2 internals --- + + _getDocument = function() { + return (_doc.body?_doc.body:(_doc._docElement?_doc.documentElement:_doc.getElementsByTagName('div')[0])); + }; + + _id = function(sID) { + return _doc.getElementById(sID); + }; + + _mixin = function(oMain, oAdd) { + // non-destructive merge + var o1 = {}, i, o2, o; + for (i in oMain) { // clone c1 + if (oMain.hasOwnProperty(i)) { + o1[i] = oMain[i]; + } + } + o2 = (typeof oAdd === 'undefined'?_s.defaultOptions:oAdd); + for (o in o2) { + if (o2.hasOwnProperty(o) && typeof o1[o] === 'undefined') { + o1[o] = o2[o]; + } + } + return o1; + }; + + (function() { + var old = (_win.attachEvent), + evt = { + add: (old?'attachEvent':'addEventListener'), + remove: (old?'detachEvent':'removeEventListener') + }; + + function getArgs(oArgs) { + var args = _slice.call(oArgs), len = args.length; + if (old) { + args[1] = 'on' + args[1]; // prefix + if (len > 3) { + args.pop(); // no capture + } + } else if (len === 3) { + args.push(false); + } + return args; + } + + function apply(args, sType) { + var oFunc = args.shift()[evt[sType]]; + if (old) { + oFunc(args[0], args[1]); + } else { + oFunc.apply(this, args); + } + } + + _addEvt = function() { + apply(getArgs(arguments), 'add'); + }; + + _removeEvt = function() { + apply(getArgs(arguments), 'remove'); + }; + }()); + + _html5OK = function(iO) { + return ((iO.type?_html5CanPlay({type:iO.type}):false)||_html5CanPlay(iO.url)); + }; + + _html5CanPlay = function(sURL) { + // try to find MIME, test and return truthiness + if (!_s.useHTML5Audio || !_s.hasHTML5) { + return false; + } + var result, mime, fileExt, item, aF = _s.audioFormats; + if (!_html5Ext) { + _html5Ext = []; + for (item in aF) { + if (aF.hasOwnProperty(item)) { + _html5Ext.push(item); + if (aF[item].related) { + _html5Ext = _html5Ext.concat(aF[item].related); + } + } + } + _html5Ext = new RegExp('\\.('+_html5Ext.join('|')+')','i'); + } + mime = (typeof sURL.type !== 'undefined'?sURL.type:null); + fileExt = (typeof sURL === 'string'?sURL.toLowerCase().match(_html5Ext):null); // TODO: Strip URL queries, etc. + if (!fileExt || !fileExt.length) { + if (!mime) { + return false; + } + } else { + fileExt = fileExt[0].substr(1); // "mp3", for example + } + if (fileExt && typeof _s.html5[fileExt] !== 'undefined') { + // result known + return _s.html5[fileExt]; + } else { + if (!mime) { + if (fileExt && _s.html5[fileExt]) { + return _s.html5[fileExt]; + } else { + // best-case guess, audio/whatever-dot-filename-format-you're-playing + mime = 'audio/'+fileExt; + } + } + result = _s.html5.canPlayType(mime); + _s.html5[fileExt] = result; + // _s._wD('canPlayType, found result: '+result); + return result; + } + }; + + _testHTML5 = function() { + if (!_s.useHTML5Audio || typeof Audio === 'undefined') { + return false; + } + var a = (typeof Audio !== 'undefined' ? new Audio():null), item, support = {}, aF, i; + function _cp(m) { + var canPlay, i, j, isOK = false; + if (!a || typeof a.canPlayType !== 'function') { + return false; + } + if (m instanceof Array) { + // iterate through all mime types, return any successes + for (i=0, j=m.length; i + notReady: 'Not loaded yet - wait for soundManager.onload()/onready()', + notOK: 'Audio support is not available.', + appXHTML: _sm + '::createMovie(): appendChild/innerHTML set failed. May be app/xhtml+xml DOM-related.', + spcWmode: _sm + '::createMovie(): Removing wmode, preventing win32 below-the-fold SWF loading issue', + swf404: _sm + ': Verify that %s is a valid path.', + tryDebug: 'Try ' + _sm + '.debugFlash = true for more security details (output goes to SWF.)', + checkSWF: 'See SWF output for more debug info.', + localFail: _sm + ': Non-HTTP page (' + _doc.location.protocol + ' URL?) Review Flash player security settings for this special case:\nhttp://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html\nMay need to add/allow path, eg. c:/sm2/ or /users/me/sm2/', + waitFocus: _sm + ': Special case: Waiting for focus-related event..', + waitImpatient: _sm + ': Getting impatient, still waiting for Flash%s...', + waitForever: _sm + ': Waiting indefinitely for Flash (will recover if unblocked)...', + needFunction: _sm + '.onready(): Function object expected', + badID: 'Warning: Sound ID "%s" should be a string, starting with a non-numeric character', + noMS: 'MovieStar mode not enabled. Exiting.', + currentObj: '--- ' + _sm + '._debug(): Current sound objects ---', + waitEI: _sm + '::initMovie(): Waiting for ExternalInterface call from Flash..', + waitOnload: _sm + ': Waiting for window.onload()', + docLoaded: _sm + ': Document already loaded', + onload: _sm + '::initComplete(): calling soundManager.onload()', + onloadOK: _sm + '.onload() complete', + init: '-- ' + _sm + '::init() --', + didInit: _sm + '::init(): Already called?', + flashJS: _sm + ': Attempting to call Flash from JS..', + noPolling: _sm + ': Polling (whileloading()/whileplaying() support) is disabled.', + secNote: 'Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html', + badRemove: 'Warning: Failed to remove flash movie.', + noPeak: 'Warning: peakData features unsupported for movieStar formats', + shutdown: _sm + '.disable(): Shutting down', + queue: _sm + '.onready(): Queueing handler', + smFail: _sm + ': Failed to initialise.', + smError: 'SMSound.load(): Exception: JS-Flash communication failed, or JS error.', + fbTimeout: 'No flash response, applying .'+_s.swfCSS.swfTimedout+' CSS..', + fbLoaded: 'Flash loaded', + fbHandler: 'soundManager::flashBlockHandler()', + manURL: 'SMSound.load(): Using manually-assigned URL', + onURL: _sm + '.load(): current URL already assigned.', + badFV: 'soundManager.flashVersion must be 8 or 9. "%s" is invalid. Reverting to %s.', + as2loop: 'Note: Setting stream:false so looping can work (flash 8 limitation)', + noNSLoop: 'Note: Looping not implemented for MovieStar formats', + needfl9: 'Note: Switching to flash 9, required for MP4 formats.', + mfTimeout: 'Setting flashLoadTimeout = 0 (infinite) for off-screen, mobile flash case', + mfOn: 'mobileFlash::enabling on-screen flash repositioning', + policy: 'Enabling usePolicyFile for data access' + // + }; + + _id = function(sID) { + return _doc.getElementById(sID); + }; + + _str = function() { // o [,items to replace] + // + var args = _slice.call(arguments), // real array, please + o = args.shift(), // first arg + str = (_strings && _strings[o]?_strings[o]:''), i, j; + if (str && args && args.length) { + for (i = 0, j = args.length; i < j; i++) { + str = str.replace('%s', args[i]); + } + } + return str; + // + }; + + _loopFix = function(sOpt) { + // flash 8 requires stream = false for looping to work + if (_fV === 8 && sOpt.loops > 1 && sOpt.stream) { + _wDS('as2loop'); + sOpt.stream = false; + } + return sOpt; + }; + + _policyFix = function(sOpt, sPre) { + if (sOpt && !sOpt.usePolicyFile && (sOpt.onid3 || sOpt.usePeakData || sOpt.useWaveformData || sOpt.useEQData)) { + _s._wD((sPre?sPre+':':'') + _str('policy')); + sOpt.usePolicyFile = true; + } + return sOpt; + }; + + _complain = function(sMsg) { + if (typeof console !== 'undefined' && typeof console.warn !== 'undefined') { + console.warn(sMsg); + } else { + _s._wD(sMsg); + } + }; + + _doNothing = function() { + return false; + }; + + _disableObject = function(o) { + for (var oProp in o) { + if (o.hasOwnProperty(oProp) && typeof o[oProp] === 'function') { + o[oProp] = _doNothing; + } + } + oProp = null; + }; + + _failSafely = function(bNoDisable) { + // general failure exception handler + if (typeof bNoDisable === 'undefined') { + bNoDisable = false; + } + if (_disabled || bNoDisable) { + _wDS('smFail', 2); + _s.disable(bNoDisable); + } + }; + + _normalizeMovieURL = function(smURL) { + var urlParams = null; + if (smURL) { + if (smURL.match(/\.swf(\?\.*)?$/i)) { + urlParams = smURL.substr(smURL.toLowerCase().lastIndexOf('.swf?') + 4); + if (urlParams) { + return smURL; // assume user knows what they're doing + } + } else if (smURL.lastIndexOf('/') !== smURL.length - 1) { + smURL = smURL + '/'; + } + } + return (smURL && smURL.lastIndexOf('/') !== - 1?smURL.substr(0, smURL.lastIndexOf('/') + 1):'./') + _s.movieURL; + }; + + _setVersionInfo = function() { + if (_fV !== 8 && _fV !== 9) { + _s._wD(_str('badFV', _fV, _defaultFlashVersion)); + _s.flashVersion = _defaultFlashVersion; + } + var isDebug = (_s.debugMode || _s.debugFlash?'_debug.swf':'.swf'); // debug flash movie, if applicable + if (_s.flashVersion < 9 && _s.useHTML5Audio && _s.audioFormats.mp4.required) { + _s._wD(_str('needfl9')); + _s.flashVersion = 9; + } + _fV = _s.flashVersion; // short-hand for internal use + _s.version = _s.versionNumber + (_html5Only?' (HTML5-only mode)':(_fV === 9?' (AS3/Flash 9)':' (AS2/Flash 8)')); + // set up default options + if (_fV > 8) { + _s.defaultOptions = _mixin(_s.defaultOptions, _s.flash9Options); + _s.features.buffering = true; + } + if (_fV > 8 && _s.useMovieStar) { + // flash 9+ support for movieStar formats as well as MP3 + _s.defaultOptions = _mixin(_s.defaultOptions, _s.movieStarOptions); + _s.filePatterns.flash9 = new RegExp('\\.(mp3|' + _s.netStreamTypes.join('|') + ')(\\?.*)?$', 'i'); + _s.mimePattern = _s.netStreamMimeTypes; + _s.features.movieStar = true; + } else { + _s.features.movieStar = false; + } + _s.filePattern = _s.filePatterns[(_fV !== 8?'flash9':'flash8')]; + _s.movieURL = (_fV === 8?'soundmanager2.swf':'soundmanager2_flash9.swf').replace('.swf',isDebug); + _s.features.peakData = _s.features.waveformData = _s.features.eqData = (_fV > 8); + }; + + _setPolling = function(bPolling, bHighPerformance) { + if (!_s.o || !_s.allowPolling) { + return false; + } + _s.o._setPolling(bPolling, bHighPerformance); + }; + + (function() { + var old = (_win.attachEvent), + evt = { + add: (old?'attachEvent':'addEventListener'), + remove: (old?'detachEvent':'removeEventListener') + }; + + function getArgs(oArgs) { + var args = _slice.call(oArgs), len = args.length; + if (old) { + args[1] = 'on' + args[1]; // prefix + if (len > 3) { + args.pop(); // no capture + } + } else if (len === 3) { + args.push(false); + } + return args; + } + + function apply(args, sType) { + var oFunc = args.shift()[evt[sType]]; + if (old) { + oFunc(args[0], args[1]); + } else { + oFunc.apply(this, args); + } + } + + _addEvt = function() { + apply(getArgs(arguments), 'add'); + }; + + _removeEvt = function() { + apply(getArgs(arguments), 'remove'); + }; + }()); + + function _initDebug() { + if (_s.debugURLParam.test(_wl)) { + _s.debugMode = true; // allow force of debug mode via URL + } + // + if (_id(_s.debugID)) { + return false; + } + var oD, oDebug, oTarget, oToggle, tmp; + if (_s.debugMode && !_id(_s.debugID) && ((!_hasConsole || !_s.useConsole) || (_s.useConsole && _hasConsole && !_s.consoleOnly))) { + oD = _doc.createElement('div'); + oD.id = _s.debugID + '-toggle'; + oToggle = { + 'position': 'fixed', + 'bottom': '0px', + 'right': '0px', + 'width': '1.2em', + 'height': '1.2em', + 'lineHeight': '1.2em', + 'margin': '2px', + 'textAlign': 'center', + 'border': '1px solid #999', + 'cursor': 'pointer', + 'background': '#fff', + 'color': '#333', + 'zIndex': 10001 + }; + oD.appendChild(_doc.createTextNode('-')); + oD.onclick = _toggleDebug; + oD.title = 'Toggle SM2 debug console'; + if (_ua.match(/msie 6/i)) { + oD.style.position = 'absolute'; + oD.style.cursor = 'hand'; + } + for (tmp in oToggle) { + if (oToggle.hasOwnProperty(tmp)) { + oD.style[tmp] = oToggle[tmp]; + } + } + oDebug = _doc.createElement('div'); + oDebug.id = _s.debugID; + oDebug.style.display = (_s.debugMode?'block':'none'); + if (_s.debugMode && !_id(oD.id)) { + try { + oTarget = _getDocument(); + oTarget.appendChild(oD); + } catch(e2) { + throw new Error(_str('appXHTML')); + } + oTarget.appendChild(oDebug); + } + } + oTarget = null; + // + } + + _mobileFlash = (function(){ + + var oM = null; + + function resetPosition() { + if (oM) { + oM.left = oM.top = '-9999px'; + } + } + + function reposition() { + oM.left = _win.scrollX+'px'; + oM.top = _win.scrollY+'px'; + } + + function setReposition(bOn) { + _s._wD('mobileFlash::flash on-screen hack: '+(bOn?'ON':'OFF')); + var f = _win[(bOn?'add':'remove')+'EventListener']; + f('resize', reposition, false); + f('scroll', reposition, false); + } + + function check(inDoc) { + // mobile flash (Android for starters) check + oM = _s.oMC.style; + if (_ua.match(/android/i)) { + if (inDoc) { + if (_s.flashLoadTimeout) { + _s._wDS('mfTimeout'); + _s.flashLoadTimeout = 0; + } + return false; + } + _s._wD('mfOn'); + oM.position = 'absolute'; + oM.left = oM.top = '0px'; + setReposition(true); + _s.onready(function(){ + setReposition(false); // detach + resetPosition(); // restore when OK/timed out + }); + reposition(); + } + return true; + } + + return { + 'check': check + }; + + }()); + + _createMovie = function(smID, smURL) { + + var specialCase = null, + remoteURL = (smURL?smURL:_s.url), + localURL = (_s.altURL?_s.altURL:remoteURL), + oEmbed, oMovie, oTarget = _getDocument(), tmp, movieHTML, oEl, extraClass = _getSWFCSS(), s, x, sClass, side = '100%', isRTL = null, html = _doc.getElementsByTagName('html')[0]; + isRTL = (html && html.dir && html.dir.match(/rtl/i)); + smID = (typeof smID === 'undefined'?_s.id:smID); + + if (_didAppend && _appendSuccess) { + return false; // ignore if already succeeded + } + + function _initMsg() { + _s._wD('-- SoundManager 2 ' + _s.version + (!_html5Only && _s.useHTML5Audio?(_s.hasHTML5?' + HTML5 audio':', no HTML5 audio support'):'') + (_s.useMovieStar?', MovieStar mode':'') + (_s.useHighPerformance?', high performance mode, ':', ') + ((_s.useFastPolling?'fast':'normal') + ' polling') + (_s.wmode?', wmode: ' + _s.wmode:'') + (_s.debugFlash?', flash debug mode':'') + (_s.useFlashBlock?', flashBlock mode':'') + ' --', 1); + } + + if (_html5Only) { + _setVersionInfo(); + _initMsg(); + _s.oMC = _id(_s.movieID); + _init(); + // prevent multiple init attempts + _didAppend = true; + _appendSuccess = true; + return false; + } + + _didAppend = true; + + // safety check for legacy (change to Flash 9 URL) + _setVersionInfo(); + _s.url = _normalizeMovieURL(this._overHTTP?remoteURL:localURL); + smURL = _s.url; + + _s.wmode = (!_s.wmode && _s.useHighPerformance && !_s.useMovieStar?'transparent':_s.wmode); + + if (_s.wmode !== null && !_isIE && !_s.useHighPerformance && navigator.platform.match(/win32/i)) { + _s.specialWmodeCase = true; + // extra-special case: movie doesn't load until scrolled into view when using wmode = anything but 'window' here + // does not apply when using high performance (position:fixed means on-screen), OR infinite flash load timeout + _wDS('spcWmode'); + _s.wmode = null; + } + + oEmbed = { + 'name': smID, + 'id': smID, + 'src': smURL, + 'width': side, + 'height': side, + 'quality': 'high', + 'allowScriptAccess': _s.allowScriptAccess, + 'bgcolor': _s.bgColor, + 'pluginspage': 'http://www.macromedia.com/go/getflashplayer', + 'type': 'application/x-shockwave-flash', + 'wmode': _s.wmode + }; + + if (_s.debugFlash) { + oEmbed.FlashVars = 'debug=1'; + } + + if (!_s.wmode) { + delete oEmbed.wmode; // don't write empty attribute + } + + if (_isIE) { + // IE is "special". + oMovie = _doc.createElement('div'); + movieHTML = '' + (_s.wmode?' ':'') + '' + (_s.debugFlash?'':'') + ''; + } else { + oMovie = _doc.createElement('embed'); + for (tmp in oEmbed) { + if (oEmbed.hasOwnProperty(tmp)) { + oMovie.setAttribute(tmp, oEmbed[tmp]); + } + } + } + + _initDebug(); + extraClass = _getSWFCSS(); + oTarget = _getDocument(); + + if (oTarget) { + _s.oMC = _id(_s.movieID)?_id(_s.movieID):_doc.createElement('div'); + if (!_s.oMC.id) { + _s.oMC.id = _s.movieID; + _s.oMC.className = _s.swfCSS.swfDefault + ' ' + extraClass; + // "hide" flash movie + s = null; + oEl = null; + if (!_s.useFlashBlock) { + if (_s.useHighPerformance) { + s = { + 'position': 'fixed', + 'width': '8px', + 'height': '8px', + // >= 6px for flash to run fast, >= 8px to start up under Firefox/win32 in some cases. odd? yes. + 'bottom': '0px', + 'left': '0px', + 'overflow': 'hidden' + }; + } else { + s = { + 'position': 'absolute', + 'width': '6px', + 'height': '6px', + 'top': '-9999px', + 'left': '-9999px' + }; + if (isRTL) { + s.left = Math.abs(parseInt(s.left,10))+'px'; + } + } + } + if (_ua.match(/webkit/i)) { + _s.oMC.style.zIndex = 10000; // soundcloud-reported render/crash fix, safari 5 + } + if (!_s.debugFlash) { + for (x in s) { + if (s.hasOwnProperty(x)) { + _s.oMC.style[x] = s[x]; + } + } + } + try { + if (!_isIE) { + _s.oMC.appendChild(oMovie); + } + oTarget.appendChild(_s.oMC); + if (_isIE) { + oEl = _s.oMC.appendChild(_doc.createElement('div')); + oEl.className = _s.swfCSS.swfBox; + oEl.innerHTML = movieHTML; + } + _appendSuccess = true; + } catch(e) { + throw new Error(_str('appXHTML')); + } + _mobileFlash.check(); + } else { + // it's already in the document. + sClass = _s.oMC.className; + _s.oMC.className = (sClass?sClass+' ':_s.swfCSS.swfDefault) + (extraClass?' '+extraClass:''); + _s.oMC.appendChild(oMovie); + if (_isIE) { + oEl = _s.oMC.appendChild(_doc.createElement('div')); + oEl.className = _s.swfCSS.swfBox; + oEl.innerHTML = movieHTML; + } + _appendSuccess = true; + _mobileFlash.check(true); + } + } + + if (specialCase) { + _s._wD(specialCase); + } + + _initMsg(); + _s._wD('soundManager::createMovie(): Trying to load ' + smURL + (!this._overHTTP && _s.altURL?' (alternate URL)':''), 1); + + return true; + }; + + _idCheck = this.getSoundById; + + _initMovie = function() { + if (_html5Only) { + _createMovie(); + return false; + } + // attempt to get, or create, movie + if (_s.o) { + return false; // may already exist + } + _s.o = _s.getMovie(_s.id); // inline markup + if (!_s.o) { + if (!_oRemoved) { + // try to create + _createMovie(_s.id, _s.url); + } else { + // try to re-append removed movie after reboot() + if (!_isIE) { + _s.oMC.appendChild(_oRemoved); + } else { + _s.oMC.innerHTML = _oRemovedHTML; + } + _oRemoved = null; + _didAppend = true; + } + _s.o = _s.getMovie(_s.id); + } + if (_s.o) { + _s._wD('soundManager::initMovie(): Got '+_s.o.nodeName+' element ('+(_didAppend?'created via JS':'static HTML')+')'); + _wDS('waitEI'); + } + if (_s.oninitmovie instanceof Function) { + setTimeout(_s.oninitmovie, 1); + } + return true; + }; + + _go = function(sURL) { + // where it all begins. + if (sURL) { + _s.url = sURL; + } + _initMovie(); + }; + + _delayWaitForEI = function() { + setTimeout(_waitForEI, 500); + }; + + _waitForEI = function() { + if (_waitingForEI) { + return false; + } + _waitingForEI = true; + _removeEvt(_win, 'load', _delayWaitForEI); + if (_tryInitOnFocus && !_isFocused) { + _wDS('waitFocus'); + return false; + } + var p; + if (!_didInit) { + p = _s.getMoviePercent(); + _s._wD(_str('waitImpatient', (p === 100?' (SWF loaded)':(p > 0?' (SWF ' + p + '% loaded)':'')))); + } + setTimeout(function() { + p = _s.getMoviePercent(); + if (!_didInit) { + _s._wD(_sm + ': No Flash response within expected time.\nLikely causes: ' + (p === 0?'Loading ' + _s.movieURL + ' may have failed (and/or Flash ' + _fV + '+ not present?), ':'') + 'Flash blocked or JS-Flash security error.' + (_s.debugFlash?' ' + _str('checkSWF'):''), 2); + if (!this._overHTTP && p) { + _wDS('localFail', 2); + if (!_s.debugFlash) { + _wDS('tryDebug', 2); + } + } + if (p === 0) { + // if 0 (not null), probably a 404. + _s._wD(_str('swf404', _s.url)); + } + _debugTS('flashtojs', false, ': Timed out' + this._overHTTP?' (Check flash security or flash blockers)':' (No plugin/missing SWF?)'); + } + // give up / time-out, depending + if (!_didInit && _okToDisable) { + if (p === null) { + // SWF failed. Maybe blocked. + if (_s.useFlashBlock || _s.flashLoadTimeout === 0) { + if (_s.useFlashBlock) { + _flashBlockHandler(); + } + _wDS('waitForever'); + } else { + // old SM2 behaviour, simply fail + _failSafely(true); + } + } else { + // flash loaded? Shouldn't be a blocking issue, then. + if (_s.flashLoadTimeout === 0) { + _wDS('waitForever'); + } else { + _failSafely(true); + } + } + } + }, _s.flashLoadTimeout); + }; + + _go = function(sURL) { + // where it all begins. + if (sURL) { + _s.url = sURL; + } + _initMovie(); + }; + + // + _wDS = function(o, errorLevel) { + if (!o) { + return ''; + } else { + return _s._wD(_str(o), errorLevel); + } + }; + + if (_wl.indexOf('debug=alert') + 1 && _s.debugMode) { + _s._wD = function(sText) {alert(sText);}; + } + + _toggleDebug = function() { + var o = _id(_s.debugID), + oT = _id(_s.debugID + '-toggle'); + if (!o) { + return false; + } + if (_debugOpen) { + // minimize + oT.innerHTML = '+'; + o.style.display = 'none'; + } else { + oT.innerHTML = '-'; + o.style.display = 'block'; + } + _debugOpen = !_debugOpen; + }; + + _debugTS = function(sEventType, bSuccess, sMessage) { + // troubleshooter debug hooks + if (typeof sm2Debugger !== 'undefined') { + try { + sm2Debugger.handleEvent(sEventType, bSuccess, sMessage); + } catch(e) { + // oh well + } + } + return true; + }; + // + + _getSWFCSS = function() { + var css = []; + if (_s.debugMode) { + css.push(_s.swfCSS.sm2Debug); + } + if (_s.debugFlash) { + css.push(_s.swfCSS.flashDebug); + } + if (_s.useHighPerformance) { + css.push(_s.swfCSS.highPerf); + } + return css.join(' '); + }; + + _flashBlockHandler = function() { + // *possible* flash block situation. + var name = _str('fbHandler'), p = _s.getMoviePercent(); + if (!_s.supported()) { + if (_needsFlash) { + // make the movie more visible, so user can fix + _s.oMC.className = _getSWFCSS() + ' ' + _s.swfCSS.swfDefault + ' ' + (p === null?_s.swfCSS.swfTimedout:_s.swfCSS.swfError); + _s._wD(name+': '+_str('fbTimeout')+(p?' ('+_str('fbLoaded')+')':'')); + } + _s.didFlashBlock = true; + _processOnReady(true); // fire onready(), complain lightly + if (_s.onerror instanceof Function) { + _s.onerror.apply(_win); + } + } else { + // SM2 loaded OK (or recovered) + if (_s.didFlashBlock) { + _s._wD(name+': Unblocked'); + } + if (_s.oMC) { + _s.oMC.className = _getSWFCSS() + ' ' + _s.swfCSS.swfDefault + (' '+_s.swfCSS.swfUnblocked); + } + } + }; + + _handleFocus = function() { + function cleanup() { + _removeEvt(_win, 'focus', _handleFocus); + _removeEvt(_win, 'load', _handleFocus); + } + if (_isFocused || !_tryInitOnFocus) { + cleanup(); + return true; + } + _okToDisable = true; + _isFocused = true; + _s._wD('soundManager::handleFocus()'); + if (_isSafari && _tryInitOnFocus) { + // giant Safari 3.1 hack - assume mousemove = focus given lack of focus event + _removeEvt(_win, 'mousemove', _handleFocus); + } + // allow init to restart + _waitingForEI = false; + cleanup(); + return true; + }; + + _initComplete = function(bNoDisable) { + if (_didInit) { + return false; + } + if (_html5Only) { + // all good. + _s._wD('-- SoundManager 2: loaded --'); + _didInit = true; + _processOnReady(); + _initUserOnload(); + return true; + } + var sClass = _s.oMC.className, + wasTimeout = (_s.useFlashBlock && _s.flashLoadTimeout && !_s.getMoviePercent()); + if (!wasTimeout) { + _didInit = true; + } + _s._wD('-- SoundManager 2 ' + (_disabled?'failed to load':'loaded') + ' (' + (_disabled?'security/load error':'OK') + ') --', 1); + if (_disabled || bNoDisable) { + if (_s.useFlashBlock) { + _s.oMC.className = _getSWFCSS() + ' ' + (_s.getMoviePercent() === null?_s.swfCSS.swfTimedout:_s.swfCSS.swfError); + } + _processOnReady(); + _debugTS('onload', false); + if (_s.onerror instanceof Function) { + _s.onerror.apply(_win); + } + return false; + } else { + _debugTS('onload', true); + } + if (_s.waitForWindowLoad && !_windowLoaded) { + _wDS('waitOnload'); + _addEvt(_win, 'load', _initUserOnload); + return false; + } else { + if (_s.waitForWindowLoad && _windowLoaded) { + _wDS('docLoaded'); + } + _initUserOnload(); + } + return true; + }; + + _addOnReady = function(oMethod, oScope) { + _onready.push({ + 'method': oMethod, + 'scope': (oScope || null), + 'fired': false + }); + }; + + _processOnReady = function(ignoreInit) { + if (!_didInit && !ignoreInit) { + // not ready yet. + return false; + } + var status = { + success: (ignoreInit?_s.supported():!_disabled) + }, + queue = [], i, j, + canRetry = (!_s.useFlashBlock || (_s.useFlashBlock && !_s.supported())); + for (i = 0, j = _onready.length; i < j; i++) { + if (_onready[i].fired !== true) { + queue.push(_onready[i]); + } + } + if (queue.length) { + _s._wD(_sm + ': Firing ' + queue.length + ' onready() item' + (queue.length > 1?'s':'')); + for (i = 0, j = queue.length; i < j; i++) { + if (queue[i].scope) { + queue[i].method.apply(queue[i].scope, [status]); + } else { + queue[i].method(status); + } + if (!canRetry) { // flashblock case doesn't count here + queue[i].fired = true; + } + } + } + return true; + }; + + _initUserOnload = function() { + _win.setTimeout(function() { + if (_s.useFlashBlock) { + _flashBlockHandler(); + } + _processOnReady(); + _wDS('onload', 1); + // call user-defined "onload", scoped to window + if (_s.onload instanceof Function) { + _s.onload.apply(_win); + } + _wDS('onloadOK', 1); + if (_s.waitForWindowLoad) { + _addEvt(_win, 'load', _initUserOnload); + } + },1); + }; + + _featureCheck = function() { + var needsFlash, item, + isBadSafari = (!_wl.match(/usehtml5audio/i) && !_wl.match(/sm2\-ignorebadua/i) && _isSafari && _ua.match(/OS X 10_6_(3|4)/i)), // Safari 4 and 5 occasionally fail to load/play HTML5 audio on Snow Leopard due to bug(s) in QuickTime X and/or other underlying frameworks. :/ Known Apple "radar" bug. https://bugs.webkit.org/show_bug.cgi?id=32159 + isSpecial = (_ua.match(/iphone os (1|2|3_0|3_1)/i)?true:false); // iPhone <= 3.1 has broken HTML5 audio(), but firmware 3.2 (iPad) + iOS4 works. + if (isSpecial) { + _s.hasHTML5 = false; // has Audio(), but is broken; let it load links directly. + _html5Only = true; // ignore flash case, however + if (_s.oMC) { + _s.oMC.style.display = 'none'; + } + return false; + } + if (_s.useHTML5Audio) { + if (!_s.html5 || !_s.html5.canPlayType) { + _s._wD('SoundManager: No HTML5 Audio() support detected.'); + _s.hasHTML5 = false; + return true; + } else { + _s.hasHTML5 = true; + } + if (isBadSafari) { + _s._wD('SoundManager::Note: Buggy HTML5 Audio in Safari on OS X 10.6.[3|4], see https://bugs.webkit.org/show_bug.cgi?id=32159 - disabling HTML5 audio',1); + _s.useHTML5Audio = false; + _s.hasHTML5 = false; + return true; + } + } else { + // flash required. + return true; + } + for (item in _s.audioFormats) { + if (_s.audioFormats.hasOwnProperty(item) && _s.audioFormats[item].required && !_s.html5.canPlayType(_s.audioFormats[item].type)) { + // may need flash for this format? + needsFlash = true; + } + } + // sanity check.. + if (_s.ignoreFlash) { + needsFlash = false; + } + _html5Only = (_s.useHTML5Audio && _s.hasHTML5 && !needsFlash); + return needsFlash; + }; + + _init = function() { + var item, tests = []; + _wDS('init'); + + // called after onload() + if (_didInit) { + _wDS('didInit'); + return false; + } + + function _cleanup() { + _removeEvt(_win, 'load', _s.beginDelayedInit); + } + + if (_s.hasHTML5) { + for (item in _s.audioFormats) { + if (_s.audioFormats.hasOwnProperty(item)) { + tests.push(item+': '+_s.html5[item]); + } + } + _s._wD('-- SoundManager 2: HTML5 support tests ('+_s.html5Test+'): '+tests.join(', ')+' --',1); + } + + if (_html5Only) { + if (!_didInit) { + // we don't need no steenking flash! + _cleanup(); + _s.enabled = true; + _initComplete(); + } + return true; + } + + // flash path + _initMovie(); + try { + _wDS('flashJS'); + _s.o._externalInterfaceTest(false); // attempt to talk to Flash + if (!_s.allowPolling) { + _wDS('noPolling', 1); + } else { + _setPolling(true, _s.useFastPolling?true:false); + } + if (!_s.debugMode) { + _s.o._disableDebug(); + } + _s.enabled = true; + _debugTS('jstoflash', true); + } catch(e) { + _s._wD('js/flash exception: ' + e.toString()); + _debugTS('jstoflash', false); + _failSafely(true); // don't disable, for reboot() + _initComplete(); + return false; + } + _initComplete(); + // event cleanup + _cleanup(); + return true; + }; + + _beginInit = function() { + if (_initPending) { + return false; + } + _createMovie(); + _initMovie(); + _initPending = true; + return true; + }; + + _dcLoaded = function() { + if (_didDCLoaded) { + return false; + } + _didDCLoaded = true; + _initDebug(); + _testHTML5(); + _s.html5.usingFlash = _featureCheck(); + _needsFlash = _s.html5.usingFlash; + _didDCLoaded = true; + if (_doc.removeEventListener) { + _doc.removeEventListener('DOMContentLoaded', _dcLoaded, false); + } + _go(); + return true; + }; + + _startTimer = function(oSound) { + if (!oSound._hasTimer) { + oSound._hasTimer = true; + } + }; + + _stopTimer = function(oSound) { + if (oSound._hasTimer) { + oSound._hasTimer = false; + } + }; + + _die = function() { + if (_s.onerror instanceof Function) { + _s.onerror(); + } + _s.disable(); + }; + + // pseudo-private methods called by Flash + + this._setSandboxType = function(sandboxType) { + // + var sb = _s.sandbox; + sb.type = sandboxType; + sb.description = sb.types[(typeof sb.types[sandboxType] !== 'undefined'?sandboxType:'unknown')]; + _s._wD('Flash security sandbox type: ' + sb.type); + if (sb.type === 'localWithFile') { + sb.noRemote = true; + sb.noLocal = false; + _wDS('secNote', 2); + } else if (sb.type === 'localWithNetwork') { + sb.noRemote = false; + sb.noLocal = true; + } else if (sb.type === 'localTrusted') { + sb.noRemote = false; + sb.noLocal = false; + } + // + }; + + this._externalInterfaceOK = function(flashDate) { + // flash callback confirming flash loaded, EI working etc. + // flashDate = approx. timing/delay info for JS/flash bridge + if (_s.swfLoaded) { + return false; + } + var eiTime = new Date().getTime(); + _s._wD('soundManager::externalInterfaceOK()' + (flashDate?' (~' + (eiTime - flashDate) + ' ms)':'')); + _debugTS('swf', true); + _debugTS('flashtojs', true); + _s.swfLoaded = true; + _tryInitOnFocus = false; + if (_isIE) { + // IE needs a timeout OR delay until window.onload - may need TODO: investigating + setTimeout(_init, 100); + } else { + _init(); + } + }; + + _dcIE = function() { + if (_doc.readyState === 'complete') { + _dcLoaded(); + _doc.detachEvent('onreadystatechange', _dcIE); + } + return true; + }; + + // focus and window load, init + if (!_s.hasHTML5 || _needsFlash) { + // only applies to Flash mode + _addEvt(_win, 'focus', _handleFocus); + _addEvt(_win, 'load', _handleFocus); + _addEvt(_win, 'load', _delayWaitForEI); + if (_isSafari && _tryInitOnFocus) { + _addEvt(_win, 'mousemove', _handleFocus); // massive Safari focus hack + } + } + + if (_doc.addEventListener) { + _doc.addEventListener('DOMContentLoaded', _dcLoaded, false); + } else if (_doc.attachEvent) { + _doc.attachEvent('onreadystatechange', _dcIE); + } else { + // no add/attachevent support - safe to assume no JS -> Flash either + _debugTS('onload', false); + _die(); + } + + if (_doc.readyState === 'complete') { + setTimeout(_dcLoaded,100); + } + +} // SoundManager() + +// var SM2_DEFER = true; +// details: http://www.schillmania.com/projects/soundmanager2/doc/getstarted/#lazy-loading + +if (typeof SM2_DEFER === 'undefined' || !SM2_DEFER) { + soundManager = new SoundManager(); +} + +// public interfaces +window.SoundManager = SoundManager; // constructor +window.soundManager = soundManager; // public instance: API, Flash callbacks etc. + +}(window)); diff --git a/frontend/static/js/swfobject.js b/frontend/static/js/swfobject.js new file mode 100644 index 0000000..8eafe9d --- /dev/null +++ b/frontend/static/js/swfobject.js @@ -0,0 +1,4 @@ +/* SWFObject v2.2 + is released under the MIT License +*/ +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab
    This is a great way to have a more private SCANNERJAMMER experience, should you want to talk to friends. Feel free to create as many rooms as you want.

    Thank you, we love you! -Pepper and ryz" + greetings = greetings.replace("%%USERNAME%%", Auth.username) + if (html) + greetings += "

    STATS TODAY
    "+html + $("#stats").html(greetings).fadeIn(1000) + } + } +var Main = + { + } +AdminTest.init() +$("#msg").hide() + diff --git a/frontend/static/js/tokbox.js b/frontend/static/js/tokbox.js new file mode 100644 index 0000000..69155ce --- /dev/null +++ b/frontend/static/js/tokbox.js @@ -0,0 +1,181 @@ + +function Toggler (div, on, off) + { + var state = false + function activate () + { + $(div).addClass("on").html("ON") + on () + } + function deactivate () + { + $(div).removeClass("on").html("off") + off () + } + function toggle () + { + state = ! state + if (state) + activate () + else + deactivate () + } + function destroy () + { + $(div).unbind("click") + } + $(div).bind("click", toggle) + } + +var Tokbox = + { + height: 150, + width: null, + token_url: "/cgi-bin/tokbox_room.cgi", + sessionid: null, + token: null, + togglers: [], + + session: null, + publisher: null, + subscribers: [], + + subscribeToStreams: function (streams) + { + for (var i = 0; i < streams.length; i++) + { + var stream = streams[i] + if (stream.connection.connectionId != Tokbox.session.connection.connectionId) + { + var parentDiv = document.getElementById("tokbox-subscribers") + var stubDiv = document.createElement("div") + stubDiv.id = "opentok_subscriber_"+stream.connection.connectionId + parentDiv.appendChild(stubDiv) + + var subscriberProps = {width: Tokbox.width, height: Tokbox.height, audioEnabled: true} + var subscriber = Tokbox.session.subscribe(stream, stubDiv.id, subscriberProps) + Tokbox.subscribers.push(subscriber) + } + } + }, + sessionConnectedHandler: function (event) + { + Tokbox.height = $("#tokbox-embed").height() + Tokbox.width = Math.floor( Tokbox.height / 1.618 ) + $("#tokbox-loading").hide() + + Tokbox.subscribeToStreams(event.streams) + + var parentDiv = document.getElementById("tokbox-publisher") + var stubDiv = document.createElement("div") + stubDiv.id = "opentok_publisher" + parentDiv.appendChild(stubDiv) + + var publisherProps = {width: Tokbox.width, height: Tokbox.height, microphoneEnabled: false} + Tokbox.publisher = Tokbox.session.publish(stubDiv.id, publisherProps) + $("#tokbox-loading").hide() + $("#tokbox-settings").fadeIn(1000) + }, + streamCreatedHandler: function (event) + { + Tokbox.subscribeToStreams(event.streams) + }, + tokenCallback: function (raw) + { + var lines = API.parse("/tokbox", raw) + if (! lines) + return d.error("API ERROR") + for (i in lines) + { + pair = lines[i].split("\t") + if (pair[0] === "ERROR") + return d.error(pair[1]) + else if (pair[0] === "SESSION") + Tokbox.sessionid = d.trim(pair[1]) + else if (pair[0] === "TOKEN") + Tokbox.token = d.trim(pair[1]) + } + if (Tokbox.sessionid && Tokbox.token) + Tokbox.activate() + }, + activate: function () + { + Tokbox.session = TB.initSession(Tokbox.sessionid) + Tokbox.session.addEventListener("sessionConnected", Tokbox.sessionConnectedHandler) + Tokbox.session.addEventListener("streamCreated", Tokbox.streamCreatedHandler) + Tokbox.session.connect(626221, Tokbox.token) + }, + microphoneOn: function () + { + Tokbox.publisher.publishAudio(true) + d.warn(">>>> MICROPHONE ON") + }, + microphoneOff: function () + { + Tokbox.publisher.publishAudio(false) + d.warn(">>>> MICROPHONE OFF") + }, + mute: function () + { + for (var i = 0; i < Tokbox.subscribers.length; i++) + { + try + { + Tokbox.subscribers[i].subscribeToAudio(false) + d.warn("MUTED "+i) + } + catch (err) + { + d.warn("UNMUTE ERROR "+i+" "+ err.description) + } + } + d.warn(">>>> MUTE ALL") + }, + unmute: function () + { + for (var i = 0; i < Tokbox.subscribers.length; i++) + { + try + { + Tokbox.subscribers[i].subscribeToAudio(true) + d.warn("UNMUTED "+i) + } + catch (err) + { + d.warn("UNMUTE ERROR "+i+" "+ err.description) + } + } + d.warn(">>>> UNMUTE ALL") + }, + load: function () + { + $("#tokbox-embed").show() + $("#tokbox-settings").hide() + $("#tokbox-loading").show() + $(window).trigger("resize") + $.get(Tokbox.token_url, {room:Room.name}).success(Tokbox.tokenCallback) + Tokbox.togglers.push( new Toggler ("#tokbox-microphone", Tokbox.microphoneOn, Tokbox.microphoneOff) ) + Tokbox.togglers.push( new Toggler ("#tokbox-mute-all", Tokbox.mute, Tokbox.unmute) ) + }, + unload: function () + { + $("#tokbox-embed").hide() + $(window).trigger("resize") + if (Tokbox.session) + { + if (Tokbox.publisher) + Tokbox.session.unpublish(Tokbox.publisher) + Tokbox.session.disconnect() + } + Tokbox.publisher = null + Tokbox.session = null + $("#tokbox-publisher").html("") + $("#tokbox-subscriber").html("") + for (t in Tokbox.togglers) + Tokbox.togglers[i].destroy () + Tokbox.togglers = [] + }, + init: function () + { + } + } diff --git a/frontend/static/js/top.js b/frontend/static/js/top.js new file mode 100644 index 0000000..9263bf8 --- /dev/null +++ b/frontend/static/js/top.js @@ -0,0 +1,251 @@ +var Keyboard = + { + altMode: false, + fullscreenKeys: function (event) + { + kc = event.keyCode + if (kc === 27) + Viewport.fullscreenOff() + if (kc === 37 || kc === 177) + Player.playPrev() + if (kc === 39 || kc === 176) + Player.playNext() + if (kc === 32 || kc === 179) + Player.toggle() + if (kc === 76) + Player.likeClick() + return false + }, + standardKeys: function (event) + { + kc = event.keyCode + if (kc === 91) + { + Keyboard.altMode = true + return true + } + if (kc === 27) + { + Viewport.fullscreenOn() + return false + } + if (kc === 37 || kc === 177) + { + Player.playPrev() + return false + } + else if (kc === 39 || kc === 176) + { + Player.playNext() + return false + } + if (! Keyboard.altMode && kc === 76) + { + Player.likeClick() + return false + } + if (kc === 32 || kc === 179) + { + Player.toggle() + return false + } + Keyboard.altMode = false + return true + } + } +var Viewport = + { + fullscreenMode: false, + fullscreenOn: function () + { + $("#logo,#logobg,#sitez,#playlist,#playlistbg,#contact,#bg,#gif-container,#controls").hide() + $("#settings-container").hide() + $(window).unbind("resize") + $(window).bind("resize", Viewport.fullscreenResize) + $(window).unbind("keydown") + $(window).bind("keydown", Keyboard.fullscreenKeys) + Viewport.fullscreenResize() + Viewport.fullscreenMode = true + }, + fullscreenResize: function () + { + $("#projector").css({ position: 'fixed', top: 0, left: 0, width: $(window).width(), height: $(window).height() }) + $("#screen,#ytscreen").css({ width: $(window).width(), height: $(window).height() }) + }, + fullscreenOff: function () + { + $("#logo,#logobg,#sitez,#playlist,#playlistbg,#contact,#bg,#gif-container,#controls").show() + $(window).unbind("resize") + $(window).bind("resize", Viewport.standardResize) + Viewport.standardResize() + Viewport.fullscreenMode = false + $(window).unbind("keydown") + $(window).bind("keydown", Keyboard.standardKeys) + $("#fullscreen").unbind("click") + $("#fullscreen").bind("click", Viewport.fullscreenOn) + }, + standardResize: function () + { + var w = $(window).width() + var h = $(window).height() + var contact = w * 200 / 1425 + var ytw = (w-contact-40)*4/7 + var yth = ytw * 9/16 + var plw = (w-contact-40)*3/7 + + $("#contact img").css("max-width", contact) + var conheight = $("#controls").height() + var contactheight = $("#contact").height() + var qheight = Math.max(yth+conheight+40, h - 94 - 60 - 100) + + $("#playlist").css("top", 94).css("left", contact/2) + $("#playlist,#playlistbg").css("width", plw-20+40) + $("#playlist,#playlistbg").css("height", qheight) + $("#queue").css("height", qheight) + var queuetop = $("#queue").offset().top + $("#playlistbg").css("top", queuetop).css("left", contact/2) + + $("#projector").css({ position: 'absolute', }) + $("#player").css("height", yth+conheight+20) + // $("#player").css("top", queuetop+(qheight-yth-conheight-20)/2).css("left", plw+(contact/2)+40) + $("#player").css("top", queuetop).css("left", plw+(contact/2)+40) + $("#projector").css("left", 10) + $("#player,#projector,#screen,#ytscreen").width(ytw-40) + $("#projector,#screen,#ytscreen").height(yth) + + $("#controls").css({ position: 'absolute', top: yth+20, bottom: 'auto', right: 'auto', }) + + $("#gif-container").css("top", qheight+30+134) + } + } + +var Profile = + { + mode: false, + loadQueue: function (queue) + { + if (! queue || ! queue.length) + return + Player.clearQueue() + $("#queue").html("") + Playlist.enqueueOldVideoFormat(queue) + }, + loadTodayQueue: function () + { + if (Profile.mode === "today") + return + Profile.mode = "today" + $(".mode").removeClass("mode") + $("#todayQueue").addClass("mode") + Profile.loadQueue(todayVideoQueue) + }, + loadYesterdayQueue: function () + { + if (Profile.mode === "yesterday") + return + Profile.mode = "yesterday" + $(".mode").removeClass("mode") + $("#yesterdayQueue").addClass("mode") + Profile.loadQueue(yesterdayVideoQueue) + }, + loadTopQueue: function () + { + if (Profile.mode === "top") + return + Profile.mode = "top" + $(".mode").removeClass("mode") + $("#topQueue").addClass("mode") + Profile.loadQueue(topVideoQueue) + }, + init: function () + { + if (todayVideoQueue && todayVideoQueue.length && todayVideoQueueTitle) + { + $("#queueLinks").append('
  • '+todayVideoQueueTitle+'
  • ') + $("#todayQueue").bind("click", Profile.loadTodayQueue) + todayVideoQueue.reverse() + } + if (yesterdayVideoQueue && yesterdayVideoQueue.length && yesterdayVideoQueueTitle) + { + $("#queueLinks").append('
  • '+yesterdayVideoQueueTitle+'
  • ') + $("#yesterdayQueue").bind("click", Profile.loadYesterdayQueue) + } + if (topVideoQueue && topVideoQueue.length && topVideoQueueTitle) + { + $("#queueLinks").append('
  • '+topVideoQueueTitle+'
  • ') + $("#topQueue").bind("click", Profile.loadTopQueue) + topVideoQueue.reverse() + } + if (todayVideoQueue && todayVideoQueue.length) + Profile.loadTodayQueue() + else if (yesterdayVideoQueue && yesterdayVideoQueue.length) + Profile.loadYesterdayQueue() + } + } + +var Room = + { + } +var Poll = + { + room: "main", + delay: 5000, + init: function () + { + if (document.cookie) + { + var cookies = document.cookie.split(";") + for (i in cookies) + { + var cookie = cookies[i].split("=") + if (cookie[0].indexOf("room") !== -1) + { + if (cookie[1] !== 'false' && cookie[1] !== 'undefined') + { + Poll.room = cookie[1] + break + } + } + } + } + Poll.poll() + Viewport.standardResize() + }, + poll: function () + { + $.post(API.URL.room.poll, + { + room: Poll.room, + session: Auth.session, + last: 1, + }).success(Poll.pollCallback).error(Poll.pollErrorCallback) + }, + pollErrorCallback: function () + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + }, + pollCallback: function (raw) + { + Poll.timer = setTimeout(Poll.poll, Poll.delay) + } + } + +var Main = + { + init: function () + { + $(window).bind("resize", Viewport.standardResize) + $(window).bind("keydown", Keyboard.standardKeys) + Playlist.showScores = true + Auth.success = Poll.init + if (Auth.init()) + Auth.checkin() + Profile.init() + Player.init() + $("#controls").fadeIn(2000) + $("#contact").fadeIn(2000) + setTimeout('Viewport.standardResize()', 1000) + } + } +Main.init() + diff --git a/frontend/static/js/vimeo.js b/frontend/static/js/vimeo.js new file mode 100644 index 0000000..e20fdbd --- /dev/null +++ b/frontend/static/js/vimeo.js @@ -0,0 +1,100 @@ +var Vimeo = + { + type: "vimeo", + loaded: false, + pending: false, + playing: false, + player: null, + playerId: null, + timeout: null, + video: null, + width: "100%", + height: "100%", + volume: 1,//from 100...some sort of error + play: function (video) + { + d.warn("VIMEO PLAY "+video.key) + if (video.error) + return Vimeo.error() + if (Vimeo.playing) + Vimeo.stop() + $("#screen").html("
    ") + Vimeo.video = video + Vimeo.playing = true + var params = { allowScriptAccess: "always", wmode: "opaque", } + var atts = { id: "vimeo" } + var flashvars = { api: 1 } + swfobject.embedSWF("http://vimeo.com/moogaloop.swf?clip_id="+video.name+"&server=vimeo.com&color=00adef&api=1", + "vimeo", "100%","100%", "8", null, flashvars, params, atts) + // $("#vimeo").html('') + }, + toggle: function () + { + if (Vimeo.player.api_paused()) + return Vimeo.resume() + else + return Vimeo.pause() + }, + error: function (s) + { + Player.error("VIMEO "+s) + Vimeo.finish() + }, + setVolume: function (vol) + { + Vimeo.volume = vol + Vimeo.player.api_setVolume(vol) + }, + pause: function () + { + d.warn("PAUSED PLAYBACK") + Vimeo.playing = false + Vimeo.player.api_pause() + return true + }, + resume: function () + { + d.warn("RESUME PLAYBACK") + Vimeo.playing = true + Vimeo.player.api_play() + return false + }, + stop: function () + { + d.warn("VIMEO STOP") + Vimeo.playing = false + }, + finish: function () + { + d.warn("VIMEO FINISH") + Vimeo.playing = false + swfobject.removeSWF("vimeo") + Player.finish() + }, + load: function () + { + d.warn("LOADING VIMEO") + Vimeo.loaded = true + }, + unload: function () + { + d.warn("VIMEO UNLOADED") + swfobject.removeSWF("vimeo") + Vimeo.loaded = false + }, + init: function () + { + d.warn("VIMEO INIT") + } + } +function vimeo_player_loaded() + { + d.warn("VIMEO LOADED") + Vimeo.player = document.getElementById('vimeo') + Vimeo.player.api_play() + // Vimeo.player.addEventListener("finish", "Vimeo.finish") + Vimeo.player.api_addEventListener("finish", "Vimeo.finish") + Vimeo.player.api_setVolume(Vimeo.volume) + } +Player.register(Vimeo) + diff --git a/frontend/static/js/youtube.js b/frontend/static/js/youtube.js new file mode 100644 index 0000000..936a44a --- /dev/null +++ b/frontend/static/js/youtube.js @@ -0,0 +1,177 @@ +var Youtube = + { + type: "youtube", + loaded: false, + pending: false, + playing: false, + player: null, + playerId: null, + timeout: null, + video: null, + width: "100%", + height: "100%", + getYtid: function (url) + { + if (! url) return + var ytid = url.substr(url.indexOf("v=")+2,11) + if (ytid.indexOf("&") !== -1) + ytid = ytid.substr(0, ytid.indexOf("&")) + if (ytid.indexOf("#") !== -1) + ytid = ytid.substr(0, ytid.indexOf("#")) + return ytid + }, + play: function (video) + { + d.warn("YOUTUBE PLAY "+video.key) + if (video.error) + return Youtube.error() + if (Youtube.playing) + Youtube.stop() + Youtube.video = video + Youtube.playing = true + if (Youtube.ready) + { + d.warn("ORDERING VIDEO LOAD "+video.name) + Youtube.player.loadVideoById(video.name) + Youtube.pending = false + } + else + { + d.error("YOUTUBE PLAYER NOT READY") + Youtube.pending = true + } + }, + toggle: function () + { + if (Youtube.playing) + return Youtube.pause() + else + return Youtube.resume() + }, + error: function (s) + { + Player.error("YOUTUBE "+s) + $("li#queue_"+Youtube.video.idx+" span.title").html("This video cannot be embedded") + setTimeout(Youtube.finish, 1000) + }, + onStateChange: function (state) + { + Youtube.state = state + if (state === -1) + { + d.warn("YOUTUBE: UNSTARTED") + Youtube.playing = false + } + else if (state === 0) + { + d.warn("YOUTUBE: ENDED") + Youtube.playing = false + return Youtube.finish() + } + else if (state === 1) + { + d.warn("YOUTUBE: PLAYING") + Youtube.playing = true + if (! Youtube.loaded) + return Youtube.unload() + } + else if (state === 2) + { + d.warn("YOUTUBE: PAUSED") + Youtube.playing = false + } + else if (state === 3) + { + d.warn("YOUTUBE: BUFFERING") + } + else if (state === 5) + { + d.warn("YOUTUBE: CUED") + } + else + { + d.error("YOUTUBE: UNKNOWN") + } + }, + onError: function (error) + { + var errorStr = 'UNKNOWN' + if (error === 2) + errorStr = "INVALID PARAMETER" + if (error === 100) + errorStr = "NOT FOUND" + if (error === 101 || error === 150) + errorStr = "EMBED FORBIDDEN" + Youtube.error(errorStr) + }, + setVolume: function (vol) + { + Youtube.player.setVolume(vol) + }, + pause: function () + { + d.warn("PAUSED PLAYBACK") + Youtube.playing = false + Youtube.player.pauseVideo() + return true + }, + resume: function () + { + d.warn("RESUME PLAYBACK") + Youtube.playing = true + Youtube.player.playVideo() + return false + }, + stop: function () + { + d.warn("YOUTUBE STOP") + Youtube.player.stopVideo() + Youtube.playing = false + }, + finish: function () + { + d.warn("YOUTUBE FINISH") + Youtube.playing = false + Player.finish() + }, + load: function () + { + d.warn("LOADING YOUTUBE") + $("#ytscreen").css("z-index", 19) + Youtube.loaded = true + }, + unload: function () + { + d.warn("YOUTUBE UNLOADED") + $("#ytscreen").css("z-index", -3) + if (Youtube.player) + Youtube.player.stopVideo() + Youtube.playing = false + Youtube.loaded = false + Youtube.pending = false + }, + init: function () + { + d.warn("YOUTUBE INIT") + var params = { allowScriptAccess: "always", wmode: "opaque" } + var atts = { id: "ytscreen" } + swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&version=3&playerapiid=ytscreen", + "ytscreen", Player.width, Player.height, "8", null, null, params, atts) + } + } +function onYouTubePlayerReady (playerId) + { + d.warn("YOUTUBE READY") + Youtube.player = document.getElementById(playerId) + Youtube.playerId = playerId + Youtube.player.addEventListener("onStateChange", "Youtube.onStateChange") + Youtube.player.addEventListener("onError", "Youtube.onError") + Youtube.ready = true + if (! Youtube.loaded) + return Youtube.unload() + if (Youtube.pending) + Youtube.player.loadVideoById(Youtube.video.name) + Youtube.pending = false + } +Player.register(Youtube) + diff --git a/frontend/static/other_rooms/admin.html b/frontend/static/other_rooms/admin.html new file mode 100644 index 0000000..4ec4a31 --- /dev/null +++ b/frontend/static/other_rooms/admin.html @@ -0,0 +1,78 @@ + + + +SANDBOX ADMIN + + + + + +
    + << back to room +

    MODERATOR COMMAND CENTER

    +
    +
    +
    + +

    CURRENT PLAYLIST FOR

    +
      +
      + +
      + +
      + +
      +
      + + + + +
      + + + + + + + + + + + + + + + + + + diff --git a/frontend/static/other_rooms/calendar.html b/frontend/static/other_rooms/calendar.html new file mode 100644 index 0000000..313eec1 --- /dev/null +++ b/frontend/static/other_rooms/calendar.html @@ -0,0 +1,89 @@ + + + +SCANNERJAMMER HISTORY + + + + + + + + + + + + + + + + + +
      + +
      + +
      +
      +
      +
      +
      +
      + +
      + +
      + + + +
      + +
      +
        +
        +
        + +
        + +
        +
        please enable javascript
        + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100644 index 0000000..954e22d Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100644 index 0000000..64ece57 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100644 index 0000000..abdc010 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100644 index 0000000..9b383f4 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png new file mode 100644 index 0000000..859c264 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..42ccba2 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100644 index 0000000..39d5824 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100644 index 0000000..f127367 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png new file mode 100644 index 0000000..359397a Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_222222_256x240.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..b273ff1 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_222222_256x240.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100644 index 0000000..a641a37 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_228ef1_256x240.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100644 index 0000000..85e63e9 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ef8c08_256x240.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100644 index 0000000..e117eff Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ffd27a_256x240.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000..42f8f99 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/css/ui-lightness/images/ui-icons_ffffff_256x240.png differ diff --git a/frontend/static/other_rooms/datepicker/css/ui-lightness/jquery-ui-1.8.13.custom.css b/frontend/static/other_rooms/datepicker/css/ui-lightness/jquery-ui-1.8.13.custom.css new file mode 100644 index 0000000..2d2810d --- /dev/null +++ b/frontend/static/other_rooms/datepicker/css/ui-lightness/jquery-ui-1.8.13.custom.css @@ -0,0 +1,362 @@ +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Datepicker 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/frontend/static/other_rooms/datepicker/datepicker.js b/frontend/static/other_rooms/datepicker/datepicker.js new file mode 100644 index 0000000..07ba984 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/datepicker.js @@ -0,0 +1,100 @@ +/*! + * jQuery UI 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13", +keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus(); +b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this, +"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection", +function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth, +outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b); +return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e= +0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a
        '))}function N(a){return a.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a", +"mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); +d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==B)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.13"}});var z=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)}, +_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a, +b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('
        '))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", +function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker); +if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f==""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]); +return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a); +if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d(''); +this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/ +2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a, +"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled= +false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled= +true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false; +for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a); +d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal= +null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos= +null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0], +top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover"); +c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"); +a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]}, +_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e- +g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst= +null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, +_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"): +0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear= +false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay= +d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a); +else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b= +a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort, +g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!= +c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames, +h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear|| +a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay? +new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a)); +n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m, +g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&& +a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
        '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
        ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='
        '+(/all|left/.test(t)&&x==0?c? +f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'
        ';var D=j?'":"";for(t=0;t<7;t++){var q=(t+h)%7;D+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}y+=D+"";D=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, +D);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;D=l?6:Math.ceil((t+D)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q";var R=!j?"":'";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],F=q.getMonth()!=g,L=F&&!K||!I[0]||k&&qo;R+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}y+=R+""}g++;if(g>11){g=0;m++}y+="
        '+this._get(a,"weekHeader")+"
        '+this._get(a,"calculateWeek")(q)+""+(F&&!C?" ":L?''+q.getDate()+ +"":''+q.getDate()+"")+"
        "+(l?"
        "+(i[0]>0&&G==i[1]-1?'
        ':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': +"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
        ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)? +r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+= +(h||!(j&&l)?" ":"")+o;k+="
        ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a, +"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a, +b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!= +"string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay)); +return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&& +arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.13";window["DP_jQuery_"+z]=d})(jQuery); +; \ No newline at end of file diff --git a/frontend/static/other_rooms/datepicker/development-bundle/AUTHORS.txt b/frontend/static/other_rooms/datepicker/development-bundle/AUTHORS.txt new file mode 100644 index 0000000..b216865 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/AUTHORS.txt @@ -0,0 +1,30 @@ +jQuery UI Authors (http://jqueryui.com/about) + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +and logs, available at http://github.com/jquery/jquery-ui + +Brandon Aaron +Paul Bakaus (paulbakaus.com) +David Bolter +Rich Caloggero +Chi Cheng (cloudream@gmail.com) +Colin Clark (http://colin.atrc.utoronto.ca/) +Michelle D'Souza +Aaron Eisenberger (aaronchi@gmail.com) +Ariel Flesler +Bohdan Ganicky +Scott González +Marc Grabanski (m@marcgrabanski.com) +Klaus Hartl (stilbuero.de) +Scott Jehl +Cody Lindley +Eduardo Lundgren (eduardolundgren@gmail.com) +Todd Parker +John Resig +Patty Toland +Ca-Phun Ung (yelotofu.com) +Keith Wood (kbwood@virginbroadband.com.au) +Maggie Costello Wachs +Richard D. Worth (rdworth.org) +Jörn Zaefferer (bassistance.de) diff --git a/frontend/static/other_rooms/datepicker/development-bundle/GPL-LICENSE.txt b/frontend/static/other_rooms/datepicker/development-bundle/GPL-LICENSE.txt new file mode 100644 index 0000000..11dddd0 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/GPL-LICENSE.txt @@ -0,0 +1,278 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. diff --git a/frontend/static/other_rooms/datepicker/development-bundle/MIT-LICENSE.txt b/frontend/static/other_rooms/datepicker/development-bundle/MIT-LICENSE.txt new file mode 100644 index 0000000..be22680 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/MIT-LICENSE.txt @@ -0,0 +1,25 @@ +Copyright (c) 2011 Paul Bakaus, http://jqueryui.com/ + +This software consists of voluntary contributions made by many +individuals (AUTHORS.txt, http://jqueryui.com/about) For exact +contribution history, see the revision history and logs, available +at http://jquery-ui.googlecode.com/svn/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/alt-field.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/alt-field.html new file mode 100644 index 0000000..c60b21a --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/alt-field.html @@ -0,0 +1,36 @@ + + + + + jQuery UI Datepicker - Populate alternate field + + + + + + + + + + +
        + +

        Date:  

        + +
        + + + +
        +

        Populate an alternate field with its own date format whenever a date is selected using the altField and altFormat options. This feature could be used to present a human-friendly date for user selection, while passing a more computer-friendly date through for further processing.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/animation.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/animation.html new file mode 100644 index 0000000..9814b98 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/animation.html @@ -0,0 +1,58 @@ + + + + + jQuery UI Datepicker - Animations + + + + + + + + + + + + + + + + + +
        + +

        Date:

        + +

        Animations:
        + +

        + +
        + + + +
        +

        Use different animations when opening or closing the datepicker. Choose an animation from the dropdown, then click on the input to see its effect. You can use one of the three standard animations or any of the UI Effects.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/buttonbar.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/buttonbar.html new file mode 100644 index 0000000..3b3be3b --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/buttonbar.html @@ -0,0 +1,35 @@ + + + + + jQuery UI Datepicker - Display button bar + + + + + + + + + + +
        + +

        Date:

        + +
        + + + +
        +

        Display a button for selecting Today's date and a Done button for closing the calendar with the boolean showButtonPanel option. Each button is enabled by default when the bar is displayed, but can be turned off with additional options. Button text is customizable.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/date-formats.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/date-formats.html new file mode 100644 index 0000000..e1ac673 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/date-formats.html @@ -0,0 +1,47 @@ + + + + + jQuery UI Datepicker - Format date + + + + + + + + + + +
        + +

        Date:

        + +

        Format options:
        + +

        + +
        + + + +
        +

        Display date feedback in a variety of ways. Choose a date format from the dropdown, then click on the input and select a date to see it in that format.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/date-range.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/date-range.html new file mode 100644 index 0000000..bf9b9a3 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/date-range.html @@ -0,0 +1,49 @@ + + + + + jQuery UI Datepicker - Select a Date Range + + + + + + + + + + +
        + + + + + + +
        + + + +
        +

        Select the date range to search for.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/default.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/default.html new file mode 100644 index 0000000..d50ac0d --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/default.html @@ -0,0 +1,33 @@ + + + + + jQuery UI Datepicker - Default functionality + + + + + + + + + + +
        + +

        Date:

        + +
        + + + +
        +

        The datepicker is tied to a standard form input field. Focus on the input (click, or use the tab key) to open an interactive calendar in a small overlay. Choose a date, click elsewhere on the page (blur the input), or hit the Esc key to close. If a date is chosen, feedback is shown as the input's value.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/dropdown-month-year.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/dropdown-month-year.html new file mode 100644 index 0000000..8392a15 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/dropdown-month-year.html @@ -0,0 +1,36 @@ + + + + + jQuery UI Datepicker - Display month & year menus + + + + + + + + + + +
        + +

        Date:

        + +
        + + + +
        +

        Show month and year dropdowns in place of the static month/year header to facilitate navigation through large timeframes. Add the boolean changeMonth and changeYear options.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/icon-trigger.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/icon-trigger.html new file mode 100644 index 0000000..5f4edc7 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/icon-trigger.html @@ -0,0 +1,37 @@ + + + + + jQuery UI Datepicker - Icon trigger + + + + + + + + + + +
        + +

        Date:

        + +
        + + + +
        +

        Click the icon next to the input field to show the datepicker. Set the datepicker to open on focus (default behavior), on icon click, or both.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/images/calendar.gif b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/images/calendar.gif new file mode 100644 index 0000000..d0abaa7 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/images/calendar.gif differ diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/index.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/index.html new file mode 100644 index 0000000..ed24774 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/index.html @@ -0,0 +1,31 @@ + + + + + jQuery UI Datepicker Demos + + + + + + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/inline.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/inline.html new file mode 100644 index 0000000..19c4b04 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/inline.html @@ -0,0 +1,33 @@ + + + + + jQuery UI Datepicker - Display inline + + + + + + + + + + +
        + +Date:
        + +
        + + + +
        +

        Display the datepicker embedded in the page instead of in an overlay. Simply call .datepicker() on a div instead of an input.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/localization.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/localization.html new file mode 100644 index 0000000..9103611 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/localization.html @@ -0,0 +1,162 @@ + + + + + jQuery UI Datepicker - Localize calendar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +

        Date:   +

        + +
        + + + +
        +

        Localize the datepicker calendar language and format (English / Western formatting is the default). The datepicker includes built-in support for languages that read right-to-left, such as Arabic and Hebrew.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/min-max.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/min-max.html new file mode 100644 index 0000000..e27339e --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/min-max.html @@ -0,0 +1,33 @@ + + + + + jQuery UI Datepicker - Restrict date range + + + + + + + + + + +
        + +

        Date:

        + +
        + + + +
        +

        Restrict the range of selectable dates with the minDate and maxDate options. Set the beginning and end dates as actual dates (new Date(2009, 1 - 1, 26)), as a numeric offset from today (-20), or as a string of periods and units ('+1M +10D'). For the last, use 'D' for days, 'W' for weeks, 'M' for months, or 'Y' for years.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/multiple-calendars.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/multiple-calendars.html new file mode 100644 index 0000000..0c762f7 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/multiple-calendars.html @@ -0,0 +1,36 @@ + + + + + jQuery UI Datepicker - Display multiple months + + + + + + + + + + +
        + +

        Date:

        + +
        + + + +
        +

        Set the numberOfMonths option to an integer of 2 or more to show multiple months in a single datepicker.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/other-months.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/other-months.html new file mode 100644 index 0000000..78a04f2 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/other-months.html @@ -0,0 +1,37 @@ + + + + + jQuery UI Datepicker - Dates in other months + + + + + + + + + + +
        + +

        Date:

        + +
        + + + +
        +

        The datepicker can show dates that come from other than the main month + being displayed. These other dates can also be made selectable.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/show-week.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/show-week.html new file mode 100644 index 0000000..1cdb349 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/datepicker/show-week.html @@ -0,0 +1,39 @@ + + + + + jQuery UI Datepicker - Show week of the year + + + + + + + + + + +
        + +

        Date:

        + +
        + + + +
        +

        The datepicker can show the week of the year. The default calculation follows + the ISO 8601 definition: the week starts on Monday, the first week of the year + contains the first Thursday of the year. This means that some days from one + year may be placed into weeks 'belonging' to another year.

        +
        + + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/demos.css b/frontend/static/other_rooms/datepicker/development-bundle/demos/demos.css new file mode 100644 index 0000000..2d2ce1f --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/demos.css @@ -0,0 +1,334 @@ +body { + font-size: 62.5%; +} + +table { + font-size: 1em; +} + +/* Site + -------------------------------- */ + +body { + font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif"; +} + +/* Layout + -------------------------------- */ + +.layout-grid { + width: 960px; +} + +.layout-grid td { + vertical-align: top; +} + +.layout-grid td.left-nav { + width: 140px; +} + +.layout-grid td.normal { + border-left: 1px solid #eee; + padding: 20px 24px; + font-family: "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif"; +} + +.layout-grid td.demos { + background: url('/images/demos_bg.jpg') no-repeat; + height: 337px; + overflow: hidden; +} + +/* Normal + -------------------------------- */ + +.normal h3, +.normal h4 { + margin: 0; + font-weight: normal; +} + +.normal h3 { + padding: 0 0 9px; + font-size: 1.8em; +} + +.normal h4 { + padding-bottom: 21px; + border-bottom: 1px dashed #999; + font-size: 1.2em; + font-weight: bold; +} + +.normal p { + font-size: 1.2em; +} + +/* Demos */ + +.demos-nav, .demos-nav dt, .demos-nav dd, .demos-nav ul, .demos-nav li { + margin: 0; + padding: 0 +} + +.demos-nav { + float: left; + width: 170px; + font-size: 1.3em; +} + +.demos-nav dt, +.demos-nav h4 { + margin: 0; + padding: 0; + font: normal 1.1em "Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif"; + color: #e87b10; +} + +.demos-nav dt, +.demos-nav h4 { + margin-top: 1.5em; + margin-bottom: 0; + padding-left: 8px; + padding-bottom:5px; + line-height: 1.2em; + border-bottom: 1px solid #F4F4F4; +} + +.demos-nav dd a, +.demos-nav li a { + border-bottom: 1px solid #F4F4F4; + display:block; + padding: 4px 3px 4px 8px; + font-size: 90%; + text-decoration: none; + color: #555 ; + margin:2px 0; + height:13px; +} + +.demos-nav dd a:hover, +.demos-nav dd a:focus, +.demos-nav dd a:hover, +.demos-nav dd a:focus { + background: #f3f3f3; + color:#000; + -moz-border-radius: 5px; -webkit-border-radius: 5px; +} + .demos-nav dd a.selected { + background: #555; + color:#ffffff; + -moz-border-radius: 5px; -webkit-border-radius: 5px; +} + + +/* new styles for demo pages, added by Filament 12.29.08 +eventually we should convert the font sizes to ems -- using px for now to minimize style conflicts +*/ + +.normal h3.demo-header { font-size:32px; padding:0 0 5px; border-bottom:1px solid #eee; text-transform: capitalize; } +.normal h4.demo-subheader { font-size:10px; text-transform: uppercase; color:#999; padding:8px 0 3px; border:0; margin:0; } +.normal a:link, +.normal a:visited { color:#1b75bb; text-decoration:none; } +.normal a:hover, +.normal a:active { color:#0b559b; } + +#demo-config { padding:20px 0 0; } + +#demo-frame { float:left; width:540px; height:380px; border:1px solid #ddd; overflow: auto; position: relative; } +#demo-frame h3, #demo-frame h4 { padding: 0; font-weight: bold; font-size: 1em; } + +#demo-config-menu { float:right; width:180px; } +#demo-config-menu h4 { font-size:13px; color:#666; font-weight:normal; border:0; padding-left:18px; } + +#demo-config-menu ul { list-style: none; padding: 0; margin: 0; } + +#demo-config-menu li { font-size:12px; padding:0 0 0 10px; margin:3px 0; zoom: 1; } + +#demo-config-menu li a:link, +#demo-config-menu li a:visited { display:block; padding:1px 8px 4px; border-bottom:1px dotted #b3b3b3; } +* html #demo-config-menu li a:link, +* html #demo-config-menu li a:visited { padding:1px 8px 2px; } +#demo-config-menu li a:hover, +#demo-config-menu li a:active { background-color:#f6f6f6; } + +#demo-config-menu li.demo-config-on { background: url(images/demo-config-on-tile.gif) repeat-x left center; } + +#demo-config-menu li.demo-config-on a:link, +#demo-config-menu li.demo-config-on a:visited, +#demo-config-menu li.demo-config-on a:hover, +#demo-config-menu li.demo-config-on a:active { background: url(images/demo-config-on.gif) no-repeat left; padding-left:18px; color:#fff; border:0; margin-left:-10px; margin-top: 0px; margin-bottom: 0px; } + +#demo-source, #demo-notes { + clear: both; + padding: 20px 0 0; + font-size: 1.3em; +} + +#demo-notes { width:520px; color:#333; font-size: 1em; } +#demo-notes p code, .demo-description p code { padding: 0; font-weight: bold; } +#demo-source pre, #demo-source code { padding: 0; } +code, pre { padding:8px 0 8px 20px ; font-size: 1.2em; line-height:130%; } + +#demo-source a:link, +#demo-source a:visited, +#demo-source a:hover, +#demo-source a:active { font-size:12px; padding-left:13px; background-position: left center; background-repeat: no-repeat; } + +#demo-source a.source-open:link, +#demo-source a.source-open:visited, +#demo-source a.source-open:hover, +#demo-source a.source-open:active { background-image: url(images/demo-spindown-open.gif); } + +#demo-source a.source-closed:link, +#demo-source a.source-closed:visited, +#demo-source a.source-closed:hover, +#demo-source a.source-closed:active { background-image: url(images/demo-spindown-closed.gif); } + +div.demo { + padding:12px; + font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"; +} + +div.demo h3.docs { clear:left; font-size:12px; font-weight:normal; padding:0 0 1em; margin:0; } + +div.demo-description { + clear:both; + padding:12px; + font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"; + font-size: 1.3em; + line-height: 1.4em; +} + +.ui-draggable, .ui-droppable { + background-position: top left; +} + +.left-nav .demos-nav { + padding-right: 10px; +} + +#demo-link { font-size:11px; padding-top: 6px; clear: both; overflow: hidden; } +#demo-link a span.ui-icon { float:left; margin-right:3px; } + +/* Component containers +----------------------------------*/ +#widget-docs .ui-widget { font-family: Trebuchet MS,Verdana,Arial,sans-serif; font-size: 1em; } +#widget-docs .ui-widget input, #widget-docs .ui-widget select, #widget-docs .ui-widget textarea, #widget-docs .ui-widget button { font-family: Trebuchet MS,Verdana,Arial,sans-serif; font-size: 1em; } +#widget-docs .ui-widget-header { border: 1px solid #ffffff; background: #464646 url(images/464646_40x100_textures_01_flat_100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +#widget-docs .ui-widget-header a { color: #ffffff; } +#widget-docs .ui-widget-content { border: 1px solid #ffffff; background: #ffffff url(images/ffffff_40x100_textures_01_flat_75.png) 50% 50% repeat-x; color: #222222; } +#widget-docs .ui-widget-content a { color: #222222; } + +/* Interaction states +----------------------------------*/ +#widget-docs .ui-state-default, #widget-docs .ui-widget-content #widget-docs .ui-state-default { border: 1px solid #666666; background: #555555 url(images/555555_40x100_textures_03_highlight_soft_75.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; outline: none; } +#widget-docs .ui-state-default a { color: #ffffff; text-decoration: none; outline: none; } +#widget-docs .ui-state-hover, #widget-docs .ui-widget-content #widget-docs .ui-state-hover, #widget-docs .ui-state-focus, #widget-docs .ui-widget-content #widget-docs .ui-state-focus { border: 1px solid #666666; background: #444444 url(images/444444_40x100_textures_03_highlight_soft_60.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; outline: none; } +#widget-docs .ui-state-hover a { color: #ffffff; text-decoration: none; outline: none; } +#widget-docs .ui-state-active, #widget-docs .ui-widget-content #widget-docs .ui-state-active { border: 1px solid #666666; background: #ffffff url(images/ffffff_40x100_textures_01_flat_65.png) 50% 50% repeat-x; font-weight: normal; color: #F6921E; outline: none; } +#widget-docs .ui-state-active a { color: #F6921E; outline: none; text-decoration: none; } + +/* Interaction Cues +----------------------------------*/ +#widget-docs .ui-state-highlight, #widget-docs .ui-widget-content #widget-docs .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/fbf9ee_40x100_textures_02_glass_55.png) 50% 50% repeat-x; color: #363636; } +#widget-docs .ui-state-error, #widget-docs .ui-widget-content #widget-docs .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/fef1ec_40x100_textures_05_inset_soft_95.png) 50% bottom repeat-x; color: #cd0a0a; } +#widget-docs .ui-state-error-text, #widget-docs .ui-widget-content #widget-docs .ui-state-error-text { color: #cd0a0a; } +#widget-docs .ui-state-disabled, #widget-docs .ui-widget-content #widget-docs .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } +#widget-docs .ui-priority-primary, #widget-docs .ui-widget-content #widget-docs .ui-priority-primary { font-weight: bold; } +#widget-docs .ui-priority-secondary, #widget-docs .ui-widget-content #widget-docs .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } + +/* Icons +----------------------------------*/ + +/* states and images */ +#demo-frame-wrapper .ui-icon, #widget-docs .ui-icon { width: 16px; height: 16px; background-image: url(images/222222_256x240_icons_icons.png); } +#widget-docs .ui-widget-content .ui-icon {background-image: url(images/222222_256x240_icons_icons.png); } +#widget-docs .ui-widget-header .ui-icon {background-image: url(images/222222_256x240_icons_icons.png); } +#widget-docs .ui-state-default .ui-icon { background-image: url(images/888888_256x240_icons_icons.png); } +#widget-docs .ui-state-hover .ui-icon, #widget-docs .ui-state-focus .ui-icon {background-image: url(images/454545_256x240_icons_icons.png); } +#widget-docs .ui-state-active .ui-icon {background-image: url(images/454545_256x240_icons_icons.png); } +#widget-docs .ui-state-highlight .ui-icon {background-image: url(images/2e83ff_256x240_icons_icons.png); } +#widget-docs .ui-state-error .ui-icon, #widget-docs .ui-state-error-text .ui-icon {background-image: url(images/cd0a0a_256x240_icons_icons.png); } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +#widget-docs .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; } +#widget-docs .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } +#widget-docs .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } +#widget-docs .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } +#widget-docs .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; } +#widget-docs .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } +#widget-docs .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; } +#widget-docs .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; } +#widget-docs .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; } + +/* Overlays */ +#widget-docs .ui-widget-overlay { background: #aaaaaa url(images/aaaaaa_40x100_textures_01_flat_0.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +#widget-docs .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/aaaaaa_40x100_textures_01_flat_0.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; } + +/* +----------------------------------*/ + +#widget-docs { margin:20px 0 0; border: none; } + +#widget-docs h2, #widget-docs h3, #widget-docs h4, #widget-docs p, #widget-docs ul, #widget-docs code { margin:0; padding:0; } +#widget-docs code { display:block; color:#444; font-size:.9em; margin:0 0 1em; } +#widget-docs code strong { color:#000; } +#widget-docs p { margin:0 3em 1.2em 0; } +#widget-docs p.intro { font-size:13px; color:#666; line-height:1.3; } +#widget-docs ul { list-style-type: none; } + +#widget-docs h2 { font-size:16px; margin:1.2em 0 .5em; } +#widget-docs h3 { font-size:14px; color:#e6820E; margin:1.5em 0 .5em; } +.normal #widget-docs h4 { font-size:12px; color:#000; border:0; margin:0 0 .5em; } + +#docs-overview-main { width:400px; } +#docs-overview-sidebar { float:right; width:200px; } +#docs-overview-sidebar a span { color:#666; } +#widget-docs #docs-overview-main p { margin-right:0; } +#widget-docs #docs-overview-sidebar h4 { padding-left:0; } + +.docs-list-header { float:left; width:100%; margin:10px 0 0; border-bottom:1px solid #eee; } +#widget-docs .docs-list-header h2 { float:left; margin:0; } +#widget-docs .docs-list-header p { float:right; margin:5px 0; font-size:11px; } + +.docs-list { float:left; width:100%; padding:0 0 10px; } +.docs-list .param-header { float:left; clear:left; width:100%; padding:8px 0; border-top:1px solid #eee; } +#widget-docs .param-header h3, #widget-docs .param-header p { margin:0; float:left; } +#widget-docs .param-header h3 { width:50%; } +#widget-docs .param-header h3 span { background: url(images/demo-spindown-closed.gif) no-repeat left; padding-left:13px; } +#widget-docs .param-open .param-header h3 span { background: url(images/demo-spindown-open.gif) no-repeat left; } +#widget-docs .param-header p { width:24%; } +#widget-docs .param-header p.param-type span { background: url(images/icon-docs-info.gif) no-repeat left; cursor:pointer; border-bottom:1px dashed #ccc; padding-left:15px; } + +.param-details { padding-left:13px; } +.param-args { margin:0 0 1.5em; border-top:1px dotted #ccc;} +.param-args td { padding:3px 30px 3px 5px; border-bottom:1px dotted #ccc; } + + +/* overrides for ui-tab styles */ +#widget-docs ul.ui-tabs-nav { padding:0 0 0 8px; } +#widget-docs .ui-tabs-nav li { margin:5px 5px 0 0; } + +#widget-docs .ui-tabs-nav li a:link, +#widget-docs .ui-tabs-nav li a:visited, +#widget-docs .ui-tabs-nav li a:hover, +#widget-docs .ui-tabs-nav li a:active { font-size:14px; padding:4px 1.2em 3px; color:#fff; } + +#widget-docs .ui-tabs-nav li.ui-tabs-selected a:link, +#widget-docs .ui-tabs-nav li.ui-tabs-selected a:visited, +#widget-docs .ui-tabs-nav li.ui-tabs-selected a:hover, +#widget-docs .ui-tabs-nav li.ui-tabs-selected a:active { color:#e6820E; } + +#widget-docs .ui-tabs-panel { padding:20px 9px; font-size:12px; line-height:1.4; color:#000; } + +#widget-docs .ui-widget-content a:link, +#widget-docs .ui-widget-content a:visited { color:#1b75bb; text-decoration:none; } +#widget-docs .ui-widget-content a:hover, +#widget-docs .ui-widget-content a:active { color:#0b559b; } + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/images/calendar.gif b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/calendar.gif new file mode 100644 index 0000000..d0abaa7 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/calendar.gif differ diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-config-on-tile.gif b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-config-on-tile.gif new file mode 100644 index 0000000..a96b5bf Binary files /dev/null and b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-config-on-tile.gif differ diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-config-on.gif b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-config-on.gif new file mode 100644 index 0000000..e3b6d7c Binary files /dev/null and b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-config-on.gif differ diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-spindown-closed.gif b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-spindown-closed.gif new file mode 100644 index 0000000..ad4bd37 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-spindown-closed.gif differ diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-spindown-open.gif b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-spindown-open.gif new file mode 100644 index 0000000..e1c60aa Binary files /dev/null and b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/demo-spindown-open.gif differ diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/images/icon-docs-info.gif b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/icon-docs-info.gif new file mode 100644 index 0000000..ea6d2be Binary files /dev/null and b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/icon-docs-info.gif differ diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/images/pbar-ani.gif b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/pbar-ani.gif new file mode 100644 index 0000000..cb59a04 Binary files /dev/null and b/frontend/static/other_rooms/datepicker/development-bundle/demos/images/pbar-ani.gif differ diff --git a/frontend/static/other_rooms/datepicker/development-bundle/demos/index.html b/frontend/static/other_rooms/datepicker/development-bundle/demos/index.html new file mode 100644 index 0000000..2b87709 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/demos/index.html @@ -0,0 +1,321 @@ + + + + + jQuery UI Demos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        Interactions
        + + + + + +
        Widgets
        + + + +
        Datepicker
        + + + + +
        Effects
        +
        Color Animation
        +
        Toggle Class
        +
        Add Class
        +
        Remove Class
        +
        Switch Class
        +
        Effect
        +
        Toggle
        +
        Hide
        +
        Show
        +
        Utilities
        + +
        About jQuery UI
        +
        Getting Started
        +
        Upgrade Guide
        +
        Changelog
        +
        Roadmap
        +
        Subversion Access
        +
        UI Developer Guidelines
        +
        Theming
        +
        Theming jQuery UI
        +
        jQuery UI CSS Framework
        +
        ThemeRoller application
        +
        Theme Switcher Widget
        + +
        +
        + +
        + +

        Instructions

        +

        + These demos showcase some common uses of each jQuery UI plugin. Simply copy and paste code from the demos to get started. Have fun playing with them. +

        + +
        + +
        + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/docs/datepicker.html b/frontend/static/other_rooms/datepicker/development-bundle/docs/datepicker.html new file mode 100644 index 0000000..99b1615 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/docs/datepicker.html @@ -0,0 +1,2570 @@ + + +
        +

        jQuery UI Datepicker

        +
        +

        Overview

        +
        +

        The jQuery UI Datepicker is a highly configurable plugin that adds datepicker functionality to your pages. You can customize the date format and language, restrict the selectable date ranges and add in buttons and other navigation options easily.

        +

        By default, the datepicker calendar opens in a small overlay onFocus and closes automatically onBlur or when a date is selected. For an inline calendar, simply attach the datepicker to a div or span. +

        You can use keyboard shortcuts to drive the datepicker: +

        +
          +
        • page up/down - previous/next month
        • +
        • ctrl+page up/down - previous/next year
        • +
        • ctrl+home - current month or open when closed
        • +
        • ctrl+left/right - previous/next day
        • +
        • ctrl+up/down - previous/next week
        • +
        • enter - accept the selected date
        • +
        • ctrl+end - close and erase the date
        • +
        • escape - close the datepicker without selection
        • +
        +

        Utility functions

        + +

        Localization

        +

        Datepicker provides support for localizing its content to cater for different languages + and date formats. Each localization is contained within its own file with the + language code appended to the name, e.g. jquery.ui.datepicker-fr.js for French. + The desired localization file should be included after the main datepicker code. They add their settings to the set + of available localizations and automatically apply them as defaults for all instances.

        +

        The $.datepicker.regional attribute holds an array of localizations, + indexed by language code, with '' referring to the default (English). Each entry is + an object with the following attributes: closeText, prevText, + nextText, currentText, monthNames, + monthNamesShort, dayNames, dayNamesShort, + dayNamesMin, weekHeader, dateFormat, + firstDay, isRTL, showMonthAfterYear, + and yearSuffix.

        +

        You can restore the default localizations with:

        +

        $.datepicker.setDefaults($.datepicker.regional['']); +

        +

        And can then override an individual datepicker for a specific locale:

        +

        $(selector).datepicker($.datepicker.regional['fr']); +

        +The localization files are also available in the UI svn: http://jquery-ui.googlecode.com/svn/trunk/ui/i18n/ +
        +
        +

        Dependencies

        +
          +
        • UI Core
        • +
        +
        +
        +

        Example

        +
        + +

        +A simple jQuery UI Datepicker.
        +

        +
        $("#datepicker").datepicker();
        +
        +

        +

        +
        <!DOCTYPE html>
        +<html>
        +<head>
        +  <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
        +  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
        +  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
        +  
        +  <script>
        +  $(document).ready(function() {
        +    $("#datepicker").datepicker();
        +  });
        +  </script>
        +</head>
        +<body style="font-size:62.5%;">
        +  
        +<div type="text" id="datepicker"></div>
        +
        +</body>
        +</html>
        +
        +

        +

        +
        +
        +
        +

        Options

        +
          + +
        • +
          +

          disabled

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          Disables (true) or enables (false) the datepicker. Can be set when initialising (first creating) the datepicker.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the disabled option specified. +
          +
          +
          $( ".selector" ).datepicker({ disabled: true });
          +
          + + +
          + Get or set the disabled option, after init. +
          +
          +
          //getter
          +var disabled = $( ".selector" ).datepicker( "option", "disabled" );
          +//setter
          +$( ".selector" ).datepicker( "option", "disabled", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          altField

          +
          +
          Type:
          +
          Selector, jQuery, Element
          + +
          Default:
          +
          ''
          + +
          +
          +
          +

          The jQuery selector for another field that is to be updated with the selected date from the datepicker. Use the altFormat setting to change the format of the date within this field. Leave as blank for no alternate field.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the altField option specified. +
          +
          +
          $( ".selector" ).datepicker({ altField: '#actualDate' });
          +
          + + +
          + Get or set the altField option, after init. +
          +
          +
          //getter
          +var altField = $( ".selector" ).datepicker( "option", "altField" );
          +//setter
          +$( ".selector" ).datepicker( "option", "altField", '#actualDate' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          altFormat

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          ''
          + +
          +
          +
          +

          The dateFormat to be used for the altField option. This allows one date format to be shown to the user for selection purposes, while a different format is actually sent behind the scenes. For a full list of the possible formats see the formatDate function

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the altFormat option specified. +
          +
          +
          $( ".selector" ).datepicker({ altFormat: 'yy-mm-dd' });
          +
          + + +
          + Get or set the altFormat option, after init. +
          +
          +
          //getter
          +var altFormat = $( ".selector" ).datepicker( "option", "altFormat" );
          +//setter
          +$( ".selector" ).datepicker( "option", "altFormat", 'yy-mm-dd' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          appendText

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          ''
          + +
          +
          +
          +

          The text to display after each date field, e.g. to show the required format.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the appendText option specified. +
          +
          +
          $( ".selector" ).datepicker({ appendText: '(yyyy-mm-dd)' });
          +
          + + +
          + Get or set the appendText option, after init. +
          +
          +
          //getter
          +var appendText = $( ".selector" ).datepicker( "option", "appendText" );
          +//setter
          +$( ".selector" ).datepicker( "option", "appendText", '(yyyy-mm-dd)' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          autoSize

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          Set to true to automatically resize the input field to accomodate dates in the current dateFormat.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the autoSize option specified. +
          +
          +
          $( ".selector" ).datepicker({ autoSize: true });
          +
          + + +
          + Get or set the autoSize option, after init. +
          +
          +
          //getter
          +var autoSize = $( ".selector" ).datepicker( "option", "autoSize" );
          +//setter
          +$( ".selector" ).datepicker( "option", "autoSize", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          buttonImage

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          ''
          + +
          +
          +
          +

          The URL for the popup button image. If set, buttonText becomes the alt value and is not directly displayed.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the buttonImage option specified. +
          +
          +
          $( ".selector" ).datepicker({ buttonImage: '/images/datepicker.gif' });
          +
          + + +
          + Get or set the buttonImage option, after init. +
          +
          +
          //getter
          +var buttonImage = $( ".selector" ).datepicker( "option", "buttonImage" );
          +//setter
          +$( ".selector" ).datepicker( "option", "buttonImage", '/images/datepicker.gif' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          buttonImageOnly

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          Set to true to place an image after the field to use as the trigger without it appearing on a button.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the buttonImageOnly option specified. +
          +
          +
          $( ".selector" ).datepicker({ buttonImageOnly: true });
          +
          + + +
          + Get or set the buttonImageOnly option, after init. +
          +
          +
          //getter
          +var buttonImageOnly = $( ".selector" ).datepicker( "option", "buttonImageOnly" );
          +//setter
          +$( ".selector" ).datepicker( "option", "buttonImageOnly", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          buttonText

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          '...'
          + +
          +
          +
          +

          The text to display on the trigger button. Use in conjunction with showOn equal to 'button' or 'both'.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the buttonText option specified. +
          +
          +
          $( ".selector" ).datepicker({ buttonText: 'Choose' });
          +
          + + +
          + Get or set the buttonText option, after init. +
          +
          +
          //getter
          +var buttonText = $( ".selector" ).datepicker( "option", "buttonText" );
          +//setter
          +$( ".selector" ).datepicker( "option", "buttonText", 'Choose' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          calculateWeek

          +
          +
          Type:
          +
          Function
          + +
          Default:
          +
          $.datepicker.iso8601Week
          + +
          +
          +
          +

          A function to calculate the week of the year for a given date. The default implementation uses the ISO 8601 definition: weeks start on a Monday; the first week of the year contains the first Thursday of the year.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the calculateWeek option specified. +
          +
          +
          $( ".selector" ).datepicker({ calculateWeek: myWeekCalc });
          +
          + + +
          + Get or set the calculateWeek option, after init. +
          +
          +
          //getter
          +var calculateWeek = $( ".selector" ).datepicker( "option", "calculateWeek" );
          +//setter
          +$( ".selector" ).datepicker( "option", "calculateWeek", myWeekCalc );
          +
          + +
          +
          +
        • + + +
        • +
          +

          changeMonth

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          Allows you to change the month by selecting from a drop-down list. You can enable this feature by setting the attribute to true.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the changeMonth option specified. +
          +
          +
          $( ".selector" ).datepicker({ changeMonth: true });
          +
          + + +
          + Get or set the changeMonth option, after init. +
          +
          +
          //getter
          +var changeMonth = $( ".selector" ).datepicker( "option", "changeMonth" );
          +//setter
          +$( ".selector" ).datepicker( "option", "changeMonth", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          changeYear

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          Allows you to change the year by selecting from a drop-down list. You can enable this feature by setting the attribute to true. Use the yearRange option to control which years are made available for selection.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the changeYear option specified. +
          +
          +
          $( ".selector" ).datepicker({ changeYear: true });
          +
          + + +
          + Get or set the changeYear option, after init. +
          +
          +
          //getter
          +var changeYear = $( ".selector" ).datepicker( "option", "changeYear" );
          +//setter
          +$( ".selector" ).datepicker( "option", "changeYear", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          closeText

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          'Done'
          + +
          +
          +
          +

          The text to display for the close link. This attribute is one of the regionalisation attributes. Use the showButtonPanel to display this button.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the closeText option specified. +
          +
          +
          $( ".selector" ).datepicker({ closeText: 'X' });
          +
          + + +
          + Get or set the closeText option, after init. +
          +
          +
          //getter
          +var closeText = $( ".selector" ).datepicker( "option", "closeText" );
          +//setter
          +$( ".selector" ).datepicker( "option", "closeText", 'X' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          constrainInput

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          true
          + +
          +
          +
          +

          When true entry in the input field is constrained to those characters allowed by the current dateFormat.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the constrainInput option specified. +
          +
          +
          $( ".selector" ).datepicker({ constrainInput: false });
          +
          + + +
          + Get or set the constrainInput option, after init. +
          +
          +
          //getter
          +var constrainInput = $( ".selector" ).datepicker( "option", "constrainInput" );
          +//setter
          +$( ".selector" ).datepicker( "option", "constrainInput", false );
          +
          + +
          +
          +
        • + + +
        • +
          +

          currentText

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          'Today'
          + +
          +
          +
          +

          The text to display for the current day link. This attribute is one of the regionalisation attributes. Use the showButtonPanel to display this button.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the currentText option specified. +
          +
          +
          $( ".selector" ).datepicker({ currentText: 'Now' });
          +
          + + +
          + Get or set the currentText option, after init. +
          +
          +
          //getter
          +var currentText = $( ".selector" ).datepicker( "option", "currentText" );
          +//setter
          +$( ".selector" ).datepicker( "option", "currentText", 'Now' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          dateFormat

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          'mm/dd/yy'
          + +
          +
          +
          +

          The format for parsed and displayed dates. This attribute is one of the regionalisation attributes. For a full list of the possible formats see the formatDate function.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the dateFormat option specified. +
          +
          +
          $( ".selector" ).datepicker({ dateFormat: 'yy-mm-dd' });
          +
          + + +
          + Get or set the dateFormat option, after init. +
          +
          +
          //getter
          +var dateFormat = $( ".selector" ).datepicker( "option", "dateFormat" );
          +//setter
          +$( ".selector" ).datepicker( "option", "dateFormat", 'yy-mm-dd' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          dayNames

          +
          +
          Type:
          +
          Array
          + +
          Default:
          +
          ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
          + +
          +
          +
          +

          The list of long day names, starting from Sunday, for use as requested via the dateFormat setting. They also appear as popup hints when hovering over the corresponding column headings. This attribute is one of the regionalisation attributes.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the dayNames option specified. +
          +
          +
          $( ".selector" ).datepicker({ dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'] });
          +
          + + +
          + Get or set the dayNames option, after init. +
          +
          +
          //getter
          +var dayNames = $( ".selector" ).datepicker( "option", "dayNames" );
          +//setter
          +$( ".selector" ).datepicker( "option", "dayNames", ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'] );
          +
          + +
          +
          +
        • + + +
        • +
          +

          dayNamesMin

          +
          +
          Type:
          +
          Array
          + +
          Default:
          +
          ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
          + +
          +
          +
          +

          The list of minimised day names, starting from Sunday, for use as column headers within the datepicker. This attribute is one of the regionalisation attributes.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the dayNamesMin option specified. +
          +
          +
          $( ".selector" ).datepicker({ dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'] });
          +
          + + +
          + Get or set the dayNamesMin option, after init. +
          +
          +
          //getter
          +var dayNamesMin = $( ".selector" ).datepicker( "option", "dayNamesMin" );
          +//setter
          +$( ".selector" ).datepicker( "option", "dayNamesMin", ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'] );
          +
          + +
          +
          +
        • + + +
        • +
          +

          dayNamesShort

          +
          +
          Type:
          +
          Array
          + +
          Default:
          +
          ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
          + +
          +
          +
          +

          The list of abbreviated day names, starting from Sunday, for use as requested via the dateFormat setting. This attribute is one of the regionalisation attributes.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the dayNamesShort option specified. +
          +
          +
          $( ".selector" ).datepicker({ dayNamesShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'] });
          +
          + + +
          + Get or set the dayNamesShort option, after init. +
          +
          +
          //getter
          +var dayNamesShort = $( ".selector" ).datepicker( "option", "dayNamesShort" );
          +//setter
          +$( ".selector" ).datepicker( "option", "dayNamesShort", ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'] );
          +
          + +
          +
          +
        • + + +
        • +
          +

          defaultDate

          +
          +
          Type:
          +
          Date, Number, String
          + +
          Default:
          +
          null
          + +
          +
          +
          +

          Set the date to highlight on first opening if the field is blank. Specify either an actual date via a Date object or as a string in the current dateFormat, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +7d'), or null for today.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the defaultDate option specified. +
          +
          +
          $( ".selector" ).datepicker({ defaultDate: +7 });
          +
          + + +
          + Get or set the defaultDate option, after init. +
          +
          +
          //getter
          +var defaultDate = $( ".selector" ).datepicker( "option", "defaultDate" );
          +//setter
          +$( ".selector" ).datepicker( "option", "defaultDate", +7 );
          +
          + +
          +
          +
        • + + +
        • +
          +

          duration

          +
          +
          Type:
          +
          String, Number
          + +
          Default:
          +
          'normal'
          + +
          +
          +
          +

          Control the speed at which the datepicker appears, it may be a time in milliseconds or a string representing one of the three predefined speeds ("slow", "normal", "fast").

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the duration option specified. +
          +
          +
          $( ".selector" ).datepicker({ duration: 'slow' });
          +
          + + +
          + Get or set the duration option, after init. +
          +
          +
          //getter
          +var duration = $( ".selector" ).datepicker( "option", "duration" );
          +//setter
          +$( ".selector" ).datepicker( "option", "duration", 'slow' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          firstDay

          +
          +
          Type:
          +
          Number
          + +
          Default:
          +
          0
          + +
          +
          +
          +

          Set the first day of the week: Sunday is 0, Monday is 1, ... This attribute is one of the regionalisation attributes.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the firstDay option specified. +
          +
          +
          $( ".selector" ).datepicker({ firstDay: 1 });
          +
          + + +
          + Get or set the firstDay option, after init. +
          +
          +
          //getter
          +var firstDay = $( ".selector" ).datepicker( "option", "firstDay" );
          +//setter
          +$( ".selector" ).datepicker( "option", "firstDay", 1 );
          +
          + +
          +
          +
        • + + +
        • +
          +

          gotoCurrent

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          When true the current day link moves to the currently selected date instead of today.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the gotoCurrent option specified. +
          +
          +
          $( ".selector" ).datepicker({ gotoCurrent: true });
          +
          + + +
          + Get or set the gotoCurrent option, after init. +
          +
          +
          //getter
          +var gotoCurrent = $( ".selector" ).datepicker( "option", "gotoCurrent" );
          +//setter
          +$( ".selector" ).datepicker( "option", "gotoCurrent", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          hideIfNoPrevNext

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          Normally the previous and next links are disabled when not applicable (see minDate/maxDate). You can hide them altogether by setting this attribute to true.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the hideIfNoPrevNext option specified. +
          +
          +
          $( ".selector" ).datepicker({ hideIfNoPrevNext: true });
          +
          + + +
          + Get or set the hideIfNoPrevNext option, after init. +
          +
          +
          //getter
          +var hideIfNoPrevNext = $( ".selector" ).datepicker( "option", "hideIfNoPrevNext" );
          +//setter
          +$( ".selector" ).datepicker( "option", "hideIfNoPrevNext", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          isRTL

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          True if the current language is drawn from right to left. This attribute is one of the regionalisation attributes.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the isRTL option specified. +
          +
          +
          $( ".selector" ).datepicker({ isRTL: true });
          +
          + + +
          + Get or set the isRTL option, after init. +
          +
          +
          //getter
          +var isRTL = $( ".selector" ).datepicker( "option", "isRTL" );
          +//setter
          +$( ".selector" ).datepicker( "option", "isRTL", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          maxDate

          +
          +
          Type:
          +
          Date, Number, String
          + +
          Default:
          +
          null
          + +
          +
          +
          +

          Set a maximum selectable date via a Date object or as a string in the current dateFormat, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +1w'), or null for no limit.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the maxDate option specified. +
          +
          +
          $( ".selector" ).datepicker({ maxDate: '+1m +1w' });
          +
          + + +
          + Get or set the maxDate option, after init. +
          +
          +
          //getter
          +var maxDate = $( ".selector" ).datepicker( "option", "maxDate" );
          +//setter
          +$( ".selector" ).datepicker( "option", "maxDate", '+1m +1w' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          minDate

          +
          +
          Type:
          +
          Date, Number, String
          + +
          Default:
          +
          null
          + +
          +
          +
          +

          Set a minimum selectable date via a Date object or as a string in the current dateFormat, or a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '-1y -1m'), or null for no limit.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the minDate option specified. +
          +
          +
          $( ".selector" ).datepicker({ minDate: new Date(2007, 1 - 1, 1) });
          +
          + + +
          + Get or set the minDate option, after init. +
          +
          +
          //getter
          +var minDate = $( ".selector" ).datepicker( "option", "minDate" );
          +//setter
          +$( ".selector" ).datepicker( "option", "minDate", new Date(2007, 1 - 1, 1) );
          +
          + +
          +
          +
        • + + +
        • +
          +

          monthNames

          +
          +
          Type:
          +
          Array
          + +
          Default:
          +
          ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
          + +
          +
          +
          +

          The list of full month names, for use as requested via the dateFormat setting. This attribute is one of the regionalisation attributes.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the monthNames option specified. +
          +
          +
          $( ".selector" ).datepicker({ monthNames: ['Januar','Februar','Marts','April','Maj','Juni','Juli','August','September','Oktober','November','December'] });
          +
          + + +
          + Get or set the monthNames option, after init. +
          +
          +
          //getter
          +var monthNames = $( ".selector" ).datepicker( "option", "monthNames" );
          +//setter
          +$( ".selector" ).datepicker( "option", "monthNames", ['Januar','Februar','Marts','April','Maj','Juni','Juli','August','September','Oktober','November','December'] );
          +
          + +
          +
          +
        • + + +
        • +
          +

          monthNamesShort

          +
          +
          Type:
          +
          Array
          + +
          Default:
          +
          ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
          + +
          +
          +
          +

          The list of abbreviated month names, as used in the month header on each datepicker and as requested via the dateFormat setting. This attribute is one of the regionalisation attributes.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the monthNamesShort option specified. +
          +
          +
          $( ".selector" ).datepicker({ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec'] });
          +
          + + +
          + Get or set the monthNamesShort option, after init. +
          +
          +
          //getter
          +var monthNamesShort = $( ".selector" ).datepicker( "option", "monthNamesShort" );
          +//setter
          +$( ".selector" ).datepicker( "option", "monthNamesShort", ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec'] );
          +
          + +
          +
          +
        • + + +
        • +
          +

          navigationAsDateFormat

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          When true the formatDate function is applied to the prevText, nextText, and currentText values before display, allowing them to display the target month names for example.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the navigationAsDateFormat option specified. +
          +
          +
          $( ".selector" ).datepicker({ navigationAsDateFormat: true });
          +
          + + +
          + Get or set the navigationAsDateFormat option, after init. +
          +
          +
          //getter
          +var navigationAsDateFormat = $( ".selector" ).datepicker( "option", "navigationAsDateFormat" );
          +//setter
          +$( ".selector" ).datepicker( "option", "navigationAsDateFormat", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          nextText

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          'Next'
          + +
          +
          +
          +

          The text to display for the next month link. This attribute is one of the regionalisation attributes. With the standard ThemeRoller styling, this value is replaced by an icon.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the nextText option specified. +
          +
          +
          $( ".selector" ).datepicker({ nextText: 'Later' });
          +
          + + +
          + Get or set the nextText option, after init. +
          +
          +
          //getter
          +var nextText = $( ".selector" ).datepicker( "option", "nextText" );
          +//setter
          +$( ".selector" ).datepicker( "option", "nextText", 'Later' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          numberOfMonths

          +
          +
          Type:
          +
          Number, Array
          + +
          Default:
          +
          1
          + +
          +
          +
          +

          Set how many months to show at once. The value can be a straight integer, or can be a two-element array to define the number of rows and columns to display.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the numberOfMonths option specified. +
          +
          +
          $( ".selector" ).datepicker({ numberOfMonths: [2, 3] });
          +
          + + +
          + Get or set the numberOfMonths option, after init. +
          +
          +
          //getter
          +var numberOfMonths = $( ".selector" ).datepicker( "option", "numberOfMonths" );
          +//setter
          +$( ".selector" ).datepicker( "option", "numberOfMonths", [2, 3] );
          +
          + +
          +
          +
        • + + +
        • +
          +

          prevText

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          'Prev'
          + +
          +
          +
          +

          The text to display for the previous month link. This attribute is one of the regionalisation attributes. With the standard ThemeRoller styling, this value is replaced by an icon.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the prevText option specified. +
          +
          +
          $( ".selector" ).datepicker({ prevText: 'Earlier' });
          +
          + + +
          + Get or set the prevText option, after init. +
          +
          +
          //getter
          +var prevText = $( ".selector" ).datepicker( "option", "prevText" );
          +//setter
          +$( ".selector" ).datepicker( "option", "prevText", 'Earlier' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          selectOtherMonths

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          When true days in other months shown before or after the current month are selectable. This only applies if showOtherMonths is also true.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the selectOtherMonths option specified. +
          +
          +
          $( ".selector" ).datepicker({ selectOtherMonths: true });
          +
          + + +
          + Get or set the selectOtherMonths option, after init. +
          +
          +
          //getter
          +var selectOtherMonths = $( ".selector" ).datepicker( "option", "selectOtherMonths" );
          +//setter
          +$( ".selector" ).datepicker( "option", "selectOtherMonths", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          shortYearCutoff

          +
          +
          Type:
          +
          String, Number
          + +
          Default:
          +
          '+10'
          + +
          +
          +
          +

          Set the cutoff year for determining the century for a date (used in conjunction with dateFormat 'y'). If a numeric value (0-99) is provided then this value is used directly. If a string value is provided then it is converted to a number and added to the current year. Once the cutoff year is calculated, any dates entered with a year value less than or equal to it are considered to be in the current century, while those greater than it are deemed to be in the previous century.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the shortYearCutoff option specified. +
          +
          +
          $( ".selector" ).datepicker({ shortYearCutoff: 50 });
          +
          + + +
          + Get or set the shortYearCutoff option, after init. +
          +
          +
          //getter
          +var shortYearCutoff = $( ".selector" ).datepicker( "option", "shortYearCutoff" );
          +//setter
          +$( ".selector" ).datepicker( "option", "shortYearCutoff", 50 );
          +
          + +
          +
          +
        • + + +
        • +
          +

          showAnim

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          'show'
          + +
          +
          +
          +

          Set the name of the animation used to show/hide the datepicker. Use 'show' (the default), 'slideDown', 'fadeIn', any of the show/hide jQuery UI effects, or '' for no animation.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the showAnim option specified. +
          +
          +
          $( ".selector" ).datepicker({ showAnim: 'fold' });
          +
          + + +
          + Get or set the showAnim option, after init. +
          +
          +
          //getter
          +var showAnim = $( ".selector" ).datepicker( "option", "showAnim" );
          +//setter
          +$( ".selector" ).datepicker( "option", "showAnim", 'fold' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          showButtonPanel

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          Whether to show the button panel.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the showButtonPanel option specified. +
          +
          +
          $( ".selector" ).datepicker({ showButtonPanel: true });
          +
          + + +
          + Get or set the showButtonPanel option, after init. +
          +
          +
          //getter
          +var showButtonPanel = $( ".selector" ).datepicker( "option", "showButtonPanel" );
          +//setter
          +$( ".selector" ).datepicker( "option", "showButtonPanel", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          showCurrentAtPos

          +
          +
          Type:
          +
          Number
          + +
          Default:
          +
          0
          + +
          +
          +
          +

          Specify where in a multi-month display the current month shows, starting from 0 at the top/left.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the showCurrentAtPos option specified. +
          +
          +
          $( ".selector" ).datepicker({ showCurrentAtPos: 3 });
          +
          + + +
          + Get or set the showCurrentAtPos option, after init. +
          +
          +
          //getter
          +var showCurrentAtPos = $( ".selector" ).datepicker( "option", "showCurrentAtPos" );
          +//setter
          +$( ".selector" ).datepicker( "option", "showCurrentAtPos", 3 );
          +
          + +
          +
          +
        • + + +
        • +
          +

          showMonthAfterYear

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          Whether to show the month after the year in the header. This attribute is one of the regionalisation attributes.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the showMonthAfterYear option specified. +
          +
          +
          $( ".selector" ).datepicker({ showMonthAfterYear: true });
          +
          + + +
          + Get or set the showMonthAfterYear option, after init. +
          +
          +
          //getter
          +var showMonthAfterYear = $( ".selector" ).datepicker( "option", "showMonthAfterYear" );
          +//setter
          +$( ".selector" ).datepicker( "option", "showMonthAfterYear", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          showOn

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          'focus'
          + +
          +
          +
          +

          Have the datepicker appear automatically when the field receives focus ('focus'), appear only when a button is clicked ('button'), or appear when either event takes place ('both').

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the showOn option specified. +
          +
          +
          $( ".selector" ).datepicker({ showOn: 'both' });
          +
          + + +
          + Get or set the showOn option, after init. +
          +
          +
          //getter
          +var showOn = $( ".selector" ).datepicker( "option", "showOn" );
          +//setter
          +$( ".selector" ).datepicker( "option", "showOn", 'both' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          showOptions

          +
          +
          Type:
          +
          Options
          + +
          Default:
          +
          {}
          + +
          +
          +
          +

          If using one of the jQuery UI effects for showAnim, you can provide additional settings for that animation via this option.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the showOptions option specified. +
          +
          +
          $( ".selector" ).datepicker({ showOptions: {direction: 'up' });
          +
          + + +
          + Get or set the showOptions option, after init. +
          +
          +
          //getter
          +var showOptions = $( ".selector" ).datepicker( "option", "showOptions" );
          +//setter
          +$( ".selector" ).datepicker( "option", "showOptions", {direction: 'up' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          showOtherMonths

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          Display dates in other months (non-selectable) at the start or end of the current month. To make these days selectable use selectOtherMonths.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the showOtherMonths option specified. +
          +
          +
          $( ".selector" ).datepicker({ showOtherMonths: true });
          +
          + + +
          + Get or set the showOtherMonths option, after init. +
          +
          +
          //getter
          +var showOtherMonths = $( ".selector" ).datepicker( "option", "showOtherMonths" );
          +//setter
          +$( ".selector" ).datepicker( "option", "showOtherMonths", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          showWeek

          +
          +
          Type:
          +
          Boolean
          + +
          Default:
          +
          false
          + +
          +
          +
          +

          When true a column is added to show the week of the year. The calculateWeek option determines how the week of the year is calculated. You may also want to change the firstDay option.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the showWeek option specified. +
          +
          +
          $( ".selector" ).datepicker({ showWeek: true });
          +
          + + +
          + Get or set the showWeek option, after init. +
          +
          +
          //getter
          +var showWeek = $( ".selector" ).datepicker( "option", "showWeek" );
          +//setter
          +$( ".selector" ).datepicker( "option", "showWeek", true );
          +
          + +
          +
          +
        • + + +
        • +
          +

          stepMonths

          +
          +
          Type:
          +
          Number
          + +
          Default:
          +
          1
          + +
          +
          +
          +

          Set how many months to move when clicking the Previous/Next links.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the stepMonths option specified. +
          +
          +
          $( ".selector" ).datepicker({ stepMonths: 3 });
          +
          + + +
          + Get or set the stepMonths option, after init. +
          +
          +
          //getter
          +var stepMonths = $( ".selector" ).datepicker( "option", "stepMonths" );
          +//setter
          +$( ".selector" ).datepicker( "option", "stepMonths", 3 );
          +
          + +
          +
          +
        • + + +
        • +
          +

          weekHeader

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          'Wk'
          + +
          +
          +
          +

          The text to display for the week of the year column heading. This attribute is one of the regionalisation attributes. Use showWeek to display this column.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the weekHeader option specified. +
          +
          +
          $( ".selector" ).datepicker({ weekHeader: 'W' });
          +
          + + +
          + Get or set the weekHeader option, after init. +
          +
          +
          //getter
          +var weekHeader = $( ".selector" ).datepicker( "option", "weekHeader" );
          +//setter
          +$( ".selector" ).datepicker( "option", "weekHeader", 'W' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          yearRange

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          'c-10:c+10'
          + +
          +
          +
          +

          Control the range of years displayed in the year drop-down: either relative to today's year (-nn:+nn), relative to the currently selected year (c-nn:c+nn), absolute (nnnn:nnnn), or combinations of these formats (nnnn:-nn). Note that this option only affects what appears in the drop-down, to restrict which dates may be selected use the minDate and/or maxDate options.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the yearRange option specified. +
          +
          +
          $( ".selector" ).datepicker({ yearRange: '2000:2010' });
          +
          + + +
          + Get or set the yearRange option, after init. +
          +
          +
          //getter
          +var yearRange = $( ".selector" ).datepicker( "option", "yearRange" );
          +//setter
          +$( ".selector" ).datepicker( "option", "yearRange", '2000:2010' );
          +
          + +
          +
          +
        • + + +
        • +
          +

          yearSuffix

          +
          +
          Type:
          +
          String
          + +
          Default:
          +
          ''
          + +
          +
          +
          +

          Additional text to display after the year in the month headers. This attribute is one of the regionalisation attributes.

          +
          +
          +

          Code examples

          +
          + +
          + Initialize a datepicker with the yearSuffix option specified. +
          +
          +
          $( ".selector" ).datepicker({ yearSuffix: 'CE' });
          +
          + + +
          + Get or set the yearSuffix option, after init. +
          +
          +
          //getter
          +var yearSuffix = $( ".selector" ).datepicker( "option", "yearSuffix" );
          +//setter
          +$( ".selector" ).datepicker( "option", "yearSuffix", 'CE' );
          +
          + +
          +
          +
        • + +
        +
        +
        +

        Events

        +
          + +
        • +
          +

          create

          +
          +
          Type:
          +
          datepickercreate
          +
          +
          +
          +

          This event is triggered when datepicker is created.

          +
          +
          +

          Code examples

          +
          + +
          + Supply a callback function to handle the create event as an init option. +
          +
          +
          $( ".selector" ).datepicker({
          +   create: function(event, ui) { ... }
          +});
          +
          + + +
          + Bind to the create event by type: datepickercreate. +
          +
          +
          $( ".selector" ).bind( "datepickercreate", function(event, ui) {
          +  ...
          +});
          +
          + +
          +
          +
        • + + +
        • +
          +

          beforeShow

          +
          +
          +
          function(input, inst)
          +
          +
          +
          +

          Can be a function that takes an input field and current datepicker instance and returns an options object to update the datepicker with. It is called just before the datepicker is displayed.

          +
          +
          +

          Code examples

          +
          + +
          + Supply a callback function to handle the beforeShow event as an init option. +
          +
          +
          $('.selector').datepicker({
          +   beforeShow: function(input, inst) { ... }
          +});
          +
          + +
          +
          +
        • + + +
        • +
          +

          beforeShowDay

          +
          +
          +
          function(date)
          +
          +
          +
          +

          The function takes a date as a parameter and must return an array with [0] equal to true/false indicating whether or not this date is selectable, [1] equal to a CSS class name(s) or '' for the default presentation, and [2] an optional popup tooltip for this date. It is called for each day in the datepicker before it is displayed.

          +
          +
          +

          Code examples

          +
          + +
          + Supply a callback function to handle the beforeShowDay event as an init option. +
          +
          +
          $('.selector').datepicker({
          +   beforeShowDay: function(date) { ... }
          +});
          +
          + +
          +
          +
        • + + +
        • +
          +

          onChangeMonthYear

          +
          +
          +
          function(year, month, inst)
          +
          +
          +
          +

          Allows you to define your own event when the datepicker moves to a new month and/or year. The function receives the selected year, month (1-12), and the datepicker instance as parameters. this refers to the associated input field.

          +
          +
          +

          Code examples

          +
          + +
          + Supply a callback function to handle the onChangeMonthYear event as an init option. +
          +
          +
          $('.selector').datepicker({
          +   onChangeMonthYear: function(year, month, inst) { ... }
          +});
          +
          + +
          +
          +
        • + + +
        • +
          +

          onClose

          +
          +
          +
          function(dateText, inst)
          +
          +
          +
          +

          Allows you to define your own event when the datepicker is closed, whether or not a date is selected. The function receives the selected date as text ('' if none) and the datepicker instance as parameters. this refers to the associated input field.

          +
          +
          +

          Code examples

          +
          + +
          + Supply a callback function to handle the onClose event as an init option. +
          +
          +
          $('.selector').datepicker({
          +   onClose: function(dateText, inst) { ... }
          +});
          +
          + +
          +
          +
        • + + +
        • +
          +

          onSelect

          +
          +
          +
          function(dateText, inst)
          +
          +
          +
          +

          Allows you to define your own event when the datepicker is selected. The function receives the selected date as text and the datepicker instance as parameters. this refers to the associated input field.

          +
          +
          +

          Code examples

          +
          + +
          + Supply a callback function to handle the onSelect event as an init option. +
          +
          +
          $('.selector').datepicker({
          +   onSelect: function(dateText, inst) { ... }
          +});
          +
          + +
          +
          +
        • + +
        +
        +
        +

        Methods

        +
          + +
        • +
          +

          destroy

          +
          +
          Signature:
          +
          .datepicker( "destroy" + + + + + + + +)
          +
          +
          +
          +

          Remove the datepicker functionality completely. This will return the element back to its pre-init state.

          +
          +
        • + + +
        • +
          +

          disable

          +
          +
          Signature:
          +
          .datepicker( "disable" + + + + + + + +)
          +
          +
          +
          +

          Disable the datepicker.

          +
          +
        • + + +
        • +
          +

          enable

          +
          +
          Signature:
          +
          .datepicker( "enable" + + + + + + + +)
          +
          +
          +
          +

          Enable the datepicker.

          +
          +
        • + + +
        • +
          +

          option

          +
          +
          Signature:
          +
          .datepicker( "option" + +, optionName + +, [value] + + + +)
          +
          +
          +
          +

          Get or set any datepicker option. If no value is specified, will act as a getter.

          +
          +
        • + + +
        • +
          +

          option

          +
          +
          Signature:
          +
          .datepicker( "option" + +, options + + + + + +)
          +
          +
          +
          +

          Set multiple datepicker options at once by providing an options object.

          +
          +
        • + + +
        • +
          +

          widget

          +
          +
          Signature:
          +
          .datepicker( "widget" + + + + + + + +)
          +
          +
          +
          +

          Returns the .ui-datepicker element.

          +
          +
        • + + +
        • +
          +

          dialog

          +
          +
          Signature:
          +
          .datepicker( "dialog" + +, date + +, [onSelect] + +, [settings] + +, [pos] )
          +
          +
          +
          +

          Open a datepicker in a "dialog" box. +

          dateText: the initial date for the date picker as either a Date or a string in the current date format. +

          onSelect: A callback function when a date is selected. The function receives the date text and date picker instance as parameters. +

          settings: The new settings for the date picker. +

          pos: The position of the top/left of the dialog as [x, y] or a MouseEvent that contains the coordinates. If not specified the dialog is centered on the screen.

          +
          +
        • + + +
        • +
          +

          isDisabled

          +
          +
          Signature:
          +
          .datepicker( "isDisabled" + + + + + + + +)
          +
          +
          +
          +

          Determine whether a date picker has been disabled.

          +
          +
        • + + +
        • +
          +

          hide

          +
          +
          Signature:
          +
          .datepicker( "hide" + + + + + + + +)
          +
          +
          +
          +

          Close a previously opened date picker.

          +
          +
        • + + +
        • +
          +

          show

          +
          +
          Signature:
          +
          .datepicker( "show" + + + + + + + +)
          +
          +
          +
          +

          Call up a previously attached date picker.

          +
          +
        • + + +
        • +
          +

          refresh

          +
          +
          Signature:
          +
          .datepicker( "refresh" + + + + + + + +)
          +
          +
          +
          +

          Redraw a date picker, after having made some external modifications.

          +
          +
        • + + +
        • +
          +

          getDate

          +
          +
          Signature:
          +
          .datepicker( "getDate" + + + + + + + +)
          +
          +
          +
          +

          Returns the current date for the datepicker or null if no date has been selected.

          +
          +
        • + + +
        • +
          +

          setDate

          +
          +
          Signature:
          +
          .datepicker( "setDate" + +, date + + + + + +)
          +
          +
          +
          +

          Sets the current date for the datepicker. The new date may be a Date object or a string in the current date format (e.g. '01/26/2009'), a number of days from today (e.g. +7) or a string of values and periods ('y' for years, 'm' for months, 'w' for weeks, 'd' for days, e.g. '+1m +7d'), or null to clear the selected date.

          +
          +
        • + +
        +
        +
        +

        Theming

        +

        The jQuery UI Datepicker plugin uses the jQuery UI CSS Framework to style its look and feel, including colors and background textures. We recommend using the ThemeRoller tool to create and download custom themes that are easy to build and maintain. +

        +

        If a deeper level of customization is needed, there are widget-specific classes referenced within the jquery.ui.datepicker.css stylesheet that can be modified. These classes are highlighed in bold below. +

        + +

        Sample markup with jQuery UI CSS Framework classes

        + <div id="ui-datepicker-div" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible">
        +   <div class="ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all">
        +      <a class="ui-datepicker-prev ui-corner-all">title="Prev"><span class="ui-icon ui-icon-circle-triangle-w">Prev</span></a>
        +      <a class="ui-datepicker-next ui-corner-all" title="Next"><span class="ui-icon ui-icon-circle-triangle-e">Next</span></a>
        +      <div class="ui-datepicker-title">
        +         <span class="ui-datepicker-month">January</span><span class="ui-datepicker-year">2009</span>
        +      </div>
        +   </div>
        +   <table class="ui-datepicker-calendar">
        +      <thead>
        +      <tr>
        +         <th class="ui-datepicker-week-end"><span title="Sunday">Su</span></th>
        +         ...
        +      </tr>
        +      </thead>
        +      <tbody><tr>
        +         <td class="ui-datepicker-week-end ui-datepicker-other-month "> 1 </td>
        +         ...
        +      </tr>
        +      </tbody>
        +   </table>
        +   <div class="ui-datepicker-buttonpane ui-widget-content">
        +      <button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all">Today</button>
        +      <button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all">Done</button>
        +   </div>
        +</div>
        +

        + + Note: This is a sample of markup generated by the datepicker plugin, not markup you should use to create a datepicker. The only markup needed for that is <input type="text" /> or <div></div>. + +

        + +
        +
        + +

        + + diff --git a/frontend/static/other_rooms/datepicker/development-bundle/external/jquery.bgiframe-2.1.2.js b/frontend/static/other_rooms/datepicker/development-bundle/external/jquery.bgiframe-2.1.2.js new file mode 100644 index 0000000..5cd38bb --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/external/jquery.bgiframe-2.1.2.js @@ -0,0 +1,39 @@ +/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * + * Version 2.1.2 + */ + +(function($){ + +$.fn.bgiframe = ($.browser.msie && /msie 6\.0/i.test(navigator.userAgent) ? function(s) { + s = $.extend({ + top : 'auto', // auto == .currentStyle.borderTopWidth + left : 'auto', // auto == .currentStyle.borderLeftWidth + width : 'auto', // auto == offsetWidth + height : 'auto', // auto == offsetHeight + opacity : true, + src : 'javascript:false;' + }, s); + var html = '' : ''); + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + var changeMonth = this._get(inst, 'changeMonth'); + var changeYear = this._get(inst, 'changeYear'); + var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); + var html = '
        '; + var monthHtml = ''; + // month selection + if (secondary || !changeMonth) + monthHtml += '' + monthNames[drawMonth] + ''; + else { + var inMinYear = (minDate && minDate.getFullYear() == drawYear); + var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); + monthHtml += ''; + } + if (!showMonthAfterYear) + html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); + // year selection + if ( !inst.yearshtml ) { + inst.yearshtml = ''; + if (secondary || !changeYear) + html += '' + drawYear + ''; + else { + // determine range of years to display + var years = this._get(inst, 'yearRange').split(':'); + var thisYear = new Date().getFullYear(); + var determineYear = function(value) { + var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + var year = determineYear(years[0]); + var endYear = Math.max(year, determineYear(years[1] || '')); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += ''; + + html += inst.yearshtml; + inst.yearshtml = null; + } + } + html += this._get(inst, 'yearSuffix'); + if (showMonthAfterYear) + html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; + html += '
        '; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period == 'Y' ? offset : 0); + var month = inst.drawMonth + (period == 'M' ? offset : 0); + var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + + (period == 'D' ? offset : 0); + var date = this._restrictMinMax(inst, + this._daylightSavingAdjust(new Date(year, month, day))); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period == 'M' || period == 'Y') + this._notifyChange(inst); + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var newDate = (minDate && date < minDate ? minDate : date); + newDate = (maxDate && newDate > maxDate ? maxDate : newDate); + return newDate; + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, 'onChangeMonthYear'); + if (onChange) + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, 'numberOfMonths'); + return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst); + var date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + if (offset < 0) + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime())); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, 'shortYearCutoff'); + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), + monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day == 'object' ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + } +}); + +/* + * Bind hover events for datepicker elements. + * Done via delegate so the binding only occurs once in the lifetime of the parent div. + * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. + */ +function bindHover(dpDiv) { + var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; + return dpDiv.delegate(selector, 'mouseout', function() { + $(this).removeClass('ui-state-hover'); + if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); + if (this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); + }) + .delegate(selector, 'mouseover', function(){ + if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) { + $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); + $(this).addClass('ui-state-hover'); + if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); + if (this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); + } + }); +} + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) + if (props[name] == null || props[name] == undefined) + target[name] = props[name]; + return target; +}; + +/* Determine whether an object is an array. */ +function isArray(a) { + return (a && (($.browser.safari && typeof a == 'object' && a.length) || + (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); +}; + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick). + find('body').append($.datepicker.dpDiv); + $.datepicker.initialized = true; + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + return this.each(function() { + typeof options == 'string' ? + $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.8.13"; + +// Workaround for #4055 +// Add another global to avoid noConflict issues with inline event handlers +window['DP_jQuery_' + dpuuid] = $; + +})(jQuery); diff --git a/frontend/static/other_rooms/datepicker/development-bundle/ui/jquery.ui.core.js b/frontend/static/other_rooms/datepicker/development-bundle/ui/jquery.ui.core.js new file mode 100644 index 0000000..b175bd4 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/ui/jquery.ui.core.js @@ -0,0 +1,312 @@ +/*! + * jQuery UI 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function( $, undefined ) { + +// prevent duplicate loading +// this is only a problem because we proxy existing functions +// and we don't want to double proxy them +$.ui = $.ui || {}; +if ( $.ui.version ) { + return; +} + +$.extend( $.ui, { + version: "1.8.13", + + keyCode: { + ALT: 18, + BACKSPACE: 8, + CAPS_LOCK: 20, + COMMA: 188, + COMMAND: 91, + COMMAND_LEFT: 91, // COMMAND + COMMAND_RIGHT: 93, + CONTROL: 17, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + INSERT: 45, + LEFT: 37, + MENU: 93, // COMMAND_RIGHT + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SHIFT: 16, + SPACE: 32, + TAB: 9, + UP: 38, + WINDOWS: 91 // COMMAND + } +}); + +// plugins +$.fn.extend({ + _focus: $.fn.focus, + focus: function( delay, fn ) { + return typeof delay === "number" ? + this.each(function() { + var elem = this; + setTimeout(function() { + $( elem ).focus(); + if ( fn ) { + fn.call( elem ); + } + }, delay ); + }) : + this._focus.apply( this, arguments ); + }, + + scrollParent: function() { + var scrollParent; + if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) { + scrollParent = this.parents().filter(function() { + return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } else { + scrollParent = this.parents().filter(function() { + return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1)); + }).eq(0); + } + + return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent; + }, + + zIndex: function( zIndex ) { + if ( zIndex !== undefined ) { + return this.css( "zIndex", zIndex ); + } + + if ( this.length ) { + var elem = $( this[ 0 ] ), position, value; + while ( elem.length && elem[ 0 ] !== document ) { + // Ignore z-index if position is set to a value where z-index is ignored by the browser + // This makes behavior of this function consistent across browsers + // WebKit always returns auto if the element is positioned + position = elem.css( "position" ); + if ( position === "absolute" || position === "relative" || position === "fixed" ) { + // IE returns 0 when zIndex is not specified + // other browsers return a string + // we ignore the case of nested elements with an explicit value of 0 + //
        + value = parseInt( elem.css( "zIndex" ), 10 ); + if ( !isNaN( value ) && value !== 0 ) { + return value; + } + } + elem = elem.parent(); + } + } + + return 0; + }, + + disableSelection: function() { + return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + + ".ui-disableSelection", function( event ) { + event.preventDefault(); + }); + }, + + enableSelection: function() { + return this.unbind( ".ui-disableSelection" ); + } +}); + +$.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; + + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0; + if ( border ) { + size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0; + } + }); + return size; + } + + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } + + return this.each(function() { + $( this ).css( type, reduce( this, size ) + "px" ); + }); + }; + + $.fn[ "outer" + name] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } + + return this.each(function() { + $( this).css( type, reduce( this, size, true, margin ) + "px" ); + }); + }; +}); + +// selectors +function focusable( element, isTabIndexNotNaN ) { + var nodeName = element.nodeName.toLowerCase(); + if ( "area" === nodeName ) { + var map = element.parentNode, + mapName = map.name, + img; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap=#" + mapName + "]" )[0]; + return !!img && visible( img ); + } + return ( /input|select|textarea|button|object/.test( nodeName ) + ? !element.disabled + : "a" == nodeName + ? element.href || isTabIndexNotNaN + : isTabIndexNotNaN) + // the element and all of its ancestors must be visible + && visible( element ); +} + +function visible( element ) { + return !$( element ).parents().andSelf().filter(function() { + return $.curCSS( this, "visibility" ) === "hidden" || + $.expr.filters.hidden( this ); + }).length; +} + +$.extend( $.expr[ ":" ], { + data: function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + }, + + focusable: function( element ) { + return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); + }, + + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ), + isTabIndexNaN = isNaN( tabIndex ); + return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); + } +}); + +// support +$(function() { + var body = document.body, + div = body.appendChild( div = document.createElement( "div" ) ); + + $.extend( div.style, { + minHeight: "100px", + height: "auto", + padding: 0, + borderWidth: 0 + }); + + $.support.minHeight = div.offsetHeight === 100; + $.support.selectstart = "onselectstart" in div; + + // set display to none to avoid a layout bug in IE + // http://dev.jquery.com/ticket/4014 + body.removeChild( div ).style.display = "none"; +}); + + + + + +// deprecated +$.extend( $.ui, { + // $.ui.plugin is deprecated. Use the proxy pattern instead. + plugin: { + add: function( module, option, set ) { + var proto = $.ui[ module ].prototype; + for ( var i in set ) { + proto.plugins[ i ] = proto.plugins[ i ] || []; + proto.plugins[ i ].push( [ option, set[ i ] ] ); + } + }, + call: function( instance, name, args ) { + var set = instance.plugins[ name ]; + if ( !set || !instance.element[ 0 ].parentNode ) { + return; + } + + for ( var i = 0; i < set.length; i++ ) { + if ( instance.options[ set[ i ][ 0 ] ] ) { + set[ i ][ 1 ].apply( instance.element, args ); + } + } + } + }, + + // will be deprecated when we switch to jQuery 1.4 - use jQuery.contains() + contains: function( a, b ) { + return document.compareDocumentPosition ? + a.compareDocumentPosition( b ) & 16 : + a !== b && a.contains( b ); + }, + + // only used by resizable + hasScroll: function( el, a ) { + + //If overflow is hidden, the element might have extra content, but the user wants to hide it + if ( $( el ).css( "overflow" ) === "hidden") { + return false; + } + + var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", + has = false; + + if ( el[ scroll ] > 0 ) { + return true; + } + + // TODO: determine which cases actually cause this to happen + // if the element doesn't have the scroll set, see if it's possible to + // set the scroll + el[ scroll ] = 1; + has = ( el[ scroll ] > 0 ); + el[ scroll ] = 0; + return has; + }, + + // these are odd functions, fix the API or move into individual plugins + isOverAxis: function( x, reference, size ) { + //Determines when x coordinate is over "b" element axis + return ( x > reference ) && ( x < ( reference + size ) ); + }, + isOver: function( y, x, top, left, height, width ) { + //Determines when x, y coordinates is over "b" element + return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width ); + } +}); + +})( jQuery ); diff --git a/frontend/static/other_rooms/datepicker/development-bundle/ui/jquery.ui.datepicker.js b/frontend/static/other_rooms/datepicker/development-bundle/ui/jquery.ui.datepicker.js new file mode 100644 index 0000000..17f4286 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/ui/jquery.ui.datepicker.js @@ -0,0 +1,1791 @@ +/* + * jQuery UI Datepicker 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker + * + * Depends: + * jquery.ui.core.js + */ +(function( $, undefined ) { + +$.extend($.ui, { datepicker: { version: "1.8.13" } }); + +var PROP_NAME = 'datepicker'; +var dpuuid = new Date().getTime(); +var instActive; + +/* Date picker manager. + Use the singleton instance of this class, $.datepicker, to interact with the date picker. + Settings for (groups of) date pickers are maintained in an instance object, + allowing multiple different settings on the same page. */ + +function Datepicker() { + this.debug = false; // Change this to true to start debugging + this._curInst = null; // The current instance in use + this._keyEvent = false; // If the last event was a key event + this._disabledInputs = []; // List of date picker inputs that have been disabled + this._datepickerShowing = false; // True if the popup picker is showing , false if not + this._inDialog = false; // True if showing within a "dialog", false if not + this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division + this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class + this._appendClass = 'ui-datepicker-append'; // The name of the append marker class + this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class + this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class + this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class + this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class + this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class + this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class + this.regional = []; // Available regional settings, indexed by language code + this.regional[''] = { // Default regional settings + closeText: 'Done', // Display text for close link + prevText: 'Prev', // Display text for previous month link + nextText: 'Next', // Display text for next month link + currentText: 'Today', // Display text for current month link + monthNames: ['January','February','March','April','May','June', + 'July','August','September','October','November','December'], // Names of months for drop-down and formatting + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting + dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday + weekHeader: 'Wk', // Column header for week of the year + dateFormat: 'mm/dd/yy', // See format options on parseDate + firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... + isRTL: false, // True if right-to-left language, false if left-to-right + showMonthAfterYear: false, // True if the year select precedes month, false for month then year + yearSuffix: '' // Additional text to append to the year in the month headers + }; + this._defaults = { // Global defaults for all the date picker instances + showOn: 'focus', // 'focus' for popup on focus, + // 'button' for trigger button, or 'both' for either + showAnim: 'fadeIn', // Name of jQuery animation for popup + showOptions: {}, // Options for enhanced animations + defaultDate: null, // Used when field is blank: actual date, + // +/-number for offset from today, null for today + appendText: '', // Display text following the input box, e.g. showing the format + buttonText: '...', // Text for trigger button + buttonImage: '', // URL for trigger button image + buttonImageOnly: false, // True if the image appears alone, false if it appears on a button + hideIfNoPrevNext: false, // True to hide next/previous month links + // if not applicable, false to just disable them + navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links + gotoCurrent: false, // True if today link goes back to current selection instead + changeMonth: false, // True if month can be selected directly, false if only prev/next + changeYear: false, // True if year can be selected directly, false if only prev/next + yearRange: 'c-10:c+10', // Range of years to display in drop-down, + // either relative to today's year (-nn:+nn), relative to currently displayed year + // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) + showOtherMonths: false, // True to show dates in other months, false to leave blank + selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable + showWeek: false, // True to show week of the year, false to not show it + calculateWeek: this.iso8601Week, // How to calculate the week of the year, + // takes a Date and returns the number of the week for it + shortYearCutoff: '+10', // Short year values < this are in the current century, + // > this are in the previous century, + // string value starting with '+' for current year + value + minDate: null, // The earliest selectable date, or null for no limit + maxDate: null, // The latest selectable date, or null for no limit + duration: 'fast', // Duration of display/closure + beforeShowDay: null, // Function that takes a date and returns an array with + // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '', + // [2] = cell title (optional), e.g. $.datepicker.noWeekends + beforeShow: null, // Function that takes an input field and + // returns a set of custom settings for the date picker + onSelect: null, // Define a callback function when a date is selected + onChangeMonthYear: null, // Define a callback function when the month or year is changed + onClose: null, // Define a callback function when the datepicker is closed + numberOfMonths: 1, // Number of months to show at a time + showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) + stepMonths: 1, // Number of months to step back/forward + stepBigMonths: 12, // Number of months to step back/forward for the big links + altField: '', // Selector for an alternate field to store selected dates into + altFormat: '', // The date format to use for the alternate field + constrainInput: true, // The input is constrained by the current date format + showButtonPanel: false, // True to show button panel, false to not show it + autoSize: false // True to size the input for the date format, false to leave as is + }; + $.extend(this._defaults, this.regional['']); + this.dpDiv = bindHover($('
        ')); +} + +$.extend(Datepicker.prototype, { + /* Class name added to elements to indicate already configured with a date picker. */ + markerClassName: 'hasDatepicker', + + /* Debug logging (if enabled). */ + log: function () { + if (this.debug) + console.log.apply('', arguments); + }, + + // TODO rename to "widget" when switching to widget factory + _widgetDatepicker: function() { + return this.dpDiv; + }, + + /* Override the default settings for all instances of the date picker. + @param settings object - the new settings to use as defaults (anonymous object) + @return the manager object */ + setDefaults: function(settings) { + extendRemove(this._defaults, settings || {}); + return this; + }, + + /* Attach the date picker to a jQuery selection. + @param target element - the target input field or division or span + @param settings object - the new settings to use for this date picker instance (anonymous) */ + _attachDatepicker: function(target, settings) { + // check for settings on the control itself - in namespace 'date:' + var inlineSettings = null; + for (var attrName in this._defaults) { + var attrValue = target.getAttribute('date:' + attrName); + if (attrValue) { + inlineSettings = inlineSettings || {}; + try { + inlineSettings[attrName] = eval(attrValue); + } catch (err) { + inlineSettings[attrName] = attrValue; + } + } + } + var nodeName = target.nodeName.toLowerCase(); + var inline = (nodeName == 'div' || nodeName == 'span'); + if (!target.id) { + this.uuid += 1; + target.id = 'dp' + this.uuid; + } + var inst = this._newInst($(target), inline); + inst.settings = $.extend({}, settings || {}, inlineSettings || {}); + if (nodeName == 'input') { + this._connectDatepicker(target, inst); + } else if (inline) { + this._inlineDatepicker(target, inst); + } + }, + + /* Create a new instance object. */ + _newInst: function(target, inline) { + var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars + return {id: id, input: target, // associated target + selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection + drawMonth: 0, drawYear: 0, // month being drawn + inline: inline, // is datepicker inline or not + dpDiv: (!inline ? this.dpDiv : // presentation div + bindHover($('
        ')))}; + }, + + /* Attach the date picker to an input field. */ + _connectDatepicker: function(target, inst) { + var input = $(target); + inst.append = $([]); + inst.trigger = $([]); + if (input.hasClass(this.markerClassName)) + return; + this._attachments(input, inst); + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp). + bind("setData.datepicker", function(event, key, value) { + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key) { + return this._get(inst, key); + }); + this._autoSize(inst); + $.data(target, PROP_NAME, inst); + }, + + /* Make attachments based on settings. */ + _attachments: function(input, inst) { + var appendText = this._get(inst, 'appendText'); + var isRTL = this._get(inst, 'isRTL'); + if (inst.append) + inst.append.remove(); + if (appendText) { + inst.append = $('' + appendText + ''); + input[isRTL ? 'before' : 'after'](inst.append); + } + input.unbind('focus', this._showDatepicker); + if (inst.trigger) + inst.trigger.remove(); + var showOn = this._get(inst, 'showOn'); + if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field + input.focus(this._showDatepicker); + if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked + var buttonText = this._get(inst, 'buttonText'); + var buttonImage = this._get(inst, 'buttonImage'); + inst.trigger = $(this._get(inst, 'buttonImageOnly') ? + $('').addClass(this._triggerClass). + attr({ src: buttonImage, alt: buttonText, title: buttonText }) : + $('').addClass(this._triggerClass). + html(buttonImage == '' ? buttonText : $('').attr( + { src:buttonImage, alt:buttonText, title:buttonText }))); + input[isRTL ? 'before' : 'after'](inst.trigger); + inst.trigger.click(function() { + if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0]) + $.datepicker._hideDatepicker(); + else + $.datepicker._showDatepicker(input[0]); + return false; + }); + } + }, + + /* Apply the maximum length for the date format. */ + _autoSize: function(inst) { + if (this._get(inst, 'autoSize') && !inst.inline) { + var date = new Date(2009, 12 - 1, 20); // Ensure double digits + var dateFormat = this._get(inst, 'dateFormat'); + if (dateFormat.match(/[DM]/)) { + var findMax = function(names) { + var max = 0; + var maxI = 0; + for (var i = 0; i < names.length; i++) { + if (names[i].length > max) { + max = names[i].length; + maxI = i; + } + } + return maxI; + }; + date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ? + 'monthNames' : 'monthNamesShort')))); + date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ? + 'dayNames' : 'dayNamesShort'))) + 20 - date.getDay()); + } + inst.input.attr('size', this._formatDate(inst, date).length); + } + }, + + /* Attach an inline date picker to a div. */ + _inlineDatepicker: function(target, inst) { + var divSpan = $(target); + if (divSpan.hasClass(this.markerClassName)) + return; + divSpan.addClass(this.markerClassName).append(inst.dpDiv). + bind("setData.datepicker", function(event, key, value){ + inst.settings[key] = value; + }).bind("getData.datepicker", function(event, key){ + return this._get(inst, key); + }); + $.data(target, PROP_NAME, inst); + this._setDate(inst, this._getDefaultDate(inst), true); + this._updateDatepicker(inst); + this._updateAlternate(inst); + inst.dpDiv.show(); + }, + + /* Pop-up the date picker in a "dialog" box. + @param input element - ignored + @param date string or Date - the initial date to display + @param onSelect function - the function to call when a date is selected + @param settings object - update the dialog date picker instance's settings (anonymous object) + @param pos int[2] - coordinates for the dialog's position within the screen or + event - with x/y coordinates or + leave empty for default (screen centre) + @return the manager object */ + _dialogDatepicker: function(input, date, onSelect, settings, pos) { + var inst = this._dialogInst; // internal instance + if (!inst) { + this.uuid += 1; + var id = 'dp' + this.uuid; + this._dialogInput = $(''); + this._dialogInput.keydown(this._doKeyDown); + $('body').append(this._dialogInput); + inst = this._dialogInst = this._newInst(this._dialogInput, false); + inst.settings = {}; + $.data(this._dialogInput[0], PROP_NAME, inst); + } + extendRemove(inst.settings, settings || {}); + date = (date && date.constructor == Date ? this._formatDate(inst, date) : date); + this._dialogInput.val(date); + + this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); + if (!this._pos) { + var browserWidth = document.documentElement.clientWidth; + var browserHeight = document.documentElement.clientHeight; + var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; + var scrollY = document.documentElement.scrollTop || document.body.scrollTop; + this._pos = // should use actual width/height below + [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY]; + } + + // move input on screen for focus, but hidden behind dialog + this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px'); + inst.settings.onSelect = onSelect; + this._inDialog = true; + this.dpDiv.addClass(this._dialogClass); + this._showDatepicker(this._dialogInput[0]); + if ($.blockUI) + $.blockUI(this.dpDiv); + $.data(this._dialogInput[0], PROP_NAME, inst); + return this; + }, + + /* Detach a datepicker from its control. + @param target element - the target input field or division or span */ + _destroyDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + $.removeData(target, PROP_NAME); + if (nodeName == 'input') { + inst.append.remove(); + inst.trigger.remove(); + $target.removeClass(this.markerClassName). + unbind('focus', this._showDatepicker). + unbind('keydown', this._doKeyDown). + unbind('keypress', this._doKeyPress). + unbind('keyup', this._doKeyUp); + } else if (nodeName == 'div' || nodeName == 'span') + $target.removeClass(this.markerClassName).empty(); + }, + + /* Enable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _enableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = false; + inst.trigger.filter('button'). + each(function() { this.disabled = false; }).end(). + filter('img').css({opacity: '1.0', cursor: ''}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().removeClass('ui-state-disabled'); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + removeAttr("disabled"); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + }, + + /* Disable the date picker to a jQuery selection. + @param target element - the target input field or division or span */ + _disableDatepicker: function(target) { + var $target = $(target); + var inst = $.data(target, PROP_NAME); + if (!$target.hasClass(this.markerClassName)) { + return; + } + var nodeName = target.nodeName.toLowerCase(); + if (nodeName == 'input') { + target.disabled = true; + inst.trigger.filter('button'). + each(function() { this.disabled = true; }).end(). + filter('img').css({opacity: '0.5', cursor: 'default'}); + } + else if (nodeName == 'div' || nodeName == 'span') { + var inline = $target.children('.' + this._inlineClass); + inline.children().addClass('ui-state-disabled'); + inline.find("select.ui-datepicker-month, select.ui-datepicker-year"). + attr("disabled", "disabled"); + } + this._disabledInputs = $.map(this._disabledInputs, + function(value) { return (value == target ? null : value); }); // delete entry + this._disabledInputs[this._disabledInputs.length] = target; + }, + + /* Is the first field in a jQuery collection disabled as a datepicker? + @param target element - the target input field or division or span + @return boolean - true if disabled, false if enabled */ + _isDisabledDatepicker: function(target) { + if (!target) { + return false; + } + for (var i = 0; i < this._disabledInputs.length; i++) { + if (this._disabledInputs[i] == target) + return true; + } + return false; + }, + + /* Retrieve the instance data for the target control. + @param target element - the target input field or division or span + @return object - the associated instance data + @throws error if a jQuery problem getting data */ + _getInst: function(target) { + try { + return $.data(target, PROP_NAME); + } + catch (err) { + throw 'Missing instance data for this datepicker'; + } + }, + + /* Update or retrieve the settings for a date picker attached to an input field or division. + @param target element - the target input field or division or span + @param name object - the new settings to update or + string - the name of the setting to change or retrieve, + when retrieving also 'all' for all instance settings or + 'defaults' for all global defaults + @param value any - the new value for the setting + (omit if above is an object or to retrieve a value) */ + _optionDatepicker: function(target, name, value) { + var inst = this._getInst(target); + if (arguments.length == 2 && typeof name == 'string') { + return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) : + (inst ? (name == 'all' ? $.extend({}, inst.settings) : + this._get(inst, name)) : null)); + } + var settings = name || {}; + if (typeof name == 'string') { + settings = {}; + settings[name] = value; + } + if (inst) { + if (this._curInst == inst) { + this._hideDatepicker(); + } + var date = this._getDateDatepicker(target, true); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + extendRemove(inst.settings, settings); + // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided + if (minDate !== null && settings['dateFormat'] !== undefined && settings['minDate'] === undefined) + inst.settings.minDate = this._formatDate(inst, minDate); + if (maxDate !== null && settings['dateFormat'] !== undefined && settings['maxDate'] === undefined) + inst.settings.maxDate = this._formatDate(inst, maxDate); + this._attachments($(target), inst); + this._autoSize(inst); + this._setDate(inst, date); + this._updateAlternate(inst); + this._updateDatepicker(inst); + } + }, + + // change method deprecated + _changeDatepicker: function(target, name, value) { + this._optionDatepicker(target, name, value); + }, + + /* Redraw the date picker attached to an input field or division. + @param target element - the target input field or division or span */ + _refreshDatepicker: function(target) { + var inst = this._getInst(target); + if (inst) { + this._updateDatepicker(inst); + } + }, + + /* Set the dates for a jQuery selection. + @param target element - the target input field or division or span + @param date Date - the new date */ + _setDateDatepicker: function(target, date) { + var inst = this._getInst(target); + if (inst) { + this._setDate(inst, date); + this._updateDatepicker(inst); + this._updateAlternate(inst); + } + }, + + /* Get the date(s) for the first entry in a jQuery selection. + @param target element - the target input field or division or span + @param noDefault boolean - true if no default date is to be used + @return Date - the current date */ + _getDateDatepicker: function(target, noDefault) { + var inst = this._getInst(target); + if (inst && !inst.inline) + this._setDateFromField(inst, noDefault); + return (inst ? this._getDate(inst) : null); + }, + + /* Handle keystrokes. */ + _doKeyDown: function(event) { + var inst = $.datepicker._getInst(event.target); + var handled = true; + var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); + inst._keyEvent = true; + if ($.datepicker._datepickerShowing) + switch (event.keyCode) { + case 9: $.datepicker._hideDatepicker(); + handled = false; + break; // hide on tab out + case 13: var sel = $('td.' + $.datepicker._dayOverClass + ':not(.' + + $.datepicker._currentClass + ')', inst.dpDiv); + if (sel[0]) + $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); + else + $.datepicker._hideDatepicker(); + return false; // don't submit the form + break; // select the value on enter + case 27: $.datepicker._hideDatepicker(); + break; // hide on escape + case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // previous month/year on page up/+ ctrl + case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + break; // next month/year on page down/+ ctrl + case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); + handled = event.ctrlKey || event.metaKey; + break; // clear on ctrl or command +end + case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); + handled = event.ctrlKey || event.metaKey; + break; // current on ctrl or command +home + case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); + handled = event.ctrlKey || event.metaKey; + // -1 day on ctrl or command +left + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + -$.datepicker._get(inst, 'stepBigMonths') : + -$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +left on Mac + break; + case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // -1 week on ctrl or command +up + case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); + handled = event.ctrlKey || event.metaKey; + // +1 day on ctrl or command +right + if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? + +$.datepicker._get(inst, 'stepBigMonths') : + +$.datepicker._get(inst, 'stepMonths')), 'M'); + // next month/year on alt +right + break; + case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); + handled = event.ctrlKey || event.metaKey; + break; // +1 week on ctrl or command +down + default: handled = false; + } + else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home + $.datepicker._showDatepicker(this); + else { + handled = false; + } + if (handled) { + event.preventDefault(); + event.stopPropagation(); + } + }, + + /* Filter entered characters - based on date format. */ + _doKeyPress: function(event) { + var inst = $.datepicker._getInst(event.target); + if ($.datepicker._get(inst, 'constrainInput')) { + var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); + var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); + return event.ctrlKey || event.metaKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1); + } + }, + + /* Synchronise manual entry and field/alternate field. */ + _doKeyUp: function(event) { + var inst = $.datepicker._getInst(event.target); + if (inst.input.val() != inst.lastVal) { + try { + var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (event) { + $.datepicker.log(event); + } + } + return true; + }, + + /* Pop-up the date picker for a given input field. + @param input element - the input field attached to the date picker or + event - if triggered by focus */ + _showDatepicker: function(input) { + input = input.target || input; + if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger + input = $('input', input.parentNode)[0]; + if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here + return; + var inst = $.datepicker._getInst(input); + if ($.datepicker._curInst && $.datepicker._curInst != inst) { + $.datepicker._curInst.dpDiv.stop(true, true); + } + var beforeShow = $.datepicker._get(inst, 'beforeShow'); + extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); + inst.lastVal = null; + $.datepicker._lastInput = input; + $.datepicker._setDateFromField(inst); + if ($.datepicker._inDialog) // hide cursor + input.value = ''; + if (!$.datepicker._pos) { // position below input + $.datepicker._pos = $.datepicker._findPos(input); + $.datepicker._pos[1] += input.offsetHeight; // add the height + } + var isFixed = false; + $(input).parents().each(function() { + isFixed |= $(this).css('position') == 'fixed'; + return !isFixed; + }); + if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled + $.datepicker._pos[0] -= document.documentElement.scrollLeft; + $.datepicker._pos[1] -= document.documentElement.scrollTop; + } + var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]}; + $.datepicker._pos = null; + //to avoid flashes on Firefox + inst.dpDiv.empty(); + // determine sizing offscreen + inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'}); + $.datepicker._updateDatepicker(inst); + // fix width for dynamic number of date pickers + // and adjust position before showing + offset = $.datepicker._checkOffset(inst, offset, isFixed); + inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ? + 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', + left: offset.left + 'px', top: offset.top + 'px'}); + if (!inst.inline) { + var showAnim = $.datepicker._get(inst, 'showAnim'); + var duration = $.datepicker._get(inst, 'duration'); + var postProcess = function() { + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !! cover.length ){ + var borders = $.datepicker._getBorders(inst.dpDiv); + cover.css({left: -borders[0], top: -borders[1], + width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}); + } + }; + inst.dpDiv.zIndex($(input).zIndex()+1); + $.datepicker._datepickerShowing = true; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess); + if (!showAnim || !duration) + postProcess(); + if (inst.input.is(':visible') && !inst.input.is(':disabled')) + inst.input.focus(); + $.datepicker._curInst = inst; + } + }, + + /* Generate the date picker content. */ + _updateDatepicker: function(inst) { + var self = this; + var borders = $.datepicker._getBorders(inst.dpDiv); + instActive = inst; // for delegate hover events + inst.dpDiv.empty().append(this._generateHTML(inst)); + var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only + if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6 + cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()}) + } + inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover(); + var numMonths = this._getNumberOfMonths(inst); + var cols = numMonths[1]; + var width = 17; + inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width(''); + if (cols > 1) + inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em'); + inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + + 'Class']('ui-datepicker-multi'); + inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + + 'Class']('ui-datepicker-rtl'); + if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input && + // #6694 - don't focus the input if it's already focused + // this breaks the change event in IE + inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) + inst.input.focus(); + // deffered render of the years select (to avoid flashes on Firefox) + if( inst.yearshtml ){ + var origyearshtml = inst.yearshtml; + setTimeout(function(){ + //assure that inst.yearshtml didn't change. + if( origyearshtml === inst.yearshtml && inst.yearshtml ){ + inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml); + } + origyearshtml = inst.yearshtml = null; + }, 0); + } + }, + + /* Retrieve the size of left and top borders for an element. + @param elem (jQuery object) the element of interest + @return (number[2]) the left and top borders */ + _getBorders: function(elem) { + var convert = function(value) { + return {thin: 1, medium: 2, thick: 3}[value] || value; + }; + return [parseFloat(convert(elem.css('border-left-width'))), + parseFloat(convert(elem.css('border-top-width')))]; + }, + + /* Check positioning to remain on screen. */ + _checkOffset: function(inst, offset, isFixed) { + var dpWidth = inst.dpDiv.outerWidth(); + var dpHeight = inst.dpDiv.outerHeight(); + var inputWidth = inst.input ? inst.input.outerWidth() : 0; + var inputHeight = inst.input ? inst.input.outerHeight() : 0; + var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft(); + var viewHeight = document.documentElement.clientHeight + $(document).scrollTop(); + + offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); + offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; + offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; + + // now check if datepicker is showing outside window viewport - move to a better place if so. + offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? + Math.abs(offset.left + dpWidth - viewWidth) : 0); + offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? + Math.abs(dpHeight + inputHeight) : 0); + + return offset; + }, + + /* Find an object's position on the screen. */ + _findPos: function(obj) { + var inst = this._getInst(obj); + var isRTL = this._get(inst, 'isRTL'); + while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) { + obj = obj[isRTL ? 'previousSibling' : 'nextSibling']; + } + var position = $(obj).offset(); + return [position.left, position.top]; + }, + + /* Hide the date picker from view. + @param input element - the input field attached to the date picker */ + _hideDatepicker: function(input) { + var inst = this._curInst; + if (!inst || (input && inst != $.data(input, PROP_NAME))) + return; + if (this._datepickerShowing) { + var showAnim = this._get(inst, 'showAnim'); + var duration = this._get(inst, 'duration'); + var postProcess = function() { + $.datepicker._tidyDialog(inst); + this._curInst = null; + }; + if ($.effects && $.effects[showAnim]) + inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); + else + inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' : + (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess); + if (!showAnim) + postProcess(); + var onClose = this._get(inst, 'onClose'); + if (onClose) + onClose.apply((inst.input ? inst.input[0] : null), + [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback + this._datepickerShowing = false; + this._lastInput = null; + if (this._inDialog) { + this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); + if ($.blockUI) { + $.unblockUI(); + $('body').append(this.dpDiv); + } + } + this._inDialog = false; + } + }, + + /* Tidy up after a dialog display. */ + _tidyDialog: function(inst) { + inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar'); + }, + + /* Close date picker if clicked elsewhere. */ + _checkExternalClick: function(event) { + if (!$.datepicker._curInst) + return; + var $target = $(event.target); + if ($target[0].id != $.datepicker._mainDivId && + $target.parents('#' + $.datepicker._mainDivId).length == 0 && + !$target.hasClass($.datepicker.markerClassName) && + !$target.hasClass($.datepicker._triggerClass) && + $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) + $.datepicker._hideDatepicker(); + }, + + /* Adjust one of the date sub-fields. */ + _adjustDate: function(id, offset, period) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._isDisabledDatepicker(target[0])) { + return; + } + this._adjustInstDate(inst, offset + + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning + period); + this._updateDatepicker(inst); + }, + + /* Action for current link. */ + _gotoToday: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (this._get(inst, 'gotoCurrent') && inst.currentDay) { + inst.selectedDay = inst.currentDay; + inst.drawMonth = inst.selectedMonth = inst.currentMonth; + inst.drawYear = inst.selectedYear = inst.currentYear; + } + else { + var date = new Date(); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + } + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Action for selecting a new month/year. */ + _selectMonthYear: function(id, select, period) { + var target = $(id); + var inst = this._getInst(target[0]); + inst._selectingMonthYear = false; + inst['selected' + (period == 'M' ? 'Month' : 'Year')] = + inst['draw' + (period == 'M' ? 'Month' : 'Year')] = + parseInt(select.options[select.selectedIndex].value,10); + this._notifyChange(inst); + this._adjustDate(target); + }, + + /* Restore input focus after not changing month/year. */ + _clickMonthYear: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + if (inst.input && inst._selectingMonthYear) { + setTimeout(function() { + inst.input.focus(); + }, 0); + } + inst._selectingMonthYear = !inst._selectingMonthYear; + }, + + /* Action for selecting a day. */ + _selectDay: function(id, month, year, td) { + var target = $(id); + if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { + return; + } + var inst = this._getInst(target[0]); + inst.selectedDay = inst.currentDay = $('a', td).html(); + inst.selectedMonth = inst.currentMonth = month; + inst.selectedYear = inst.currentYear = year; + this._selectDate(id, this._formatDate(inst, + inst.currentDay, inst.currentMonth, inst.currentYear)); + }, + + /* Erase the input field and hide the date picker. */ + _clearDate: function(id) { + var target = $(id); + var inst = this._getInst(target[0]); + this._selectDate(target, ''); + }, + + /* Update the input field with the selected date. */ + _selectDate: function(id, dateStr) { + var target = $(id); + var inst = this._getInst(target[0]); + dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); + if (inst.input) + inst.input.val(dateStr); + this._updateAlternate(inst); + var onSelect = this._get(inst, 'onSelect'); + if (onSelect) + onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback + else if (inst.input) + inst.input.trigger('change'); // fire the change event + if (inst.inline) + this._updateDatepicker(inst); + else { + this._hideDatepicker(); + this._lastInput = inst.input[0]; + if (typeof(inst.input[0]) != 'object') + inst.input.focus(); // restore focus + this._lastInput = null; + } + }, + + /* Update any alternate field to synchronise with the main field. */ + _updateAlternate: function(inst) { + var altField = this._get(inst, 'altField'); + if (altField) { // update alternate field too + var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); + var date = this._getDate(inst); + var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); + $(altField).each(function() { $(this).val(dateStr); }); + } + }, + + /* Set as beforeShowDay function to prevent selection of weekends. + @param date Date - the date to customise + @return [boolean, string] - is this date selectable?, what is its CSS class? */ + noWeekends: function(date) { + var day = date.getDay(); + return [(day > 0 && day < 6), '']; + }, + + /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. + @param date Date - the date to get the week for + @return number - the number of the week within the year that contains this date */ + iso8601Week: function(date) { + var checkDate = new Date(date.getTime()); + // Find Thursday of this week starting on Monday + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + var time = checkDate.getTime(); + checkDate.setMonth(0); // Compare with Jan 1 + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; + }, + + /* Parse a string value into a date object. + See formatDate below for the possible formats. + + @param format string - the expected format of the date + @param value string - the date in the above format + @param settings Object - attributes include: + shortYearCutoff number - the cutoff year for determining the century (optional) + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return Date - the extracted date value or null if value is blank */ + parseDate: function (format, value, settings) { + if (format == null || value == null) + throw 'Invalid arguments'; + value = (typeof value == 'object' ? value.toString() : value + ''); + if (value == '') + return null; + var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + var year = -1; + var month = -1; + var day = -1; + var doy = -1; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Extract a number from the string value + var getNumber = function(match) { + var isDoubled = lookAhead(match); + var size = (match == '@' ? 14 : (match == '!' ? 20 : + (match == 'y' && isDoubled ? 4 : (match == 'o' ? 3 : 2)))); + var digits = new RegExp('^\\d{1,' + size + '}'); + var num = value.substring(iValue).match(digits); + if (!num) + throw 'Missing number at position ' + iValue; + iValue += num[0].length; + return parseInt(num[0], 10); + }; + // Extract a name from the string value and convert to an index + var getName = function(match, shortNames, longNames) { + var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) { + return [ [k, v] ]; + }).sort(function (a, b) { + return -(a[1].length - b[1].length); + }); + var index = -1; + $.each(names, function (i, pair) { + var name = pair[1]; + if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) { + index = pair[0]; + iValue += name.length; + return false; + } + }); + if (index != -1) + return index + 1; + else + throw 'Unknown name at position ' + iValue; + }; + // Confirm that a literal character matches the string value + var checkLiteral = function() { + if (value.charAt(iValue) != format.charAt(iFormat)) + throw 'Unexpected literal at position ' + iValue; + iValue++; + }; + var iValue = 0; + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + checkLiteral(); + else + switch (format.charAt(iFormat)) { + case 'd': + day = getNumber('d'); + break; + case 'D': + getName('D', dayNamesShort, dayNames); + break; + case 'o': + doy = getNumber('o'); + break; + case 'm': + month = getNumber('m'); + break; + case 'M': + month = getName('M', monthNamesShort, monthNames); + break; + case 'y': + year = getNumber('y'); + break; + case '@': + var date = new Date(getNumber('@')); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case '!': + var date = new Date((getNumber('!') - this._ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); + break; + case "'": + if (lookAhead("'")) + checkLiteral(); + else + literal = true; + break; + default: + checkLiteral(); + } + } + if (year == -1) + year = new Date().getFullYear(); + else if (year < 100) + year += new Date().getFullYear() - new Date().getFullYear() % 100 + + (year <= shortYearCutoff ? 0 : -100); + if (doy > -1) { + month = 1; + day = doy; + do { + var dim = this._getDaysInMonth(year, month - 1); + if (day <= dim) + break; + month++; + day -= dim; + } while (true); + } + var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) + throw 'Invalid date'; // E.g. 31/02/00 + return date; + }, + + /* Standard date formats. */ + ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601) + COOKIE: 'D, dd M yy', + ISO_8601: 'yy-mm-dd', + RFC_822: 'D, d M y', + RFC_850: 'DD, dd-M-y', + RFC_1036: 'D, d M y', + RFC_1123: 'D, d M yy', + RFC_2822: 'D, d M yy', + RSS: 'D, d M y', // RFC 822 + TICKS: '!', + TIMESTAMP: '@', + W3C: 'yy-mm-dd', // ISO 8601 + + _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), + + /* Format a date object into a string value. + The format can be combinations of the following: + d - day of month (no leading zero) + dd - day of month (two digit) + o - day of year (no leading zeros) + oo - day of year (three digit) + D - day name short + DD - day name long + m - month of year (no leading zero) + mm - month of year (two digit) + M - month name short + MM - month name long + y - year (two digit) + yy - year (four digit) + @ - Unix timestamp (ms since 01/01/1970) + ! - Windows ticks (100ns since 01/01/0001) + '...' - literal text + '' - single quote + + @param format string - the desired format of the date + @param date Date - the date value to format + @param settings Object - attributes include: + dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) + dayNames string[7] - names of the days from Sunday (optional) + monthNamesShort string[12] - abbreviated names of the months (optional) + monthNames string[12] - names of the months (optional) + @return string - the date in the above format */ + formatDate: function (format, date, settings) { + if (!date) + return ''; + var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; + var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; + var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; + var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + // Format a number, with leading zero if necessary + var formatNumber = function(match, value, len) { + var num = '' + value; + if (lookAhead(match)) + while (num.length < len) + num = '0' + num; + return num; + }; + // Format a name, short or long as requested + var formatName = function(match, value, shortNames, longNames) { + return (lookAhead(match) ? longNames[value] : shortNames[value]); + }; + var output = ''; + var literal = false; + if (date) + for (var iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + output += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': + output += formatNumber('d', date.getDate(), 2); + break; + case 'D': + output += formatName('D', date.getDay(), dayNamesShort, dayNames); + break; + case 'o': + output += formatNumber('o', + (date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3); + break; + case 'm': + output += formatNumber('m', date.getMonth() + 1, 2); + break; + case 'M': + output += formatName('M', date.getMonth(), monthNamesShort, monthNames); + break; + case 'y': + output += (lookAhead('y') ? date.getFullYear() : + (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); + break; + case '@': + output += date.getTime(); + break; + case '!': + output += date.getTime() * 10000 + this._ticksTo1970; + break; + case "'": + if (lookAhead("'")) + output += "'"; + else + literal = true; + break; + default: + output += format.charAt(iFormat); + } + } + return output; + }, + + /* Extract all possible characters from the date format. */ + _possibleChars: function (format) { + var chars = ''; + var literal = false; + // Check whether a format character is doubled + var lookAhead = function(match) { + var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); + if (matches) + iFormat++; + return matches; + }; + for (var iFormat = 0; iFormat < format.length; iFormat++) + if (literal) + if (format.charAt(iFormat) == "'" && !lookAhead("'")) + literal = false; + else + chars += format.charAt(iFormat); + else + switch (format.charAt(iFormat)) { + case 'd': case 'm': case 'y': case '@': + chars += '0123456789'; + break; + case 'D': case 'M': + return null; // Accept anything + case "'": + if (lookAhead("'")) + chars += "'"; + else + literal = true; + break; + default: + chars += format.charAt(iFormat); + } + return chars; + }, + + /* Get a setting value, defaulting if necessary. */ + _get: function(inst, name) { + return inst.settings[name] !== undefined ? + inst.settings[name] : this._defaults[name]; + }, + + /* Parse existing date and initialise date picker. */ + _setDateFromField: function(inst, noDefault) { + if (inst.input.val() == inst.lastVal) { + return; + } + var dateFormat = this._get(inst, 'dateFormat'); + var dates = inst.lastVal = inst.input ? inst.input.val() : null; + var date, defaultDate; + date = defaultDate = this._getDefaultDate(inst); + var settings = this._getFormatConfig(inst); + try { + date = this.parseDate(dateFormat, dates, settings) || defaultDate; + } catch (event) { + this.log(event); + dates = (noDefault ? '' : dates); + } + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + inst.currentDay = (dates ? date.getDate() : 0); + inst.currentMonth = (dates ? date.getMonth() : 0); + inst.currentYear = (dates ? date.getFullYear() : 0); + this._adjustInstDate(inst); + }, + + /* Retrieve the default date shown on opening. */ + _getDefaultDate: function(inst) { + return this._restrictMinMax(inst, + this._determineDate(inst, this._get(inst, 'defaultDate'), new Date())); + }, + + /* A date may be specified as an exact value or a relative one. */ + _determineDate: function(inst, date, defaultDate) { + var offsetNumeric = function(offset) { + var date = new Date(); + date.setDate(date.getDate() + offset); + return date; + }; + var offsetString = function(offset) { + try { + return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + offset, $.datepicker._getFormatConfig(inst)); + } + catch (e) { + // Ignore + } + var date = (offset.toLowerCase().match(/^c/) ? + $.datepicker._getDate(inst) : null) || new Date(); + var year = date.getFullYear(); + var month = date.getMonth(); + var day = date.getDate(); + var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; + var matches = pattern.exec(offset); + while (matches) { + switch (matches[2] || 'd') { + case 'd' : case 'D' : + day += parseInt(matches[1],10); break; + case 'w' : case 'W' : + day += parseInt(matches[1],10) * 7; break; + case 'm' : case 'M' : + month += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + case 'y': case 'Y' : + year += parseInt(matches[1],10); + day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); + break; + } + matches = pattern.exec(offset); + } + return new Date(year, month, day); + }; + var newDate = (date == null || date === '' ? defaultDate : (typeof date == 'string' ? offsetString(date) : + (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime())))); + newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate); + if (newDate) { + newDate.setHours(0); + newDate.setMinutes(0); + newDate.setSeconds(0); + newDate.setMilliseconds(0); + } + return this._daylightSavingAdjust(newDate); + }, + + /* Handle switch to/from daylight saving. + Hours may be non-zero on daylight saving cut-over: + > 12 when midnight changeover, but then cannot generate + midnight datetime, so jump to 1AM, otherwise reset. + @param date (Date) the date to check + @return (Date) the corrected date */ + _daylightSavingAdjust: function(date) { + if (!date) return null; + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); + return date; + }, + + /* Set the date(s) directly. */ + _setDate: function(inst, date, noChange) { + var clear = !date; + var origMonth = inst.selectedMonth; + var origYear = inst.selectedYear; + var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); + inst.selectedDay = inst.currentDay = newDate.getDate(); + inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); + inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); + if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange) + this._notifyChange(inst); + this._adjustInstDate(inst); + if (inst.input) { + inst.input.val(clear ? '' : this._formatDate(inst)); + } + }, + + /* Retrieve the date(s) directly. */ + _getDate: function(inst) { + var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : + this._daylightSavingAdjust(new Date( + inst.currentYear, inst.currentMonth, inst.currentDay))); + return startDate; + }, + + /* Generate the HTML for the current state of the date picker. */ + _generateHTML: function(inst) { + var today = new Date(); + today = this._daylightSavingAdjust( + new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time + var isRTL = this._get(inst, 'isRTL'); + var showButtonPanel = this._get(inst, 'showButtonPanel'); + var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); + var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); + var numMonths = this._getNumberOfMonths(inst); + var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); + var stepMonths = this._get(inst, 'stepMonths'); + var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); + var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : + new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var drawMonth = inst.drawMonth - showCurrentAtPos; + var drawYear = inst.drawYear; + if (drawMonth < 0) { + drawMonth += 12; + drawYear--; + } + if (maxDate) { + var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), + maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); + maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); + while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { + drawMonth--; + if (drawMonth < 0) { + drawMonth = 11; + drawYear--; + } + } + } + inst.drawMonth = drawMonth; + inst.drawYear = drawYear; + var prevText = this._get(inst, 'prevText'); + prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), + this._getFormatConfig(inst))); + var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? + '' + prevText + '' : + (hideIfNoPrevNext ? '' : '' + prevText + '')); + var nextText = this._get(inst, 'nextText'); + nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, + this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), + this._getFormatConfig(inst))); + var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? + '' + nextText + '' : + (hideIfNoPrevNext ? '' : '' + nextText + '')); + var currentText = this._get(inst, 'currentText'); + var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); + currentText = (!navigationAsDateFormat ? currentText : + this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); + var controls = (!inst.inline ? '' : ''); + var buttonPanel = (showButtonPanel) ? '
        ' + (isRTL ? controls : '') + + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '
        ' : ''; + var firstDay = parseInt(this._get(inst, 'firstDay'),10); + firstDay = (isNaN(firstDay) ? 0 : firstDay); + var showWeek = this._get(inst, 'showWeek'); + var dayNames = this._get(inst, 'dayNames'); + var dayNamesShort = this._get(inst, 'dayNamesShort'); + var dayNamesMin = this._get(inst, 'dayNamesMin'); + var monthNames = this._get(inst, 'monthNames'); + var monthNamesShort = this._get(inst, 'monthNamesShort'); + var beforeShowDay = this._get(inst, 'beforeShowDay'); + var showOtherMonths = this._get(inst, 'showOtherMonths'); + var selectOtherMonths = this._get(inst, 'selectOtherMonths'); + var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; + var defaultDate = this._getDefaultDate(inst); + var html = ''; + for (var row = 0; row < numMonths[0]; row++) { + var group = ''; + for (var col = 0; col < numMonths[1]; col++) { + var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); + var cornerClass = ' ui-corner-all'; + var calender = ''; + if (isMultiMonth) { + calender += '
        '; + } + calender += '
        ' + + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, + row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers + '
        ' + + ''; + var thead = (showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // days of the week + var day = (dow + firstDay) % 7; + thead += '= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + + '' + dayNamesMin[day] + ''; + } + calender += thead + ''; + var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); + if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) + inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); + var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; + var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate + var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); + for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows + calender += ''; + var tbody = (!showWeek ? '' : ''); + for (var dow = 0; dow < 7; dow++) { // create date picker days + var daySettings = (beforeShowDay ? + beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); + var otherMonth = (printDate.getMonth() != drawMonth); + var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || + (minDate && printDate < minDate) || (maxDate && printDate > maxDate); + tbody += ''; // display selectable date + printDate.setDate(printDate.getDate() + 1); + printDate = this._daylightSavingAdjust(printDate); + } + calender += tbody + ''; + } + drawMonth++; + if (drawMonth > 11) { + drawMonth = 0; + drawYear++; + } + calender += '
        ' + this._get(inst, 'weekHeader') + '
        ' + + this._get(inst, 'calculateWeek')(printDate) + '' + // actions + (otherMonth && !showOtherMonths ? ' ' : // display for other months + (unselectable ? '' + printDate.getDate() + '' : '' + printDate.getDate() + '')) + '
        ' + (isMultiMonth ? '
        ' + + ((numMonths[0] > 0 && col == numMonths[1]-1) ? '
        ' : '') : ''); + group += calender; + } + html += group; + } + html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ? + '' : ''); + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + var changeMonth = this._get(inst, 'changeMonth'); + var changeYear = this._get(inst, 'changeYear'); + var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); + var html = '
        '; + var monthHtml = ''; + // month selection + if (secondary || !changeMonth) + monthHtml += '' + monthNames[drawMonth] + ''; + else { + var inMinYear = (minDate && minDate.getFullYear() == drawYear); + var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); + monthHtml += ''; + } + if (!showMonthAfterYear) + html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); + // year selection + if ( !inst.yearshtml ) { + inst.yearshtml = ''; + if (secondary || !changeYear) + html += '' + drawYear + ''; + else { + // determine range of years to display + var years = this._get(inst, 'yearRange').split(':'); + var thisYear = new Date().getFullYear(); + var determineYear = function(value) { + var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + var year = determineYear(years[0]); + var endYear = Math.max(year, determineYear(years[1] || '')); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += ''; + + html += inst.yearshtml; + inst.yearshtml = null; + } + } + html += this._get(inst, 'yearSuffix'); + if (showMonthAfterYear) + html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; + html += '
        '; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period == 'Y' ? offset : 0); + var month = inst.drawMonth + (period == 'M' ? offset : 0); + var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + + (period == 'D' ? offset : 0); + var date = this._restrictMinMax(inst, + this._daylightSavingAdjust(new Date(year, month, day))); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period == 'M' || period == 'Y') + this._notifyChange(inst); + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var newDate = (minDate && date < minDate ? minDate : date); + newDate = (maxDate && newDate > maxDate ? maxDate : newDate); + return newDate; + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, 'onChangeMonthYear'); + if (onChange) + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, 'numberOfMonths'); + return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst); + var date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + if (offset < 0) + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime())); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, 'shortYearCutoff'); + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), + monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day == 'object' ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + } +}); + +/* + * Bind hover events for datepicker elements. + * Done via delegate so the binding only occurs once in the lifetime of the parent div. + * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. + */ +function bindHover(dpDiv) { + var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; + return dpDiv.delegate(selector, 'mouseout', function() { + $(this).removeClass('ui-state-hover'); + if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); + if (this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); + }) + .delegate(selector, 'mouseover', function(){ + if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) { + $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); + $(this).addClass('ui-state-hover'); + if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); + if (this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); + } + }); +} + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) + if (props[name] == null || props[name] == undefined) + target[name] = props[name]; + return target; +}; + +/* Determine whether an object is an array. */ +function isArray(a) { + return (a && (($.browser.safari && typeof a == 'object' && a.length) || + (a.constructor && a.constructor.toString().match(/\Array\(\)/)))); +}; + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick). + find('body').append($.datepicker.dpDiv); + $.datepicker.initialized = true; + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + return this.each(function() { + typeof options == 'string' ? + $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.8.13"; + +// Workaround for #4055 +// Add another global to avoid noConflict issues with inline event handlers +window['DP_jQuery_' + dpuuid] = $; + +})(jQuery); diff --git a/frontend/static/other_rooms/datepicker/development-bundle/ui/minified/jquery.ui.core.min.js b/frontend/static/other_rooms/datepicker/development-bundle/ui/minified/jquery.ui.core.min.js new file mode 100644 index 0000000..2ec09ed --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/ui/minified/jquery.ui.core.min.js @@ -0,0 +1,17 @@ +/*! + * jQuery UI 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13", +keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus(); +b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this, +"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection", +function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth, +outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b); +return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e= +0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a
        '))}function N(a){return a.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a", +"mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); +d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==B)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.13"}});var z=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)}, +_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a, +b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('
        '))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", +function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker); +if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f==""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]); +return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a); +if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d(''); +this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/ +2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a, +"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled= +false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled= +true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false; +for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a); +d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal= +null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos= +null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0], +top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover"); +c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"); +a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]}, +_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e- +g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst= +null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, +_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"): +0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear= +false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay= +d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a); +else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b= +a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort, +g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!= +c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames, +h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear|| +a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay? +new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a)); +n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m, +g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&& +a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
        '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
        ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='
        '+(/all|left/.test(t)&&x==0?c? +f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'
        ';var D=j?'":"";for(t=0;t<7;t++){var q=(t+h)%7;D+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}y+=D+"";D=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, +D);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;D=l?6:Math.ceil((t+D)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q";var R=!j?"":'";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],F=q.getMonth()!=g,L=F&&!K||!I[0]||k&&qo;R+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}y+=R+""}g++;if(g>11){g=0;m++}y+="
        '+this._get(a,"weekHeader")+"
        '+this._get(a,"calculateWeek")(q)+""+(F&&!C?" ":L?''+q.getDate()+ +"":''+q.getDate()+"")+"
        "+(l?"
        "+(i[0]>0&&G==i[1]-1?'
        ':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': +"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
        ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)? +r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+= +(h||!(j&&l)?" ":"")+o;k+="
        ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a, +"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a, +b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!= +"string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay)); +return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&& +arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.13";window["DP_jQuery_"+z]=d})(jQuery); diff --git a/frontend/static/other_rooms/datepicker/development-bundle/version.txt b/frontend/static/other_rooms/datepicker/development-bundle/version.txt new file mode 100644 index 0000000..59009bc --- /dev/null +++ b/frontend/static/other_rooms/datepicker/development-bundle/version.txt @@ -0,0 +1 @@ +1.8.13 diff --git a/frontend/static/other_rooms/datepicker/js/jquery-1.5.1.min.js b/frontend/static/other_rooms/datepicker/js/jquery-1.5.1.min.js new file mode 100644 index 0000000..6437874 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/js/jquery-1.5.1.min.js @@ -0,0 +1,16 @@ +/*! + * jQuery JavaScript Library v1.5.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Feb 23 13:55:29 2011 -0500 + */ +(function(a,b){function cg(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cd(a){if(!bZ[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";bZ[a]=c}return bZ[a]}function cc(a,b){var c={};d.each(cb.concat.apply([],cb.slice(0,b)),function(){c[this]=a});return c}function bY(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bX(){try{return new a.XMLHttpRequest}catch(b){}}function bW(){d(a).unload(function(){for(var a in bU)bU[a](0,1)})}function bQ(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function N(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function F(a,b){return(a&&a!=="*"?a+".":"")+b.replace(r,"`").replace(s,"&")}function E(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,q=[],r=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function C(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function w(){return!0}function v(){return!1}function g(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function f(a,c,f){if(f===b&&a.nodeType===1){f=a.getAttribute("data-"+c);if(typeof f==="string"){try{f=f==="true"?!0:f==="false"?!1:f==="null"?null:d.isNaN(f)?e.test(f)?d.parseJSON(f):f:parseFloat(f)}catch(g){}d.data(a,c,f)}else f=b}return f}var c=a.document,d=function(){function I(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x=!1,y,z="then done fail isResolved isRejected promise".split(" "),A,B=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?D.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=!0;if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",A,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",A),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&I()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):H[B.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||C.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1){var f=E.call(arguments,0),g=b,h=function(a){return function(b){f[a]=arguments.length>1?E.call(arguments,0):b,--g||c.resolveWith(e,f)}};while(b--)a=f[b],a&&d.isFunction(a.promise)?a.promise().then(h(b),c.reject):--g;g||c.resolveWith(e,f)}else c!==a&&c.resolve(a);return e},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),y=d._Deferred(),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){H["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),G&&(d.inArray=function(a,b){return G.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?A=function(){c.removeEventListener("DOMContentLoaded",A,!1),d.ready()}:c.attachEvent&&(A=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",A),d.ready())});return d}();(function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML="
        a";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e),b=e=f=null}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
        ",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
        t
        ";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function"),b=null;return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}})();var e=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!g(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,h=b.nodeType,i=h?d.cache:b,j=h?b[d.expando]:d.expando;if(!i[j])return;if(c){var k=e?i[j][f]:i[j];if(k){delete k[c];if(!g(k))return}}if(e){delete i[j][f];if(!g(i[j]))return}var l=i[j][f];d.support.deleteExpando||i!=a?delete i[j]:i[j]=null,l?(i[j]={},h||(i[j].toJSON=d.noop),i[j][f]=l):h&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var g=this[0].attributes,h;for(var i=0,j=g.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var k=i?f:0,l=i?f+1:h.length;k=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=k.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&l.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var o=a.getAttributeNode("tabIndex");return o&&o.specified?o.value:m.test(a.nodeName)||n.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var p=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return p===null?b:p}h&&(a[c]=e);return a[c]}});var p=/\.(.*)$/,q=/^(?:textarea|input|select)$/i,r=/\./g,s=/ /g,t=/[^\w\s.|`]/g,u=function(a){return a.replace(t,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=v;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(){return typeof d!=="undefined"&&!d.event.triggered?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=v);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),u).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(p,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=!0,l[m]())}catch(q){}k&&(l["on"+m]=k),d.event.triggered=!1}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},B=function B(a){var c=a.target,e,f;if(q.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=A(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:B,beforedeactivate:B,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&B.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&B.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",A(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in z)d.event.add(this,c+".specialChange",z[c]);return q.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return q.test(this.nodeName)}},z=d.event.special.change.filters,z.focus=z.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function c(a){a=d.event.fix(a),a.type=b;return d.event.handle.call(this,a)}d.event.special[b]={setup:function(){this.addEventListener(a,c,!0)},teardown:function(){this.removeEventListener(a,c,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){return"text"===a.getAttribute("type")},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

        ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector,d=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(e){d=!0}b&&(k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(d||!l.match.PSEUDO.test(c)&&!/!=/.test(c))return b.call(a,c)}catch(e){}return k(c,null,null,[a]).length>0})}(),function(){var a=c.createElement("div");a.innerHTML="
        ";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=L.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(N(c[0])||N(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=K.call(arguments);G.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!M[a]?d.unique(f):f,(this.length>1||I.test(e))&&H.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var P=/ jQuery\d+="(?:\d+|null)"/g,Q=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,S=/<([\w:]+)/,T=/",""],legend:[1,"
        ","
        "],thead:[1,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]};X.optgroup=X.option,X.tbody=X.tfoot=X.colgroup=X.caption=X.thead,X.th=X.td,d.support.htmlSerialize||(X._default=[1,"div
        ","
        "]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(P,""):null;if(typeof a!=="string"||V.test(a)||!d.support.leadingWhitespace&&Q.test(a)||X[(S.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(R,"<$1>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){$(a,e),f=_(a),g=_(e);for(h=0;f[h];++h)$(f[h],g[h])}if(b){Z(a,e);if(c){f=_(a),g=_(e);for(h=0;f[h];++h)Z(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||U.test(i)){if(typeof i==="string"){i=i.replace(R,"<$1>");var j=(S.exec(i)||["",""])[1].toLowerCase(),k=X[j]||X._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=T.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&Q.test(i)&&m.insertBefore(b.createTextNode(Q.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bb=/alpha\([^)]*\)/i,bc=/opacity=([^)]*)/,bd=/-([a-z])/ig,be=/([A-Z])/g,bf=/^-?\d+(?:px)?$/i,bg=/^-?\d/,bh={position:"absolute",visibility:"hidden",display:"block"},bi=["Left","Right"],bj=["Top","Bottom"],bk,bl,bm,bn=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bk(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bk)return bk(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bd,bn)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bo(a,b,e):d.swap(a,bh,function(){f=bo(a,b,e)});if(f<=0){f=bk(a,b,b),f==="0px"&&bm&&(f=bm(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bf.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return bc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bb.test(f)?f.replace(bb,e):c.filter+" "+e}}),c.defaultView&&c.defaultView.getComputedStyle&&(bl=function(a,c,e){var f,g,h;e=e.replace(be,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bm=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bf.test(d)&&bg.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bk=bl||bm,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var bp=/%20/g,bq=/\[\]$/,br=/\r?\n/g,bs=/#.*$/,bt=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bu=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bv=/(?:^file|^widget|\-extension):$/,bw=/^(?:GET|HEAD)$/,bx=/^\/\//,by=/\?/,bz=/)<[^<]*)*<\/script>/gi,bA=/^(?:select|textarea)/i,bB=/\s+/,bC=/([?&])_=[^&]*/,bD=/(^|\-)([a-z])/g,bE=function(a,b,c){return b+c.toUpperCase()},bF=/^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/,bG=d.fn.load,bH={},bI={},bJ,bK;try{bJ=c.location.href}catch(bL){bJ=c.createElement("a"),bJ.href="",bJ=bJ.href}bK=bF.exec(bJ.toLowerCase()),d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bG)return bG.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("
        ").append(c.replace(bz,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bA.test(this.nodeName)||bu.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(br,"\r\n")}}):{name:b.name,value:c.replace(br,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bJ,isLocal:bv.test(bK[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bM(bH),ajaxTransport:bM(bI),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bP(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bQ(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bD,bE)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bt.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bs,"").replace(bx,bK[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bB),e.crossDomain||(q=bF.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bK[1]||q[2]!=bK[2]||(q[3]||(q[1]==="http:"?80:443))!=(bK[3]||(bK[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bN(bH,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!bw.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(by.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bC,"$1_="+w);e.url=x+(x===e.url?(by.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bN(bI,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bO(g,a[g],c,f);return e.join("&").replace(bp,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bR=d.now(),bS=/(\=)\?(&|$)|()\?\?()/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bR++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bS.test(b.url)||f&&bS.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bS,l),b.url===j&&(f&&(k=k.replace(bS,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bT=d.now(),bU,bV;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bX()||bY()}:bX,bV=d.ajaxSettings.xhr(),d.support.ajax=!!bV,d.support.cors=bV&&"withCredentials"in bV,bV=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),(!a.crossDomain||a.hasContent)&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bU[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bU||(bU={},bW()),h=bT++,g.onreadystatechange=bU[h]=c):c()},abort:function(){c&&c(0,1)}}}});var bZ={},b$=/^(?:toggle|show|hide)$/,b_=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,ca,cb=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(cc("show",3),a,b,c);for(var g=0,h=this.length;g=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:cc("show",1),slideUp:cc("hide",1),slideToggle:cc("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!ca&&(ca=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b
        ";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),a=b=e=f=g=h=null,d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=e==="absolute"&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=cf.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!cf.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=cg(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=cg(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window); \ No newline at end of file diff --git a/frontend/static/other_rooms/datepicker/js/jquery-ui-1.8.13.custom.min.js b/frontend/static/other_rooms/datepicker/js/jquery-ui-1.8.13.custom.min.js new file mode 100644 index 0000000..07ba984 --- /dev/null +++ b/frontend/static/other_rooms/datepicker/js/jquery-ui-1.8.13.custom.min.js @@ -0,0 +1,100 @@ +/*! + * jQuery UI 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.13", +keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus(); +b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this, +"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection", +function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth, +outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b); +return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e= +0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a
        '))}function N(a){return a.delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a", +"mouseout",function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).delegate("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a","mouseover",function(){if(!d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); +d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==B)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.13"}});var z=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)}, +_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a, +b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('
        '))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker", +function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d(''+c+"");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker); +if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('').addClass(this._triggerClass).html(f==""?c:d("").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]); +return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;gh){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a); +if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d(''); +this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/ +2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a, +"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled= +false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled= +true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false; +for(var b=0;b-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a); +d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal= +null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos= +null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0], +top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover"); +c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"); +a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]}, +_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e- +g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst= +null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")}, +_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"): +0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear= +false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay= +d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a); +else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b= +a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort, +g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!= +c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames, +h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+112?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear|| +a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay? +new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&nn;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a)); +n=this._canAdjustMonth(a,-1,m,g)?''+n+"":f?"":''+n+"";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m, +g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?''+r+"":f?"":''+r+"";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&& +a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'":"";e=e?'
        '+(c?h:"")+(this._isInRange(a,r)?'":"")+(c?"":h)+"
        ":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='
        '+(/all|left/.test(t)&&x==0?c? +f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'
        ';var D=j?'":"";for(t=0;t<7;t++){var q=(t+h)%7;D+="=5?' class="ui-datepicker-week-end"':"")+'>'+s[q]+""}y+=D+"";D=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay, +D);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;D=l?6:Math.ceil((t+D)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q";var R=!j?"":'";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],F=q.getMonth()!=g,L=F&&!K||!I[0]||k&&qo;R+='";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}y+=R+""}g++;if(g>11){g=0;m++}y+="
        '+this._get(a,"weekHeader")+"
        '+this._get(a,"calculateWeek")(q)+""+(F&&!C?" ":L?''+q.getDate()+ +"":''+q.getDate()+"")+"
        "+(l?""+(i[0]>0&&G==i[1]-1?'
        ':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'': +"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='
        ',o="";if(h||!j)o+=''+i[b]+"";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+=''+c+"";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)? +r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+= +(h||!(j&&l)?" ":"")+o;k+="
        ";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a, +"max");b=c&&ba?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a, +b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!= +"string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay)); +return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&& +arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.13";window["DP_jQuery_"+z]=d})(jQuery); +; \ No newline at end of file diff --git a/frontend/static/other_rooms/embed-test.html b/frontend/static/other_rooms/embed-test.html new file mode 100644 index 0000000..6069fcc --- /dev/null +++ b/frontend/static/other_rooms/embed-test.html @@ -0,0 +1,48 @@ + + + +SJ EMBED TEST + + + + + + diff --git a/frontend/static/other_rooms/embed-test2.html b/frontend/static/other_rooms/embed-test2.html new file mode 100644 index 0000000..3e7bb5d --- /dev/null +++ b/frontend/static/other_rooms/embed-test2.html @@ -0,0 +1,48 @@ + + + +SJ EMBED TEST + + + + + + diff --git a/frontend/static/other_rooms/embed.html b/frontend/static/other_rooms/embed.html new file mode 100644 index 0000000..70d35f1 --- /dev/null +++ b/frontend/static/other_rooms/embed.html @@ -0,0 +1,64 @@ + + + +RADIO + + + + + + + + + + + + + + +
        +
        +
        +
        +
        +
        + +
        + +
        +
        +
          +
        +
        +
        + + + + + + + + + + + + + + + + + + diff --git a/frontend/static/other_rooms/img/cloudz1.png b/frontend/static/other_rooms/img/cloudz1.png new file mode 100644 index 0000000..fc83e06 Binary files /dev/null and b/frontend/static/other_rooms/img/cloudz1.png differ diff --git a/frontend/static/other_rooms/img/cloudz2.png b/frontend/static/other_rooms/img/cloudz2.png new file mode 100644 index 0000000..d563639 Binary files /dev/null and b/frontend/static/other_rooms/img/cloudz2.png differ diff --git a/frontend/static/other_rooms/img/playlist-banner.gif b/frontend/static/other_rooms/img/playlist-banner.gif new file mode 100644 index 0000000..7486d7a Binary files /dev/null and b/frontend/static/other_rooms/img/playlist-banner.gif differ diff --git a/frontend/static/other_rooms/liketest.html b/frontend/static/other_rooms/liketest.html new file mode 100644 index 0000000..f9329d4 --- /dev/null +++ b/frontend/static/other_rooms/liketest.html @@ -0,0 +1,70 @@ + + + +SCANNERJAMMER + + + + + + + + + + + +

        IFRAME

        + +

        http://scannerjammer.com/

        + + +

        http://scannerjammer.com:17769/

        + + +

        http://www.scannerjammer.com/

        + + +

        http://www.scannerjammer.com:17769/

        + + +

        http://www.facebook.com/pages/ScannerJammer/191565564214855

        + + +

        https://www.facebook.com/pages/ScannerJammer/191565564214855

        + + +

        JAVASCRIPT

        + +

        http://scannerjammer.com/

        + + +

        http://scannerjammer.com:17769/

        + + +

        http://www.scannerjammer.com/

        + + +

        http://www.scannerjammer.com:17769/

        + + +

        http://scannerjammer.com

        + + +

        http://scannerjammer.com:17769

        + + +

        http://www.scannerjammer.com

        + + +

        http://www.scannerjammer.com:17769

        + + +

        http://www.facebook.com/pages/ScannerJammer/191565564214855

        + + +

        https://www.facebook.com/pages/ScannerJammer/191565564214855

        + + + + + diff --git a/frontend/static/other_rooms/topvids.html b/frontend/static/other_rooms/topvids.html new file mode 100644 index 0000000..549f151 --- /dev/null +++ b/frontend/static/other_rooms/topvids.html @@ -0,0 +1,127 @@ + + + +TOP VIDEOS ON SCANNERJAMMER + + + + + + + + + + + + + + + + +
        + +
        + +
        +
        + +
        +
        +
        +
        +
        +
        + +
        + +
        +
        + +
          +
        +
        + +
        +
        + top . + directory . +
        +
        + +
        +
        + +
        +
        +
        +
        +
        +
        + +
        +
        + +
        +
        + please enable javascript +
        + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/static/radio/default.html b/frontend/static/radio/default.html new file mode 100644 index 0000000..f8c0c77 --- /dev/null +++ b/frontend/static/radio/default.html @@ -0,0 +1,178 @@ + + + +DISARO 20†† RADIO + + + + + + + + + + + +
        +
        + +
        + +
        + +
        +
        +
        + +
        + +
        + + + + + diff --git a/frontend/static/radio/diornights.html b/frontend/static/radio/diornights.html new file mode 100644 index 0000000..8e79f49 --- /dev/null +++ b/frontend/static/radio/diornights.html @@ -0,0 +1,13 @@ + + + + + +
        +Sending you through to + Dior Nights Radio..! +
        + + + diff --git a/frontend/static/radio/disaro.html b/frontend/static/radio/disaro.html new file mode 100644 index 0000000..e4b57cb --- /dev/null +++ b/frontend/static/radio/disaro.html @@ -0,0 +1,178 @@ + + + +DISARO 20†† RADIO + + + + + + + + + + + +
        +
        + +
        + +
        + +
        +
        +
        + +
        + +
        + + + + + diff --git a/frontend/static/radio/glasspopcorn.html b/frontend/static/radio/glasspopcorn.html new file mode 100644 index 0000000..edeabaa --- /dev/null +++ b/frontend/static/radio/glasspopcorn.html @@ -0,0 +1,204 @@ + + + +GLASSPOPCORN RADIO + + + + + + + + + + + + +
        +
        + + + +
        + +
        + +
        +
        +
        + +
        + +
        + + + + + diff --git a/frontend/static/radio/sewergreats.html b/frontend/static/radio/sewergreats.html new file mode 100644 index 0000000..82c66db --- /dev/null +++ b/frontend/static/radio/sewergreats.html @@ -0,0 +1,219 @@ + + + +SEWER GREATS RADIO + + + + + + + + + + + +
        + +
        +
        +
        + +
        + +
        + +
        +
        +
        + +
        + +
        + +
        + And you might also enjoy ... + +
        + + + + + + + diff --git a/frontend/static/register/.htaccess b/frontend/static/register/.htaccess new file mode 100644 index 0000000..717ec6f --- /dev/null +++ b/frontend/static/register/.htaccess @@ -0,0 +1 @@ +DirectoryIndex index.html diff --git a/frontend/static/register/index.html b/frontend/static/register/index.html new file mode 100644 index 0000000..90775cd --- /dev/null +++ b/frontend/static/register/index.html @@ -0,0 +1,178 @@ + + + +SCANNERJAMMER REGISTRATION + + + +
        + +
        +
        +
        +
        + +

        official registration form

        + + + +
        + + + +
        + + + + +
        + + + +
        + Forgot your password? RESET PASSWORD +
        +
        + + wow okay awesome! greetings,
        + + your new ghost is online and active..
        +
        + WELCOME TO SCANNERJAMMER +
        + +
        +
        + please enable javascript +
        +
        + + + + + + + + diff --git a/frontend/static/register/reset/.htaccess b/frontend/static/register/reset/.htaccess new file mode 100644 index 0000000..717ec6f --- /dev/null +++ b/frontend/static/register/reset/.htaccess @@ -0,0 +1 @@ +DirectoryIndex index.html diff --git a/frontend/static/register/reset/index.html b/frontend/static/register/reset/index.html new file mode 100644 index 0000000..28339e9 --- /dev/null +++ b/frontend/static/register/reset/index.html @@ -0,0 +1,57 @@ + + + + + +
        + SORRY, THIS FEATURE IS CURRENTLY UNAVAILABLE. PLEASE EMAIL:
        + peppersclothescult@gmail.com
        + + --OR SEND MESSAGE TO--
        + http://www.facebook.com/AAAFFF
        + DANKE SCHOEN + +
        + + + + + + + + diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/avatar.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/avatar.sassc new file mode 100644 index 0000000..8a0db6b Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/avatar.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/calendar.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/calendar.sassc new file mode 100644 index 0000000..e889bee Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/calendar.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/diornights.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/diornights.sassc new file mode 100644 index 0000000..da9d4c0 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/diornights.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/disaro.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/disaro.sassc new file mode 100644 index 0000000..69cbe30 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/disaro.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/embed.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/embed.sassc new file mode 100644 index 0000000..55466ce Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/embed.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/feederbleeder.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/feederbleeder.sassc new file mode 100644 index 0000000..5a70484 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/feederbleeder.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/frederick.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/frederick.sassc new file mode 100644 index 0000000..2ca0e38 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/frederick.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/gallery-white.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/gallery-white.sassc new file mode 100644 index 0000000..815beae Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/gallery-white.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/glitter.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/glitter.sassc new file mode 100644 index 0000000..f3c2034 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/glitter.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/ie.scssc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/ie.scssc new file mode 100644 index 0000000..87e5588 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/ie.scssc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/main.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/main.sassc new file mode 100644 index 0000000..3357d68 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/main.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/print.scssc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/print.scssc new file mode 100644 index 0000000..7aa4c4a Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/print.scssc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/profile.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/profile.sassc new file mode 100644 index 0000000..ad2a2bb --- /dev/null +++ b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/profile.sassc @@ -0,0 +1,770 @@ +3.1.7 (Brainy Betty) +4ace3b0de5fad49de2024e2901b21909688a81a0 +o:Sass::Tree::RootNode :@template"#@import compass/reset +@mixin rounded($width) + -moz-border-radius: $width + -webkit-border-radius: $width + -o-border-radius: $width + border-radius: $width + +body + background: #888 + // overflow-y: scroll + overflow-y: hidden + overflow-x: hidden + font-family: trebuchet ms, sans-serif +#logo + position: absolute + z-index: 20 + top: 15px + left: 20px + a + display: inline-block + img + padding-top: 5px + display: inline-block + h1 + position: relative + top: -10px + left: 10px + font-size: 34px + font-weight: normal + font-style: italic + font-family: georgia, garamond, serif + color: #f8b + display: inline-block + h2 + position: relative + display: inline-block + font-size: 12px + color: #fff + max-width: 250px + left: 10px + top: -6px + padding-right: 20px +#logobg + position: absolute + top: 10px + left: 0 + width: 100% + height: 64px + background-color: #000 + opacity: 0.8 + z-index: 19 +#likebutton + display: inline-block + display: none + z-index: -1 + min-width: 90px + a + color: #33f +#flower + position: absolute + top: 0 + right: 10% + z-index: 20 + pointer-events: none + display: none +#contact + position: absolute + left: 0 + display: none + #avatar, .avatar + display: none + width: 100% + // max-height: 300px + .avatar + display: block + #bio + p + color: #ddd + background-color: #000 + padding: 10px 5px + text-align: center + opacity: 0.7 + a + color: #ebf + display: block + img + width: 100% + // max-height: 300px +#sitez + position: absolute + top: 30px + right: 20px + text-align: right + z-index: 20 + div + color: #ddd + cursor: pointer + display: inline-block + padding: 4px 8px 4px 8px + float: left + a + color: #bbc + div#settings-hook + &:hover + @include rounded(10px 10px 3px 3px) + background-color: #333 + color: #fff + &.opened + @include rounded(10px 10px 3px 3px) + background-color: #333 + color: #fff + display: none + z-index: 82 +#fullscreen-warning + position: fixed + top: 50% + left: 50% + width: 600px + margin-left: -300px + margin-top: -20px + text-align: center + font-size: 24px + padding: 10px + background-color: rgba(0,0,0,0.5) + color: white + z-index: 100 + display: none +#settings-container + position: fixed + top: 53px + @include rounded (10px) + right: 20px + z-index: 80 + width: 500px + background-color: #222 + color: #657b83 + display: none + box-shadow: 0 5px 10px #000 + .close + margin: 10px 10px 0 0 + float: right + color: #ded8c5 + width: 20px + height: 14px + font-size: 14px + padding: 3px 0 + text-align: center + vertical-align: middle + @include rounded(10px) + background-color: #000b16 + &:hover + color: #fff + cursor: pointer + #rooms-loading + margin: 10px + h5 + font-size: 16px + color: #93a1a1 + display: block + padding: 10px + background-color: #333 + @include rounded(10px 10px 0 0) + p + padding: 10px 10px 10px 10px + font-size: 14px + line-height: 18px + color: #b3c1c1 + background-color: #1b1b1f + label + margin: 2px 0 0 10px + font-size: 14px + color: #657b83 + width: 150px + text-align: right + padding-right: 5px + display: inline-block + span + margin: 2px 10px 0 0 + color: #839496 + font-size: 14px + input + margin: 2px 10px 0 0 + width: 100px + #profile-avatar, #profile-bg + width: 300px + #profile-settings-save + font-size: 14px + textarea + width: 300px + height: 150px + .shim + width: 1px + height: 10px + ul + text-decoration: none + cursor: pointer + li + list-style-type: none + padding: 10px + cursor: pointer + border-top: 1px solid #000 + background-color: transparent + text-decoration: none + font-size: 14px + color: #83a1a1 + &:hover + color: #fdf6e3 + a li + color: #83a1a1 + text-decoration: none + a + color: #83a1a1 + text-decoration: none +#msg + z-index: 100 + position: fixed + top: 10px + right: 10px + padding: 5px + width: 250px + max-height: 80% + font-size: 12px + background-color: #eeeeee + overflow-y: scroll + overflow-x: hidden + color: #333 + strong + color: #859900 + em + color: #dc322f + b + color: #002b36 +#player + padding: 10px + position: absolute + background: #000 + #projector + display: block + position: fixed + background-color: #000 + #screen + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 19 + #soundcloud, #audio + position: absolute + top: 0 + right: 0 + background-color: #000 + z-index: 21 + #soundcloud-dl, #audio-dl + position: absolute + top: 81px + right: 0 + width: 81px + padding: 5px 0 5px 0 + font-size: 13px + text-align: center + background-color: #000 + * + color: #839496 + z-index: 20 + #soundcloud-img, #audio-img + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 20 + img + max-width: 100% + min-height: 100% + max-height: 100% + #ytscreen + z-index: 19 + position: absolute + top: 0 + left: 0 + #video-title + position: absolute + bottom: 0 + left: 10px + color: #fff + z-index: 20 + &.fullscreen + position: fixed + bottom: 90px + left: auto + right: 30px + font-size: 24px + #projimg + width: 100% + height: 100% + nav#controls + z-index: 40 + position: absolute + display: none + #video-link + color: #839496 + #scan.blinkOn + background-color: #fff + color: #000 + #scan.blinkOff + background-color: #000 + color: #fff + #like + color: #e4b + #like.liked + color: #44f +#playlistbg + position: absolute + background-color: #000 + opacity: 0.5 +#playlist + position: absolute + z-index: 90 + width: 100% + ul#queue + width: 100% + border-top: 1px solid #888 + border-left: 1px solid #888 + border-bottom: 1px solid #888 + -webkit-padding-start: 0 + -webkit-margin-before: 0 + overflow-y: scroll + overflow-x: hidden + z-index: 90 + li + padding: 5px + display: block + cursor: pointer + border-bottom: 1px solid #333 + span.title + color: #ddd + display: block + padding: 5px + font-size: 15px + z-index: 1 + &:hover + color: #fff + a.user + float: right + font-size: 14px + padding: 0 5px + color: #d33682 + padding: 5px + z-index: 2 + text-decoration: none + span.like + float: right + font-size: 14px + color: #657b83 + padding: 5px + z-index: 3 + span.like.liked + color: #c357a3 + span.score + float: right + font-size: 14px + color: #bbb + padding: 5px 10px 5px 5px + li.playing + background-color: #222 + span.title + color: #fff + li#queueLess + color: #fff + text-align: center + &:hover + background-color: #666 + color: #fff + border: 0 + border-bottom: 1px solid #333 + font-size: 18px + padding: 10px 0 + cursor: pointer + li#queueMore + color: #fff + text-align: center + &:hover + background-color: #666 + color: #fff + border: 0 + font-size: 33px + padding: 20px 20px 20px 20px + cursor: pointer + li#queueDone + color: #ddd + text-align: center + border: 0 + font-size: 33px + padding: 80px 20px 200px 20px + li#queueLoading + text-align: center + color: #fff + font-size: 24px + padding: 80px + ol + -webkit-padding-start: 0 + -webkit-margin-before: 0 + -webkit-margin-after: 0 + display: block + position: relative + top: 1px + li + padding: 5px 8px 8px 8px + margin: 0 0 0 10px + list-style-type: none + border-top: 1px solid #000 + border-right: 1px solid #000 + border-left: 1px solid #000 + border-bottom: 1px solid #888 + display: inline-block + background-color: #333 + color: #bbb + cursor: pointer + opacity: 0.7 + z-index: 89 + li.mode + position: relative + padding: 8px 8px 8px 8px + border-color: #888 + border-bottom: 1px solid #111 + background-color: #111 + color: #fff + z-index: 91 +nav + z-index: 10 + margin: 0 auto + button, #video-link + background-color: #333 + color: #ddd + &:hover + background-color: #666 + color: #fff + border: 0 + font-size: 14px + min-width: 40px + min-height: 20px + padding: 5px 5px + position: relative + top: -1px + #video-link + padding: 6px 5px 5px 5px +#msg + display: none +#gif-container + position: absolute + left: 0 + width: 100% + padding-left: 10% + display: block + padding-bottom: 200px + #gifs + clear: both + display: block + text-align: center + top: 0 + max-width: 80% + margin: 0 0 200px 0 + box-shadow: 0 5px 10px #000 + background-color: #fff + div + padding: 10px + display: inline-block + img + max-width: 350px + max-height: 400px +#bg + position: fixed + top: 0 + left: 0 + opacity: 1 + z-index: -3 + width: 100% + height: 100% + display: none + img + width: 100% + height: 100% + +.arrow-play + width: 0 + height: 0 + border-top: 4.5px solid transparent + border-left: 9.5px solid white + border-bottom: 4.5px solid transparent + display: inline-block +.arrow-pause + width: 0 + height: 0 + border-top: 5px solid white + border-right: 2.5px solid white + border-bottom: 4px solid white + border-left: 0 + display: inline-block +.arrow-prev + width: 0 + height: 0 + border-top: 4px solid transparent + border-right: 4px solid white + border-bottom: 4px solid transparent + display: inline-block +.arrow-next + width: 0 + height: 0 + border-top: 4px solid transparent + border-left: 4px solid white + border-bottom: 4px solid transparent + display: inline-block + +: @options{:@has_childrenT:@children[o:Sass::Tree::ImportNode ;0:@imported_filename"compass/reset;@:@filename"D/var/www/vhosts/scannerjammer.com/sandbox/sass/src/profile.sass: +@linei; [o:Sass::Tree::MixinDefNode : +@name" rounded;@;T: +@args[[o:Sass::Script::Variable;" +width;{:project_name" +sass/: +cacheT:cache_location"?/var/www/vhosts/scannerjammer.com/sandbox/sass/.sass-cache: importero: Sass::Importers::Filesystem: +@root"7/var/www/vhosts/scannerjammer.com/sandbox/sass/src:line_commentsT:original_filename@ :output_style:compressed:filesystem_importerc Sass::Importers::Filesystem:cache_storeo:Sass::CacheStores::Chain: @caches[u:Sass::CacheStores::Memoryo:"Sass::CacheStores::Filesystem:@cache_location"?/var/www/vhosts/scannerjammer.com/sandbox/sass/.sass-cache: +style;: filename@ : +quietT: syntax: sass:property_syntax0: loud[:identical:overwrite: create:load_paths[ o;;"7/var/www/vhosts/scannerjammer.com/sandbox/sass/srco;;"V/usr/local/lib/ruby/gems/1.8/gems/compass-0.11.5/frameworks/blueprint/stylesheetso;;"T/usr/local/lib/ruby/gems/1.8/gems/compass-0.11.5/frameworks/compass/stylesheetso:Compass::SpriteImporter: @uri";{:@underscored_name" +width0; @ ; i; [ o:Sass::Tree::PropNode : +@tabsi;["-moz-border-radius;@:@prop_syntax:new; @ : @valueo; ;" +width;@;0" +width; i; i; [o;1 ;2i;["-webkit-border-radius;@;3;4; @ ;5o; ;" +width;@;0" +width; i ; i ; [o;1 ;2i;["-o-border-radius;@;3;4; @ ;5o; ;" +width;@;0" +width; i +; i +; [o;1 ;2i;["border-radius;@;3;4; @ ;5o; ;" +width;@;0" +width; i ; i ; [o:Sass::Tree::RuleNode ;2i;@;T: +@rule[" body:@parsed_ruleso:"Sass::Selector::CommaSequence: @members[o:Sass::Selector::Sequence;:[o:#Sass::Selector::SimpleSequence;:[o:Sass::Selector::Element :@namespace0;[" body; @ ; i ; @ ; i ; @ ; i ; @ ; i ; [ +o;1 ;2i;["background;@;3;4; @ ;5o:Sass::Script::Color ;@: @attrs{ :redi: +alphai: +greeni: bluei;50; i; i; [o:Sass::Tree::CommentNode : @lines[: +@loud0;@; @ : @silentT;5"// overflow-y: scroll; i; [o;1 ;2i;["overflow-y;@;3;4; @ ;5o:Sass::Script::String ;@: +@type:identifier;5" hidden; i; i; [o;1 ;2i;["overflow-x;@;3;4; @ ;5o;I ;@;J;K;5" hidden; i; i; [o;1 ;2i;["font-family;@;3;4; @ ;5o:Sass::Script::List ;@:@separator: +comma;5[o;L ;@;M: +space;5[o;I ;@;J;K;5"trebuchet; io;I ;@;J;K;5"ms; i; io;I ;@;J;K;5"sans-serif; i; i; i; [o;6 ;2i;@;T;7[" +#logo;8o;9;:[o;;;:[o;<;:[o:Sass::Selector::Id;[" logo; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o:Sass::Script::Number :@denominator_units[;@:@numerator_units[:@original"20;5i; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 15px;5i; i; i; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 20px;5i; i; i; [o;6 ;2i;@;T;7["a;8o;9;:[o;;;:[o;<;:[o;= ;>0;["a; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i; i; [o;6 ;2i;@;T;7["img;8o;9;:[o;;;:[o;<;:[o;= ;>0;["img; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;["padding-top;@;3;4; @ ;5o;Q ;R[;@;S["px;T"5px;5i +; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i; i; [o;6 ;2i;@;T;7["h1;8o;9;:[o;;;:[o;<;:[o;= ;>0;["h1; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" relative; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +-10px;5i; i; i; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i ; i ; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 34px;5i'; i!; i!; [o;1 ;2i;["font-weight;@;3;4; @ ;5o;I ;@;J;K;5" normal; i"; i"; [o;1 ;2i;["font-style;@;3;4; @ ;5o;I ;@;J;K;5" italic; i#; i#; [o;1 ;2i;["font-family;@;3;4; @ ;5o;L ;@;M;N;5[o;I ;@;J;K;5" georgia; i$o;I ;@;J;K;5" garamond; i$o;I ;@;J;K;5" +serif; i$; i$; i$; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i%; i%; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i&; i&; [o;6 ;2i;@;T;7["h2;8o;9;:[o;;;:[o;<;:[o;= ;>0;["h2; @ ; i'; @ ; i'; @ ; i'; @ ; i'; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" relative; i(; i(; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i); i); [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 12px;5i; i*; i*; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i+; i+; [o;1 ;2i;["max-width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +250px;5i; i,; i,; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i-; i-; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" -6px;5i; i.; i.; [o;1 ;2i;["padding-right;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 20px;5i; i/; i/; [o;6 ;2i;@;T;7[" #logobg;8o;9;:[o;;;:[o;<;:[o;P;[" logobg; @ ; i0; @ ; i0; @ ; i0; @ ; i0; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i1; i1; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i2; i2; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i3; i3; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i4; i4; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 64px;5iE; i5; i5; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i6; i6; [o;1 ;2i;[" opacity;@;3;4; @ ;5o;Q ;R@;@;S[;T"0.8;5f0.80000000000000004; i7; i7; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"19;5i; i8; i8; [o;6 ;2i;@;T;7["#likebutton;8o;9;:[o;;;:[o;<;:[o;P;["likebutton; @ ; i9; @ ; i9; @ ; i9; @ ; i9; [ +o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i:; i:; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; i;; i;; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"-1;5i; i<; i<; [o;1 ;2i;["min-width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 90px;5i_; i=; i=; [o;6 ;2i;@;T;7["a;8o;9;:[o;;;:[o;<;:[o;= ;>0;["a; @ ; i>; @ ; i>; @ ; i>; @ ; i>; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai8;Bi;Ci8;Di;50; i?; i?; [o;6 ;2i;@;T;7[" #flower;8o;9;:[o;;;:[o;<;:[o;P;[" flower; @ ; i@; @ ; i@; @ ; i@; @ ; i@; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; iA; iA; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; iB; iB; [o;1 ;2i;[" +right;@;3;4; @ ;5o;Q ;R[;@;S["%;T"10%;5i; iC; iC; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"20;5i; iD; iD; [o;1 ;2i;["pointer-events;@;3;4; @ ;5o;I ;@;J;K;5" none; iE; iE; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; iF; iF; [o;6 ;2i;@;T;7[" #contact;8o;9;:[o;;;:[o;<;:[o;P;[" contact; @ ; iG; @ ; iG; @ ; iG; @ ; iG; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; iH; iH; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; iI; iI; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; iJ; iJ; [o;6 ;2i;@;T;7["#avatar, .avatar;8o;9;:[o;;;:[o;<;:[o;P;[" avatar; @ ; iK; @ ; iKo;;;:[o;<;:[o:Sass::Selector::Class;[" avatar; @ ; iK; @ ; iK; @ ; iK; @ ; iK; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; iL; iL; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; iM; iM; [o;E ;F[;G0;@; @ ;HT;5"// max-height: 300px; iN; [o;6 ;2i;@;T;7[" .avatar;8o;9;:[o;;;:[o;<;:[o;U;[" avatar; @ ; iO; @ ; iO; @ ; iO; @ ; iO; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" +block; iP; iP; [o;6 ;2i;@;T;7[" #bio;8o;9;:[o;;;:[o;<;:[o;P;["bio; @ ; iQ; @ ; iQ; @ ; iQ; @ ; iQ; [o;6 ;2i;@;T;7["p;8o;9;:[o;;;:[o;<;:[o;= ;>0;["p; @ ; iR; @ ; iR; @ ; iR; @ ; iR; [ +o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; iS; iS; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; iT; iT; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T" 10px;5i; iUo;Q ;R[;@;S["px;T"5px;5i +; iU; iU; iU; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" center; iV; iV; [o;1 ;2i;[" opacity;@;3;4; @ ;5o;Q ;R@;@;S[;T"0.7;5f0.69999999999999996ff; iW; iW; [o;6 ;2i;@;T;7["a;8o;9;:[o;;;:[o;<;:[o;= ;>0;["a; @ ; iX; @ ; iX; @ ; iX; @ ; iX; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; iY; iY; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" +block; iZ; iZ; [o;6 ;2i;@;T;7["img;8o;9;:[o;;;:[o;<;:[o;= ;>0;["img; @ ; i[; @ ; i[; @ ; i[; @ ; i[; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i\; i\; [o;E ;F[;G0;@; @ ;HT;5"// max-height: 300px; i]; [o;6 ;2i;@;T;7[" #sitez;8o;9;:[o;;;:[o;<;:[o;P;[" +sitez; @ ; i^; @ ; i^; @ ; i^; @ ; i^; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i_; i_; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 30px;5i#; i`; i`; [o;1 ;2i;[" +right;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 20px;5i; ia; ia; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" +right; ib; ib; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"20;5i; ic; ic; [o;6 ;2i;@;T;7["div;8o;9;:[o;;;:[o;<;:[o;= ;>0;["div; @ ; id; @ ; id; @ ; id; @ ; id; [ o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; ie; ie; [o;1 ;2i;[" cursor;@;3;4; @ ;5o;I ;@;J;K;5" pointer; if; if; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; ig; ig; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T"4px;5i ; iho;Q ;R[;@;S["px;T"8px;5i ; iho;Q ;R[;@;S["px;T"4px;5i ; iho;Q ;R[;@;S["px;T"8px;5i ; ih; ih; ih; [o;1 ;2i;[" +float;@;3;4; @ ;5o;I ;@;J;K;5" left; ii; ii; [o;6 ;2i;@;T;7["a;8o;9;:[o;;;:[o;<;:[o;= ;>0;["a; @ ; ij; @ ; ij; @ ; ij; @ ; ij; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; ik; ik; [o;6 ;2i;@;T;7["div#settings-hook;8o;9;:[o;;;:[o;<;:[o;= ;>0;["div; @ ; ilo;P;["settings-hook; @ ; il; @ ; il; @ ; il; @ ; il; [ o;6 ;2i;@;T;7[" &:hover;8o;9;:[o;;;:[o;<;:[o:Sass::Selector::Parent; @ ; imo:Sass::Selector::Pseudo +;[" +hover: @arg0; @ ;J: +class; im; @ ; im; @ ; im; @ ; im; [o:Sass::Tree::MixinNode :@keywords{;" rounded;@;[o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T" 10px;5i; ino;Q ;R[;@;S["px;T" 10px;5i; ino;Q ;R[;@;S["px;T"3px;5i; ino;Q ;R[;@;S["px;T"3px;5i; in; in; @ ; in; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai8;Bi;Ci8;Di8;50; io; io; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; ip; ip; [o;6 ;2i;@;T;7[" &.opened;8o;9;:[o;;;:[o;<;:[o;V; @ ; iqo;U;[" opened; @ ; iq; @ ; iq; @ ; iq; @ ; iq; [o;Z ;[{;" rounded;@;[o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T" 10px;5i; iro;Q ;R[;@;S["px;T" 10px;5i; iro;Q ;R[;@;S["px;T"3px;5i; iro;Q ;R[;@;S["px;T"3px;5i; ir; ir; @ ; ir; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai8;Bi;Ci8;Di8;50; is; is; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; it; it; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; iu; iu; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"82;5iW; iv; iv; [o;6 ;2i;@;T;7["#fullscreen-warning;8o;9;:[o;;;:[o;<;:[o;P;["fullscreen-warning; @ ; iw; @ ; iw; @ ; iw; @ ; iw; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" +fixed; ix; ix; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["%;T"50%;5i7; iy; iy; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R[;@;S["%;T"50%;5i7; iz; iz; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +600px;5iX; i{; i{; [o;1 ;2i;["margin-left;@;3;4; @ ;5o;Q ;R[;@;S["px;T" -300px;5i; i|; i|; [o;1 ;2i;["margin-top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +-20px;5i; i}; i}; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" center; i~; i~; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 24px;5i; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i{; i{; [o;1 ;2i;["background-color;@;3;4; @ ;5o:Sass::Script::Funcall +;[{;" rgba;@;[ o;Q ;R@;@;S[;T"0;5i; i|o;Q ;R@;@;S[;T"0;5i; i|o;Q ;R@;@;S[;T"0;5i; i|o;Q ;R@;@;S[;T"0.5;5f0.5; i|; i|; i|; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i}; i}; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"100;5ii; i~; i~; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;6 ;2i;@;T;7["#settings-container;8o;9;:[o;;;:[o;<;:[o;P;["settings-container; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" +fixed; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 53px;5i:; i; i; [o;Z ;[{;" rounded;@;[o;Q ;R[;@;S["px;T" 10px;5i; i; @ ; i; [o;1 ;2i;[" +right;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 20px;5i; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"80;5iU; i; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +500px;5i; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai';Bi;Ci';Di';50; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Aij;Bi;Ci{;Di;50; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;1 ;2i;["box-shadow;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R@;@;S[;T"0;5i; io;Q ;R[;@;S["px;T"5px;5i +; io;Q ;R[;@;S["px;T" 10px;5i; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;6 ;2i;@;T;7[" .close;8o;9;:[o;;;:[o;<;:[o;U;[" +close; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" margin;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T" 10px;5i; io;Q ;R[;@;S["px;T" 10px;5i; io;Q ;R@;@;S[;T"0;5i; io;Q ;R@;@;S[;T"0;5i; i; i; i; [o;1 ;2i;[" +float;@;3;4; @ ;5o;I ;@;J;K;5" +right; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 20px;5i; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"3px;5i; io;Q ;R@;@;S[;T"0;5i; i; i; i; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" center; i; i; [o;1 ;2i;["vertical-align;@;3;4; @ ;5o;I ;@;J;K;5" middle; i; i; [o;Z ;[{;" rounded;@;[o;Q ;R[;@;S["px;T" 10px;5i; i; @ ; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;6 ;2i;@;T;7[" &:hover;8o;9;:[o;;;:[o;<;:[o;V; @ ; io;W +;[" +hover;X0; @ ;J;Y; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" cursor;@;3;4; @ ;5o;I ;@;J;K;5" pointer; i; i; [o;6 ;2i;@;T;7["#rooms-loading;8o;9;:[o;;;:[o;<;:[o;P;["rooms-loading; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" margin;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i; i; [o;6 ;2i;@;T;7["h5;8o;9;:[o;;;:[o;<;:[o;= ;>0;["h5; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 16px;5i; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" +block; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai8;Bi;Ci8;Di8;50; i; i; [o;Z ;[{;" rounded;@;[o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T" 10px;5i; io;Q ;R[;@;S["px;T" 10px;5i; io;Q ;R@;@;S[;T"0;5i; io;Q ;R@;@;S[;T"0;5i; i; i; @ ; i; [o;6 ;2i;@;T;7["p;8o;9;:[o;;;:[o;<;:[o;= ;>0;["p; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T" 10px;5i; io;Q ;R[;@;S["px;T" 10px;5i; io;Q ;R[;@;S["px;T" 10px;5i; io;Q ;R[;@;S["px;T" 10px;5i; i; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; i; i; [o;1 ;2i;["line-height;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 18px;5i; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai ;Bi;Ci ;Di$;50; i; i; [o;6 ;2i;@;T;7[" +label;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" +label; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" margin;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T"2px;5i; io;Q ;R@;@;S[;T"0;5i; io;Q ;R@;@;S[;T"0;5i; io;Q ;R[;@;S["px;T" 10px;5i; i; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Aij;Bi;Ci{;Di;50; i; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +150px;5i; i; i; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" +right; i; i; [o;1 ;2i;["padding-right;@;3;4; @ ;5o;Q ;R[;@;S["px;T"5px;5i +; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i; i; [o;6 ;2i;@;T;7[" span;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" span; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" margin;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T"2px;5i; io;Q ;R[;@;S["px;T" 10px;5i; io;Q ;R@;@;S[;T"0;5i; io;Q ;R@;@;S[;T"0;5i; i; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; i; i; [o;6 ;2i;@;T;7[" +input;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" +input; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" margin;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T"2px;5i; io;Q ;R[;@;S["px;T" 10px;5i; io;Q ;R@;@;S[;T"0;5i; io;Q ;R@;@;S[;T"0;5i; i; i; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +100px;5ii; i; i; [o;6 ;2i;@;T;7["!#profile-avatar, #profile-bg;8o;9;:[o;;;:[o;<;:[o;P;["profile-avatar; @ ; i; @ ; io;;;:[o;<;:[o;P;["profile-bg; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +300px;5i,; i; i; [o;6 ;2i;@;T;7["#profile-settings-save;8o;9;:[o;;;:[o;<;:[o;P;["profile-settings-save; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; i; i; [o;6 ;2i;@;T;7[" textarea;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" textarea; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +300px;5i,; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +150px;5i; i; i; [o;6 ;2i;@;T;7[" +.shim;8o;9;:[o;;;:[o;<;:[o;U;[" shim; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T"1px;5i; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i; i; [o;6 ;2i;@;T;7["ul;8o;9;:[o;;;:[o;<;:[o;= ;>0;["ul; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;1 ;2i;["text-decoration;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;1 ;2i;[" cursor;@;3;4; @ ;5o;I ;@;J;K;5" pointer; i; i; [o;6 ;2i;@;T;7["li;8o;9;:[o;;;:[o;<;:[o;= ;>0;["li; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;["list-style-type;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i; i; [o;1 ;2i;[" cursor;@;3;4; @ ;5o;I ;@;J;K;5" pointer; i; i; [o;1 ;2i;["border-top;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;I ;@;J;K;5"transparent; i; i; [o;1 ;2i;["text-decoration;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;6 ;2i;@;T;7[" &:hover;8o;9;:[o;;;:[o;<;:[o;V; @ ; io;W +;[" +hover;X0; @ ;J;Y; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;6 ;2i;@;T;7[" a li;8o;9;:[o;;;:[o;<;:[o;= ;>0;["a; @ ; i; @ ; io;<;:[o;= ;>0;["li; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;["text-decoration;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;6 ;2i;@;T;7["a;8o;9;:[o;;;:[o;<;:[o;= ;>0;["a; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;["text-decoration;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;6 ;2i;@;T;7[" #msg;8o;9;:[o;;;:[o;<;:[o;P;["msg; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"100;5ii; i; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" +fixed; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i; i; [o;1 ;2i;[" +right;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T"5px;5i +; i; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +250px;5i; i; i; [o;1 ;2i;["max-height;@;3;4; @ ;5o;Q ;R[;@;S["%;T"80%;5iU; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 12px;5i; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;["overflow-y;@;3;4; @ ;5o;I ;@;J;K;5" scroll; i; i; [o;1 ;2i;["overflow-x;@;3;4; @ ;5o;I ;@;J;K;5" hidden; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai8;Bi;Ci8;Di8;50; i; i; [o;6 ;2i;@;T;7[" strong;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" strong; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;6 ;2i;@;T;7["em;8o;9;:[o;;;:[o;<;:[o;= ;>0;["em; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci7;Di4;50; i; i; [o;6 ;2i;@;T;7["b;8o;9;:[o;;;:[o;<;:[o;= ;>0;["b; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci0;Di;;50; i; i; [o;6 ;2i;@;T;7[" #player;8o;9;:[o;;;:[o;<;:[o;P;[" player; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i; i; [o;1 ;2i;["background;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;6 ;2i;@;T;7["#projector;8o;9;:[o;;;:[o;<;:[o;P;["projector; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" +block; i; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" +fixed; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;6 ;2i;@;T;7[" #screen;8o;9;:[o;;;:[o;<;:[o;P;[" screen; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"19;5i; i; i; [o;6 ;2i;@;T;7["#soundcloud, #audio;8o;9;:[o;;;:[o;<;:[o;P;["soundcloud; @ ; i; @ ; io;;;:[o;<;:[o;P;[" +audio; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" +right;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"21;5i; i; i; [o;6 ;2i;@;T;7["#soundcloud-dl, #audio-dl;8o;9;:[o;;;:[o;<;:[o;P;["soundcloud-dl; @ ; i; @ ; io;;;:[o;<;:[o;P;[" audio-dl; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 81px;5iV; i; i; [o;1 ;2i;[" +right;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 81px;5iV; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T"5px;5i +; io;Q ;R@;@;S[;T"0;5i; io;Q ;R[;@;S["px;T"5px;5i +; io;Q ;R@;@;S[;T"0;5i; i; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 13px;5i; i; i; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" center; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;6 ;2i;@;T;7["*;8o;9;:[o;;;:[o;<;:[o:Sass::Selector::Universal;>0; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"20;5i; i ; i ; [o;6 ;2i;@;T;7[" #soundcloud-img, #audio-img;8o;9;:[o;;;:[o;<;:[o;P;["soundcloud-img; @ ; i +; @ ; i +o;;;:[o;<;:[o;P;["audio-img; @ ; i +; @ ; i +; @ ; i +; @ ; i +; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i ; i ; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i ; i ; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i ; i ; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"20;5i; i; i; [o;6 ;2i;@;T;7["img;8o;9;:[o;;;:[o;<;:[o;= ;>0;["img; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;["max-width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;["min-height;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;["max-height;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;6 ;2i;@;T;7["#ytscreen;8o;9;:[o;;;:[o;<;:[o;P;[" ytscreen; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"19;5i; i; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;6 ;2i;@;T;7["#video-title;8o;9;:[o;;;:[o;<;:[o;P;["video-title; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i; i; [o;1 ;2i;[" bottom;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"20;5i; i; i; [o;6 ;2i;@;T;7["&.fullscreen;8o;9;:[o;;;:[o;<;:[o;V; @ ; i o;U;["fullscreen; @ ; i ; @ ; i ; @ ; i ; @ ; i ; [ +o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" +fixed; i!; i!; [o;1 ;2i;[" bottom;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 90px;5i_; i"; i"; [o;1 ;2i;[" left;@;3;4; @ ;5o;I ;@;J;K;5" auto; i#; i#; [o;1 ;2i;[" +right;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 30px;5i#; i$; i$; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 24px;5i; i%; i%; [o;6 ;2i;@;T;7[" #projimg;8o;9;:[o;;;:[o;<;:[o;P;[" projimg; @ ; i&; @ ; i&; @ ; i&; @ ; i&; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i'; i'; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i(; i(; [o;6 ;2i;@;T;7["nav#controls;8o;9;:[o;;;:[o;<;:[o;= ;>0;["nav; @ ; i)o;P;[" controls; @ ; i); @ ; i); @ ; i); @ ; i); [ o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"40;5i-; i*; i*; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i+; i+; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; i,; i,; [o;6 ;2i;@;T;7["#video-link;8o;9;:[o;;;:[o;<;:[o;P;["video-link; @ ; i-; @ ; i-; @ ; i-; @ ; i-; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i.; i.; [o;6 ;2i;@;T;7["#scan.blinkOn;8o;9;:[o;;;:[o;<;:[o;P;[" scan; @ ; i/o;U;[" blinkOn; @ ; i/; @ ; i/; @ ; i/; @ ; i/; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i0; i0; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i1; i1; [o;6 ;2i;@;T;7["#scan.blinkOff;8o;9;:[o;;;:[o;<;:[o;P;[" scan; @ ; i2o;U;[" blinkOff; @ ; i2; @ ; i2; @ ; i2; @ ; i2; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i3; i3; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i4; i4; [o;6 ;2i;@;T;7[" +#like;8o;9;:[o;;;:[o;<;:[o;P;[" like; @ ; i5; @ ; i5; @ ; i5; @ ; i5; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;CiI;Di;50; i6; i6; [o;6 ;2i;@;T;7["#like.liked;8o;9;:[o;;;:[o;<;:[o;P;[" like; @ ; i7o;U;[" +liked; @ ; i7; @ ; i7; @ ; i7; @ ; i7; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;AiI;Bi;CiI;Di;50; i8; i8; [o;6 ;2i;@;T;7["#playlistbg;8o;9;:[o;;;:[o;<;:[o;P;["playlistbg; @ ; i9; @ ; i9; @ ; i9; @ ; i9; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i:; i:; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i;; i;; [o;1 ;2i;[" opacity;@;3;4; @ ;5o;Q ;R@;@;S[;T"0.5;5f0.5; i<; i<; [o;6 ;2i;@;T;7["#playlist;8o;9;:[o;;;:[o;<;:[o;P;[" playlist; @ ; i=; @ ; i=; @ ; i=; @ ; i=; [ +o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i>; i>; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"90;5i_; i?; i?; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i@; i@; [o;6 ;2i;@;T;7[" ul#queue;8o;9;:[o;;;:[o;<;:[o;= ;>0;["ul; @ ; iAo;P;[" +queue; @ ; iA; @ ; iA; @ ; iA; @ ; iA; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; iB; iB; [o;1 ;2i;["border-top;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; iCo;I ;@;J;K;5" +solid; iCo;? ;@;@{ ;Ai;Bi;Ci;Di;50; iC; iC; iC; [o;1 ;2i;["border-left;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; iDo;I ;@;J;K;5" +solid; iDo;? ;@;@{ ;Ai;Bi;Ci;Di;50; iD; iD; iD; [o;1 ;2i;["border-bottom;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; iEo;I ;@;J;K;5" +solid; iEo;? ;@;@{ ;Ai;Bi;Ci;Di;50; iE; iE; iE; [o;1 ;2i;["-webkit-padding-start;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; iF; iF; [o;1 ;2i;["-webkit-margin-before;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; iG; iG; [o;1 ;2i;["overflow-y;@;3;4; @ ;5o;I ;@;J;K;5" scroll; iH; iH; [o;1 ;2i;["overflow-x;@;3;4; @ ;5o;I ;@;J;K;5" hidden; iI; iI; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"90;5i_; iJ; iJ; [o;6 ;2i;@;T;7["li;8o;9;:[o;;;:[o;<;:[o;= ;>0;["li; @ ; iK; @ ; iK; @ ; iK; @ ; iK; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T"5px;5i +; iL; iL; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" +block; iM; iM; [o;1 ;2i;[" cursor;@;3;4; @ ;5o;I ;@;J;K;5" pointer; iN; iN; [o;1 ;2i;["border-bottom;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; iOo;I ;@;J;K;5" +solid; iOo;? ;@;@{ ;Ai8;Bi;Ci8;Di8;50; iO; iO; iO; [o;6 ;2i;@;T;7["span.title;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" span; @ ; iPo;U;[" +title; @ ; iP; @ ; iP; @ ; iP; @ ; iP; [ o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; iQ; iQ; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" +block; iR; iR; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T"5px;5i +; iS; iS; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 15px;5i; iT; iT; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"1;5i; iU; iU; [o;6 ;2i;@;T;7[" &:hover;8o;9;:[o;;;:[o;<;:[o;V; @ ; iVo;W +;[" +hover;X0; @ ;J;Y; iV; @ ; iV; @ ; iV; @ ; iV; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; iW; iW; [o;6 ;2i;@;T;7[" a.user;8o;9;:[o;;;:[o;<;:[o;= ;>0;["a; @ ; iXo;U;[" user; @ ; iX; @ ; iX; @ ; iX; @ ; iX; [ o;1 ;2i;[" +float;@;3;4; @ ;5o;I ;@;J;K;5" +right; iY; iY; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; iZ; iZ; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R@;@;S[;T"0;5i; i[o;Q ;R[;@;S["px;T"5px;5i +; i[; i[; i[; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;;Di;50; i\; i\; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T"5px;5i +; i]; i]; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"2;5i; i^; i^; [o;1 ;2i;["text-decoration;@;3;4; @ ;5o;I ;@;J;K;5" none; i_; i_; [o;6 ;2i;@;T;7["span.like;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" span; @ ; i`o;U;[" like; @ ; i`; @ ; i`; @ ; i`; @ ; i`; [ +o;1 ;2i;[" +float;@;3;4; @ ;5o;I ;@;J;K;5" +right; ia; ia; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; ib; ib; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Aij;Bi;Ci{;Di;50; ic; ic; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T"5px;5i +; id; id; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"3;5i; ie; ie; [o;6 ;2i;@;T;7["span.like.liked;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" span; @ ; ifo;U;[" like; @ ; ifo;U;[" +liked; @ ; if; @ ; if; @ ; if; @ ; if; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci\;Di;50; ig; ig; [o;6 ;2i;@;T;7["span.score;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" span; @ ; iho;U;[" +score; @ ; ih; @ ; ih; @ ; ih; @ ; ih; [ o;1 ;2i;[" +float;@;3;4; @ ;5o;I ;@;J;K;5" +right; ii; ii; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; ij; ij; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; ik; ik; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T"5px;5i +; ilo;Q ;R[;@;S["px;T" 10px;5i; ilo;Q ;R[;@;S["px;T"5px;5i +; ilo;Q ;R[;@;S["px;T"5px;5i +; il; il; il; [o;6 ;2i;@;T;7["li.playing;8o;9;:[o;;;:[o;<;:[o;= ;>0;["li; @ ; imo;U;[" playing; @ ; im; @ ; im; @ ; im; @ ; im; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai';Bi;Ci';Di';50; in; in; [o;6 ;2i;@;T;7["span.title;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" span; @ ; ioo;U;[" +title; @ ; io; @ ; io; @ ; io; @ ; io; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; ip; ip; [o;6 ;2i;@;T;7["li#queueLess;8o;9;:[o;;;:[o;<;:[o;= ;>0;["li; @ ; iqo;P;["queueLess; @ ; iq; @ ; iq; @ ; iq; @ ; iq; [ o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; ir; ir; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" center; is; is; [o;6 ;2i;@;T;7[" &:hover;8o;9;:[o;;;:[o;<;:[o;V; @ ; ito;W +;[" +hover;X0; @ ;J;Y; it; @ ; it; @ ; it; @ ; it; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Aik;Bi;Cik;Dik;50; iu; iu; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; iv; iv; [o;1 ;2i;[" border;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; iw; iw; [o;1 ;2i;["border-bottom;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; ixo;I ;@;J;K;5" +solid; ixo;? ;@;@{ ;Ai8;Bi;Ci8;Di8;50; ix; ix; ix; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 18px;5i; iy; iy; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T" 10px;5i; izo;Q ;R@;@;S[;T"0;5i; iz; iz; iz; [o;1 ;2i;[" cursor;@;3;4; @ ;5o;I ;@;J;K;5" pointer; i{; i{; [o;6 ;2i;@;T;7["li#queueMore;8o;9;:[o;;;:[o;<;:[o;= ;>0;["li; @ ; i|o;P;["queueMore; @ ; i|; @ ; i|; @ ; i|; @ ; i|; [ o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i}; i}; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" center; i~; i~; [o;6 ;2i;@;T;7[" &:hover;8o;9;:[o;;;:[o;<;:[o;V; @ ; io;W +;[" +hover;X0; @ ;J;Y; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Aik;Bi;Cik;Dik;50; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" border;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 33px;5i&; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T" 20px;5i; io;Q ;R[;@;S["px;T" 20px;5i; io;Q ;R[;@;S["px;T" 20px;5i; io;Q ;R[;@;S["px;T" 20px;5i; i; i; i; [o;1 ;2i;[" cursor;@;3;4; @ ;5o;I ;@;J;K;5" pointer; i; i; [o;6 ;2i;@;T;7["li#queueDone;8o;9;:[o;;;:[o;<;:[o;= ;>0;["li; @ ; io;P;["queueDone; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" center; i; i; [o;1 ;2i;[" border;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 33px;5i&; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T" 80px;5iU; io;Q ;R[;@;S["px;T" 20px;5i; io;Q ;R[;@;S["px;T" +200px;5i; io;Q ;R[;@;S["px;T" 20px;5i; i; i; i; [o;6 ;2i;@;T;7["li#queueLoading;8o;9;:[o;;;:[o;<;:[o;= ;>0;["li; @ ; io;P;["queueLoading; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" center; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 24px;5i; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 80px;5iU; i; i; [o;6 ;2i;@;T;7["ol;8o;9;:[o;;;:[o;<;:[o;= ;>0;["ol; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;["-webkit-padding-start;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["-webkit-margin-before;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["-webkit-margin-after;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" +block; i; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" relative; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T"1px;5i; i; i; [o;6 ;2i;@;T;7["li;8o;9;:[o;;;:[o;<;:[o;= ;>0;["li; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T"5px;5i +; io;Q ;R[;@;S["px;T"8px;5i ; io;Q ;R[;@;S["px;T"8px;5i ; io;Q ;R[;@;S["px;T"8px;5i ; i; i; i; [o;1 ;2i;[" margin;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R@;@;S[;T"0;5i; io;Q ;R@;@;S[;T"0;5i; io;Q ;R@;@;S[;T"0;5i; io;Q ;R[;@;S["px;T" 10px;5i; i; i; i; [o;1 ;2i;["list-style-type;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;1 ;2i;["border-top;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["border-right;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["border-left;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["border-bottom;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai8;Bi;Ci8;Di8;50; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" cursor;@;3;4; @ ;5o;I ;@;J;K;5" pointer; i; i; [o;1 ;2i;[" opacity;@;3;4; @ ;5o;Q ;R@;@;S[;T"0.7;5f0.69999999999999996ff; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"89;5i^; i; i; [o;6 ;2i;@;T;7[" li.mode;8o;9;:[o;;;:[o;<;:[o;= ;>0;["li; @ ; io;U;[" mode; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" relative; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T"8px;5i ; io;Q ;R[;@;S["px;T"8px;5i ; io;Q ;R[;@;S["px;T"8px;5i ; io;Q ;R[;@;S["px;T"8px;5i ; i; i; i; [o;1 ;2i;["border-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;["border-bottom;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"1px;5i; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"91;5i`; i; i; [o;6 ;2i;@;T;7["nav;8o;9;:[o;;;:[o;<;:[o;= ;>0;["nav; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"10;5i; i; i; [o;1 ;2i;[" margin;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R@;@;S[;T"0;5i; io;I ;@;J;K;5" auto; i; i; i; [o;6 ;2i;@;T;7["button, #video-link;8o;9;:[o;;;:[o;<;:[o;= ;>0;[" button; @ ; i; @ ; io;;;:[o;<;:[o;P;["video-link; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai8;Bi;Ci8;Di8;50; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;6 ;2i;@;T;7[" &:hover;8o;9;:[o;;;:[o;<;:[o;V; @ ; io;W +;[" +hover;X0; @ ;J;Y; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Aik;Bi;Cik;Dik;50; i; i; [o;1 ;2i;[" +color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;1 ;2i;[" border;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["font-size;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 14px;5i; i; i; [o;1 ;2i;["min-width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 40px;5i-; i; i; [o;1 ;2i;["min-height;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 20px;5i; i; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"5px;5i +; io;Q ;R[;@;S["px;T"5px;5i +; i; i; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" relative; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R[;@;S["px;T" -1px;5i; i; i; [o;6 ;2i;@;T;7["#video-link;8o;9;:[o;;;:[o;<;:[o;P;["video-link; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R[;@;S["px;T"6px;5i ; io;Q ;R[;@;S["px;T"5px;5i +; io;Q ;R[;@;S["px;T"5px;5i +; io;Q ;R[;@;S["px;T"5px;5i +; i; i; i; [o;6 ;2i;@;T;7[" #msg;8o;9;:[o;;;:[o;<;:[o;P;["msg; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;6 ;2i;@;T;7["#gif-container;8o;9;:[o;;;:[o;<;:[o;P;["gif-container; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" absolute; i; i; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;["padding-left;@;3;4; @ ;5o;Q ;R[;@;S["%;T"10%;5i; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" +block; i; i; [o;1 ;2i;["padding-bottom;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +200px;5i; i; i; [o;6 ;2i;@;T;7[" +#gifs;8o;9;:[o;;;:[o;<;:[o;P;[" gifs; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +clear;@;3;4; @ ;5o;I ;@;J;K;5" both; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" +block; i; i; [o;1 ;2i;["text-align;@;3;4; @ ;5o;I ;@;J;K;5" center; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["max-width;@;3;4; @ ;5o;Q ;R[;@;S["%;T"80%;5iU; i; i; [o;1 ;2i;[" margin;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R@;@;S[;T"0;5i; io;Q ;R@;@;S[;T"0;5i; io;Q ;R[;@;S["px;T" +200px;5i; io;Q ;R@;@;S[;T"0;5i; i; i; i; [o;1 ;2i;["box-shadow;@;3;4; @ ;5o;L ;@;M;O;5[ o;Q ;R@;@;S[;T"0;5i; io;Q ;R[;@;S["px;T"5px;5i +; io;Q ;R[;@;S["px;T" 10px;5i; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["background-color;@;3;4; @ ;5o;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; [o;6 ;2i;@;T;7["div;8o;9;:[o;;;:[o;<;:[o;= ;>0;["div; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" padding;@;3;4; @ ;5o;Q ;R[;@;S["px;T" 10px;5i; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i; i; [o;6 ;2i;@;T;7["img;8o;9;:[o;;;:[o;<;:[o;= ;>0;["img; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;["max-width;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +350px;5i^; i; i; [o;1 ;2i;["max-height;@;3;4; @ ;5o;Q ;R[;@;S["px;T" +400px;5i; i; i; [o;6 ;2i;@;T;7["#bg;8o;9;:[o;;;:[o;<;:[o;P;["bg; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" position;@;3;4; @ ;5o;I ;@;J;K;5" +fixed; i; i; [o;1 ;2i;["top;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" left;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" opacity;@;3;4; @ ;5o;Q ;R@;@;S[;T"1;5i; i; i; [o;1 ;2i;[" z-index;@;3;4; @ ;5o;Q ;R@;@;S[;T"-3;5i; i; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5" none; i; i; [o;6 ;2i;@;T;7["img;8o;9;:[o;;;:[o;<;:[o;= ;>0;["img; @ ; i; @ ; i; @ ; i; @ ; i; [o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R[;@;S["%;T" 100%;5ii; i; i; [o;6 ;2i;@;T;7[".arrow-play;8o;9;:[o;;;:[o;<;:[o;U;["arrow-play; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["border-top;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T" +4.5px;5f4.5; io;I ;@;J;K;5" +solid; io;I ;@;J;K;5"transparent; i; i; i; [o;1 ;2i;["border-left;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T" +9.5px;5f9.5; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["border-bottom;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T" +4.5px;5f4.5; io;I ;@;J;K;5" +solid; io;I ;@;J;K;5"transparent; i; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i; i; [o;6 ;2i;@;T;7[".arrow-pause;8o;9;:[o;;;:[o;<;:[o;U;["arrow-pause; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["border-top;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"5px;5i +; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["border-right;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T" +2.5px;5f2.5; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["border-bottom;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"4px;5i ; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["border-left;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i; i; [o;6 ;2i;@;T;7[".arrow-prev;8o;9;:[o;;;:[o;<;:[o;U;["arrow-prev; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["border-top;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"4px;5i ; io;I ;@;J;K;5" +solid; io;I ;@;J;K;5"transparent; i; i; i; [o;1 ;2i;["border-right;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"4px;5i ; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["border-bottom;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"4px;5i ; io;I ;@;J;K;5" +solid; io;I ;@;J;K;5"transparent; i; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i; i; [o;6 ;2i;@;T;7[".arrow-next;8o;9;:[o;;;:[o;<;:[o;U;["arrow-next; @ ; i; @ ; i; @ ; i; @ ; i; [ o;1 ;2i;[" +width;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;[" height;@;3;4; @ ;5o;Q ;R@;@;S[;T"0;5i; i; i; [o;1 ;2i;["border-top;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"4px;5i ; io;I ;@;J;K;5" +solid; io;I ;@;J;K;5"transparent; i; i; i; [o;1 ;2i;["border-left;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"4px;5i ; io;I ;@;J;K;5" +solid; io;? ;@;@{ ;Ai;Bi;Ci;Di;50; i; i; i; [o;1 ;2i;["border-bottom;@;3;4; @ ;5o;L ;@;M;O;5[o;Q ;R[;@;S["px;T"4px;5i ; io;I ;@;J;K;5" +solid; io;I ;@;J;K;5"transparent; i; i; i; [o;1 ;2i;[" display;@;3;4; @ ;5o;I ;@;J;K;5"inline-block; i; i; [ \ No newline at end of file diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/roomlist.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/roomlist.sassc new file mode 100644 index 0000000..5bbfb43 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/roomlist.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/screen.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/screen.sassc new file mode 100644 index 0000000..5f6fba9 --- /dev/null +++ b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/screen.sassc @@ -0,0 +1,1281 @@ +3.1.7 (Brainy Betty) +41c3aa6f199c6bf0e0c4cd6e5723f521d3b9c545 +o:Sass::Tree::RootNode :@template":@import compass/reset +@mixin rounded($width) + -moz-border-radius: $width + -webkit-border-radius: $width + -o-border-radius: $width + border-radius: $width +body + font-family: trebuchet ms, helvetica, arial, sans-serif + width: 100% + height: 100% + overflow: hidden + background: #000 +#bg + position: fixed + top: 0 + left: 0 + opacity: 1 + z-index: -3 + width: 100% + height: 100% +#bg img + width: 100% + height: 100% + -ms-interpolation-mode: nearest-neighbor + image-rendering: -moz-crisp-edges + image-rendering: -webkit-optimize-contrast +#loading + z-index: 20 + background: transparent + color: #06033c + text-shadow: #060363 0 0 50px + display: block + position: fixed + width: 100% + padding: 20px + top: 30% + left: 10% + font-size: 170px + font-weight: bold + text-align: left + white-space: no-wrap + letter-spacing: -3px + pointer-events: none + +#msg + z-index: 100 + position: fixed + top: 10px + right: 10px + padding: 5px + width: 350px + max-height: 80% + font-size: 12px + background-color: #eeeeee + overflow-y: scroll + overflow-x: hidden + color: #333 + strong + color: #859900 + em + color: #dc322f + b + color: #002b36 +#player + padding: 10px + position: absolute + background: #000 + #projector + display: block + position: absolute + background-color: #000 + #screen + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 19 + #soundcloud, #audio + position: absolute + top: 0 + right: 0 + background-color: #000 + z-index: 21 + #soundcloud-dl, #audio-dl + position: absolute + top: 81px + right: 0 + width: 81px + padding: 5px 0 5px 0 + font-size: 13px + text-align: center + background-color: #000 + * + color: #839496 + z-index: 20 + #soundcloud-img, #audio-img + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 20 + img + max-width: 100% + min-height: 100% + max-height: 100% + #ytscreen + z-index: 19 + position: absolute + top: 0 + left: 0 + #video-title + position: absolute + bottom: 0 + left: 0 + color: #fff + z-index: 20 + #video-title.fullscreen + position: fixed + bottom: 90px + left: auto + right: 30px + font-size: 24px + #projimg + width: 100% + height: 100% + nav#controls + z-index: 40 + position: absolute + #video-link + color: #839496 + #scan.blinkOn + background-color: #fff + color: #000 + #scan.blinkOff + background-color: #000 + color: #fff + #like + color: #e4b + #like.liked + color: #44f + #mute.muted + background-color: #fff + color: #000 +#playlistbg + position: absolute + background-color: #000 + opacity: 0.3 +#playlist + position: absolute + z-index: 90 + width: 100% + overflow-y: auto + overflow-x: hidden + ul#queue + // overflow-y: none + // &:hover + // overflow-y: auto + width: 100% + li + padding: 5px + display: block + cursor: pointer + border-bottom: 1px solid #333 + span.title + color: #ddd + display: block + padding: 5px + z-index: 1 + &:hover + color: #d8f + cursor: pointer + a.user + float: right + font-size: 14px + padding: 0 5px + color: #d33682 + padding: 5px + z-index: 2 + text-decoration: none + span.like + float: right + font-size: 14px + color: #657b83 + padding: 5px + z-index: 3 + span.like.liked + color: #c357a3 + li.playing + background-color: #222 + span.title + color: #fff +#room, user + padding: 10px + label + color: #657b83 + width: 100px + text-align: right + padding-right: 5px + display: inline-block + span + color: #073642 + + +#curtain + background: #080810 + opacity: 0.3 + width: 100% + height: 100% + position: fixed + top: 0 + left: 0 + z-index: 10 + display: none +#login + background: #000 + display: block + width: 50% + top: 20% + left: 50% + margin-left: -25% + padding: 30px + padding-bottom: 60px + z-index: 20 + position: fixed + text-align: center + box-shadow: 0 5px 10px #000 + img + margin-bottom: 20px + label + min-width: 20% + display: inline-block + text-align: right + padding-right: 10px + font-size: 18px + color: #fff + #button-shim + width: 30% + display: inline-block + text-align: left + padding: 10px 10px 10px 0 + margin-right: 20px + button + padding: 2px 5px + #login-username, #login-password + width: 30% + margin-right: 10px + font-size: 24px + border: 2px solid #806 + padding: 10px + a + color: #68f + text-decoration: underline +#sitez + position: fixed + top: 24px + right: 30px + color: #888 + z-index: 82 + color: #aaa + a, #logout + cursor: pointer + color: #aaa + text-decoration: underline + select option + color: #666 + text-decoration: none + padding-right: 3px + button + font-size: 24px + background: #030303 + color: #fff + padding: 2px + a#faqlink + color: #8ff + div + cursor: pointer + display: inline-block + padding: 8px 8px 5px 8px + &:hover + @include rounded(10px 10px 3px 3px) + background-color: #333 + &.opened + @include rounded(10px 10px 3px 3px) + background-color: #333 +nav + z-index: 10 + margin: 0 auto + button, #video-link + background-color: #333 + color: #ddd + &:hover + background-color: #666 + color: #fff + border: 0 + font-size: 14px + min-width: 40px + min-height: 20px + padding: 5px 5px + position: relative + top: -1px + #video-link + top: -2px + padding-bottom: 6px +#lunacy + z-index: 40 + background: #ddd + color: #000 + display: block + width: 700px + position: fixed + top: 20% + left: 50% + margin-left: -390px + opacity: 0.7 + padding: 40px + text-align: center + font-size: 48px +#plea + z-index: 30 + background: #ddd + color: #000 + display: block + width: 400px + position: fixed + top: 20% + left: 50% + margin-left: -240px + opacity: 0.7 + padding: 40px + text-align: center + font-size: 48px + +#logobg + position: fixed + top: 10px + left: 0 + width: 100% + height: 64px + background-color: #000 + opacity: 0.8 + z-index: 45 +#logo + position: fixed + top: 10px + z-index: 46 + left: 10px + a + float: left + display: inline-block + img + display: inline-block + #scanjam + padding: 10px 15px 10px 0 + #preamble + display: inline-block + font-size: 12px + color: #fff + max-width: 80px + padding-left: 15px + h1 + padding: 15px 15px 0 10px + font-size: 34px + color: #fff + font-weight: normal + font-style: italic + font-family: georgia, garamond, serif + color: #8ff + display: inline-block + h2 + display: inline-block + font-size: 16px + color: #fff + position: relative + left: 20px + top: -5px + color: #839496 + a + display: inline + float: none + color: #268bd2 + img + max-height: 20px + max-width: 20px + display: inline-block + h2.preamblish + font-size: 12px + color: #fff + max-width: 250px + left: 0 + top: 9px + padding-right: 20px + h2.radio + a + color: #def + font-size: 12px + top: -8px + left: 30px + #likebutton + display: inline-block + display: none + position: relative + top: -5px + width: 90px + height: 21px + z-index: -1 +#glasspopcornlogo + position: absolute + top: 80px + left: 15px + pointer-events: none + opacity: 0.5 + z-index: 8 + img + z-index: 8 + pointer-events: none +#likereport + position: fixed + width: 100px + padding: 20px + z-index: 100 + overflow-y: hidden + a + background-color: #222 + display: block + text-decoration: none + padding: 5px + opacity: 0.95 + +#form + position: fixed + bottom: 10px + left: 10px + padding: 10px 10px 10px 10px + background-color: #000 + white-space: nowrap + z-index: 31 + #chat-message + border: 0 + outline: 0 + font-size: 18px + padding: 5px + margin-right: 5px + background-color: #f8f8f8 + &:hover + background-color: #ffffff + button + margin: 0 + outline: 0 + border: 0 + background-color: #333 + color: #ddd + &:hover + background-color: #666 + color: #fff + // @include rounded(2px) + padding: 4px 6px + position: relative + top: 1px + font-size: 20px + #videochat-badge + cursor: auto + pointer-events: none + @include rounded(8px) + font-size: 10px + background-color: #f00 + color: #fff + position: absolute + width: 10px + height: 10px + text-align: center + padding: 2px 2px + display: none + z-index: 32 +#formbg + background-color: #000 + opacity: 0.7 + +#chatbg + position: fixed + bottom: 100px + left: 20px + padding: 10px + width: 600px + background-color: #000 + padding: 0 10px 5px 10px + opacity: 0.25 + z-index: 9 + +#chat + padding: 0 10px 5px 10px + position: fixed + font-size: 18px + line-height: 26px + vertical-align: bottom + overflow-y: hidden + overflow-x: hidden + background: transparent + z-index: 30 + a + opacity: 0.8 + color: #44bbff + text-decoration: underline + a.u + font-weight: normal + padding-right: 10px + display: inline-block + color: #ff0066 + opacity: 1 + text-decoration: none + min-width: 80px + overflow-x: hidden + font-size: 18px + line-height: 26px + vertical-align: bottom + a.pic + opacity: 1 + span + color: #f0fff0 + text-shadow: #000 0 0 2px + font-weight: bold + .ytlink + color: #88dddd + cursor: pointer + text-decoration: underline + text-shadow: none + text-shadow: #000 0 0 1px + opacity: 1 + .ytlink:hover + color: #dd66ff + text-decoration: underline + text-shadow: #000 0 0 1px + .ytlink.playing + color: #daf + font-weight: bold + text-decoration: none + .ytlink.playing::before + text-decoration: none + content: "\25b6 " + font-weight: bold + img + max-width: 350px + max-height: 400px + border: 0 + #shim + width: 10px + height: 500px +#chat.fullscreen + overflow-y: hidden + &:hover + overflow-y: hidden +#webcam-container + z-index: 100 + position: fixed + right: 500px + bottom: 100px + background-color: #000 + padding: 10px + display: none +#lastlogbg + position: fixed + background-color: #000 + opacity: 0.5 + padding: 10px + z-index: 31 +#lastlogbox + position: fixed + font-size: 14px + padding: 10px + z-index: 32 + h4 + font-size: 12px + font-weight: bold + color: #eee + padding-bottom: 5px + ul + border-top: 1px solid #000 +li.ll + list-style-type: none + a + color: #d0e0fe + padding: 5px 0 + border-bottom: 1px solid #000 + display: block + text-shadow: #000 0 0 2px + text-decoration: underline + font-size: 16px + font-weight: bold + +#flower + position: absolute + top: 0 + right: 10% + z-index: 50 + pointer-events: none + display: none +#plant + position: absolute + bottom: 0 + right: 50% + z-index: 50 + pointer-events: none + display: none +#msg + display: none +button + font-size: 24px + background: #030303 + color: #fff + padding: 2px +#settings-container, #rooms-container, #about-container, #videochat-container + position: fixed + top: 59px + @include rounded (10px) + right: 20px + z-index: 80 + width: 500px + background-color: #222 + color: #657b83 + display: none + box-shadow: 0 5px 10px #000 + .close + margin: 10px 10px 0 0 + float: right + color: #ded8c5 + width: 20px + height: 14px + font-size: 14px + padding: 3px 0 + text-align: center + vertical-align: middle + @include rounded(10px) + background-color: #000b16 + &:hover + color: #fff + cursor: pointer + #rooms-loading + margin: 10px + h5 + font-size: 16px + color: #93a1a1 + display: block + padding: 10px + background-color: #333 + @include rounded(10px 10px 0 0) + p + padding: 10px 10px 10px 10px + font-size: 14px + line-height: 18px + color: #b3c1c1 + background-color: #1b1b1f + label + margin: 2px 0 0 10px + font-size: 14px + color: #657b83 + width: 150px + text-align: right + padding-right: 5px + display: inline-block + span + margin: 2px 10px 0 0 + color: #839496 + font-size: 14px + span#room-mod-tag a + float: right + padding: 0 10px 10px 0 + display: block + color: #dc322f + span#gallery-link a + color: #268bd2 + padding: 0 10px 10px 0 + display: block + float: right + button + position: relative + left: 3px + input + margin: 2px 10px 0 0 + width: 100px + #room-topic, #room-bg, #room-bgreset + width: 300px + #room-settings-save + font-size: 14px + .shim + width: 1px + height: 10px + ul + text-decoration: none + cursor: pointer + li + list-style-type: none + padding: 10px + cursor: pointer + border-top: 1px solid #000 + background-color: transparent + text-decoration: none + font-size: 14px + color: #83a1a1 + &:hover + color: #fdf6e3 + a li + color: #83a1a1 + text-decoration: none + a + color: #83a1a1 + text-decoration: none +#rooms-container + right: 20px + z-index: 80 + width: 300px + max-height: 300px +#about-container + right: 20px + z-index: 80 + width: 300px +#videochat-container + right: 20px + z-index: 80 + width: 300px + display: none + cursor: pointer + #videochat-disable + display: none +#tokbox-embed + position: absolute + bottom: 10px + left: 10px + height: 150px + z-index: 80 + display: none + overflow-y: auto + #tokbox-publisher, #tokbox-subscribers + float: left + object + float: left + #tokbox-settings + position: absolute + top: 0 + right: 10px + padding: 5px + font-size: 12px + color: #bbb + background-color: black + text-align: right + button + padding: 2px + font-size: 12px + background-color: #333 + color: #888 + min-width: 30px + &.on + background-color: #d33 + color: #fff +.roomhello + width: 400px + color: #fff + padding: 10px + font-size: 18px + background-color: #000 + cursor: pointer + position: fixed + top: 85px + left: 15px + opacity: 0.9 +.modhello + width: 400px + color: #fff + padding: 5px + background-color: #000 + cursor: pointer + margin-top: 10px +.glitter + pointer-events: none + position: absolute + z-index: 23 + +.arrow-play + width: 0 + height: 0 + border-top: 4.5px solid transparent + border-left: 9.5px solid white + border-bottom: 4.5px solid transparent + display: inline-block +.arrow-pause + width: 0 + height: 0 + border-top: 5px solid white + border-right: 2.5px solid white + border-bottom: 4px solid white + border-left: 0 + display: inline-block +.arrow-prev + width: 0 + height: 0 + border-top: 4px solid transparent + border-right: 4px solid white + border-bottom: 4px solid transparent + display: inline-block +.arrow-next + width: 0 + height: 0 + border-top: 4px solid transparent + border-left: 4px solid white + border-bottom: 4px solid transparent + display: inline-block + +#search-terms + font-size: 14px + padding: 2px 2px + width: 200px + position: relative + top: -4px + left: -10px + background-image: url('/img/magnify.png') + background-position: right center + background-repeat: no-repeat + border: 0 + outline: 0 + background-color: #ddd + &:hover + background-color: #fff + &:focus + background-color: #fff +#search-results-container + position: fixed + top: 53px + right: 21px + z-index: 100 + width: 334px + border: 2px solid black + background: #333 + display: none + #search-loading + margin: 10px + #search-instructions + font-size: 11px + color: white + padding: 3px 3px 3px 38px + background-color: #000 + width: 100% + #search-results + height: 300px + width: 100% + overflow-x: hidden + overflow-y: scroll + li + clear: both + height: 54px + overflow: hidden + position: relative + // padding-right: 5px + div.thumb + width: 32px + height: 54px + float: left + background-position: center center + margin: 0 5px 0 0 + border-right: 2px solid black + cursor: pointer + h4 + white-space: nowrap + overflow: hidden + font-size: 14px + color: #fff + margin: 3px 0 3px 0 + cursor: pointer + span.metadata + cursor: pointer + display: block + width: 200px + border-bottom: 2px solid black + font-size: 12px + line-height: 15px + color: #bbb + opacity: 0.9 + a.preview + position: absolute + bottom: 3px + right: 5px + color: #268bd2 + text-decoration: underline + &:hover + background: black + opacity: 1.0 + +: @options{:@has_childrenT:@children[5o:Sass::Tree::ImportNode ;0:@imported_filename"compass/reset;@:@filename"C/var/www/vhosts/scannerjammer.com/sandbox/sass/src/screen.sass: +@linei; [o:Sass::Tree::MixinDefNode : +@name" rounded;@;T: +@args[[o:Sass::Script::Variable;" +width;{:project_name" +sass/: +cacheT:cache_location"?/var/www/vhosts/scannerjammer.com/sandbox/sass/.sass-cache: importero: Sass::Importers::Filesystem: +@root"7/var/www/vhosts/scannerjammer.com/sandbox/sass/src:line_commentsT:original_filename@ :output_style:compressed:filesystem_importerc Sass::Importers::Filesystem:cache_storeo:Sass::CacheStores::Chain: @caches[u:Sass::CacheStores::Memoryo:"Sass::CacheStores::Filesystem:@cache_location"?/var/www/vhosts/scannerjammer.com/sandbox/sass/.sass-cache: +style;: filename@ :css_filename"J/var/www/vhosts/scannerjammer.com/sandbox/sass/stylesheets/screen.css: +quietT: syntax: sass:property_syntax0: loud[:identical:overwrite: create:load_paths[ o;;"7/var/www/vhosts/scannerjammer.com/sandbox/sass/srco;;"V/usr/local/lib/ruby/gems/1.8/gems/compass-0.11.5/frameworks/blueprint/stylesheetso;;"T/usr/local/lib/ruby/gems/1.8/gems/compass-0.11.5/frameworks/compass/stylesheetso:Compass::SpriteImporter: @uri";{:@underscored_name" +width0; @ ; i; [ o:Sass::Tree::PropNode : +@tabsi;["-moz-border-radius;@:@prop_syntax:new; @ : @valueo; ;" +width;@;1" +width; i; i; [o;2 ;3i;["-webkit-border-radius;@;4;5; @ ;6o; ;" +width;@;1" +width; i ; i ; [o;2 ;3i;["-o-border-radius;@;4;5; @ ;6o; ;" +width;@;1" +width; i +; i +; [o;2 ;3i;["border-radius;@;4;5; @ ;6o; ;" +width;@;1" +width; i ; i ; [o:Sass::Tree::RuleNode ;3i;@;T: +@rule[" body:@parsed_ruleso:"Sass::Selector::CommaSequence: @members[o:Sass::Selector::Sequence;;[o:#Sass::Selector::SimpleSequence;;[o:Sass::Selector::Element :@namespace0;[" body; @ ; i ; @ ; i ; @ ; i ; @ ; i ; [ +o;2 ;3i;["font-family;@;4;5; @ ;6o:Sass::Script::List ;@:@separator: +comma;6[ o;@ ;@;A: +space;6[o:Sass::Script::String ;@: +@type:identifier;6"trebuchet; i o;D ;@;E;F;6"ms; i ; i o;D ;@;E;F;6"helvetica; i o;D ;@;E;F;6" +arial; i o;D ;@;E;F;6"sans-serif; i ; i ; i ; [o;2 ;3i;[" +width;@;4;5; @ ;6o:Sass::Script::Number :@denominator_units[;@:@numerator_units["%:@original" 100%;6ii; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;2 ;3i;[" overflow;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i; i; [o;2 ;3i;["background;@;4;5; @ ;6o:Sass::Script::Color ;@: @attrs{ :redi: +alphai: +greeni: bluei;60; i; i; [o;7 ;3i;@;T;8["#bg;9o;:;;[o;<;;[o;=;;[o:Sass::Selector::Id;["bg; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I[;J"0;6i; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"1;6i; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"-3;6i; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;7 ;3i;@;T;8[" #bg img;9o;:;;[o;<;;[o;=;;[o;Q;["bg; @ ; i; @ ; io;=;;[o;> ;?0;["img; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;2 ;3i;["-ms-interpolation-mode;@;4;5; @ ;6o;D ;@;E;F;6"nearest-neighbor; i; i; [o;2 ;3i;["image-rendering;@;4;5; @ ;6o;D ;@;E;F;6"-moz-crisp-edges; i; i; [o;2 ;3i;["image-rendering;@;4;5; @ ;6o;D ;@;E;F;6"-webkit-optimize-contrast; i; i; [o;7 ;3i;@;T;8[" #loading;9o;:;;[o;<;;[o;=;;[o;Q;[" loading; @ ; i ; @ ; i ; @ ; i ; @ ; i ; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"20;6i; i!; i!; [o;2 ;3i;["background;@;4;5; @ ;6o;D ;@;E;F;6"transparent; i"; i"; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi ;Ni;Oi;PiA;60; i#; i#; [o;2 ;3i;["text-shadow;@;4;5; @ ;6o;@ ;@;A;C;6[ o;K ;@;L{ ;Mi ;Ni;Oi;Pih;60; i$o;G ;H@;@;I[;J"0;6i; i$o;G ;H@;@;I[;J"0;6i; i$o;G ;H[;@;I["px;J" 50px;6i7; i$; i$; i$; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; i%; i%; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i&; i&; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i'; i'; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i(; i(; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["%;J"30%;6i#; i); i); [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["%;J"10%;6i; i*; i*; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" +170px;6i; i+; i+; [o;2 ;3i;["font-weight;@;4;5; @ ;6o;D ;@;E;F;6" bold; i,; i,; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" left; i-; i-; [o;2 ;3i;["white-space;@;4;5; @ ;6o;D ;@;E;F;6" no-wrap; i.; i.; [o;2 ;3i;["letter-spacing;@;4;5; @ ;6o;G ;H[;@;I["px;J" -3px;6i; i/; i/; [o;2 ;3i;["pointer-events;@;4;5; @ ;6o;D ;@;E;F;6" none; i0; i0; [o;7 ;3i;@;T;8[" #msg;9o;:;;[o;<;;[o;=;;[o;Q;["msg; @ ; i2; @ ; i2; @ ; i2; @ ; i2; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"100;6ii; i3; i3; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i4; i4; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i5; i5; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i6; i6; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i7; i7; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +350px;6i^; i8; i8; [o;2 ;3i;["max-height;@;4;5; @ ;6o;G ;H[;@;I["%;J"80%;6iU; i9; i9; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 12px;6i; i:; i:; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i;; i;; [o;2 ;3i;["overflow-y;@;4;5; @ ;6o;D ;@;E;F;6" scroll; i<; i<; [o;2 ;3i;["overflow-x;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i=; i=; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi8;Ni;Oi8;Pi8;60; i>; i>; [o;7 ;3i;@;T;8[" strong;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" strong; @ ; i?; @ ; i?; @ ; i?; @ ; i?; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i@; i@; [o;7 ;3i;@;T;8["em;9o;:;;[o;<;;[o;=;;[o;> ;?0;["em; @ ; iA; @ ; iA; @ ; iA; @ ; iA; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi7;Pi4;60; iB; iB; [o;7 ;3i;@;T;8["b;9o;:;;[o;<;;[o;=;;[o;> ;?0;["b; @ ; iC; @ ; iC; @ ; iC; @ ; iC; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi0;Pi;;60; iD; iD; [o;7 ;3i;@;T;8[" #player;9o;:;;[o;<;;[o;=;;[o;Q;[" player; @ ; iE; @ ; iE; @ ; iE; @ ; iE; [ +o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; iF; iF; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; iG; iG; [o;2 ;3i;["background;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iH; iH; [o;7 ;3i;@;T;8["#projector;9o;:;;[o;<;;[o;=;;[o;Q;["projector; @ ; iI; @ ; iI; @ ; iI; @ ; iI; [ o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; iJ; iJ; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; iK; iK; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iL; iL; [o;7 ;3i;@;T;8[" #screen;9o;:;;[o;<;;[o;=;;[o;Q;[" screen; @ ; iM; @ ; iM; @ ; iM; @ ; iM; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; iN; iN; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; iO; iO; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; iP; iP; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; iQ; iQ; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; iR; iR; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"19;6i; iS; iS; [o;7 ;3i;@;T;8["#soundcloud, #audio;9o;:;;[o;<;;[o;=;;[o;Q;["soundcloud; @ ; iT; @ ; iTo;<;;[o;=;;[o;Q;[" +audio; @ ; iT; @ ; iT; @ ; iT; @ ; iT; [ +o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; iU; iU; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; iV; iV; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; iW; iW; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iX; iX; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"21;6i; iY; iY; [o;7 ;3i;@;T;8["#soundcloud-dl, #audio-dl;9o;:;;[o;<;;[o;=;;[o;Q;["soundcloud-dl; @ ; iZ; @ ; iZo;<;;[o;=;;[o;Q;[" audio-dl; @ ; iZ; @ ; iZ; @ ; iZ; @ ; iZ; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; i[; i[; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 81px;6iV; i\; i\; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i]; i]; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 81px;6iV; i^; i^; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J"5px;6i +; i_o;G ;H@;@;I[;J"0;6i; i_o;G ;H[;@;I["px;J"5px;6i +; i_o;G ;H@;@;I[;J"0;6i; i_; i_; i_; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 13px;6i; i`; i`; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" center; ia; ia; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; ib; ib; [o;7 ;3i;@;T;8["*;9o;:;;[o;<;;[o;=;;[o:Sass::Selector::Universal;?0; @ ; ic; @ ; ic; @ ; ic; @ ; ic; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; id; id; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"20;6i; ie; ie; [o;7 ;3i;@;T;8[" #soundcloud-img, #audio-img;9o;:;;[o;<;;[o;=;;[o;Q;["soundcloud-img; @ ; if; @ ; ifo;<;;[o;=;;[o;Q;["audio-img; @ ; if; @ ; if; @ ; if; @ ; if; [ o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; ig; ig; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; ih; ih; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; ii; ii; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; ij; ij; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; ik; ik; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"20;6i; il; il; [o;7 ;3i;@;T;8["img;9o;:;;[o;<;;[o;=;;[o;> ;?0;["img; @ ; im; @ ; im; @ ; im; @ ; im; [o;2 ;3i;["max-width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; in; in; [o;2 ;3i;["min-height;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; io; io; [o;2 ;3i;["max-height;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; ip; ip; [o;7 ;3i;@;T;8["#ytscreen;9o;:;;[o;<;;[o;=;;[o;Q;[" ytscreen; @ ; iq; @ ; iq; @ ; iq; @ ; iq; [ o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"19;6i; ir; ir; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; is; is; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; it; it; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; iu; iu; [o;7 ;3i;@;T;8["#video-title;9o;:;;[o;<;;[o;=;;[o;Q;["video-title; @ ; iv; @ ; iv; @ ; iv; @ ; iv; [ +o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; iw; iw; [o;2 ;3i;[" bottom;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; ix; ix; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; iy; iy; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iz; iz; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"20;6i; i{; i{; [o;7 ;3i;@;T;8["#video-title.fullscreen;9o;:;;[o;<;;[o;=;;[o;Q;["video-title; @ ; i|o:Sass::Selector::Class;["fullscreen; @ ; i|; @ ; i|; @ ; i|; @ ; i|; [ +o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i}; i}; [o;2 ;3i;[" bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J" 90px;6i_; i~; i~; [o;2 ;3i;[" left;@;4;5; @ ;6o;D ;@;E;F;6" auto; i; i; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 30px;6i#; i{; i{; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 24px;6i; i|; i|; [o;7 ;3i;@;T;8[" #projimg;9o;:;;[o;<;;[o;=;;[o;Q;[" projimg; @ ; i}; @ ; i}; @ ; i}; @ ; i}; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i~; i~; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;7 ;3i;@;T;8["nav#controls;9o;:;;[o;<;;[o;=;;[o;> ;?0;["nav; @ ; io;Q;[" controls; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"40;6i-; i; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; i; i; [o;7 ;3i;@;T;8["#video-link;9o;:;;[o;<;;[o;=;;[o;Q;["video-link; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8["#scan.blinkOn;9o;:;;[o;<;;[o;=;;[o;Q;[" scan; @ ; io;S;[" blinkOn; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8["#scan.blinkOff;9o;:;;[o;<;;[o;=;;[o;Q;[" scan; @ ; io;S;[" blinkOff; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8[" +#like;9o;:;;[o;<;;[o;=;;[o;Q;[" like; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;OiI;Pi;60; i; i; [o;7 ;3i;@;T;8["#like.liked;9o;:;;[o;<;;[o;=;;[o;Q;[" like; @ ; io;S;[" +liked; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;MiI;Ni;OiI;Pi;60; i; i; [o;7 ;3i;@;T;8["#mute.muted;9o;:;;[o;<;;[o;=;;[o;Q;[" mute; @ ; io;S;[" +muted; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8["#playlistbg;9o;:;;[o;<;;[o;=;;[o;Q;["playlistbg; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.3;6f0.2999999999999999933; i; i; [o;7 ;3i;@;T;8["#playlist;9o;:;;[o;<;;[o;=;;[o;Q;[" playlist; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"90;6i_; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;2 ;3i;["overflow-y;@;4;5; @ ;6o;D ;@;E;F;6" auto; i; i; [o;2 ;3i;["overflow-x;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i; i; [o;7 ;3i;@;T;8[" ul#queue;9o;:;;[o;<;;[o;=;;[o;> ;?0;["ul; @ ; io;Q;[" +queue; @ ; i; @ ; i; @ ; i; @ ; i; [ o:Sass::Tree::CommentNode : @lines[: +@loud0;@; @ : @silentT;6"8// overflow-y: none +// &:hover +// overflow-y: auto; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;7 ;3i;@;T;8["li;9o;:;;[o;<;;[o;=;;[o;> ;?0;["li; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; i; i; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i; i; [o;2 ;3i;["border-bottom;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"1px;6i; io;D ;@;E;F;6" +solid; io;K ;@;L{ ;Mi8;Ni;Oi8;Pi8;60; i; i; i; [o;7 ;3i;@;T;8["span.title;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; io;S;[" +title; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"1;6i; i; i; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o:Sass::Selector::Parent; @ ; io:Sass::Selector::Pseudo +;[" +hover: @arg0; @ ;E: +class; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i; i; [o;7 ;3i;@;T;8[" a.user;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; io;S;[" user; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" +right; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H@;@;I[;J"0;6i; io;G ;H[;@;I["px;J"5px;6i +; i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;;Pi;60; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"2;6i; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;7 ;3i;@;T;8["span.like;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; io;S;[" like; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" +right; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mij;Ni;Oi{;Pi;60; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"3;6i; i; i; [o;7 ;3i;@;T;8["span.like.liked;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; io;S;[" like; @ ; io;S;[" +liked; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi\;Pi;60; i; i; [o;7 ;3i;@;T;8["li.playing;9o;:;;[o;<;;[o;=;;[o;> ;?0;["li; @ ; io;S;[" playing; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi';Ni;Oi';Pi';60; i; i; [o;7 ;3i;@;T;8["span.title;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; io;S;[" +title; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8["#room, user;9o;:;;[o;<;;[o;=;;[o;Q;[" room; @ ; i; @ ; io;<;;[o;=;;[o;> ;?0;[" user; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;7 ;3i;@;T;8[" +label;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" +label; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mij;Ni;Oi{;Pi;60; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +100px;6ii; i; i; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" +right; i; i; [o;2 ;3i;["padding-right;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;7 ;3i;@;T;8[" span;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi ;Ni;Oi;;PiG;60; i; i; [o;7 ;3i;@;T;8[" #curtain;9o;:;;[o;<;;[o;=;;[o;Q;[" curtain; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background;@;4;5; @ ;6o;K ;@;L{ ;Mi ;Ni;Oi ;Pi;60; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.3;6f0.2999999999999999933; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; i; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"10;6i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;7 ;3i;@;T;8[" #login;9o;:;;[o;<;;[o;=;;[o;Q;[" +login; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J"50%;6i7; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["%;J"20%;6i; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["%;J"50%;6i7; i; i; [o;2 ;3i;["margin-left;@;4;5; @ ;6o;G ;H[;@;I["%;J" -25%;6i; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 30px;6i#; i; i; [o;2 ;3i;["padding-bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J" 60px;6iA; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"20;6i; i; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i; i; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" center; i; i; [o;2 ;3i;["box-shadow;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H@;@;I[;J"0;6i; io;G ;H[;@;I["px;J"5px;6i +; io;G ;H[;@;I["px;J" 10px;6i; io;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; i; [o;7 ;3i;@;T;8["img;9o;:;;[o;<;;[o;=;;[o;> ;?0;["img; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["margin-bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;7 ;3i;@;T;8[" +label;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" +label; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;["min-width;@;4;5; @ ;6o;G ;H[;@;I["%;J"20%;6i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" +right; i; i; [o;2 ;3i;["padding-right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 18px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8["#button-shim;9o;:;;[o;<;;[o;=;;[o;Q;["button-shim; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J"30%;6i#; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" left; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H@;@;I[;J"0;6i; i; i; i; [o;2 ;3i;["margin-right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;7 ;3i;@;T;8[" button;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" button; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"2px;6i; io;G ;H[;@;I["px;J"5px;6i +; i; i; i; [o;7 ;3i;@;T;8["%#login-username, #login-password;9o;:;;[o;<;;[o;=;;[o;Q;["login-username; @ ; i; @ ; io;<;;[o;=;;[o;Q;["login-password; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J"30%;6i#; i; i; [o;2 ;3i;["margin-right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 24px;6i; i; i; [o;2 ;3i;[" border;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"2px;6i; io;D ;@;E;F;6" +solid; io;K ;@;L{ ;Mi;Ni;Oi;Pik;60; i; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;7 ;3i;@;T;8["a;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mik;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6"underline; i; i; [o;7 ;3i;@;T;8[" #sitez;9o;:;;[o;<;;[o;=;;[o;Q;[" +sitez; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 24px;6i; i; i; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 30px;6i#; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"82;6iW; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8["a, #logout;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; i; @ ; io;<;;[o;=;;[o;Q;[" logout; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6"underline; i ; i ; [o;7 ;3i;@;T;8["select option;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" select; @ ; i +; @ ; i +o;=;;[o;> ;?0;[" option; @ ; i +; @ ; i +; @ ; i +; @ ; i +; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mik;Ni;Oik;Pik;60; i ; i ; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i ; i ; [o;2 ;3i;["padding-right;@;4;5; @ ;6o;G ;H[;@;I["px;J"3px;6i; i ; i ; [o;7 ;3i;@;T;8[" button;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" button; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 24px;6i; i; i; [o;2 ;3i;["background;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"2px;6i; i; i; [o;7 ;3i;@;T;8["a#faqlink;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; io;Q;[" faqlink; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8["div;9o;:;;[o;<;;[o;=;;[o;> ;?0;["div; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J"8px;6i ; io;G ;H[;@;I["px;J"8px;6i ; io;G ;H[;@;I["px;J"5px;6i +; io;G ;H[;@;I["px;J"8px;6i ; i; i; i; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o;X; @ ; io;Y +;[" +hover;Z0; @ ;E;[; i; @ ; i; @ ; i; @ ; i; [o:Sass::Tree::MixinNode :@keywords{;" rounded;@;[o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J"3px;6i; io;G ;H[;@;I["px;J"3px;6i; i; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi8;Ni;Oi8;Pi8;60; i; i; [o;7 ;3i;@;T;8[" &.opened;9o;:;;[o;<;;[o;=;;[o;X; @ ; io;S;[" opened; @ ; i; @ ; i; @ ; i; @ ; i; [o;\ ;]{;" rounded;@;[o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J"3px;6i; io;G ;H[;@;I["px;J"3px;6i; i; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi8;Ni;Oi8;Pi8;60; i; i; [o;7 ;3i;@;T;8["nav;9o;:;;[o;<;;[o;=;;[o;> ;?0;["nav; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"10;6i; i ; i ; [o;2 ;3i;[" margin;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H@;@;I[;J"0;6i; i!o;D ;@;E;F;6" auto; i!; i!; i!; [o;7 ;3i;@;T;8["button, #video-link;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" button; @ ; i"; @ ; i"o;<;;[o;=;;[o;Q;["video-link; @ ; i"; @ ; i"; @ ; i"; @ ; i"; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi8;Ni;Oi8;Pi8;60; i#; i#; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i$; i$; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o;X; @ ; i%o;Y +;[" +hover;Z0; @ ;E;[; i%; @ ; i%; @ ; i%; @ ; i%; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mik;Ni;Oik;Pik;60; i&; i&; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i'; i'; [o;2 ;3i;[" border;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i(; i(; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i); i); [o;2 ;3i;["min-width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 40px;6i-; i*; i*; [o;2 ;3i;["min-height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i+; i+; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"5px;6i +; i,o;G ;H[;@;I["px;J"5px;6i +; i,; i,; i,; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" relative; i-; i-; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" -1px;6i; i.; i.; [o;7 ;3i;@;T;8["#video-link;9o;:;;[o;<;;[o;=;;[o;Q;["video-link; @ ; i/; @ ; i/; @ ; i/; @ ; i/; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" -2px;6i; i0; i0; [o;2 ;3i;["padding-bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J"6px;6i ; i1; i1; [o;7 ;3i;@;T;8[" #lunacy;9o;:;;[o;<;;[o;=;;[o;Q;[" lunacy; @ ; i2; @ ; i2; @ ; i2; @ ; i2; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"40;6i-; i3; i3; [o;2 ;3i;["background;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i4; i4; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i5; i5; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; i6; i6; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +700px;6i; i7; i7; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i8; i8; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["%;J"20%;6i; i9; i9; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["%;J"50%;6i7; i:; i:; [o;2 ;3i;["margin-left;@;4;5; @ ;6o;G ;H[;@;I["px;J" -390px;6iz; i;; i;; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.7;6f0.69999999999999996ff; i<; i<; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 40px;6i-; i=; i=; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" center; i>; i>; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 48px;6i5; i?; i?; [o;7 ;3i;@;T;8[" +#plea;9o;:;;[o;<;;[o;=;;[o;Q;[" plea; @ ; i@; @ ; i@; @ ; i@; @ ; i@; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"30;6i#; iA; iA; [o;2 ;3i;["background;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iB; iB; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iC; iC; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; iD; iD; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +400px;6i; iE; iE; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; iF; iF; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["%;J"20%;6i; iG; iG; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["%;J"50%;6i7; iH; iH; [o;2 ;3i;["margin-left;@;4;5; @ ;6o;G ;H[;@;I["px;J" -240px;6i; iI; iI; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.7;6f0.69999999999999996ff; iJ; iJ; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 40px;6i-; iK; iK; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" center; iL; iL; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 48px;6i5; iM; iM; [o;7 ;3i;@;T;8[" #logobg;9o;:;;[o;<;;[o;=;;[o;Q;[" logobg; @ ; iO; @ ; iO; @ ; iO; @ ; iO; [ o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; iP; iP; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; iQ; iQ; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; iR; iR; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; iS; iS; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 64px;6iE; iT; iT; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iU; iU; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.8;6f0.80000000000000004; iV; iV; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"45;6i2; iW; iW; [o;7 ;3i;@;T;8[" +#logo;9o;:;;[o;<;;[o;=;;[o;Q;[" logo; @ ; iX; @ ; iX; @ ; iX; @ ; iX; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; iY; iY; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; iZ; iZ; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"46;6i3; i[; i[; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i\; i\; [o;7 ;3i;@;T;8["a;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; i]; @ ; i]; @ ; i]; @ ; i]; [o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" left; i^; i^; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i_; i_; [o;7 ;3i;@;T;8["img;9o;:;;[o;<;;[o;=;;[o;> ;?0;["img; @ ; i`; @ ; i`; @ ; i`; @ ; i`; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; ia; ia; [o;7 ;3i;@;T;8[" #scanjam;9o;:;;[o;<;;[o;=;;[o;Q;[" scanjam; @ ; ib; @ ; ib; @ ; ib; @ ; ib; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J" 10px;6i; ico;G ;H[;@;I["px;J" 15px;6i; ico;G ;H[;@;I["px;J" 10px;6i; ico;G ;H@;@;I[;J"0;6i; ic; ic; ic; [o;7 ;3i;@;T;8["#preamble;9o;:;;[o;<;;[o;=;;[o;Q;[" preamble; @ ; id; @ ; id; @ ; id; @ ; id; [ +o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; ie; ie; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 12px;6i; if; if; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; ig; ig; [o;2 ;3i;["max-width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 80px;6iU; ih; ih; [o;2 ;3i;["padding-left;@;4;5; @ ;6o;G ;H[;@;I["px;J" 15px;6i; ii; ii; [o;7 ;3i;@;T;8["h1;9o;:;;[o;<;;[o;=;;[o;> ;?0;["h1; @ ; ij; @ ; ij; @ ; ij; @ ; ij; [ o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J" 15px;6i; iko;G ;H[;@;I["px;J" 15px;6i; iko;G ;H@;@;I[;J"0;6i; iko;G ;H[;@;I["px;J" 10px;6i; ik; ik; ik; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 34px;6i'; il; il; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; im; im; [o;2 ;3i;["font-weight;@;4;5; @ ;6o;D ;@;E;F;6" normal; in; in; [o;2 ;3i;["font-style;@;4;5; @ ;6o;D ;@;E;F;6" italic; io; io; [o;2 ;3i;["font-family;@;4;5; @ ;6o;@ ;@;A;B;6[o;D ;@;E;F;6" georgia; ipo;D ;@;E;F;6" garamond; ipo;D ;@;E;F;6" +serif; ip; ip; ip; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iq; iq; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; ir; ir; [o;7 ;3i;@;T;8["h2;9o;:;;[o;<;;[o;=;;[o;> ;?0;["h2; @ ; is; @ ; is; @ ; is; @ ; is; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; it; it; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 16px;6i; iu; iu; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iv; iv; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" relative; iw; iw; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; ix; ix; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" -5px;6i; iy; iy; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iz; iz; [o;7 ;3i;@;T;8["a;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; i{; @ ; i{; @ ; i{; @ ; i{; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" inline; i|; i|; [o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" none; i}; i}; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi+;Ni;Oi;Pi;60; i~; i~; [o;7 ;3i;@;T;8["img;9o;:;;[o;<;;[o;=;;[o;> ;?0;["img; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["max-height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;2 ;3i;["max-width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;7 ;3i;@;T;8["h2.preamblish;9o;:;;[o;<;;[o;=;;[o;> ;?0;["h2; @ ; io;S;["preamblish; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 12px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["max-width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +250px;6i; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J"9px;6i; i; i; [o;2 ;3i;["padding-right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;7 ;3i;@;T;8[" h2.radio;9o;:;;[o;<;;[o;=;;[o;> ;?0;["h2; @ ; io;S;[" +radio; @ ; i; @ ; i; @ ; i; @ ; i; [ o;7 ;3i;@;T;8["a;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 12px;6i; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" -8px;6i; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J" 30px;6i#; i; i; [o;7 ;3i;@;T;8["#likebutton;9o;:;;[o;<;;[o;=;;[o;Q;["likebutton; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" relative; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" -5px;6i; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 90px;6i_; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 21px;6i; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"-1;6i; i; i; [o;7 ;3i;@;T;8["#glasspopcornlogo;9o;:;;[o;<;;[o;=;;[o;Q;["glasspopcornlogo; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 80px;6iU; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J" 15px;6i; i; i; [o;2 ;3i;["pointer-events;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.5;6f0.5; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"8;6i ; i; i; [o;7 ;3i;@;T;8["img;9o;:;;[o;<;;[o;=;;[o;> ;?0;["img; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"8;6i ; i; i; [o;2 ;3i;["pointer-events;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;7 ;3i;@;T;8["#likereport;9o;:;;[o;<;;[o;=;;[o;Q;["likereport; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +100px;6ii; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"100;6ii; i; i; [o;2 ;3i;["overflow-y;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i; i; [o;7 ;3i;@;T;8["a;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi';Ni;Oi';Pi';60; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J" 0.95;6f0.94999999999999996ff; i; i; [o;7 ;3i;@;T;8[" +#form;9o;:;;[o;<;;[o;=;;[o;Q;[" form; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i; i; [o;2 ;3i;[" bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; i; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["white-space;@;4;5; @ ;6o;D ;@;E;F;6" nowrap; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"31;6i$; i; i; [o;7 ;3i;@;T;8["#chat-message;9o;:;;[o;<;;[o;=;;[o;Q;["chat-message; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" border;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" outline;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 18px;6i; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;["margin-right;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o;X; @ ; io;Y +;[" +hover;Z0; @ ;E;[; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8[" button;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" button; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" margin;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" outline;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" border;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi8;Ni;Oi8;Pi8;60; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o;X; @ ; io;Y +;[" +hover;Z0; @ ;E;[; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mik;Ni;Oik;Pik;60; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;T ;U[;V0;@; @ ;WT;6"// @include rounded(2px); i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"4px;6i ; io;G ;H[;@;I["px;J"6px;6i ; i; i; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" relative; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J"1px;6i; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;7 ;3i;@;T;8["#videochat-badge;9o;:;;[o;<;;[o;=;;[o;Q;["videochat-badge; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" auto; i; i; [o;2 ;3i;["pointer-events;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;\ ;]{;" rounded;@;[o;G ;H[;@;I["px;J"8px;6i ; i; @ ; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" center; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"2px;6i; io;G ;H[;@;I["px;J"2px;6i; i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"32;6i%; i; i; [o;7 ;3i;@;T;8[" #formbg;9o;:;;[o;<;;[o;=;;[o;Q;[" formbg; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.7;6f0.69999999999999996ff; i; i; [o;7 ;3i;@;T;8[" #chatbg;9o;:;;[o;<;;[o;=;;[o;Q;[" chatbg; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i; i; [o;2 ;3i;[" bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J" +100px;6ii; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +600px;6iX; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H@;@;I[;J"0;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J"5px;6i +; io;G ;H[;@;I["px;J" 10px;6i; i; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J" 0.25;6f 0.25; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"9;6i; i; i; [o;7 ;3i;@;T;8[" +#chat;9o;:;;[o;<;;[o;=;;[o;Q;[" chat; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H@;@;I[;J"0;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J"5px;6i +; io;G ;H[;@;I["px;J" 10px;6i; i; i; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 18px;6i; i; i; [o;2 ;3i;["line-height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 26px;6i; i; i; [o;2 ;3i;["vertical-align;@;4;5; @ ;6o;D ;@;E;F;6" bottom; i; i; [o;2 ;3i;["overflow-y;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i; i; [o;2 ;3i;["overflow-x;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i; i; [o;2 ;3i;["background;@;4;5; @ ;6o;D ;@;E;F;6"transparent; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"30;6i#; i; i; [o;7 ;3i;@;T;8["a;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.8;6f0.80000000000000004; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;MiI;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6"underline; i; i; [o;7 ;3i;@;T;8["a.u;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; io;S;["u; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["font-weight;@;4;5; @ ;6o;D ;@;E;F;6" normal; i; i; [o;2 ;3i;["padding-right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pik;60; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"1;6i; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;["min-width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 80px;6iU; i; i; [o;2 ;3i;["overflow-x;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 18px;6i; i; i; [o;2 ;3i;["line-height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 26px;6i; i; i; [o;2 ;3i;["vertical-align;@;4;5; @ ;6o;D ;@;E;F;6" bottom; i; i; [o;7 ;3i;@;T;8[" +a.pic;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; io;S;["pic; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"1;6i; i; i; [o;7 ;3i;@;T;8[" span;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["text-shadow;@;4;5; @ ;6o;@ ;@;A;C;6[ o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i o;G ;H@;@;I[;J"0;6i; i o;G ;H@;@;I[;J"0;6i; i o;G ;H[;@;I["px;J"2px;6i; i ; i ; i ; [o;2 ;3i;["font-weight;@;4;5; @ ;6o;D ;@;E;F;6" bold; i +; i +; [o;7 ;3i;@;T;8[" .ytlink;9o;:;;[o;<;;[o;=;;[o;S;[" ytlink; @ ; i ; @ ; i ; @ ; i ; @ ; i ; [ o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i ; i ; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i ; i ; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6"underline; i; i; [o;2 ;3i;["text-shadow;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;["text-shadow;@;4;5; @ ;6o;@ ;@;A;C;6[ o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; io;G ;H@;@;I[;J"0;6i; io;G ;H@;@;I[;J"0;6i; io;G ;H[;@;I["px;J"1px;6i; i; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"1;6i; i; i; [o;7 ;3i;@;T;8[".ytlink:hover;9o;:;;[o;<;;[o;=;;[o;S;[" ytlink; @ ; io;Y +;[" +hover;Z0; @ ;E;[; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oik;Pi;60; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6"underline; i; i; [o;2 ;3i;["text-shadow;@;4;5; @ ;6o;@ ;@;A;C;6[ o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; io;G ;H@;@;I[;J"0;6i; io;G ;H@;@;I[;J"0;6i; io;G ;H[;@;I["px;J"1px;6i; i; i; i; [o;7 ;3i;@;T;8[".ytlink.playing;9o;:;;[o;<;;[o;=;;[o;S;[" ytlink; @ ; io;S;[" playing; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["font-weight;@;4;5; @ ;6o;D ;@;E;F;6" bold; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;7 ;3i;@;T;8[".ytlink.playing::before;9o;:;;[o;<;;[o;=;;[o;S;[" ytlink; @ ; io;S;[" playing; @ ; io;Y +;[" before;Z0; @ ;E: element; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;[" content;@;4;5; @ ;6o;D ;@;E: string;6" \25b6 ; i; i; [o;2 ;3i;["font-weight;@;4;5; @ ;6o;D ;@;E;F;6" bold; i; i; [o;7 ;3i;@;T;8["img;9o;:;;[o;<;;[o;=;;[o;> ;?0;["img; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["max-width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +350px;6i^; i; i; [o;2 ;3i;["max-height;@;4;5; @ ;6o;G ;H[;@;I["px;J" +400px;6i; i ; i ; [o;2 ;3i;[" border;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i!; i!; [o;7 ;3i;@;T;8[" +#shim;9o;:;;[o;<;;[o;=;;[o;Q;[" shim; @ ; i"; @ ; i"; @ ; i"; @ ; i"; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i#; i#; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" +500px;6i; i$; i$; [o;7 ;3i;@;T;8["#chat.fullscreen;9o;:;;[o;<;;[o;=;;[o;Q;[" chat; @ ; i%o;S;["fullscreen; @ ; i%; @ ; i%; @ ; i%; @ ; i%; [o;2 ;3i;["overflow-y;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i&; i&; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o;X; @ ; i'o;Y +;[" +hover;Z0; @ ;E;[; i'; @ ; i'; @ ; i'; @ ; i'; [o;2 ;3i;["overflow-y;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i(; i(; [o;7 ;3i;@;T;8["#webcam-container;9o;:;;[o;<;;[o;=;;[o;Q;["webcam-container; @ ; i); @ ; i); @ ; i); @ ; i); [ o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"100;6ii; i*; i*; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i+; i+; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" +500px;6i; i,; i,; [o;2 ;3i;[" bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J" +100px;6ii; i-; i-; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i.; i.; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i/; i/; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; i0; i0; [o;7 ;3i;@;T;8["#lastlogbg;9o;:;;[o;<;;[o;=;;[o;Q;["lastlogbg; @ ; i1; @ ; i1; @ ; i1; @ ; i1; [ +o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i2; i2; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i3; i3; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.5;6f0.5; i4; i4; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i5; i5; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"31;6i$; i6; i6; [o;7 ;3i;@;T;8["#lastlogbox;9o;:;;[o;<;;[o;=;;[o;Q;["lastlogbox; @ ; i7; @ ; i7; @ ; i7; @ ; i7; [ o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i8; i8; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i9; i9; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i:; i:; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"32;6i%; i;; i;; [o;7 ;3i;@;T;8["h4;9o;:;;[o;<;;[o;=;;[o;> ;?0;["h4; @ ; i<; @ ; i<; @ ; i<; @ ; i<; [ o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 12px;6i; i=; i=; [o;2 ;3i;["font-weight;@;4;5; @ ;6o;D ;@;E;F;6" bold; i>; i>; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i?; i?; [o;2 ;3i;["padding-bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i@; i@; [o;7 ;3i;@;T;8["ul;9o;:;;[o;<;;[o;=;;[o;> ;?0;["ul; @ ; iA; @ ; iA; @ ; iA; @ ; iA; [o;2 ;3i;["border-top;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"1px;6i; iBo;D ;@;E;F;6" +solid; iBo;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iB; iB; iB; [o;7 ;3i;@;T;8[" +li.ll;9o;:;;[o;<;;[o;=;;[o;> ;?0;["li; @ ; iCo;S;["ll; @ ; iC; @ ; iC; @ ; iC; @ ; iC; [o;2 ;3i;["list-style-type;@;4;5; @ ;6o;D ;@;E;F;6" none; iD; iD; [o;7 ;3i;@;T;8["a;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; iE; @ ; iE; @ ; iE; @ ; iE; [ o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iF; iF; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"5px;6i +; iGo;G ;H@;@;I[;J"0;6i; iG; iG; iG; [o;2 ;3i;["border-bottom;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"1px;6i; iHo;D ;@;E;F;6" +solid; iHo;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iH; iH; iH; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; iI; iI; [o;2 ;3i;["text-shadow;@;4;5; @ ;6o;@ ;@;A;C;6[ o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iJo;G ;H@;@;I[;J"0;6i; iJo;G ;H@;@;I[;J"0;6i; iJo;G ;H[;@;I["px;J"2px;6i; iJ; iJ; iJ; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6"underline; iK; iK; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 16px;6i; iL; iL; [o;2 ;3i;["font-weight;@;4;5; @ ;6o;D ;@;E;F;6" bold; iM; iM; [o;7 ;3i;@;T;8[" #flower;9o;:;;[o;<;;[o;=;;[o;Q;[" flower; @ ; iO; @ ; iO; @ ; iO; @ ; iO; [ o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; iP; iP; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; iQ; iQ; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["%;J"10%;6i; iR; iR; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"50;6i7; iS; iS; [o;2 ;3i;["pointer-events;@;4;5; @ ;6o;D ;@;E;F;6" none; iT; iT; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; iU; iU; [o;7 ;3i;@;T;8[" #plant;9o;:;;[o;<;;[o;=;;[o;Q;[" +plant; @ ; iV; @ ; iV; @ ; iV; @ ; iV; [ o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; iW; iW; [o;2 ;3i;[" bottom;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; iX; iX; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["%;J"50%;6i7; iY; iY; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"50;6i7; iZ; iZ; [o;2 ;3i;["pointer-events;@;4;5; @ ;6o;D ;@;E;F;6" none; i[; i[; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; i\; i\; [o;7 ;3i;@;T;8[" #msg;9o;:;;[o;<;;[o;=;;[o;Q;["msg; @ ; i]; @ ; i]; @ ; i]; @ ; i]; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; i^; i^; [o;7 ;3i;@;T;8[" button;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" button; @ ; i_; @ ; i_; @ ; i_; @ ; i_; [ o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 24px;6i; i`; i`; [o;2 ;3i;["background;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; ia; ia; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; ib; ib; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"2px;6i; ic; ic; [o;7 ;3i;@;T;8["R#settings-container, #rooms-container, #about-container, #videochat-container;9o;:;;[ o;<;;[o;=;;[o;Q;["settings-container; @ ; id; @ ; ido;<;;[o;=;;[o;Q;["rooms-container; @ ; id; @ ; ido;<;;[o;=;;[o;Q;["about-container; @ ; id; @ ; ido;<;;[o;=;;[o;Q;["videochat-container; @ ; id; @ ; id; @ ; id; @ ; id; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; ie; ie; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 59px;6i@; if; if; [o;\ ;]{;" rounded;@;[o;G ;H[;@;I["px;J" 10px;6i; ig; @ ; ig; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; ih; ih; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"80;6iU; ii; ii; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +500px;6i; ij; ij; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi';Ni;Oi';Pi';60; ik; ik; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mij;Ni;Oi{;Pi;60; il; il; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; im; im; [o;2 ;3i;["box-shadow;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H@;@;I[;J"0;6i; ino;G ;H[;@;I["px;J"5px;6i +; ino;G ;H[;@;I["px;J" 10px;6i; ino;K ;@;L{ ;Mi;Ni;Oi;Pi;60; in; in; in; [o;7 ;3i;@;T;8[" .close;9o;:;;[o;<;;[o;=;;[o;S;[" +close; @ ; io; @ ; io; @ ; io; @ ; io; [o;2 ;3i;[" margin;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J" 10px;6i; ipo;G ;H[;@;I["px;J" 10px;6i; ipo;G ;H@;@;I[;J"0;6i; ipo;G ;H@;@;I[;J"0;6i; ip; ip; ip; [o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" +right; iq; iq; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; ir; ir; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; is; is; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; it; it; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; iu; iu; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"3px;6i; ivo;G ;H@;@;I[;J"0;6i; iv; iv; iv; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" center; iw; iw; [o;2 ;3i;["vertical-align;@;4;5; @ ;6o;D ;@;E;F;6" middle; ix; ix; [o;\ ;]{;" rounded;@;[o;G ;H[;@;I["px;J" 10px;6i; iy; @ ; iy; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iz; iz; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o;X; @ ; i{o;Y +;[" +hover;Z0; @ ;E;[; i{; @ ; i{; @ ; i{; @ ; i{; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i|; i|; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i}; i}; [o;7 ;3i;@;T;8["#rooms-loading;9o;:;;[o;<;;[o;=;;[o;Q;["rooms-loading; @ ; i~; @ ; i~; @ ; i~; @ ; i~; [o;2 ;3i;[" margin;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;7 ;3i;@;T;8["h5;9o;:;;[o;<;;[o;=;;[o;> ;?0;["h5; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 16px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi8;Ni;Oi8;Pi8;60; i; i; [o;\ ;]{;" rounded;@;[o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H@;@;I[;J"0;6i; io;G ;H@;@;I[;J"0;6i; i; i; @ ; i; [o;7 ;3i;@;T;8["p;9o;:;;[o;<;;[o;=;;[o;> ;?0;["p; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; i; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i; i; [o;2 ;3i;["line-height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 18px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi ;Ni;Oi ;Pi$;60; i; i; [o;7 ;3i;@;T;8[" +label;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" +label; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" margin;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J"2px;6i; io;G ;H@;@;I[;J"0;6i; io;G ;H@;@;I[;J"0;6i; io;G ;H[;@;I["px;J" 10px;6i; i; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mij;Ni;Oi{;Pi;60; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +150px;6i; i; i; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" +right; i; i; [o;2 ;3i;["padding-right;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;7 ;3i;@;T;8[" span;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" margin;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J"2px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H@;@;I[;J"0;6i; io;G ;H@;@;I[;J"0;6i; i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i; i; [o;7 ;3i;@;T;8["span#room-mod-tag a;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; io;Q;["room-mod-tag; @ ; i; @ ; io;=;;[o;> ;?0;["a; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" +right; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H@;@;I[;J"0;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H@;@;I[;J"0;6i; i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi7;Pi4;60; i; i; [o;7 ;3i;@;T;8["span#gallery-link a;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; io;Q;["gallery-link; @ ; i; @ ; io;=;;[o;> ;?0;["a; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi+;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H@;@;I[;J"0;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H@;@;I[;J"0;6i; i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; i; i; [o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" +right; i; i; [o;7 ;3i;@;T;8[" button;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" button; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" relative; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J"3px;6i; i; i; [o;7 ;3i;@;T;8[" +input;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" +input; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" margin;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J"2px;6i; io;G ;H[;@;I["px;J" 10px;6i; io;G ;H@;@;I[;J"0;6i; io;G ;H@;@;I[;J"0;6i; i; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +100px;6ii; i; i; [o;7 ;3i;@;T;8[")#room-topic, #room-bg, #room-bgreset;9o;:;;[o;<;;[o;=;;[o;Q;["room-topic; @ ; i; @ ; io;<;;[o;=;;[o;Q;[" room-bg; @ ; i; @ ; io;<;;[o;=;;[o;Q;["room-bgreset; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +300px;6i,; i; i; [o;7 ;3i;@;T;8["#room-settings-save;9o;:;;[o;<;;[o;=;;[o;Q;["room-settings-save; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i; i; [o;7 ;3i;@;T;8[" +.shim;9o;:;;[o;<;;[o;=;;[o;S;[" shim; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J"1px;6i; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;7 ;3i;@;T;8["ul;9o;:;;[o;<;;[o;=;;[o;> ;?0;["ul; @ ; i; @ ; i; @ ; i; @ ; i; [ +o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i; i; [o;7 ;3i;@;T;8["li;9o;:;;[o;<;;[o;=;;[o;> ;?0;["li; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["list-style-type;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i; i; [o;2 ;3i;["border-top;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"1px;6i; io;D ;@;E;F;6" +solid; io;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;D ;@;E;F;6"transparent; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o;X; @ ; io;Y +;[" +hover;Z0; @ ;E;[; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8[" a li;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; i; @ ; io;=;;[o;> ;?0;["li; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;7 ;3i;@;T;8["a;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;7 ;3i;@;T;8["#rooms-container;9o;:;;[o;<;;[o;=;;[o;Q;["rooms-container; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"80;6iU; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +300px;6i,; i; i; [o;2 ;3i;["max-height;@;4;5; @ ;6o;G ;H[;@;I["px;J" +300px;6i,; i; i; [o;7 ;3i;@;T;8["#about-container;9o;:;;[o;<;;[o;=;;[o;Q;["about-container; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"80;6iU; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +300px;6i,; i; i; [o;7 ;3i;@;T;8["#videochat-container;9o;:;;[o;<;;[o;=;;[o;Q;["videochat-container; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 20px;6i; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"80;6iU; i; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +300px;6i,; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i; i; [o;7 ;3i;@;T;8["#videochat-disable;9o;:;;[o;<;;[o;=;;[o;Q;["videochat-disable; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;7 ;3i;@;T;8["#tokbox-embed;9o;:;;[o;<;;[o;=;;[o;Q;["tokbox-embed; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; i; i; [o;2 ;3i;[" bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" +150px;6i; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"80;6iU; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;["overflow-y;@;4;5; @ ;6o;D ;@;E;F;6" auto; i; i; [o;7 ;3i;@;T;8["+#tokbox-publisher, #tokbox-subscribers;9o;:;;[o;<;;[o;=;;[o;Q;["tokbox-publisher; @ ; i; @ ; io;<;;[o;=;;[o;Q;["tokbox-subscribers; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" left; i; i; [o;7 ;3i;@;T;8[" object;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" object; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" left; i; i; [o;7 ;3i;@;T;8["#tokbox-settings;9o;:;;[o;<;;[o;=;;[o;Q;["tokbox-settings; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 12px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["text-align;@;4;5; @ ;6o;D ;@;E;F;6" +right; i; i; [o;7 ;3i;@;T;8[" button;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" button; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"2px;6i; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 12px;6i; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi8;Ni;Oi8;Pi8;60; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;["min-width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 30px;6i#; i; i; [o;7 ;3i;@;T;8[" &.on;9o;:;;[o;<;;[o;=;;[o;X; @ ; io;S;["on; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi8;Pi8;60; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;7 ;3i;@;T;8[".roomhello;9o;:;;[o;<;;[o;=;;[o;S;["roomhello; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +400px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 18px;6i; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i; i; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 85px;6iZ; i; i; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J" 15px;6i; i; i; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.9;6f0.90000000000000002; i; i; [o;7 ;3i;@;T;8[".modhello;9o;:;;[o;<;;[o;=;;[o;S;[" modhello; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +400px;6i; i; i; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" padding;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; i; i; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i; i; [o;2 ;3i;["margin-top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; i; i; [o;7 ;3i;@;T;8[" .glitter;9o;:;;[o;<;;[o;=;;[o;S;[" glitter; @ ; i; @ ; i; @ ; i; @ ; i; [o;2 ;3i;["pointer-events;@;4;5; @ ;6o;D ;@;E;F;6" none; i; i; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; i; i; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"23;6i; i; i; [o;7 ;3i;@;T;8[".arrow-play;9o;:;;[o;<;;[o;=;;[o;S;["arrow-play; @ ; i +; @ ; i +; @ ; i +; @ ; i +; [ o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i ; i ; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i ; i ; [o;2 ;3i;["border-top;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J" +4.5px;6f4.5; i o;D ;@;E;F;6" +solid; i o;D ;@;E;F;6"transparent; i ; i ; i ; [o;2 ;3i;["border-left;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J" +9.5px;6f9.5; io;D ;@;E;F;6" +solid; io;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; i; [o;2 ;3i;["border-bottom;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J" +4.5px;6f4.5; io;D ;@;E;F;6" +solid; io;D ;@;E;F;6"transparent; i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;7 ;3i;@;T;8[".arrow-pause;9o;:;;[o;<;;[o;=;;[o;S;["arrow-pause; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;["border-top;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"5px;6i +; io;D ;@;E;F;6" +solid; io;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; i; [o;2 ;3i;["border-right;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J" +2.5px;6f2.5; io;D ;@;E;F;6" +solid; io;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; i; [o;2 ;3i;["border-bottom;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"4px;6i ; io;D ;@;E;F;6" +solid; io;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; i; [o;2 ;3i;["border-left;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;7 ;3i;@;T;8[".arrow-prev;9o;:;;[o;<;;[o;=;;[o;S;["arrow-prev; @ ; i; @ ; i; @ ; i; @ ; i; [ o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i; i; [o;2 ;3i;["border-top;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"4px;6i ; io;D ;@;E;F;6" +solid; io;D ;@;E;F;6"transparent; i; i; i; [o;2 ;3i;["border-right;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"4px;6i ; io;D ;@;E;F;6" +solid; io;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i; i; i; [o;2 ;3i;["border-bottom;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"4px;6i ; io;D ;@;E;F;6" +solid; io;D ;@;E;F;6"transparent; i; i; i; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i; i; [o;7 ;3i;@;T;8[".arrow-next;9o;:;;[o;<;;[o;=;;[o;S;["arrow-next; @ ; i ; @ ; i ; @ ; i ; @ ; i ; [ o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i!; i!; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i"; i"; [o;2 ;3i;["border-top;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"4px;6i ; i#o;D ;@;E;F;6" +solid; i#o;D ;@;E;F;6"transparent; i#; i#; i#; [o;2 ;3i;["border-left;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"4px;6i ; i$o;D ;@;E;F;6" +solid; i$o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i$; i$; i$; [o;2 ;3i;["border-bottom;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"4px;6i ; i%o;D ;@;E;F;6" +solid; i%o;D ;@;E;F;6"transparent; i%; i%; i%; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6"inline-block; i&; i&; [o;7 ;3i;@;T;8["#search-terms;9o;:;;[o;<;;[o;=;;[o;Q;["search-terms; @ ; i(; @ ; i(; @ ; i(; @ ; i(; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i); i); [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"2px;6i; i*o;G ;H[;@;I["px;J"2px;6i; i*; i*; i*; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +200px;6i; i+; i+; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" relative; i,; i,; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" -4px;6i; i-; i-; [o;2 ;3i;[" left;@;4;5; @ ;6o;G ;H[;@;I["px;J" +-10px;6i; i.; i.; [o;2 ;3i;["background-image;@;4;5; @ ;6o:Sass::Script::Funcall +;]{;"url;@;[o;D ;@;E;_;6"/img/magnify.png; i/; i/; i/; [o;2 ;3i;["background-position;@;4;5; @ ;6o;@ ;@;A;C;6[o;D ;@;E;F;6" +right; i0o;D ;@;E;F;6" center; i0; i0; i0; [o;2 ;3i;["background-repeat;@;4;5; @ ;6o;D ;@;E;F;6"no-repeat; i1; i1; [o;2 ;3i;[" border;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i2; i2; [o;2 ;3i;[" outline;@;4;5; @ ;6o;G ;H@;@;I[;J"0;6i; i3; i3; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i4; i4; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o;X; @ ; i5o;Y +;[" +hover;Z0; @ ;E;[; i5; @ ; i5; @ ; i5; @ ; i5; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i6; i6; [o;7 ;3i;@;T;8[" &:focus;9o;:;;[o;<;;[o;=;;[o;X; @ ; i7o;Y +;[" +focus;Z0; @ ;E;[; i7; @ ; i7; @ ; i7; @ ; i7; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i8; i8; [o;7 ;3i;@;T;8["#search-results-container;9o;:;;[o;<;;[o;=;;[o;Q;["search-results-container; @ ; i9; @ ; i9; @ ; i9; @ ; i9; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" +fixed; i:; i:; [o;2 ;3i;["top;@;4;5; @ ;6o;G ;H[;@;I["px;J" 53px;6i:; i;; i;; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J" 21px;6i; i<; i<; [o;2 ;3i;[" z-index;@;4;5; @ ;6o;G ;H@;@;I[;J"100;6ii; i=; i=; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +334px;6iN; i>; i>; [o;2 ;3i;[" border;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"2px;6i; i?o;D ;@;E;F;6" +solid; i?o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i?; i?; i?; [o;2 ;3i;["background;@;4;5; @ ;6o;K ;@;L{ ;Mi8;Ni;Oi8;Pi8;60; i@; i@; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" none; iA; iA; [o;7 ;3i;@;T;8["#search-loading;9o;:;;[o;<;;[o;=;;[o;Q;["search-loading; @ ; iB; @ ; iB; @ ; iB; @ ; iB; [o;2 ;3i;[" margin;@;4;5; @ ;6o;G ;H[;@;I["px;J" 10px;6i; iC; iC; [o;7 ;3i;@;T;8["#search-instructions;9o;:;;[o;<;;[o;=;;[o;Q;["search-instructions; @ ; iD; @ ; iD; @ ; iD; @ ; iD; [ +o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 11px;6i; iE; iE; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iF; iF; [o;2 ;3i;[" padding;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J"3px;6i; iGo;G ;H[;@;I["px;J"3px;6i; iGo;G ;H[;@;I["px;J"3px;6i; iGo;G ;H[;@;I["px;J" 38px;6i+; iG; iG; iG; [o;2 ;3i;["background-color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; iH; iH; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; iI; iI; [o;7 ;3i;@;T;8["#search-results;9o;:;;[o;<;;[o;=;;[o;Q;["search-results; @ ; iJ; @ ; iJ; @ ; iJ; @ ; iJ; [ +o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" +300px;6i,; iK; iK; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["%;J" 100%;6ii; iL; iL; [o;2 ;3i;["overflow-x;@;4;5; @ ;6o;D ;@;E;F;6" hidden; iM; iM; [o;2 ;3i;["overflow-y;@;4;5; @ ;6o;D ;@;E;F;6" scroll; iN; iN; [o;7 ;3i;@;T;8["li;9o;:;;[o;<;;[o;=;;[o;> ;?0;["li; @ ; iO; @ ; iO; @ ; iO; @ ; iO; [o;2 ;3i;[" +clear;@;4;5; @ ;6o;D ;@;E;F;6" both; iP; iP; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 54px;6i;; iQ; iQ; [o;2 ;3i;[" overflow;@;4;5; @ ;6o;D ;@;E;F;6" hidden; iR; iR; [o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" relative; iS; iS; [o;T ;U[;V0;@; @ ;WT;6"// padding-right: 5px; iT; [o;7 ;3i;@;T;8["div.thumb;9o;:;;[o;<;;[o;=;;[o;> ;?0;["div; @ ; iUo;S;[" +thumb; @ ; iU; @ ; iU; @ ; iU; @ ; iU; [ o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" 32px;6i%; iV; iV; [o;2 ;3i;[" height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 54px;6i;; iW; iW; [o;2 ;3i;[" +float;@;4;5; @ ;6o;D ;@;E;F;6" left; iX; iX; [o;2 ;3i;["background-position;@;4;5; @ ;6o;@ ;@;A;C;6[o;D ;@;E;F;6" center; iYo;D ;@;E;F;6" center; iY; iY; iY; [o;2 ;3i;[" margin;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H@;@;I[;J"0;6i; iZo;G ;H[;@;I["px;J"5px;6i +; iZo;G ;H@;@;I[;J"0;6i; iZo;G ;H@;@;I[;J"0;6i; iZ; iZ; iZ; [o;2 ;3i;["border-right;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"2px;6i; i[o;D ;@;E;F;6" +solid; i[o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; i[; i[; i[; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; i\; i\; [o;7 ;3i;@;T;8["h4;9o;:;;[o;<;;[o;=;;[o;> ;?0;["h4; @ ; i]; @ ; i]; @ ; i]; @ ; i]; [ o;2 ;3i;["white-space;@;4;5; @ ;6o;D ;@;E;F;6" nowrap; i^; i^; [o;2 ;3i;[" overflow;@;4;5; @ ;6o;D ;@;E;F;6" hidden; i_; i_; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 14px;6i; i`; i`; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; ia; ia; [o;2 ;3i;[" margin;@;4;5; @ ;6o;@ ;@;A;C;6[ o;G ;H[;@;I["px;J"3px;6i; ibo;G ;H@;@;I[;J"0;6i; ibo;G ;H[;@;I["px;J"3px;6i; ibo;G ;H@;@;I[;J"0;6i; ib; ib; ib; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; ic; ic; [o;7 ;3i;@;T;8["span.metadata;9o;:;;[o;<;;[o;=;;[o;> ;?0;[" span; @ ; ido;S;[" metadata; @ ; id; @ ; id; @ ; id; @ ; id; [o;2 ;3i;[" cursor;@;4;5; @ ;6o;D ;@;E;F;6" pointer; ie; ie; [o;2 ;3i;[" display;@;4;5; @ ;6o;D ;@;E;F;6" +block; if; if; [o;2 ;3i;[" +width;@;4;5; @ ;6o;G ;H[;@;I["px;J" +200px;6i; ig; ig; [o;2 ;3i;["border-bottom;@;4;5; @ ;6o;@ ;@;A;C;6[o;G ;H[;@;I["px;J"2px;6i; iho;D ;@;E;F;6" +solid; iho;K ;@;L{ ;Mi;Ni;Oi;Pi;60; ih; ih; ih; [o;2 ;3i;["font-size;@;4;5; @ ;6o;G ;H[;@;I["px;J" 12px;6i; ii; ii; [o;2 ;3i;["line-height;@;4;5; @ ;6o;G ;H[;@;I["px;J" 15px;6i; ij; ij; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; ik; ik; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"0.9;6f0.90000000000000002; il; il; [o;7 ;3i;@;T;8["a.preview;9o;:;;[o;<;;[o;=;;[o;> ;?0;["a; @ ; imo;S;[" preview; @ ; im; @ ; im; @ ; im; @ ; im; [ +o;2 ;3i;[" position;@;4;5; @ ;6o;D ;@;E;F;6" absolute; in; in; [o;2 ;3i;[" bottom;@;4;5; @ ;6o;G ;H[;@;I["px;J"3px;6i; io; io; [o;2 ;3i;[" +right;@;4;5; @ ;6o;G ;H[;@;I["px;J"5px;6i +; ip; ip; [o;2 ;3i;[" +color;@;4;5; @ ;6o;K ;@;L{ ;Mi+;Ni;Oi;Pi;60; iq; iq; [o;2 ;3i;["text-decoration;@;4;5; @ ;6o;D ;@;E;F;6"underline; ir; ir; [o;7 ;3i;@;T;8[" &:hover;9o;:;;[o;<;;[o;=;;[o;X; @ ; iso;Y +;[" +hover;Z0; @ ;E;[; is; @ ; is; @ ; is; @ ; is; [o;2 ;3i;["background;@;4;5; @ ;6o;K ;@;L{ ;Mi;Ni;Oi;Pi;60; it; it; [o;2 ;3i;[" opacity;@;4;5; @ ;6o;G ;H@;@;I[;J"1;6f1; iu; iu; [ \ No newline at end of file diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sewergreats.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sewergreats.sassc new file mode 100644 index 0000000..3357d68 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sewergreats.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sexydj_main.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sexydj_main.sassc new file mode 100644 index 0000000..c8dcae6 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sexydj_main.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sexydj_player.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sexydj_player.sassc new file mode 100644 index 0000000..73f3239 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/sexydj_player.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/test.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/test.sassc new file mode 100644 index 0000000..1440dd7 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/test.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/tiny.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/tiny.sassc new file mode 100644 index 0000000..711c906 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/tiny.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/top.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/top.sassc new file mode 100644 index 0000000..7b69797 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/top.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest1.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest1.sassc new file mode 100644 index 0000000..f78709a Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest1.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest2.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest2.sassc new file mode 100644 index 0000000..4271e7a Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest2.sassc differ diff --git a/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest3.sassc b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest3.sassc new file mode 100644 index 0000000..d0c3dd9 Binary files /dev/null and b/frontend/static/sass/.sass-cache/644f2f2d5fca6dddf0ddfc92ac7e786fa6152755/vtest3.sassc differ diff --git a/frontend/static/sass/.sass-cache/8d1bbecbf03b462f4c6289df796a863187871fc8/_reset.scssc b/frontend/static/sass/.sass-cache/8d1bbecbf03b462f4c6289df796a863187871fc8/_reset.scssc new file mode 100644 index 0000000..4f281b6 Binary files /dev/null and b/frontend/static/sass/.sass-cache/8d1bbecbf03b462f4c6289df796a863187871fc8/_reset.scssc differ diff --git a/frontend/static/sass/.sass-cache/979cb0604153df91b26ad31e4a3968c997fc15e0/_utilities.scssc b/frontend/static/sass/.sass-cache/979cb0604153df91b26ad31e4a3968c997fc15e0/_utilities.scssc new file mode 100644 index 0000000..ba33dbc Binary files /dev/null and b/frontend/static/sass/.sass-cache/979cb0604153df91b26ad31e4a3968c997fc15e0/_utilities.scssc differ diff --git a/frontend/static/sass/.sass-cache/9ec6fa9d6c0b37ad8c4a639ff5b392374f95acc9/_utilities.scssc b/frontend/static/sass/.sass-cache/9ec6fa9d6c0b37ad8c4a639ff5b392374f95acc9/_utilities.scssc new file mode 100644 index 0000000..f4f01b9 Binary files /dev/null and b/frontend/static/sass/.sass-cache/9ec6fa9d6c0b37ad8c4a639ff5b392374f95acc9/_utilities.scssc differ diff --git a/frontend/static/sass/.sass-cache/aa657dc61a4d909775004a1ed5620272d7fbb16b/_reset.scssc b/frontend/static/sass/.sass-cache/aa657dc61a4d909775004a1ed5620272d7fbb16b/_reset.scssc new file mode 100644 index 0000000..c9970d4 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aa657dc61a4d909775004a1ed5620272d7fbb16b/_reset.scssc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/avatar.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/avatar.sassc new file mode 100644 index 0000000..9f8407f Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/avatar.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/calendar.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/calendar.sassc new file mode 100644 index 0000000..c085577 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/calendar.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/diornights.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/diornights.sassc new file mode 100644 index 0000000..0270bf2 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/diornights.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/embed.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/embed.sassc new file mode 100644 index 0000000..6afd6ac Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/embed.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/feederbleeder.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/feederbleeder.sassc new file mode 100644 index 0000000..6773b0a Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/feederbleeder.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/frederick.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/frederick.sassc new file mode 100644 index 0000000..d4aa292 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/frederick.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/gallery-white.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/gallery-white.sassc new file mode 100644 index 0000000..c8953b3 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/gallery-white.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/glitter.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/glitter.sassc new file mode 100644 index 0000000..125a8a5 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/glitter.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/ie.scssc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/ie.scssc new file mode 100644 index 0000000..cc5a38b Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/ie.scssc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/main.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/main.sassc new file mode 100644 index 0000000..bb6fc74 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/main.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/print.scssc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/print.scssc new file mode 100644 index 0000000..20cafa3 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/print.scssc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/profile.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/profile.sassc new file mode 100644 index 0000000..e9c2f25 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/profile.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/roomlist.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/roomlist.sassc new file mode 100644 index 0000000..040b28f Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/roomlist.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/screen.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/screen.sassc new file mode 100644 index 0000000..c7aa667 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/screen.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/screen.scssc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/screen.scssc new file mode 100644 index 0000000..f438403 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/screen.scssc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sewergreats.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sewergreats.sassc new file mode 100644 index 0000000..804a3e8 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sewergreats.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sexydj_main.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sexydj_main.sassc new file mode 100644 index 0000000..4101611 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sexydj_main.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sexydj_player.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sexydj_player.sassc new file mode 100644 index 0000000..e91b803 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/sexydj_player.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/test.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/test.sassc new file mode 100644 index 0000000..a72448f Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/test.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/tiny.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/tiny.sassc new file mode 100644 index 0000000..8adb51c Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/tiny.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/top.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/top.sassc new file mode 100644 index 0000000..a8989a9 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/top.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest.sassc new file mode 100644 index 0000000..f366092 Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest1.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest1.sassc new file mode 100644 index 0000000..fb08d9c Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest1.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest2.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest2.sassc new file mode 100644 index 0000000..8b0d65e Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest2.sassc differ diff --git a/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest3.sassc b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest3.sassc new file mode 100644 index 0000000..3ef990f Binary files /dev/null and b/frontend/static/sass/.sass-cache/aaa7be21d89e0c59dac401ea2fc1869bdfa76e53/vtest3.sassc differ diff --git a/frontend/static/sass/.sass-cache/dc3c2ad9455a8346a847e74b89758086fe56fd21/_utilities.scssc b/frontend/static/sass/.sass-cache/dc3c2ad9455a8346a847e74b89758086fe56fd21/_utilities.scssc new file mode 100644 index 0000000..841cfc5 Binary files /dev/null and b/frontend/static/sass/.sass-cache/dc3c2ad9455a8346a847e74b89758086fe56fd21/_utilities.scssc differ diff --git a/frontend/static/sass/.sass-cache/e708b27684b7743d4ded18d0ddc82a270ca22e62/_reset.scssc b/frontend/static/sass/.sass-cache/e708b27684b7743d4ded18d0ddc82a270ca22e62/_reset.scssc new file mode 100644 index 0000000..8704630 Binary files /dev/null and b/frontend/static/sass/.sass-cache/e708b27684b7743d4ded18d0ddc82a270ca22e62/_reset.scssc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/avatar.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/avatar.sassc new file mode 100644 index 0000000..ed51a72 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/avatar.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/calendar.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/calendar.sassc new file mode 100644 index 0000000..30d9763 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/calendar.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/diornights.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/diornights.sassc new file mode 100644 index 0000000..e206d30 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/diornights.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/disaro.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/disaro.sassc new file mode 100644 index 0000000..b1a4a56 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/disaro.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/embed.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/embed.sassc new file mode 100644 index 0000000..e43306a Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/embed.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/feederbleeder.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/feederbleeder.sassc new file mode 100644 index 0000000..ea64774 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/feederbleeder.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/frederick.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/frederick.sassc new file mode 100644 index 0000000..3c26800 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/frederick.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/gallery-white.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/gallery-white.sassc new file mode 100644 index 0000000..b8bd078 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/gallery-white.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/glitter.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/glitter.sassc new file mode 100644 index 0000000..63f4007 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/glitter.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/ie.scssc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/ie.scssc new file mode 100644 index 0000000..ef0d5ea Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/ie.scssc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/main.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/main.sassc new file mode 100644 index 0000000..b9a2aac Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/main.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/print.scssc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/print.scssc new file mode 100644 index 0000000..315187b Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/print.scssc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/profile.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/profile.sassc new file mode 100644 index 0000000..283640e Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/profile.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/roomlist.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/roomlist.sassc new file mode 100644 index 0000000..5db7588 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/roomlist.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/screen.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/screen.sassc new file mode 100644 index 0000000..102f29a Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/screen.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/screen.scssc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/screen.scssc new file mode 100644 index 0000000..6709109 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/screen.scssc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/sewergreats.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/sewergreats.sassc new file mode 100644 index 0000000..b9a2aac Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/sewergreats.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/test.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/test.sassc new file mode 100644 index 0000000..c76d494 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/test.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/tiny.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/tiny.sassc new file mode 100644 index 0000000..41c4f29 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/tiny.sassc differ diff --git a/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/top.sassc b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/top.sassc new file mode 100644 index 0000000..c625e12 Binary files /dev/null and b/frontend/static/sass/.sass-cache/f4fe17d0b25f3c47a894db7e72560c19b9e43ba3/top.sassc differ diff --git a/frontend/static/sass/config.rb b/frontend/static/sass/config.rb new file mode 100644 index 0000000..fa78bdd --- /dev/null +++ b/frontend/static/sass/config.rb @@ -0,0 +1,9 @@ +# Require any additional compass plugins here. +# Set this to the root of your project when deployed: +http_path = "/" +css_dir = "stylesheets" +sass_dir = "src" +images_dir = "images" +javascripts_dir = "javascripts" +# To enable relative paths to assets via compass helper functions. Uncomment: +# relative_assets = true diff --git a/frontend/static/sass/src/avatar.sass b/frontend/static/sass/src/avatar.sass new file mode 100644 index 0000000..790b4e8 --- /dev/null +++ b/frontend/static/sass/src/avatar.sass @@ -0,0 +1,56 @@ +table + float: left +.avatar-right + left: 250px +.message + vertical-align: top +.tri + vertical-align: top + height: 100% +.triangle-left + width: 0 + height: 0 + border-top: 10px solid transparent + border-bottom: 5px solid transparent + border-right: 25px solid #fff + position: relative + top: 10px + left: 5px + margin-left: -16px +.triangle-right + width: 0 + height: 0 + border-top: 10px solid transparent + border-bottom: 5px solid transparent + border-left: 25px solid #fff + position: relative + top: 10px + margin-left: -12px +.message .message-blurb + box-shadow: 2px 2px 10px #123 + max-width: 250px + font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif + background-color: #fff + border-top: 2px solid #f0f0f8 + border-left: 2px solid #ebeeef + border-right: 2px solid #ddd + border-bottom: 2px solid #ddd + -moz-border-radius: 20px + -webkit-border-radius: 20px + padding: 10px + color: #222 + word-wrap: break-word +#chat img + max-width: 250px + max-height: 250px +#chat .ytlink:hover + color: #f3c +#chat .ytlink + color: #c3d +#chat .ytlink.playing + color: #60b +div.frame + display: inline-block + padding: 2px + height: 300px + overflow: visible diff --git a/frontend/static/sass/src/calendar.sass b/frontend/static/sass/src/calendar.sass new file mode 100644 index 0000000..ffb19d0 --- /dev/null +++ b/frontend/static/sass/src/calendar.sass @@ -0,0 +1,87 @@ +body + background-color: #f8f8f8 + overflow: hidden +#calendar + position: absolute + * + font-size: 18px + z-index: 10 +#playlist ul#queue li.playing + span.score + color: #bbb +#playlist ul#queue li + span.score + color: #333 + span.title + color: #222 +#player + z-index: 6 +#playlistbg + z-index: 7 + background-color: #f8f8f8 +#water-cooler + position: fixed + bottom: -10px + left: -30px + height: 500px + z-index: 7 +#office-plant + position: fixed + bottom: 20px + left: 160px + z-index: 8 +#carpet + position: fixed + width: 100% + height: 70px + bottom: 0 + left: 0 + background-color: white + z-index: 6 +#bg + opacity: 0.1 + display: none +#likebutton + position: fixed + right: 20px + top: 30px + opacity: 0.7 +#calendar + z-index: 10 + box-shadow: #666 5px 5px 10px + display: none +#logo h1 + color: #b8d +#player #projector #video-title + bottom: 5px + left: 5px +.arrow-play + width: 0 + height: 0 + border-top: 4.5px solid transparent + border-left: 9.5px solid white + border-bottom: 4.5px solid transparent + display: inline-block +.arrow-pause + width: 0 + height: 0 + border-top: 5px solid white + border-right: 2.5px solid white + border-bottom: 4px solid white + border-left: 0 + display: inline-block +.arrow-prev + width: 0 + height: 0 + border-top: 4px solid transparent + border-right: 4px solid white + border-bottom: 4px solid transparent + display: inline-block +.arrow-next + width: 0 + height: 0 + border-top: 4px solid transparent + border-left: 4px solid white + border-bottom: 4px solid transparent + display: inline-block + diff --git a/frontend/static/sass/src/diornights.sass b/frontend/static/sass/src/diornights.sass new file mode 100644 index 0000000..e52d602 --- /dev/null +++ b/frontend/static/sass/src/diornights.sass @@ -0,0 +1,88 @@ +@import compass/reset +@mixin rounded($width) + -moz-border-radius: $width + -webkit-border-radius: $width + -o-border-radius: $width + border-radius: $width + +html + height: 100% + width: 100% +body + font-family: trebuchet ms, helvetica, arial, sans-serif + width: 100% + height: 100% + overflow-x: hidden + background: #fff + background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0.28, rgb(255,255,255)), color-stop(0.64, rgb(250,247,250))) + background-image: -moz-linear-gradient( center bottom, rgb(255,255,255) 28%, rgb(250,247,250) 64%) + background-attachment: fixed + font-size: 11px + font-family: "lucida grande",tahoma,verdana,arial,sans-serif + color: #333 +#bg + position: fixed + top: 0 + left: 0 + opacity: 1 + z-index: -3 + width: 100% + height: 100% +#bg img + width: 100% + height: 100% + -ms-interpolation-mode: nearest-neighbor + image-rendering: -moz-crisp-edges + image-rendering: -webkit-optimize-contrast +#container + position: absolute + top: 0 + left: 50% + width: 950px + min-height: 100% + margin-left: -475px + background: #fff + padding-bottom: 2000px + // border-right: 1px solid #eee + // border-left: 1px solid #eee +#header + width: 100% + #logo + height: 160px + #likebutton + position: absolute + top: 80px + right: 30px +#menu + width: 100% + border-top: 1px solid #eee + border-bottom: 1px solid #eee + ul + li + display: inline-block + width: (918px/6) + padding: 5px 0 5px 0px + text-align: center + a + color: #333 + text-decoration: none + display: block + &:hover + color: #33f +.box + width: 300px + margin: 10px 0 0 10px + img + width: 100% + opacity: 0.9 + &:hover + opacity: 1.0 + &#feed + ul + li + display: inline-block + height: 32px + vertical-align: middle + img + width: 32px + height: 32px diff --git a/frontend/static/sass/src/disaro.sass b/frontend/static/sass/src/disaro.sass new file mode 100644 index 0000000..d4641ce --- /dev/null +++ b/frontend/static/sass/src/disaro.sass @@ -0,0 +1,29 @@ +#chat + text-align: center + img + width: 500px + max-width: none + max-height: none + border: 10px solid black + margin: 10px auto 0 + margin-right: 100px + a.u + font-size: 14px + min-width: 100px + letter-spacing: -1px + text-align: right + padding-right: 20px + * + font-size: 14px + .chatline + width: 510px + background-color: black + padding: 5px + text-align: left + margin: 0 auto + opacity: 0.9 + margin-right: 100px + span + color: #666 + text-shadow: none + font-weight: normal diff --git a/frontend/static/sass/src/embed.sass b/frontend/static/sass/src/embed.sass new file mode 100644 index 0000000..abce351 --- /dev/null +++ b/frontend/static/sass/src/embed.sass @@ -0,0 +1,96 @@ +body + background: #000 + overflow: hidden +#logo,#form,#logobg,#sitez + opacity: 0 + z-index: -20 +#lastlogbox *, #lastlogbox h4 + font-size: 12px + padding: 1px +#lastlogbox + padding: 1px +#chat + font-size: 6px + line-height: 120% + overflow-y: hidden + a.u + min-width: 10px + img + max-height: 30px + max-width: 30px +#player + padding: 0 + margin: 0 +#player *,#playlist *,#queue * + font-size: 12px +#playlist ul#queue li + padding: 1px + &.playing + background-color: #657 +#playlist ul#queue li span.like + display: none +#playlist ul#queue li a.user + font-size: 10px +#playlist + overflow-y: hidden +#queue + overflow-y: scroll +nav + button + font-size: 12px + padding: 1px + overflow: hidden + position: relative + top: 3px + left: 3px + #video-link + position: relative + top: 2px + left: 3px + padding: 4px + font-size: 10px +#player nav#controls + span.instructions + font-size: 11px + color: #ddd + position: relative + top: 3px + left: 5px +#player nav#controls + z-index: 90 + overflow: visible +#player #projector #video-title + bottom: 10px + left: 2px +*,#chat + overflow: hidden +.arrow-play + width: 0 + height: 0 + border-top: 4.5px solid transparent + border-left: 9.5px solid white + border-bottom: 4.5px solid transparent + display: inline-block +.arrow-pause + width: 0 + height: 0 + border-top: 5px solid white + border-right: 2.5px solid white + border-bottom: 4px solid white + border-left: 0 + display: inline-block +.arrow-prev + width: 0 + height: 0 + border-top: 4px solid transparent + border-right: 4px solid white + border-bottom: 4px solid transparent + display: inline-block +.arrow-next + width: 0 + height: 0 + border-top: 4px solid transparent + border-left: 4px solid white + border-bottom: 4px solid transparent + display: inline-block + diff --git a/frontend/static/sass/src/feederbleeder.sass b/frontend/static/sass/src/feederbleeder.sass new file mode 100644 index 0000000..d4641ce --- /dev/null +++ b/frontend/static/sass/src/feederbleeder.sass @@ -0,0 +1,29 @@ +#chat + text-align: center + img + width: 500px + max-width: none + max-height: none + border: 10px solid black + margin: 10px auto 0 + margin-right: 100px + a.u + font-size: 14px + min-width: 100px + letter-spacing: -1px + text-align: right + padding-right: 20px + * + font-size: 14px + .chatline + width: 510px + background-color: black + padding: 5px + text-align: left + margin: 0 auto + opacity: 0.9 + margin-right: 100px + span + color: #666 + text-shadow: none + font-weight: normal diff --git a/frontend/static/sass/src/frederick.sass b/frontend/static/sass/src/frederick.sass new file mode 100644 index 0000000..4bc0857 --- /dev/null +++ b/frontend/static/sass/src/frederick.sass @@ -0,0 +1,4 @@ +#chat + span + color: #004b27 + text-shadow: 0 0 2px #fff diff --git a/frontend/static/sass/src/gallery-white.sass b/frontend/static/sass/src/gallery-white.sass new file mode 100644 index 0000000..f51853a --- /dev/null +++ b/frontend/static/sass/src/gallery-white.sass @@ -0,0 +1,220 @@ +body + background: #fff +#loading + background: transparent + color: #e6f0f0 + text-shadow: #e6f0f0 0 0 50px +#player + background: #fff + #projector + background-color: #000 + #video-title + color: #fff + #video-title.fullscreen + #projimg + nav#controls + #scan.blinkOn + background-color: #fff + color: #000 + #scan.blinkOff + background-color: #000 + color: #fff + #like + color: #fae + #like.liked + color: #88f +#playlistbg + background-color: #fff +#playlist + ul#queue + li + border-bottom: 1px solid #ddd + span.title + color: #333 + a.user + color: #d33682 + span.like + color: #657b83 + span.like.liked + color: #c357a3 + li.playing + background-color: #333 + span.title + color: #fff +#curtain + background: #080810 + opacity: 0.3 +#login + background: #fff + box-shadow: 0 5px 10px #000 + img + label + color: #000 + #button-shim + button + padding: 2px 5px + #login-username, #login-password + border: 2px solid #806 + a + color: #68f +#sitez + div + &:hover + background-color: #333 + &.opened + background-color: #333 +nav + button + background-color: #888 +#logobg + background-color: #000 + opacity: 0.7 +#logo + a + img + #scanjam + h1 + color: #8ff + h2 + color: #839496 + a + color: #268bd2 + img + #likebutton +#likereport + a + background-color: #222 + opacity: 0.95 +#form + background-color: #fff + #chat-message + border: 1px solid #333 + button + background-color: #ddd + color: #333 + &:hover + background-color: #c8cbd6 +#formbg + background-color: #fff + opacity: 0.7 +#chatbg + background-color: #fff + opacity: 0.1 +#chat + background: transparent + a + color: #4444ff + a.u + color: #ff0066 + opacity: 0.9 + a.pic + opacity: 1 + span + color: #333 + text-shadow: #000 0 0 0 + .ytlink + color: #8aaab3 + text-shadow: #000 0 0 0 + .ytlink:hover + color: #11182f + text-shadow: #000 0 0 0 + .ytlink.playing + color: #c2b + .ytlink.playing::before + img + #shim +#lastlogbg + background-color: #fff + opacity: 0.3 +#lastlogbox + opacity: 0.8 + h4 + color: #666 + ul + border-top: 1px solid #ddd +li.ll + a + color: #4a5a73 + border-bottom: 1px solid #ddd + text-shadow: #000 0 0 0 +#flower +#plant +button + background: #ddd + color: #333 +#settings-container, #rooms-container, #about-container + background-color: #222 + color: #657b83 + .close + color: #ded8c5 + background-color: #000b16 + &:hover + color: #fff + #rooms-loading + h5 + color: #93a1a1 + background-color: #333 + p + color: #b3c1c1 + background-color: #1b1b1f + label + color: #657b83 + span + color: #839496 + input + #room-topic, #room-bg, #room-bgreset + #room-settings-save + .shim + ul + li + border-top: 1px solid #000 + color: #83a1a1 + &:hover + color: #fdf6e3 + a li + color: #83a1a1 + a + color: #83a1a1 +#rooms-container +#about-container + +#chat + text-align: center + img + width: 520px + max-width: none + max-height: none + border: 0 + margin: 0 auto + a.u + font-size: 14px + min-width: 100px + letter-spacing: -1px + text-align: right + padding-right: 20px + a.pic + padding: 0 + margin: 0 + * + font-size: 14px + .chatimg + margin: 0 auto + padding: 0 + .chatline + width: 510px + background-color: #fff + padding: 2px 5px 2px 5px + line-height: 16px + text-align: left + margin: 0 auto + opacity: 0.9 + span + color: #666 + text-shadow: none + font-weight: normal +#logo + h2#topic + left: 5px + #likebutton + position: relative + left: 30px diff --git a/frontend/static/sass/src/glitter.sass b/frontend/static/sass/src/glitter.sass new file mode 100644 index 0000000..fd5e463 --- /dev/null +++ b/frontend/static/sass/src/glitter.sass @@ -0,0 +1,18 @@ +#chat *, #chat span, #chat span a + font-size: 30px + line-height: 38px + text-shadow: #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px, #000 0 0 5px + font-family: papyrus, comic sans, comic sans ms, sans-serif + letter-spacing: -1px + overflow: hidden +#heading img + position: relative + top: -35px + left: -18px + z-index: 47 +#likebutton + position: relative + top: -90px + left: -16px +#chat a.u + font-size: 24px diff --git a/frontend/static/sass/src/ie.scss b/frontend/static/sass/src/ie.scss new file mode 100644 index 0000000..5cd5b6c --- /dev/null +++ b/frontend/static/sass/src/ie.scss @@ -0,0 +1,5 @@ +/* Welcome to Compass. Use this file to write IE specific override styles. + * Import this file using the following HTML or equivalent: + * */ diff --git a/frontend/static/sass/src/main.sass b/frontend/static/sass/src/main.sass new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/sass/src/print.scss b/frontend/static/sass/src/print.scss new file mode 100644 index 0000000..b0e9e45 --- /dev/null +++ b/frontend/static/sass/src/print.scss @@ -0,0 +1,3 @@ +/* Welcome to Compass. Use this file to define print styles. + * Import this file using the following HTML or equivalent: + * */ diff --git a/frontend/static/sass/src/profile.sass b/frontend/static/sass/src/profile.sass new file mode 100644 index 0000000..0d88ea5 --- /dev/null +++ b/frontend/static/sass/src/profile.sass @@ -0,0 +1,514 @@ +@import compass/reset +@mixin rounded($width) + -moz-border-radius: $width + -webkit-border-radius: $width + -o-border-radius: $width + border-radius: $width + +body + background: #888 + // overflow-y: scroll + overflow-y: hidden + overflow-x: hidden + font-family: trebuchet ms, sans-serif +#logo + position: absolute + z-index: 20 + top: 15px + left: 20px + a + display: inline-block + img + padding-top: 5px + display: inline-block + h1 + position: relative + top: -10px + left: 10px + font-size: 34px + font-weight: normal + font-style: italic + font-family: georgia, garamond, serif + color: #f8b + display: inline-block + h2 + position: relative + display: inline-block + font-size: 12px + color: #fff + max-width: 250px + left: 10px + top: -6px + padding-right: 20px +#logobg + position: absolute + top: 10px + left: 0 + width: 100% + height: 64px + background-color: #000 + opacity: 0.8 + z-index: 19 +#likebutton + display: inline-block + display: none + z-index: -1 + min-width: 90px + a + color: #33f +#flower + position: absolute + top: 0 + right: 10% + z-index: 20 + pointer-events: none + display: none +#contact + position: absolute + left: 0 + display: none + #avatar, .avatar + display: none + width: 100% + // max-height: 300px + .avatar + display: block + #bio + p + color: #ddd + background-color: #000 + padding: 10px 5px + text-align: center + opacity: 0.7 + a + color: #ebf + display: block + img + width: 100% + // max-height: 300px +#sitez + position: absolute + top: 30px + right: 20px + text-align: right + z-index: 20 + div + color: #ddd + cursor: pointer + display: inline-block + padding: 4px 8px 4px 8px + float: left + a + color: #bbc + div#settings-hook + &:hover + @include rounded(10px 10px 3px 3px) + background-color: #333 + color: #fff + &.opened + @include rounded(10px 10px 3px 3px) + background-color: #333 + color: #fff + display: none + z-index: 82 +#fullscreen-warning + position: fixed + top: 50% + left: 50% + width: 600px + margin-left: -300px + margin-top: -20px + text-align: center + font-size: 24px + padding: 10px + background-color: rgba(0,0,0,0.5) + color: white + z-index: 100 + display: none +#settings-container + position: fixed + top: 53px + @include rounded (10px) + right: 20px + z-index: 80 + width: 500px + background-color: #222 + color: #657b83 + display: none + box-shadow: 0 5px 10px #000 + .close + margin: 10px 10px 0 0 + float: right + color: #ded8c5 + width: 20px + height: 14px + font-size: 14px + padding: 3px 0 + text-align: center + vertical-align: middle + @include rounded(10px) + background-color: #000b16 + &:hover + color: #fff + cursor: pointer + #rooms-loading + margin: 10px + h5 + font-size: 16px + color: #93a1a1 + display: block + padding: 10px + background-color: #333 + @include rounded(10px 10px 0 0) + p + padding: 10px 10px 10px 10px + font-size: 14px + line-height: 18px + color: #b3c1c1 + background-color: #1b1b1f + label + margin: 2px 0 0 10px + font-size: 14px + color: #657b83 + width: 150px + text-align: right + padding-right: 5px + display: inline-block + span + margin: 2px 10px 0 0 + color: #839496 + font-size: 14px + input + margin: 2px 10px 0 0 + width: 100px + #profile-avatar, #profile-bg + width: 300px + #profile-settings-save + font-size: 14px + textarea + width: 300px + height: 150px + .shim + width: 1px + height: 10px + ul + text-decoration: none + cursor: pointer + li + list-style-type: none + padding: 10px + cursor: pointer + border-top: 1px solid #000 + background-color: transparent + text-decoration: none + font-size: 14px + color: #83a1a1 + &:hover + color: #fdf6e3 + a li + color: #83a1a1 + text-decoration: none + a + color: #83a1a1 + text-decoration: none +#msg + z-index: 100 + position: fixed + top: 10px + right: 10px + padding: 5px + width: 250px + max-height: 80% + font-size: 12px + background-color: #eeeeee + overflow-y: scroll + overflow-x: hidden + color: #333 + strong + color: #859900 + em + color: #dc322f + b + color: #002b36 +#player + padding: 10px + position: absolute + background: #000 + #projector + display: block + position: fixed + background-color: #000 + #screen + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 19 + #soundcloud, #audio + position: absolute + top: 0 + right: 0 + background-color: #000 + z-index: 21 + #soundcloud-dl, #audio-dl + position: absolute + top: 81px + right: 0 + width: 81px + padding: 5px 0 5px 0 + font-size: 13px + text-align: center + background-color: #000 + * + color: #839496 + z-index: 20 + #soundcloud-img, #audio-img + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 20 + img + max-width: 100% + min-height: 100% + max-height: 100% + #ytscreen + z-index: 19 + position: absolute + top: 0 + left: 0 + #video-title + position: absolute + bottom: 0 + left: 10px + color: #fff + z-index: 20 + &.fullscreen + position: fixed + bottom: 90px + left: auto + right: 30px + font-size: 24px + #projimg + width: 100% + height: 100% + nav#controls + z-index: 40 + position: absolute + display: none + #video-link + color: #839496 + #scan.blinkOn + background-color: #fff + color: #000 + #scan.blinkOff + background-color: #000 + color: #fff + #like + color: #e4b + #like.liked + color: #44f +#playlistbg + position: absolute + background-color: #000 + opacity: 0.5 +#playlist + position: absolute + z-index: 90 + width: 100% + ul#queue + width: 100% + border-top: 1px solid #888 + border-left: 1px solid #888 + border-bottom: 1px solid #888 + -webkit-padding-start: 0 + -webkit-margin-before: 0 + overflow-y: scroll + overflow-x: hidden + z-index: 90 + li + padding: 5px + display: block + cursor: pointer + border-bottom: 1px solid #333 + span.title + color: #ddd + display: block + padding: 5px + font-size: 15px + z-index: 1 + &:hover + color: #fff + a.user + float: right + font-size: 14px + padding: 0 5px + color: #d33682 + padding: 5px + z-index: 2 + text-decoration: none + span.like + float: right + font-size: 14px + color: #657b83 + padding: 5px + z-index: 3 + span.like.liked + color: #c357a3 + span.score + float: right + font-size: 14px + color: #bbb + padding: 5px 10px 5px 5px + li.playing + background-color: #222 + span.title + color: #fff + li#queueLess + color: #fff + text-align: center + &:hover + background-color: #666 + color: #fff + border: 0 + border-bottom: 1px solid #333 + font-size: 18px + padding: 10px 0 + cursor: pointer + li#queueMore + color: #fff + text-align: center + &:hover + background-color: #666 + color: #fff + border: 0 + font-size: 33px + padding: 20px 20px 20px 20px + cursor: pointer + li#queueDone + color: #ddd + text-align: center + border: 0 + font-size: 33px + padding: 80px 20px 200px 20px + li#queueLoading + text-align: center + color: #fff + font-size: 24px + padding: 80px + ol + -webkit-padding-start: 0 + -webkit-margin-before: 0 + -webkit-margin-after: 0 + display: block + position: relative + top: 1px + li + padding: 5px 8px 8px 8px + margin: 0 0 0 10px + list-style-type: none + border-top: 1px solid #000 + border-right: 1px solid #000 + border-left: 1px solid #000 + border-bottom: 1px solid #888 + display: inline-block + background-color: #333 + color: #bbb + cursor: pointer + opacity: 0.7 + z-index: 89 + li.mode + position: relative + padding: 8px 8px 8px 8px + border-color: #888 + border-bottom: 1px solid #111 + background-color: #111 + color: #fff + z-index: 91 +nav + z-index: 10 + margin: 0 auto + button, #video-link + background-color: #333 + color: #ddd + &:hover + background-color: #666 + color: #fff + border: 0 + font-size: 14px + min-width: 40px + min-height: 20px + padding: 5px 5px + position: relative + top: -1px + #video-link + padding: 6px 5px 5px 5px +#msg + display: none +#gif-container + position: absolute + left: 0 + width: 100% + padding-left: 10% + display: block + padding-bottom: 200px + #gifs + clear: both + display: block + text-align: center + top: 0 + max-width: 80% + margin: 0 0 200px 0 + box-shadow: 0 5px 10px #000 + background-color: #fff + div + padding: 10px + display: inline-block + img + max-width: 350px + max-height: 400px +#bg + position: fixed + top: 0 + left: 0 + opacity: 1 + z-index: -3 + width: 100% + height: 100% + display: none + img + width: 100% + height: 100% + +.arrow-play + width: 0 + height: 0 + border-top: 4.5px solid transparent + border-left: 9.5px solid white + border-bottom: 4.5px solid transparent + display: inline-block +.arrow-pause + width: 0 + height: 0 + border-top: 5px solid white + border-right: 2.5px solid white + border-bottom: 4px solid white + border-left: 0 + display: inline-block +.arrow-prev + width: 0 + height: 0 + border-top: 4px solid transparent + border-right: 4px solid white + border-bottom: 4px solid transparent + display: inline-block +.arrow-next + width: 0 + height: 0 + border-top: 4px solid transparent + border-left: 4px solid white + border-bottom: 4px solid transparent + display: inline-block + diff --git a/frontend/static/sass/src/roomlist.sass b/frontend/static/sass/src/roomlist.sass new file mode 100644 index 0000000..9bff4cc --- /dev/null +++ b/frontend/static/sass/src/roomlist.sass @@ -0,0 +1,131 @@ +.roomdiv + width: 200px + height: 100px + display: block + float: left + text-align: center + vertical-align: bottom + position: relative + font-size: 30px + color: #fff + padding-top: 160px + background-color: #000 + cursor: pointer + * + cursor: pointer + .count + font-size: 160px + color: #fff + position: absolute + left: 0 + top: 10px + width: 100% + text-align: center + vertical-align: middle + z-index: 3 + opacity: 0.9 + .roomname + position: absolute + left: 0 + top: 180px + width: 100% + text-align: center + vertical-align: middle + opacity: 0.9 + z-index: 4 + .roombg + position: absolute + background-position: center center + left: 0 + top: 0 + width: 100% + height: 100% + opacity: 0.8 + z-index: 1 + cursor: pointer + &:hover + .roomname + opacity: 1 + .count + opacity: 1 + .roombg + opacity: 0.9 +#roomlist + padding-top: 90px +#roomlist a + text-decoration: none + cursor: pointer +body + overflow-y: scroll + background: #000 +#logo + //top: 22px + top: 5px + left: 10px + h1#header + font-size: 30px + color: #4df + // top: -8px + top: 8px + max-width: 500px + h2.preamblish + display: inline-block + position: relative + top: -15px + left: 10px + font-size: 12px + color: #fff + max-width: 250px + padding-right: 20px + +#curtain + background: #080810 + opacity: 0.3 + width: 100% + height: 100% + position: fixed + top: 0 + left: 0 + z-index: 10 + display: none +#login + background: #000 + display: block + width: 50% + top: 20% + left: 50% + margin-left: -25% + padding: 30px + padding-bottom: 60px + z-index: 20 + position: fixed + text-align: center + box-shadow: 0 5px 10px #000 + img + margin-bottom: 20px + label + min-width: 20% + display: inline-block + text-align: right + padding-right: 10px + font-size: 18px + color: #fff + #button-shim + width: 30% + display: inline-block + text-align: left + padding: 10px 10px 10px 0 + margin-right: 20px + button + padding: 2px 5px + #login-username, #login-password + width: 30% + margin-right: 10px + font-size: 24px + border: 2px solid #806 + padding: 10px + a + color: #68f + text-decoration: underline + button + font-size: 24px diff --git a/frontend/static/sass/src/screen.sass b/frontend/static/sass/src/screen.sass new file mode 100644 index 0000000..f8b4429 --- /dev/null +++ b/frontend/static/sass/src/screen.sass @@ -0,0 +1,891 @@ +@import compass/reset +@mixin rounded($width) + -moz-border-radius: $width + -webkit-border-radius: $width + -o-border-radius: $width + border-radius: $width +body + font-family: trebuchet ms, helvetica, arial, sans-serif + width: 100% + height: 100% + overflow: hidden + background: #000 +#bg + position: fixed + top: 0 + left: 0 + opacity: 1 + z-index: -3 + width: 100% + height: 100% +#bg img + width: 100% + height: 100% + -ms-interpolation-mode: nearest-neighbor + image-rendering: -moz-crisp-edges + image-rendering: -webkit-optimize-contrast +#loading + z-index: 20 + background: transparent + color: #06033c + text-shadow: #060363 0 0 50px + display: block + position: fixed + width: 100% + padding: 20px + top: 30% + left: 10% + font-size: 170px + font-weight: bold + text-align: left + white-space: no-wrap + letter-spacing: -3px + pointer-events: none + +#msg + z-index: 100 + position: fixed + top: 10px + right: 10px + padding: 5px + width: 350px + max-height: 80% + font-size: 12px + background-color: #eeeeee + overflow-y: scroll + overflow-x: hidden + color: #333 + strong + color: #859900 + em + color: #dc322f + b + color: #002b36 +#player + padding: 10px + position: absolute + background: #000 + #projector + display: block + position: absolute + background-color: #000 + #screen + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 19 + #soundcloud, #audio + position: absolute + top: 0 + right: 0 + background-color: #000 + z-index: 21 + #soundcloud-dl, #audio-dl + position: absolute + top: 81px + right: 0 + width: 81px + padding: 5px 0 5px 0 + font-size: 13px + text-align: center + background-color: #000 + * + color: #839496 + z-index: 20 + #soundcloud-img, #audio-img + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 20 + img + max-width: 100% + min-height: 100% + max-height: 100% + #ytscreen + z-index: 19 + position: absolute + top: 0 + left: 0 + #video-title + position: absolute + bottom: 0 + left: 0 + color: #fff + z-index: 20 + #video-title.fullscreen + position: fixed + bottom: 90px + left: auto + right: 30px + font-size: 24px + #projimg + width: 100% + height: 100% + nav#controls + z-index: 40 + position: absolute + #video-link + color: #839496 + #scan.blinkOn + background-color: #fff + color: #000 + #scan.blinkOff + background-color: #000 + color: #fff + #like + color: #e4b + #like.liked + color: #44f + #mute.muted + background-color: #fff + color: #000 +#playlistbg + position: absolute + background-color: #000 + opacity: 0.3 +#playlist + position: absolute + z-index: 90 + width: 100% + overflow-y: auto + overflow-x: hidden + ul#queue + // overflow-y: none + // &:hover + // overflow-y: auto + width: 100% + li + padding: 5px + display: block + cursor: pointer + border-bottom: 1px solid #333 + span.title + color: #ddd + display: block + padding: 5px + z-index: 1 + &:hover + color: #d8f + cursor: pointer + a.user + float: right + font-size: 14px + padding: 0 5px + color: #d33682 + padding: 5px + z-index: 2 + text-decoration: none + span.like + float: right + font-size: 14px + color: #657b83 + padding: 5px + z-index: 3 + span.like.liked + color: #c357a3 + li.playing + background-color: #222 + span.title + color: #fff +#room, user + padding: 10px + label + color: #657b83 + width: 100px + text-align: right + padding-right: 5px + display: inline-block + span + color: #073642 + + +#curtain + background: #080810 + opacity: 0.3 + width: 100% + height: 100% + position: fixed + top: 0 + left: 0 + z-index: 10 + display: none +#login + background: #000 + display: block + width: 50% + top: 20% + left: 50% + margin-left: -25% + padding: 30px + padding-bottom: 60px + z-index: 20 + position: fixed + text-align: center + box-shadow: 0 5px 10px #000 + img + margin-bottom: 20px + label + min-width: 20% + display: inline-block + text-align: right + padding-right: 10px + font-size: 18px + color: #fff + #button-shim + width: 30% + display: inline-block + text-align: left + padding: 10px 10px 10px 0 + margin-right: 20px + button + padding: 2px 5px + #login-username, #login-password + width: 30% + margin-right: 10px + font-size: 24px + border: 2px solid #806 + padding: 10px + a + color: #68f + text-decoration: underline +#sitez + position: fixed + top: 24px + right: 30px + color: #888 + z-index: 82 + color: #aaa + a, #logout + cursor: pointer + color: #aaa + text-decoration: underline + select option + color: #666 + text-decoration: none + padding-right: 3px + button + font-size: 24px + background: #030303 + color: #fff + padding: 2px + a#faqlink + color: #8ff + div + cursor: pointer + display: inline-block + padding: 8px 8px 5px 8px + &:hover + @include rounded(10px 10px 3px 3px) + background-color: #333 + &.opened + @include rounded(10px 10px 3px 3px) + background-color: #333 +nav + z-index: 10 + margin: 0 auto + button, #video-link + background-color: #333 + color: #ddd + &:hover + background-color: #666 + color: #fff + border: 0 + font-size: 14px + min-width: 40px + min-height: 20px + padding: 5px 5px + position: relative + top: -1px + #video-link + top: -2px + padding-bottom: 6px +#lunacy + z-index: 40 + background: #ddd + color: #000 + display: block + width: 700px + position: fixed + top: 20% + left: 50% + margin-left: -390px + opacity: 0.7 + padding: 40px + text-align: center + font-size: 48px +#plea + z-index: 30 + background: #ddd + color: #000 + display: block + width: 400px + position: fixed + top: 20% + left: 50% + margin-left: -240px + opacity: 0.7 + padding: 40px + text-align: center + font-size: 48px + +#logobg + position: fixed + top: 10px + left: 0 + width: 100% + height: 64px + background-color: #000 + opacity: 0.8 + z-index: 45 +#logo + position: fixed + top: 10px + z-index: 46 + left: 10px + a + float: left + display: inline-block + img + display: inline-block + #scanjam + padding: 10px 15px 10px 0 + #preamble + display: inline-block + font-size: 12px + color: #fff + max-width: 80px + padding-left: 15px + h1 + padding: 15px 15px 0 10px + font-size: 34px + color: #fff + font-weight: normal + font-style: italic + font-family: georgia, garamond, serif + color: #8ff + display: inline-block + h2 + display: inline-block + font-size: 16px + color: #fff + position: relative + left: 20px + top: -5px + color: #839496 + a + display: inline + float: none + color: #268bd2 + img + max-height: 20px + max-width: 20px + display: inline-block + h2.preamblish + font-size: 12px + color: #fff + max-width: 250px + left: 0 + top: 9px + padding-right: 20px + h2.radio + a + color: #def + font-size: 12px + top: -8px + left: 30px + #likebutton + display: inline-block + display: none + position: relative + top: -5px + width: 90px + height: 21px + z-index: -1 +#glasspopcornlogo + position: absolute + top: 80px + left: 15px + pointer-events: none + opacity: 0.5 + z-index: 8 + img + z-index: 8 + pointer-events: none +#likereport + position: fixed + width: 100px + padding: 20px + z-index: 100 + overflow-y: hidden + a + background-color: #222 + display: block + text-decoration: none + padding: 5px + opacity: 0.95 + +#form + position: fixed + bottom: 10px + left: 10px + padding: 10px 10px 10px 10px + background-color: #000 + white-space: nowrap + z-index: 31 + #chat-message + border: 0 + outline: 0 + font-size: 18px + padding: 5px + margin-right: 5px + background-color: #f8f8f8 + &:hover + background-color: #ffffff + button + margin: 0 + outline: 0 + border: 0 + background-color: #333 + color: #ddd + &:hover + background-color: #666 + color: #fff + // @include rounded(2px) + padding: 4px 6px + position: relative + top: 1px + font-size: 20px + #videochat-badge + cursor: auto + pointer-events: none + @include rounded(8px) + font-size: 10px + background-color: #f00 + color: #fff + position: absolute + width: 10px + height: 10px + text-align: center + padding: 2px 2px + display: none + z-index: 32 +#formbg + background-color: #000 + opacity: 0.7 + +#chatbg + position: fixed + bottom: 100px + left: 20px + padding: 10px + width: 600px + background-color: #000 + padding: 0 10px 5px 10px + opacity: 0.25 + z-index: 9 + +#chat + padding: 0 10px 5px 10px + position: fixed + font-size: 18px + line-height: 26px + vertical-align: bottom + overflow-y: hidden + overflow-x: hidden + background: transparent + z-index: 30 + a + font-weight: normal + font-size: 11px + opacity: 0.8 + color: #44bbff + text-decoration: underline + a.u + font-weight: bold + padding-right: 10px + display: inline-block + color: #ff0066 + opacity: 1 + text-decoration: none + min-width: 80px + overflow-x: hidden + font-size: 16px + line-height: 26px + vertical-align: bottom + a.pic + opacity: 1 + span + color: #f0fff0 + text-shadow: #000 0 0 2px + font-weight: bold + .ytlink + font-size: 11px + color: #88dddd + cursor: pointer + text-decoration: underline + text-shadow: none + text-shadow: #000 0 0 1px + font-weight: normal + opacity: 1 + .ytlink:hover + color: #dd66ff + text-decoration: underline + text-shadow: #000 0 0 1px + .ytlink.playing + color: #daf + font-size: 12px + font-weight: normal + text-decoration: none + .ytlink.playing::before + text-decoration: none + content: "\25b6 " + font-weight: normal + img + max-width: 350px + max-height: 400px + border: 0 + #shim + width: 10px + height: 500px +#chat.fullscreen + overflow-y: hidden + &:hover + overflow-y: hidden +#webcam-container + z-index: 100 + position: fixed + right: 500px + bottom: 100px + background-color: #000 + padding: 10px + display: none +#lastlogbg + position: fixed + background-color: #000 + opacity: 0.5 + padding: 10px + z-index: 31 +#lastlogbox + position: fixed + font-size: 14px + padding: 10px + z-index: 32 + h4 + font-size: 12px + font-weight: bold + color: #eee + padding-bottom: 5px + ul + border-top: 1px solid #000 +li.ll + list-style-type: none + a + color: #d0e0fe + padding: 5px 0 + border-bottom: 1px solid #000 + display: block + text-shadow: #000 0 0 2px + text-decoration: underline + font-size: 16px + font-weight: bold + +#flower + position: absolute + top: 0 + right: 10% + z-index: 50 + pointer-events: none + display: none +#plant + position: absolute + bottom: 0 + right: 50% + z-index: 50 + pointer-events: none + display: none +#msg + display: none +button + font-size: 24px + background: #030303 + color: #fff + padding: 2px +#settings-container, #rooms-container, #about-container, #videochat-container + position: fixed + top: 59px + @include rounded (10px) + right: 20px + z-index: 80 + width: 500px + background-color: #222 + color: #657b83 + display: none + box-shadow: 0 5px 10px #000 + .close + margin: 10px 10px 0 0 + float: right + color: #ded8c5 + width: 20px + height: 14px + font-size: 14px + padding: 3px 0 + text-align: center + vertical-align: middle + @include rounded(10px) + background-color: #000b16 + &:hover + color: #fff + cursor: pointer + #rooms-loading + margin: 10px + h5 + font-size: 16px + color: #93a1a1 + display: block + padding: 10px + background-color: #333 + @include rounded(10px 10px 0 0) + p + padding: 10px 10px 10px 10px + font-size: 14px + line-height: 18px + color: #b3c1c1 + background-color: #1b1b1f + label + margin: 2px 0 0 10px + font-size: 14px + color: #657b83 + width: 150px + text-align: right + padding-right: 5px + display: inline-block + span + margin: 2px 10px 0 0 + color: #839496 + font-size: 14px + span#room-mod-tag a + float: right + padding: 0 10px 10px 0 + display: block + color: #dc322f + span#gallery-link a + color: #268bd2 + padding: 0 10px 10px 0 + display: block + float: right + button + position: relative + left: 3px + input + margin: 2px 10px 0 0 + width: 100px + #room-topic, #room-bg, #room-bgreset + width: 300px + #room-settings-save + font-size: 14px + .shim + width: 1px + height: 10px + ul + text-decoration: none + cursor: pointer + li + list-style-type: none + padding: 10px + cursor: pointer + border-top: 1px solid #000 + background-color: transparent + text-decoration: none + font-size: 14px + color: #83a1a1 + &:hover + color: #fdf6e3 + a li + color: #83a1a1 + text-decoration: none + a + color: #83a1a1 + text-decoration: none +#rooms-container + right: 20px + z-index: 80 + width: 300px + max-height: 300px +#about-container + right: 20px + z-index: 80 + width: 300px +#videochat-container + right: 20px + z-index: 80 + width: 300px + display: none + cursor: pointer + #videochat-disable + display: none +#tokbox-embed + position: absolute + bottom: 10px + left: 10px + height: 150px + z-index: 80 + display: none + overflow-y: auto + #tokbox-publisher, #tokbox-subscribers + float: left + object + float: left + #tokbox-settings + position: absolute + top: 0 + right: 10px + padding: 5px + font-size: 12px + color: #bbb + background-color: black + text-align: right + button + padding: 2px + font-size: 12px + background-color: #333 + color: #888 + min-width: 30px + &.on + background-color: #d33 + color: #fff +.roomhello + width: 400px + color: #fff + padding: 10px + font-size: 18px + background-color: #000 + cursor: pointer + position: fixed + top: 85px + left: 15px + opacity: 0.9 +.modhello + width: 400px + color: #fff + padding: 5px + background-color: #000 + cursor: pointer + margin-top: 10px +.glitter + pointer-events: none + position: absolute + z-index: 23 + +.arrow-play + width: 0 + height: 0 + border-top: 4.5px solid transparent + border-left: 9.5px solid white + border-bottom: 4.5px solid transparent + display: inline-block +.arrow-pause + width: 0 + height: 0 + border-top: 5px solid white + border-right: 2.5px solid white + border-bottom: 4px solid white + border-left: 0 + display: inline-block +.arrow-prev + width: 0 + height: 0 + border-top: 4px solid transparent + border-right: 4px solid white + border-bottom: 4px solid transparent + display: inline-block +.arrow-next + width: 0 + height: 0 + border-top: 4px solid transparent + border-left: 4px solid white + border-bottom: 4px solid transparent + display: inline-block + +#search-terms + font-size: 14px + padding: 2px 2px + width: 200px + position: relative + top: -4px + left: -10px + background-image: url('/img/magnify.png') + background-position: right center + background-repeat: no-repeat + border: 0 + outline: 0 + background-color: #ddd + &:hover + background-color: #fff + &:focus + background-color: #fff +#search-results-container + position: fixed + top: 53px + right: 21px + z-index: 100 + width: 334px + border: 2px solid black + background: #333 + display: none + #search-loading + margin: 10px + #search-instructions + font-size: 11px + color: white + padding: 3px 3px 3px 38px + background-color: #000 + width: 100% + #search-results + height: 300px + width: 100% + overflow-x: hidden + overflow-y: scroll + li + clear: both + height: 54px + overflow: hidden + position: relative + // padding-right: 5px + div.thumb + width: 32px + height: 54px + float: left + background-position: center center + margin: 0 5px 0 0 + border-right: 2px solid black + cursor: pointer + h4 + white-space: nowrap + overflow: hidden + font-size: 14px + color: #fff + margin: 3px 0 3px 0 + cursor: pointer + span.metadata + cursor: pointer + display: block + width: 200px + border-bottom: 2px solid black + font-size: 12px + line-height: 15px + color: #bbb + opacity: 0.9 + a.preview + position: absolute + bottom: 3px + right: 5px + color: #268bd2 + text-decoration: underline + &:hover + background: black + opacity: 1.0 + diff --git a/frontend/static/sass/src/screen.scss b/frontend/static/sass/src/screen.scss new file mode 100644 index 0000000..81de847 --- /dev/null +++ b/frontend/static/sass/src/screen.scss @@ -0,0 +1,6 @@ +/* Welcome to Compass. + * In this file you should write your main styles. (or centralize your imports) + * Import this file using the following HTML or equivalent: + * */ + +@import "compass/reset"; diff --git a/frontend/static/sass/src/sewergreats.sass b/frontend/static/sass/src/sewergreats.sass new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/sass/src/test.sass b/frontend/static/sass/src/test.sass new file mode 100644 index 0000000..15e46c4 --- /dev/null +++ b/frontend/static/sass/src/test.sass @@ -0,0 +1,285 @@ +@import compass/reset +@mixin rounded($width) + -moz-border-radius: $width + -webkit-border-radius: $width + -o-border-radius: $width + border-radius: $width + +body + font-family: trebuchet ms +#msg + position: fixed + top: 10px + right: 10px + padding: 5px + width: 250px + max-height: 80% + font-size: 12px + background-color: #eeeeee + overflow-y: scroll + overflow-x: hidden + color: #333 + z-index: 100 + strong + color: #859900 + em + color: #dc322f + b + color: #002b36 +#player + #projector + display: block + position: absolute + background-color: #000 + width: 320px + height: 240px + #screen + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 20 + #soundcloud + position: absolute + top: 0 + right: 0 + z-index: 21 + #soundcloud-dl + position: absolute + top: 81px + right: 10px + padding: 5px + background-color: #000 + * + color: #839496 + z-index: 20 + #soundcloud-img + position: absolute + top: 0 + left: 0 + width: 100% + height: 100% + z-index: 20 + img + max-width: 100% + max-height: 100% + #ytscreen + z-index: 19 + position: absolute + top: 0 + left: 0 + #video-title + position: absolute + bottom: 0 + left: 0 + color: #988 + z-index: 20 + #projimg + width: 100% + height: 100% + nav + position: absolute + top: 260px + button + color: #000 + #scan.blinkOn + background-color: #fff + color: #000 + #scan.blinkOff + background-color: #000 + color: #fff + #like + color: #e4b + #like.liked + color: #44f + #playlist + position: absolute + left: 330px + z-index: 20 + width: 300px + ul#queue + width: 100% + li + display: block + cursor: pointer + border-bottom: 1px solid #ddd + span.title + display: block + padding: 5px + z-index: 1 + a.user + float: right + padding: 0 5px + color: #d33682 + padding: 5px + z-index: 2 + span.like + float: right + color: #657b83 + padding: 5px + z-index: 3 + span.like.liked + color: #a35783 + li.playing + background-color: #073642 + color: #fff +#room, #user + padding: 10px + label + color: #657b83 + width: 200px + text-align: right + padding-right: 5px + display: inline-block + span + color: #93a1a1 +a + color: #268bd2 + &:visited + color: #6c71c4 +body + font-size: 16px +#bg + position: fixed + top: 0 + left: 0 + z-index: -1 + opacity: 0.3 +#pnp + position: fixed + right: 20px + bottom: 20px + width: 400px + height: 285px + background: #fff +#stats + position: fixed + right: 20px + top: 20px + width: 390px + font-size: 14px + background-color: #fff + padding: 5px + display: none + overflow-y: scroll +#videos + width: 800px + padding-right: 5px + li + width: 100% + list-style-type: none + display: block + margin-top: 3px + a,span + display: inline-block + margin-left: 5px + .date + opacity: 0.8 + width: 60px + text-align: right + font-size: 14px + .time + opacity: 0.8 + width: 40px + text-align: right + font-size: 14px + .user + font-size: 14px + width: 100px + overflow: hidden + .type + width: 20px + text-align: center + font-variant: small-caps + .title + // color: #93a1a1 + text-decoration: none + width: 300px + overflow: hidden + white-space: nowrap + .remove + color: #dc322f + width: 200px + cursor: pointer + text-decoration: underline + text-transform: uppercase + opacity: 0.5 + li:hover + .remove + opacity: 1 + .title + text-decoration: underline +a#return-link + position: absolute + top: 10px + left: 10px + font-size: 14px +h1 + color: #bbb + font-size: 48px + text-align: center + width: 80% + padding-bottom: 10px +h2 + color: #bbb + font-size: 24px + padding-left: 20px + text-transform: uppercase + #room-name + color: #fff +#search-terms + font-size: 14px + padding: 2px 2px + width: 200px + background-image: url('/img/magnify.png') + background-position: right center + background-repeat: no-repeat + border: 0 + outline: 0 + background-color: #ddd + &:hover + background-color: #fff + &:focus + background-color: #fff +#search-results-container + width: 350px + border: 2px solid black + background: #333 + display: none + #search-loading + margin: 10px + #search-results + height: 400px + width: 100% + overflow-x: hidden + overflow-y: scroll + li + clear: both + height: 54px + overflow: hidden + // padding-right: 5px + div.thumb + width: 80px + height: 54px + float: left + background-position: center center + margin: 0 5px 0 0 + border-right: 2px solid black + h4 + white-space: nowrap + overflow: hidden + font-size: 14px + color: #fff + margin: 3px 0 3px 0 + border-bottom: 2px solid black + font-size: 12px + line-height: 15px + color: #bbb + opacity: 0.9 + cursor: pointer + &:hover + background: black + cursor: pointer + opacity: 1.0 + diff --git a/frontend/static/sass/src/tiny.sass b/frontend/static/sass/src/tiny.sass new file mode 100644 index 0000000..3be302d --- /dev/null +++ b/frontend/static/sass/src/tiny.sass @@ -0,0 +1,36 @@ +#logo,#form,#logobg,#sitez + opacity: 0 + z-index: -20 +#lastlogbox *, #lastlogbox h4 + font-size: 5px + padding: 1px +#lastlogbox + padding: 1px +#chat + font-size: 6px + line-height: 120% + overflow-y: hidden + a.u + min-width: 10px + img + max-height: 30px + max-width: 30px +#player *,#playlist *,#queue * + font-size: 5px +#playlist ul#queue li + padding: 1px +#playlist ul#queue li span.like + font-size: 5px +#playlist ul#queue li a.user + font-size: 5px +nav button + font-size: 10px + padding: 1px + border: 1px solid #888 + min-width: 10px + max-width: 10px + min-height: 10px + max-height: 10px + overflow: hidden +*,#chat + overflow: hidden diff --git a/frontend/static/sass/src/top.sass b/frontend/static/sass/src/top.sass new file mode 100644 index 0000000..3f55c57 --- /dev/null +++ b/frontend/static/sass/src/top.sass @@ -0,0 +1,52 @@ +body + background-color: rgb(49,18,150) + overflow: hidden +#bg + position: fixed + top: 0 + left: 0 + height: 100% + width: 100% + display: block + opacity: 1 + background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0.11, rgb(49,18,150)), color-stop(0.67, rgb(143,38,255)), color-stop(0.84, rgb(157,66,255))) + background-image: -moz-linear-gradient( center bottom, rgb(49,18,150) 11%, rgb(143,38,255) 67%, rgb(157,66,255) 84%) + img + width: 100% + height: 100% +#plant1 + z-index: -2 + position: fixed + left: -200px + bottom: 0 +#plant2 + z-index: -2 + position: fixed + right: -200px + bottom: 0 +.cloudleft + background-image: url(/bgz/cloudz1.png) + position: fixed + bottom: 0 + left: 0 + width: 600px + height: 400px + opacity: 0.7 + pointer-events: none + z-index: -1 +.cloudright + background-image: url(/bgz/cloudz2.png) + position: fixed + bottom: 0 + right: 0 + width: 600px + height: 400px + opacity: 0.8 + pointer-events: none + z-index: -1 +.shimmer + margin: 0 0 -20px 0 + opacity: 0.5 +.shimmer2 + margin: 0 0 -40px 0 + opacity: 0.5 diff --git a/frontend/static/sass/stylesheets/avatar.css b/frontend/static/sass/stylesheets/avatar.css new file mode 100644 index 0000000..8173e9a --- /dev/null +++ b/frontend/static/sass/stylesheets/avatar.css @@ -0,0 +1,91 @@ +/* line 1, ../src/avatar.sass */ +table { + float: left; +} + +/* line 3, ../src/avatar.sass */ +.avatar-right { + left: 250px; +} + +/* line 5, ../src/avatar.sass */ +.message { + vertical-align: top; +} + +/* line 7, ../src/avatar.sass */ +.tri { + vertical-align: top; + height: 100%; +} + +/* line 10, ../src/avatar.sass */ +.triangle-left { + width: 0; + height: 0; + border-top: 10px solid transparent; + border-bottom: 5px solid transparent; + border-right: 25px solid white; + position: relative; + top: 10px; + left: 5px; + margin-left: -16px; +} + +/* line 20, ../src/avatar.sass */ +.triangle-right { + width: 0; + height: 0; + border-top: 10px solid transparent; + border-bottom: 5px solid transparent; + border-left: 25px solid white; + position: relative; + top: 10px; + margin-left: -12px; +} + +/* line 29, ../src/avatar.sass */ +.message .message-blurb { + box-shadow: 2px 2px 10px #112233; + max-width: 250px; + font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif; + background-color: white; + border-top: 2px solid #f0f0f8; + border-left: 2px solid #ebeeef; + border-right: 2px solid #dddddd; + border-bottom: 2px solid #dddddd; + -moz-border-radius: 20px; + -webkit-border-radius: 20px; + padding: 10px; + color: #222222; + word-wrap: break-word; +} + +/* line 43, ../src/avatar.sass */ +#chat img { + max-width: 250px; + max-height: 250px; +} + +/* line 46, ../src/avatar.sass */ +#chat .ytlink:hover { + color: #ff33cc; +} + +/* line 48, ../src/avatar.sass */ +#chat .ytlink { + color: #cc33dd; +} + +/* line 50, ../src/avatar.sass */ +#chat .ytlink.playing { + color: #6600bb; +} + +/* line 52, ../src/avatar.sass */ +div.frame { + display: inline-block; + padding: 2px; + height: 300px; + overflow: visible; +} diff --git a/frontend/static/sass/stylesheets/calendar.css b/frontend/static/sass/stylesheets/calendar.css new file mode 100644 index 0000000..f429555 --- /dev/null +++ b/frontend/static/sass/stylesheets/calendar.css @@ -0,0 +1,141 @@ +/* line 1, ../src/calendar.sass */ +body { + background-color: #f8f8f8; + overflow: hidden; +} + +/* line 4, ../src/calendar.sass */ +#calendar { + position: absolute; + z-index: 10; +} +/* line 6, ../src/calendar.sass */ +#calendar * { + font-size: 18px; +} + +/* line 10, ../src/calendar.sass */ +#playlist ul#queue li.playing span.score { + color: #bbbbbb; +} + +/* line 13, ../src/calendar.sass */ +#playlist ul#queue li span.score { + color: #333333; +} +/* line 15, ../src/calendar.sass */ +#playlist ul#queue li span.title { + color: #222222; +} + +/* line 17, ../src/calendar.sass */ +#player { + z-index: 6; +} + +/* line 19, ../src/calendar.sass */ +#playlistbg { + z-index: 7; + background-color: #f8f8f8; +} + +/* line 22, ../src/calendar.sass */ +#water-cooler { + position: fixed; + bottom: -10px; + left: -30px; + height: 500px; + z-index: 7; +} + +/* line 28, ../src/calendar.sass */ +#office-plant { + position: fixed; + bottom: 20px; + left: 160px; + z-index: 8; +} + +/* line 33, ../src/calendar.sass */ +#carpet { + position: fixed; + width: 100%; + height: 70px; + bottom: 0; + left: 0; + background-color: white; + z-index: 6; +} + +/* line 41, ../src/calendar.sass */ +#bg { + opacity: 0.1; + display: none; +} + +/* line 44, ../src/calendar.sass */ +#likebutton { + position: fixed; + right: 20px; + top: 30px; + opacity: 0.7; +} + +/* line 49, ../src/calendar.sass */ +#calendar { + z-index: 10; + box-shadow: #666666 5px 5px 10px; + display: none; +} + +/* line 53, ../src/calendar.sass */ +#logo h1 { + color: #bb88dd; +} + +/* line 55, ../src/calendar.sass */ +#player #projector #video-title { + bottom: 5px; + left: 5px; +} + +/* line 58, ../src/calendar.sass */ +.arrow-play { + width: 0; + height: 0; + border-top: 4.5px solid transparent; + border-left: 9.5px solid white; + border-bottom: 4.5px solid transparent; + display: inline-block; +} + +/* line 65, ../src/calendar.sass */ +.arrow-pause { + width: 0; + height: 0; + border-top: 5px solid white; + border-right: 2.5px solid white; + border-bottom: 4px solid white; + border-left: 0; + display: inline-block; +} + +/* line 73, ../src/calendar.sass */ +.arrow-prev { + width: 0; + height: 0; + border-top: 4px solid transparent; + border-right: 4px solid white; + border-bottom: 4px solid transparent; + display: inline-block; +} + +/* line 80, ../src/calendar.sass */ +.arrow-next { + width: 0; + height: 0; + border-top: 4px solid transparent; + border-left: 4px solid white; + border-bottom: 4px solid transparent; + display: inline-block; +} diff --git a/frontend/static/sass/stylesheets/diornights.css b/frontend/static/sass/stylesheets/diornights.css new file mode 100644 index 0000000..e833dbd --- /dev/null +++ b/frontend/static/sass/stylesheets/diornights.css @@ -0,0 +1,182 @@ +/* line 17, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +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, 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, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; +} + +/* line 22, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +html { + line-height: 1; +} + +/* line 24, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +ol, ul { + list-style: none; +} + +/* line 26, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 28, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} + +/* line 30, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q, blockquote { + quotes: none; +} +/* line 103, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q:before, q:after, blockquote:before, blockquote:after { + content: ""; + content: none; +} + +/* line 32, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +a img { + border: none; +} + +/* line 116, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { + display: block; +} + +/* line 8, ../src/diornights.sass */ +html { + height: 100%; + width: 100%; +} + +/* line 11, ../src/diornights.sass */ +body { + font-family: trebuchet ms, helvetica, arial, sans-serif; + width: 100%; + height: 100%; + overflow-x: hidden; + background: white; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.28, white), color-stop(0.64, #faf7fa)); + background-image: -moz-linear-gradient(center bottom, white 28%, #faf7fa 64%); + background-attachment: fixed; + font-size: 11px; + font-family: "lucida grande", tahoma, verdana, arial, sans-serif; + color: #333333; +} + +/* line 23, ../src/diornights.sass */ +#bg { + position: fixed; + top: 0; + left: 0; + opacity: 1; + z-index: -3; + width: 100%; + height: 100%; +} + +/* line 31, ../src/diornights.sass */ +#bg img { + width: 100%; + height: 100%; + -ms-interpolation-mode: nearest-neighbor; + image-rendering: -moz-crisp-edges; + image-rendering: -webkit-optimize-contrast; +} + +/* line 37, ../src/diornights.sass */ +#container { + position: absolute; + top: 0; + left: 50%; + width: 950px; + min-height: 100%; + margin-left: -475px; + background: white; + padding-bottom: 2000px; +} + +/* line 48, ../src/diornights.sass */ +#header { + width: 100%; +} +/* line 50, ../src/diornights.sass */ +#header #logo { + height: 160px; +} +/* line 52, ../src/diornights.sass */ +#header #likebutton { + position: absolute; + top: 80px; + right: 30px; +} + +/* line 56, ../src/diornights.sass */ +#menu { + width: 100%; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #eeeeee; +} +/* line 61, ../src/diornights.sass */ +#menu ul li { + display: inline-block; + width: 153px; + padding: 5px 0 5px 0px; + text-align: center; +} +/* line 66, ../src/diornights.sass */ +#menu ul li a { + color: #333333; + text-decoration: none; + display: block; +} +/* line 70, ../src/diornights.sass */ +#menu ul li a:hover { + color: #3333ff; +} + +/* line 72, ../src/diornights.sass */ +.box { + width: 300px; + margin: 10px 0 0 10px; +} +/* line 75, ../src/diornights.sass */ +.box img { + width: 100%; + opacity: 0.9; +} +/* line 78, ../src/diornights.sass */ +.box img:hover { + opacity: 1; +} +/* line 82, ../src/diornights.sass */ +.box#feed ul li { + display: inline-block; + height: 32px; + vertical-align: middle; +} +/* line 86, ../src/diornights.sass */ +.box#feed img { + width: 32px; + height: 32px; +} diff --git a/frontend/static/sass/stylesheets/disaro.css b/frontend/static/sass/stylesheets/disaro.css new file mode 100644 index 0000000..9787b67 --- /dev/null +++ b/frontend/static/sass/stylesheets/disaro.css @@ -0,0 +1 @@ +#chat{text-align:center}#chat img{width:500px;max-width:none;max-height:none;border:10px solid #000;margin:10px auto 0;margin-right:100px}#chat a.u{font-size:14px;min-width:100px;letter-spacing:-1px;text-align:right;padding-right:20px}#chat *{font-size:14px}#chat .chatline{width:510px;background-color:#000;padding:5px;text-align:left;margin:0 auto;opacity:0.9;margin-right:100px}#chat span{color:#666;text-shadow:none;font-weight:normal} diff --git a/frontend/static/sass/stylesheets/embed.css b/frontend/static/sass/stylesheets/embed.css new file mode 100644 index 0000000..37f8f61 --- /dev/null +++ b/frontend/static/sass/stylesheets/embed.css @@ -0,0 +1,163 @@ +/* line 1, ../src/embed.sass */ +body { + background: black; + overflow: hidden; +} + +/* line 4, ../src/embed.sass */ +#logo, #form, #logobg, #sitez { + opacity: 0; + z-index: -20; +} + +/* line 7, ../src/embed.sass */ +#lastlogbox *, #lastlogbox h4 { + font-size: 12px; + padding: 1px; +} + +/* line 10, ../src/embed.sass */ +#lastlogbox { + padding: 1px; +} + +/* line 12, ../src/embed.sass */ +#chat { + font-size: 6px; + line-height: 120%; + overflow-y: hidden; +} +/* line 16, ../src/embed.sass */ +#chat a.u { + min-width: 10px; +} +/* line 18, ../src/embed.sass */ +#chat img { + max-height: 30px; + max-width: 30px; +} + +/* line 21, ../src/embed.sass */ +#player { + padding: 0; + margin: 0; +} + +/* line 24, ../src/embed.sass */ +#player *, #playlist *, #queue * { + font-size: 12px; +} + +/* line 26, ../src/embed.sass */ +#playlist ul#queue li { + padding: 1px; +} +/* line 28, ../src/embed.sass */ +#playlist ul#queue li.playing { + background-color: #665577; +} + +/* line 30, ../src/embed.sass */ +#playlist ul#queue li span.like { + display: none; +} + +/* line 32, ../src/embed.sass */ +#playlist ul#queue li a.user { + font-size: 10px; +} + +/* line 34, ../src/embed.sass */ +#playlist { + overflow-y: hidden; +} + +/* line 36, ../src/embed.sass */ +#queue { + overflow-y: scroll; +} + +/* line 39, ../src/embed.sass */ +nav button { + font-size: 12px; + padding: 1px; + overflow: hidden; + position: relative; + top: 3px; + left: 3px; +} +/* line 46, ../src/embed.sass */ +nav #video-link { + position: relative; + top: 2px; + left: 3px; + padding: 4px; + font-size: 10px; +} + +/* line 53, ../src/embed.sass */ +#player nav#controls span.instructions { + font-size: 11px; + color: #dddddd; + position: relative; + top: 3px; + left: 5px; +} + +/* line 59, ../src/embed.sass */ +#player nav#controls { + z-index: 90; + overflow: visible; +} + +/* line 62, ../src/embed.sass */ +#player #projector #video-title { + bottom: 10px; + left: 2px; +} + +/* line 65, ../src/embed.sass */ +*, #chat { + overflow: hidden; +} + +/* line 67, ../src/embed.sass */ +.arrow-play { + width: 0; + height: 0; + border-top: 4.5px solid transparent; + border-left: 9.5px solid white; + border-bottom: 4.5px solid transparent; + display: inline-block; +} + +/* line 74, ../src/embed.sass */ +.arrow-pause { + width: 0; + height: 0; + border-top: 5px solid white; + border-right: 2.5px solid white; + border-bottom: 4px solid white; + border-left: 0; + display: inline-block; +} + +/* line 82, ../src/embed.sass */ +.arrow-prev { + width: 0; + height: 0; + border-top: 4px solid transparent; + border-right: 4px solid white; + border-bottom: 4px solid transparent; + display: inline-block; +} + +/* line 89, ../src/embed.sass */ +.arrow-next { + width: 0; + height: 0; + border-top: 4px solid transparent; + border-left: 4px solid white; + border-bottom: 4px solid transparent; + display: inline-block; +} diff --git a/frontend/static/sass/stylesheets/feederbleeder.css b/frontend/static/sass/stylesheets/feederbleeder.css new file mode 100644 index 0000000..cdfc556 --- /dev/null +++ b/frontend/static/sass/stylesheets/feederbleeder.css @@ -0,0 +1,41 @@ +/* line 1, ../src/feederbleeder.sass */ +#chat { + text-align: center; +} +/* line 3, ../src/feederbleeder.sass */ +#chat img { + width: 500px; + max-width: none; + max-height: none; + border: 10px solid black; + margin: 10px auto 0; + margin-right: 100px; +} +/* line 10, ../src/feederbleeder.sass */ +#chat a.u { + font-size: 14px; + min-width: 100px; + letter-spacing: -1px; + text-align: right; + padding-right: 20px; +} +/* line 16, ../src/feederbleeder.sass */ +#chat * { + font-size: 14px; +} +/* line 18, ../src/feederbleeder.sass */ +#chat .chatline { + width: 510px; + background-color: black; + padding: 5px; + text-align: left; + margin: 0 auto; + opacity: 0.9; + margin-right: 100px; +} +/* line 26, ../src/feederbleeder.sass */ +#chat span { + color: #666666; + text-shadow: none; + font-weight: normal; +} diff --git a/frontend/static/sass/stylesheets/frederick.css b/frontend/static/sass/stylesheets/frederick.css new file mode 100644 index 0000000..94cd43d --- /dev/null +++ b/frontend/static/sass/stylesheets/frederick.css @@ -0,0 +1,5 @@ +/* line 2, ../src/frederick.sass */ +#chat span { + color: #004b27; + text-shadow: 0 0 2px white; +} diff --git a/frontend/static/sass/stylesheets/gallery-white.css b/frontend/static/sass/stylesheets/gallery-white.css new file mode 100644 index 0000000..ef7fcd8 --- /dev/null +++ b/frontend/static/sass/stylesheets/gallery-white.css @@ -0,0 +1,353 @@ +/* line 1, ../src/gallery-white.sass */ +body { + background: white; +} + +/* line 3, ../src/gallery-white.sass */ +#loading { + background: transparent; + color: #e6f0f0; + text-shadow: #e6f0f0 0 0 50px; +} + +/* line 7, ../src/gallery-white.sass */ +#player { + background: white; +} +/* line 9, ../src/gallery-white.sass */ +#player #projector { + background-color: black; +} +/* line 11, ../src/gallery-white.sass */ +#player #projector #video-title { + color: white; +} +/* line 16, ../src/gallery-white.sass */ +#player nav#controls #scan.blinkOn { + background-color: white; + color: black; +} +/* line 19, ../src/gallery-white.sass */ +#player nav#controls #scan.blinkOff { + background-color: black; + color: white; +} +/* line 22, ../src/gallery-white.sass */ +#player nav#controls #like { + color: #ffaaee; +} +/* line 24, ../src/gallery-white.sass */ +#player nav#controls #like.liked { + color: #8888ff; +} + +/* line 26, ../src/gallery-white.sass */ +#playlistbg { + background-color: white; +} + +/* line 30, ../src/gallery-white.sass */ +#playlist ul#queue li { + border-bottom: 1px solid #dddddd; +} +/* line 32, ../src/gallery-white.sass */ +#playlist ul#queue li span.title { + color: #333333; +} +/* line 34, ../src/gallery-white.sass */ +#playlist ul#queue li a.user { + color: #d33682; +} +/* line 36, ../src/gallery-white.sass */ +#playlist ul#queue li span.like { + color: #657b83; +} +/* line 38, ../src/gallery-white.sass */ +#playlist ul#queue li span.like.liked { + color: #c357a3; +} +/* line 40, ../src/gallery-white.sass */ +#playlist ul#queue li.playing { + background-color: #333333; +} +/* line 42, ../src/gallery-white.sass */ +#playlist ul#queue li.playing span.title { + color: white; +} + +/* line 44, ../src/gallery-white.sass */ +#curtain { + background: #080810; + opacity: 0.3; +} + +/* line 47, ../src/gallery-white.sass */ +#login { + background: white; + box-shadow: 0 5px 10px black; +} +/* line 51, ../src/gallery-white.sass */ +#login label { + color: black; +} +/* line 54, ../src/gallery-white.sass */ +#login #button-shim button { + padding: 2px 5px; +} +/* line 56, ../src/gallery-white.sass */ +#login #login-username, #login #login-password { + border: 2px solid #880066; +} +/* line 58, ../src/gallery-white.sass */ +#login a { + color: #6688ff; +} + +/* line 62, ../src/gallery-white.sass */ +#sitez div:hover { + background-color: #333333; +} +/* line 64, ../src/gallery-white.sass */ +#sitez div.opened { + background-color: #333333; +} + +/* line 67, ../src/gallery-white.sass */ +nav button { + background-color: #888888; +} + +/* line 69, ../src/gallery-white.sass */ +#logobg { + background-color: black; + opacity: 0.7; +} + +/* line 76, ../src/gallery-white.sass */ +#logo h1 { + color: #88ffff; +} +/* line 78, ../src/gallery-white.sass */ +#logo h2 { + color: #839496; +} +/* line 80, ../src/gallery-white.sass */ +#logo h2 a { + color: #268bd2; +} + +/* line 85, ../src/gallery-white.sass */ +#likereport a { + background-color: #222222; + opacity: 0.95; +} + +/* line 88, ../src/gallery-white.sass */ +#form { + background-color: white; +} +/* line 90, ../src/gallery-white.sass */ +#form #chat-message { + border: 1px solid #333333; +} +/* line 92, ../src/gallery-white.sass */ +#form button { + background-color: #dddddd; + color: #333333; +} +/* line 95, ../src/gallery-white.sass */ +#form button:hover { + background-color: #c8cbd6; +} + +/* line 97, ../src/gallery-white.sass */ +#formbg { + background-color: white; + opacity: 0.7; +} + +/* line 100, ../src/gallery-white.sass */ +#chatbg { + background-color: white; + opacity: 0.1; +} + +/* line 103, ../src/gallery-white.sass */ +#chat { + background: transparent; +} +/* line 105, ../src/gallery-white.sass */ +#chat a { + color: #4444ff; +} +/* line 107, ../src/gallery-white.sass */ +#chat a.u { + color: #ff0066; + opacity: 0.9; +} +/* line 110, ../src/gallery-white.sass */ +#chat a.pic { + opacity: 1; +} +/* line 112, ../src/gallery-white.sass */ +#chat span { + color: #333333; + text-shadow: black 0 0 0; +} +/* line 115, ../src/gallery-white.sass */ +#chat .ytlink { + color: #8aaab3; + text-shadow: black 0 0 0; +} +/* line 118, ../src/gallery-white.sass */ +#chat .ytlink:hover { + color: #11182f; + text-shadow: black 0 0 0; +} +/* line 121, ../src/gallery-white.sass */ +#chat .ytlink.playing { + color: #cc22bb; +} + +/* line 126, ../src/gallery-white.sass */ +#lastlogbg { + background-color: white; + opacity: 0.3; +} + +/* line 129, ../src/gallery-white.sass */ +#lastlogbox { + opacity: 0.8; +} +/* line 131, ../src/gallery-white.sass */ +#lastlogbox h4 { + color: #666666; +} +/* line 133, ../src/gallery-white.sass */ +#lastlogbox ul { + border-top: 1px solid #dddddd; +} + +/* line 136, ../src/gallery-white.sass */ +li.ll a { + color: #4a5a73; + border-bottom: 1px solid #dddddd; + text-shadow: black 0 0 0; +} + +/* line 142, ../src/gallery-white.sass */ +button { + background: #dddddd; + color: #333333; +} + +/* line 145, ../src/gallery-white.sass */ +#settings-container, #rooms-container, #about-container { + background-color: #222222; + color: #657b83; +} +/* line 148, ../src/gallery-white.sass */ +#settings-container .close, #rooms-container .close, #about-container .close { + color: #ded8c5; + background-color: #000b16; +} +/* line 151, ../src/gallery-white.sass */ +#settings-container .close:hover, #rooms-container .close:hover, #about-container .close:hover { + color: white; +} +/* line 154, ../src/gallery-white.sass */ +#settings-container h5, #rooms-container h5, #about-container h5 { + color: #93a1a1; + background-color: #333333; +} +/* line 157, ../src/gallery-white.sass */ +#settings-container p, #rooms-container p, #about-container p { + color: #b3c1c1; + background-color: #1b1b1f; +} +/* line 160, ../src/gallery-white.sass */ +#settings-container label, #rooms-container label, #about-container label { + color: #657b83; +} +/* line 162, ../src/gallery-white.sass */ +#settings-container span, #rooms-container span, #about-container span { + color: #839496; +} +/* line 169, ../src/gallery-white.sass */ +#settings-container ul li, #rooms-container ul li, #about-container ul li { + border-top: 1px solid black; + color: #83a1a1; +} +/* line 172, ../src/gallery-white.sass */ +#settings-container ul li:hover, #rooms-container ul li:hover, #about-container ul li:hover { + color: #fdf6e3; +} +/* line 174, ../src/gallery-white.sass */ +#settings-container ul a li, #rooms-container ul a li, #about-container ul a li { + color: #83a1a1; +} +/* line 176, ../src/gallery-white.sass */ +#settings-container ul a, #rooms-container ul a, #about-container ul a { + color: #83a1a1; +} + +/* line 181, ../src/gallery-white.sass */ +#chat { + text-align: center; +} +/* line 183, ../src/gallery-white.sass */ +#chat img { + width: 520px; + max-width: none; + max-height: none; + border: 0; + margin: 0 auto; +} +/* line 189, ../src/gallery-white.sass */ +#chat a.u { + font-size: 14px; + min-width: 100px; + letter-spacing: -1px; + text-align: right; + padding-right: 20px; +} +/* line 195, ../src/gallery-white.sass */ +#chat a.pic { + padding: 0; + margin: 0; +} +/* line 198, ../src/gallery-white.sass */ +#chat * { + font-size: 14px; +} +/* line 200, ../src/gallery-white.sass */ +#chat .chatimg { + margin: 0 auto; + padding: 0; +} +/* line 203, ../src/gallery-white.sass */ +#chat .chatline { + width: 510px; + background-color: white; + padding: 2px 5px 2px 5px; + line-height: 16px; + text-align: left; + margin: 0 auto; + opacity: 0.9; +} +/* line 211, ../src/gallery-white.sass */ +#chat span { + color: #666666; + text-shadow: none; + font-weight: normal; +} + +/* line 216, ../src/gallery-white.sass */ +#logo h2#topic { + left: 5px; +} +/* line 218, ../src/gallery-white.sass */ +#logo #likebutton { + position: relative; + left: 30px; +} diff --git a/frontend/static/sass/stylesheets/glitter.css b/frontend/static/sass/stylesheets/glitter.css new file mode 100644 index 0000000..3690a2d --- /dev/null +++ b/frontend/static/sass/stylesheets/glitter.css @@ -0,0 +1,29 @@ +/* line 1, ../src/glitter.sass */ +#chat *, #chat span, #chat span a { + font-size: 30px; + line-height: 38px; + text-shadow: black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px, black 0 0 5px; + font-family: papyrus, comic sans, comic sans ms, sans-serif; + letter-spacing: -1px; + overflow: hidden; +} + +/* line 8, ../src/glitter.sass */ +#heading img { + position: relative; + top: -35px; + left: -18px; + z-index: 47; +} + +/* line 13, ../src/glitter.sass */ +#likebutton { + position: relative; + top: -90px; + left: -16px; +} + +/* line 17, ../src/glitter.sass */ +#chat a.u { + font-size: 24px; +} diff --git a/frontend/static/sass/stylesheets/ie.css b/frontend/static/sass/stylesheets/ie.css new file mode 100644 index 0000000..5cd5b6c --- /dev/null +++ b/frontend/static/sass/stylesheets/ie.css @@ -0,0 +1,5 @@ +/* Welcome to Compass. Use this file to write IE specific override styles. + * Import this file using the following HTML or equivalent: + * */ diff --git a/frontend/static/sass/stylesheets/main.css b/frontend/static/sass/stylesheets/main.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/sass/stylesheets/print.css b/frontend/static/sass/stylesheets/print.css new file mode 100644 index 0000000..b0e9e45 --- /dev/null +++ b/frontend/static/sass/stylesheets/print.css @@ -0,0 +1,3 @@ +/* Welcome to Compass. Use this file to define print styles. + * Import this file using the following HTML or equivalent: + * */ diff --git a/frontend/static/sass/stylesheets/profile.css b/frontend/static/sass/stylesheets/profile.css new file mode 100644 index 0000000..b7d5219 --- /dev/null +++ b/frontend/static/sass/stylesheets/profile.css @@ -0,0 +1,799 @@ +/* line 17, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +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, 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, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; +} + +/* line 22, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +html { + line-height: 1; +} + +/* line 24, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +ol, ul { + list-style: none; +} + +/* line 26, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 28, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} + +/* line 30, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q, blockquote { + quotes: none; +} +/* line 103, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q:before, q:after, blockquote:before, blockquote:after { + content: ""; + content: none; +} + +/* line 32, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +a img { + border: none; +} + +/* line 116, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { + display: block; +} + +/* line 8, ../src/profile.sass */ +body { + background: #888888; + overflow-y: hidden; + overflow-x: hidden; + font-family: trebuchet ms, sans-serif; +} + +/* line 14, ../src/profile.sass */ +#logo { + position: absolute; + z-index: 20; + top: 15px; + left: 20px; +} +/* line 19, ../src/profile.sass */ +#logo a { + display: inline-block; +} +/* line 21, ../src/profile.sass */ +#logo a img { + padding-top: 5px; + display: inline-block; +} +/* line 24, ../src/profile.sass */ +#logo h1 { + position: relative; + top: -10px; + left: 10px; + font-size: 34px; + font-weight: normal; + font-style: italic; + font-family: georgia, garamond, serif; + color: #ff88bb; + display: inline-block; +} +/* line 34, ../src/profile.sass */ +#logo h2 { + position: relative; + display: inline-block; + font-size: 12px; + color: white; + max-width: 250px; + left: 10px; + top: -6px; + padding-right: 20px; +} + +/* line 43, ../src/profile.sass */ +#logobg { + position: absolute; + top: 10px; + left: 0; + width: 100%; + height: 64px; + background-color: black; + opacity: 0.8; + z-index: 19; +} + +/* line 52, ../src/profile.sass */ +#likebutton { + display: inline-block; + display: none; + z-index: -1; + min-width: 90px; +} +/* line 57, ../src/profile.sass */ +#likebutton a { + color: #3333ff; +} + +/* line 59, ../src/profile.sass */ +#flower { + position: absolute; + top: 0; + right: 10%; + z-index: 20; + pointer-events: none; + display: none; +} + +/* line 66, ../src/profile.sass */ +#contact { + position: absolute; + left: 0; + display: none; +} +/* line 70, ../src/profile.sass */ +#contact #avatar, #contact .avatar { + display: none; + width: 100%; +} +/* line 74, ../src/profile.sass */ +#contact .avatar { + display: block; +} +/* line 77, ../src/profile.sass */ +#contact #bio p { + color: #dddddd; + background-color: black; + padding: 10px 5px; + text-align: center; + opacity: 0.7; +} +/* line 83, ../src/profile.sass */ +#contact #bio a { + color: #eebbff; + display: block; +} +/* line 86, ../src/profile.sass */ +#contact #bio img { + width: 100%; +} + +/* line 89, ../src/profile.sass */ +#sitez { + position: absolute; + top: 30px; + right: 20px; + text-align: right; + z-index: 20; +} +/* line 95, ../src/profile.sass */ +#sitez div { + color: #dddddd; + cursor: pointer; + display: inline-block; + padding: 4px 8px 4px 8px; + float: left; +} +/* line 101, ../src/profile.sass */ +#sitez div a { + color: #bbbbcc; +} +/* line 103, ../src/profile.sass */ +#sitez div#settings-hook { + display: none; + z-index: 82; +} +/* line 104, ../src/profile.sass */ +#sitez div#settings-hook:hover { + -moz-border-radius: 10px 10px 3px 3px; + -webkit-border-radius: 10px 10px 3px 3px; + -o-border-radius: 10px 10px 3px 3px; + border-radius: 10px 10px 3px 3px; + background-color: #333333; + color: white; +} +/* line 108, ../src/profile.sass */ +#sitez div#settings-hook.opened { + -moz-border-radius: 10px 10px 3px 3px; + -webkit-border-radius: 10px 10px 3px 3px; + -o-border-radius: 10px 10px 3px 3px; + border-radius: 10px 10px 3px 3px; + background-color: #333333; + color: white; +} + +/* line 114, ../src/profile.sass */ +#fullscreen-warning { + position: fixed; + top: 50%; + left: 50%; + width: 600px; + margin-left: -300px; + margin-top: -20px; + text-align: center; + font-size: 24px; + padding: 10px; + background-color: rgba(0, 0, 0, 0.5); + color: white; + z-index: 100; + display: none; +} + +/* line 128, ../src/profile.sass */ +#settings-container { + position: fixed; + top: 53px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + -o-border-radius: 10px; + border-radius: 10px; + right: 20px; + z-index: 80; + width: 500px; + background-color: #222222; + color: #657b83; + display: none; + box-shadow: 0 5px 10px black; +} +/* line 139, ../src/profile.sass */ +#settings-container .close { + margin: 10px 10px 0 0; + float: right; + color: #ded8c5; + width: 20px; + height: 14px; + font-size: 14px; + padding: 3px 0; + text-align: center; + vertical-align: middle; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + -o-border-radius: 10px; + border-radius: 10px; + background-color: #000b16; +} +/* line 151, ../src/profile.sass */ +#settings-container .close:hover { + color: white; + cursor: pointer; +} +/* line 154, ../src/profile.sass */ +#settings-container #rooms-loading { + margin: 10px; +} +/* line 156, ../src/profile.sass */ +#settings-container h5 { + font-size: 16px; + color: #93a1a1; + display: block; + padding: 10px; + background-color: #333333; + -moz-border-radius: 10px 10px 0 0; + -webkit-border-radius: 10px 10px 0 0; + -o-border-radius: 10px 10px 0 0; + border-radius: 10px 10px 0 0; +} +/* line 163, ../src/profile.sass */ +#settings-container p { + padding: 10px 10px 10px 10px; + font-size: 14px; + line-height: 18px; + color: #b3c1c1; + background-color: #1b1b1f; +} +/* line 169, ../src/profile.sass */ +#settings-container label { + margin: 2px 0 0 10px; + font-size: 14px; + color: #657b83; + width: 150px; + text-align: right; + padding-right: 5px; + display: inline-block; +} +/* line 177, ../src/profile.sass */ +#settings-container span { + margin: 2px 10px 0 0; + color: #839496; + font-size: 14px; +} +/* line 181, ../src/profile.sass */ +#settings-container input { + margin: 2px 10px 0 0; + width: 100px; +} +/* line 184, ../src/profile.sass */ +#settings-container #profile-avatar, #settings-container #profile-bg { + width: 300px; +} +/* line 186, ../src/profile.sass */ +#settings-container #profile-settings-save { + font-size: 14px; +} +/* line 188, ../src/profile.sass */ +#settings-container textarea { + width: 300px; + height: 150px; +} +/* line 191, ../src/profile.sass */ +#settings-container .shim { + width: 1px; + height: 10px; +} +/* line 194, ../src/profile.sass */ +#settings-container ul { + text-decoration: none; + cursor: pointer; +} +/* line 197, ../src/profile.sass */ +#settings-container ul li { + list-style-type: none; + padding: 10px; + cursor: pointer; + border-top: 1px solid black; + background-color: transparent; + text-decoration: none; + font-size: 14px; + color: #83a1a1; +} +/* line 206, ../src/profile.sass */ +#settings-container ul li:hover { + color: #fdf6e3; +} +/* line 208, ../src/profile.sass */ +#settings-container ul a li { + color: #83a1a1; + text-decoration: none; +} +/* line 211, ../src/profile.sass */ +#settings-container ul a { + color: #83a1a1; + text-decoration: none; +} + +/* line 214, ../src/profile.sass */ +#msg { + z-index: 100; + position: fixed; + top: 10px; + right: 10px; + padding: 5px; + width: 250px; + max-height: 80%; + font-size: 12px; + background-color: #eeeeee; + overflow-y: scroll; + overflow-x: hidden; + color: #333333; +} +/* line 227, ../src/profile.sass */ +#msg strong { + color: #859900; +} +/* line 229, ../src/profile.sass */ +#msg em { + color: #dc322f; +} +/* line 231, ../src/profile.sass */ +#msg b { + color: #002b36; +} + +/* line 233, ../src/profile.sass */ +#player { + padding: 10px; + position: absolute; + background: black; +} +/* line 237, ../src/profile.sass */ +#player #projector { + display: block; + position: fixed; + background-color: black; +} +/* line 241, ../src/profile.sass */ +#player #projector #screen { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 19; +} +/* line 248, ../src/profile.sass */ +#player #projector #screen #soundcloud, #player #projector #screen #audio { + position: absolute; + top: 0; + right: 0; + background-color: black; + z-index: 21; +} +/* line 254, ../src/profile.sass */ +#player #projector #screen #soundcloud-dl, #player #projector #screen #audio-dl { + position: absolute; + top: 81px; + right: 0; + width: 81px; + padding: 5px 0 5px 0; + font-size: 13px; + text-align: center; + background-color: black; + z-index: 20; +} +/* line 263, ../src/profile.sass */ +#player #projector #screen #soundcloud-dl *, #player #projector #screen #audio-dl * { + color: #839496; +} +/* line 266, ../src/profile.sass */ +#player #projector #screen #soundcloud-img, #player #projector #screen #audio-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 20; +} +/* line 273, ../src/profile.sass */ +#player #projector #screen #soundcloud-img img, #player #projector #screen #audio-img img { + max-width: 100%; + min-height: 100%; + max-height: 100%; +} +/* line 277, ../src/profile.sass */ +#player #projector #ytscreen { + z-index: 19; + position: absolute; + top: 0; + left: 0; +} +/* line 282, ../src/profile.sass */ +#player #projector #video-title { + position: absolute; + bottom: 0; + left: 10px; + color: white; + z-index: 20; +} +/* line 288, ../src/profile.sass */ +#player #projector #video-title.fullscreen { + position: fixed; + bottom: 90px; + left: auto; + right: 30px; + font-size: 24px; +} +/* line 294, ../src/profile.sass */ +#player #projector #projimg { + width: 100%; + height: 100%; +} +/* line 297, ../src/profile.sass */ +#player nav#controls { + z-index: 40; + position: absolute; + display: none; +} +/* line 301, ../src/profile.sass */ +#player nav#controls #video-link { + color: #839496; +} +/* line 303, ../src/profile.sass */ +#player nav#controls #scan.blinkOn { + background-color: white; + color: black; +} +/* line 306, ../src/profile.sass */ +#player nav#controls #scan.blinkOff { + background-color: black; + color: white; +} +/* line 309, ../src/profile.sass */ +#player nav#controls #like { + color: #ee44bb; +} +/* line 311, ../src/profile.sass */ +#player nav#controls #like.liked { + color: #4444ff; +} + +/* line 313, ../src/profile.sass */ +#playlistbg { + position: absolute; + background-color: black; + opacity: 0.5; +} + +/* line 317, ../src/profile.sass */ +#playlist { + position: absolute; + z-index: 90; + width: 100%; +} +/* line 321, ../src/profile.sass */ +#playlist ul#queue { + width: 100%; + border-top: 1px solid #888888; + border-left: 1px solid #888888; + border-bottom: 1px solid #888888; + -webkit-padding-start: 0; + -webkit-margin-before: 0; + overflow-y: scroll; + overflow-x: hidden; + z-index: 90; +} +/* line 331, ../src/profile.sass */ +#playlist ul#queue li { + padding: 5px; + display: block; + cursor: pointer; + border-bottom: 1px solid #333333; +} +/* line 336, ../src/profile.sass */ +#playlist ul#queue li span.title { + color: #dddddd; + display: block; + padding: 5px; + font-size: 15px; + z-index: 1; +} +/* line 342, ../src/profile.sass */ +#playlist ul#queue li span.title:hover { + color: white; +} +/* line 344, ../src/profile.sass */ +#playlist ul#queue li a.user { + float: right; + font-size: 14px; + padding: 0 5px; + color: #d33682; + padding: 5px; + z-index: 2; + text-decoration: none; +} +/* line 352, ../src/profile.sass */ +#playlist ul#queue li span.like { + float: right; + font-size: 14px; + color: #657b83; + padding: 5px; + z-index: 3; +} +/* line 358, ../src/profile.sass */ +#playlist ul#queue li span.like.liked { + color: #c357a3; +} +/* line 360, ../src/profile.sass */ +#playlist ul#queue li span.score { + float: right; + font-size: 14px; + color: #bbbbbb; + padding: 5px 10px 5px 5px; +} +/* line 365, ../src/profile.sass */ +#playlist ul#queue li.playing { + background-color: #222222; +} +/* line 367, ../src/profile.sass */ +#playlist ul#queue li.playing span.title { + color: white; +} +/* line 369, ../src/profile.sass */ +#playlist ul#queue li#queueLess { + color: white; + text-align: center; + border: 0; + border-bottom: 1px solid #333333; + font-size: 18px; + padding: 10px 0; + cursor: pointer; +} +/* line 372, ../src/profile.sass */ +#playlist ul#queue li#queueLess:hover { + background-color: #666666; + color: white; +} +/* line 380, ../src/profile.sass */ +#playlist ul#queue li#queueMore { + color: white; + text-align: center; + border: 0; + font-size: 33px; + padding: 20px 20px 20px 20px; + cursor: pointer; +} +/* line 383, ../src/profile.sass */ +#playlist ul#queue li#queueMore:hover { + background-color: #666666; + color: white; +} +/* line 390, ../src/profile.sass */ +#playlist ul#queue li#queueDone { + color: #dddddd; + text-align: center; + border: 0; + font-size: 33px; + padding: 80px 20px 200px 20px; +} +/* line 396, ../src/profile.sass */ +#playlist ul#queue li#queueLoading { + text-align: center; + color: white; + font-size: 24px; + padding: 80px; +} +/* line 401, ../src/profile.sass */ +#playlist ol { + -webkit-padding-start: 0; + -webkit-margin-before: 0; + -webkit-margin-after: 0; + display: block; + position: relative; + top: 1px; +} +/* line 408, ../src/profile.sass */ +#playlist ol li { + padding: 5px 8px 8px 8px; + margin: 0 0 0 10px; + list-style-type: none; + border-top: 1px solid black; + border-right: 1px solid black; + border-left: 1px solid black; + border-bottom: 1px solid #888888; + display: inline-block; + background-color: #333333; + color: #bbbbbb; + cursor: pointer; + opacity: 0.7; + z-index: 89; +} +/* line 422, ../src/profile.sass */ +#playlist ol li.mode { + position: relative; + padding: 8px 8px 8px 8px; + border-color: #888888; + border-bottom: 1px solid #111111; + background-color: #111111; + color: white; + z-index: 91; +} + +/* line 430, ../src/profile.sass */ +nav { + z-index: 10; + margin: 0 auto; +} +/* line 433, ../src/profile.sass */ +nav button, nav #video-link { + background-color: #333333; + color: #dddddd; + border: 0; + font-size: 14px; + min-width: 40px; + min-height: 20px; + padding: 5px 5px; + position: relative; + top: -1px; +} +/* line 436, ../src/profile.sass */ +nav button:hover, nav #video-link:hover { + background-color: #666666; + color: white; +} +/* line 446, ../src/profile.sass */ +nav #video-link { + padding: 6px 5px 5px 5px; +} + +/* line 448, ../src/profile.sass */ +#msg { + display: none; +} + +/* line 450, ../src/profile.sass */ +#gif-container { + position: absolute; + left: 0; + width: 100%; + padding-left: 10%; + display: block; + padding-bottom: 200px; +} +/* line 457, ../src/profile.sass */ +#gif-container #gifs { + clear: both; + display: block; + text-align: center; + top: 0; + max-width: 80%; + margin: 0 0 200px 0; + box-shadow: 0 5px 10px black; + background-color: white; +} +/* line 466, ../src/profile.sass */ +#gif-container #gifs div { + padding: 10px; + display: inline-block; +} +/* line 469, ../src/profile.sass */ +#gif-container #gifs div img { + max-width: 350px; + max-height: 400px; +} + +/* line 472, ../src/profile.sass */ +#bg { + position: fixed; + top: 0; + left: 0; + opacity: 1; + z-index: -3; + width: 100%; + height: 100%; + display: none; +} +/* line 481, ../src/profile.sass */ +#bg img { + width: 100%; + height: 100%; +} + +/* line 485, ../src/profile.sass */ +.arrow-play { + width: 0; + height: 0; + border-top: 4.5px solid transparent; + border-left: 9.5px solid white; + border-bottom: 4.5px solid transparent; + display: inline-block; +} + +/* line 492, ../src/profile.sass */ +.arrow-pause { + width: 0; + height: 0; + border-top: 5px solid white; + border-right: 2.5px solid white; + border-bottom: 4px solid white; + border-left: 0; + display: inline-block; +} + +/* line 500, ../src/profile.sass */ +.arrow-prev { + width: 0; + height: 0; + border-top: 4px solid transparent; + border-right: 4px solid white; + border-bottom: 4px solid transparent; + display: inline-block; +} + +/* line 507, ../src/profile.sass */ +.arrow-next { + width: 0; + height: 0; + border-top: 4px solid transparent; + border-left: 4px solid white; + border-bottom: 4px solid transparent; + display: inline-block; +} diff --git a/frontend/static/sass/stylesheets/roomlist.css b/frontend/static/sass/stylesheets/roomlist.css new file mode 100644 index 0000000..c74dcd2 --- /dev/null +++ b/frontend/static/sass/stylesheets/roomlist.css @@ -0,0 +1,179 @@ +/* line 1, ../src/roomlist.sass */ +.roomdiv { + width: 200px; + height: 100px; + display: block; + float: left; + text-align: center; + vertical-align: bottom; + position: relative; + font-size: 30px; + color: white; + padding-top: 160px; + background-color: black; + cursor: pointer; +} +/* line 14, ../src/roomlist.sass */ +.roomdiv * { + cursor: pointer; +} +/* line 16, ../src/roomlist.sass */ +.roomdiv .count { + font-size: 160px; + color: white; + position: absolute; + left: 0; + top: 10px; + width: 100%; + text-align: center; + vertical-align: middle; + z-index: 3; + opacity: 0.9; +} +/* line 27, ../src/roomlist.sass */ +.roomdiv .roomname { + position: absolute; + left: 0; + top: 180px; + width: 100%; + text-align: center; + vertical-align: middle; + opacity: 0.9; + z-index: 4; +} +/* line 36, ../src/roomlist.sass */ +.roomdiv .roombg { + position: absolute; + background-position: center center; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0.8; + z-index: 1; + cursor: pointer; +} +/* line 47, ../src/roomlist.sass */ +.roomdiv:hover .roomname { + opacity: 1; +} +/* line 49, ../src/roomlist.sass */ +.roomdiv:hover .count { + opacity: 1; +} +/* line 51, ../src/roomlist.sass */ +.roomdiv:hover .roombg { + opacity: 0.9; +} + +/* line 53, ../src/roomlist.sass */ +#roomlist { + padding-top: 90px; +} + +/* line 55, ../src/roomlist.sass */ +#roomlist a { + text-decoration: none; + cursor: pointer; +} + +/* line 58, ../src/roomlist.sass */ +body { + overflow-y: scroll; + background: black; +} + +/* line 61, ../src/roomlist.sass */ +#logo { + top: 5px; + left: 10px; +} +/* line 65, ../src/roomlist.sass */ +#logo h1#header { + font-size: 30px; + color: #44ddff; + top: 8px; + max-width: 500px; +} +/* line 71, ../src/roomlist.sass */ +#logo h2.preamblish { + display: inline-block; + position: relative; + top: -15px; + left: 10px; + font-size: 12px; + color: white; + max-width: 250px; + padding-right: 20px; +} + +/* line 81, ../src/roomlist.sass */ +#curtain { + background: #080810; + opacity: 0.3; + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 10; + display: none; +} + +/* line 91, ../src/roomlist.sass */ +#login { + background: black; + display: block; + width: 50%; + top: 20%; + left: 50%; + margin-left: -25%; + padding: 30px; + padding-bottom: 60px; + z-index: 20; + position: fixed; + text-align: center; + box-shadow: 0 5px 10px black; +} +/* line 104, ../src/roomlist.sass */ +#login img { + margin-bottom: 20px; +} +/* line 106, ../src/roomlist.sass */ +#login label { + min-width: 20%; + display: inline-block; + text-align: right; + padding-right: 10px; + font-size: 18px; + color: white; +} +/* line 113, ../src/roomlist.sass */ +#login #button-shim { + width: 30%; + display: inline-block; + text-align: left; + padding: 10px 10px 10px 0; + margin-right: 20px; +} +/* line 119, ../src/roomlist.sass */ +#login #button-shim button { + padding: 2px 5px; +} +/* line 121, ../src/roomlist.sass */ +#login #login-username, #login #login-password { + width: 30%; + margin-right: 10px; + font-size: 24px; + border: 2px solid #880066; + padding: 10px; +} +/* line 127, ../src/roomlist.sass */ +#login a { + color: #6688ff; + text-decoration: underline; +} +/* line 130, ../src/roomlist.sass */ +#login button { + font-size: 24px; +} diff --git a/frontend/static/sass/stylesheets/screen.css b/frontend/static/sass/stylesheets/screen.css new file mode 100644 index 0000000..548cbb9 --- /dev/null +++ b/frontend/static/sass/stylesheets/screen.css @@ -0,0 +1,1323 @@ +/* line 17, ../../../../../lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +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, 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, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; +} + +/* line 22, ../../../../../lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +html { + line-height: 1; +} + +/* line 24, ../../../../../lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +ol, ul { + list-style: none; +} + +/* line 26, ../../../../../lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 28, ../../../../../lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} + +/* line 30, ../../../../../lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q, blockquote { + quotes: none; +} +/* line 103, ../../../../../lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q:before, q:after, blockquote:before, blockquote:after { + content: ""; + content: none; +} + +/* line 32, ../../../../../lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +a img { + border: none; +} + +/* line 116, ../../../../../lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { + display: block; +} + +/* line 7, ../src/screen.sass */ +body { + font-family: trebuchet ms, helvetica, arial, sans-serif; + width: 100%; + height: 100%; + overflow: hidden; + background: black; +} + +/* line 13, ../src/screen.sass */ +#bg { + position: fixed; + top: 0; + left: 0; + opacity: 1; + z-index: -3; + width: 100%; + height: 100%; +} + +/* line 21, ../src/screen.sass */ +#bg img { + width: 100%; + height: 100%; + -ms-interpolation-mode: nearest-neighbor; + image-rendering: -moz-crisp-edges; + image-rendering: -webkit-optimize-contrast; +} + +/* line 27, ../src/screen.sass */ +#loading { + z-index: 20; + background: transparent; + color: #06033c; + text-shadow: #060363 0 0 50px; + display: block; + position: fixed; + width: 100%; + padding: 20px; + top: 30%; + left: 10%; + font-size: 170px; + font-weight: bold; + text-align: left; + white-space: no-wrap; + letter-spacing: -3px; + pointer-events: none; +} + +/* line 45, ../src/screen.sass */ +#msg { + z-index: 100; + position: fixed; + top: 10px; + right: 10px; + padding: 5px; + width: 350px; + max-height: 80%; + font-size: 12px; + background-color: #eeeeee; + overflow-y: scroll; + overflow-x: hidden; + color: #333333; +} +/* line 58, ../src/screen.sass */ +#msg strong { + color: #859900; +} +/* line 60, ../src/screen.sass */ +#msg em { + color: #dc322f; +} +/* line 62, ../src/screen.sass */ +#msg b { + color: #002b36; +} + +/* line 64, ../src/screen.sass */ +#player { + padding: 10px; + position: absolute; + background: black; +} +/* line 68, ../src/screen.sass */ +#player #projector { + display: block; + position: absolute; + background-color: black; +} +/* line 72, ../src/screen.sass */ +#player #projector #screen { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 19; +} +/* line 79, ../src/screen.sass */ +#player #projector #screen #soundcloud, #player #projector #screen #audio { + position: absolute; + top: 0; + right: 0; + background-color: black; + z-index: 21; +} +/* line 85, ../src/screen.sass */ +#player #projector #screen #soundcloud-dl, #player #projector #screen #audio-dl { + position: absolute; + top: 81px; + right: 0; + width: 81px; + padding: 5px 0 5px 0; + font-size: 13px; + text-align: center; + background-color: black; + z-index: 20; +} +/* line 94, ../src/screen.sass */ +#player #projector #screen #soundcloud-dl *, #player #projector #screen #audio-dl * { + color: #839496; +} +/* line 97, ../src/screen.sass */ +#player #projector #screen #soundcloud-img, #player #projector #screen #audio-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 20; +} +/* line 104, ../src/screen.sass */ +#player #projector #screen #soundcloud-img img, #player #projector #screen #audio-img img { + max-width: 100%; + min-height: 100%; + max-height: 100%; +} +/* line 108, ../src/screen.sass */ +#player #projector #ytscreen { + z-index: 19; + position: absolute; + top: 0; + left: 0; +} +/* line 113, ../src/screen.sass */ +#player #projector #video-title { + position: absolute; + bottom: 0; + left: 0; + color: white; + z-index: 20; +} +/* line 119, ../src/screen.sass */ +#player #projector #video-title.fullscreen { + position: fixed; + bottom: 90px; + left: auto; + right: 30px; + font-size: 24px; +} +/* line 125, ../src/screen.sass */ +#player #projector #projimg { + width: 100%; + height: 100%; +} +/* line 128, ../src/screen.sass */ +#player nav#controls { + z-index: 40; + position: absolute; +} +/* line 131, ../src/screen.sass */ +#player nav#controls #video-link { + color: #839496; +} +/* line 133, ../src/screen.sass */ +#player nav#controls #scan.blinkOn { + background-color: white; + color: black; +} +/* line 136, ../src/screen.sass */ +#player nav#controls #scan.blinkOff { + background-color: black; + color: white; +} +/* line 139, ../src/screen.sass */ +#player nav#controls #like { + color: #ee44bb; +} +/* line 141, ../src/screen.sass */ +#player nav#controls #like.liked { + color: #4444ff; +} +/* line 143, ../src/screen.sass */ +#player nav#controls #mute.muted { + background-color: white; + color: black; +} + +/* line 146, ../src/screen.sass */ +#playlistbg { + position: absolute; + background-color: black; + opacity: 0.3; +} + +/* line 150, ../src/screen.sass */ +#playlist { + position: absolute; + z-index: 90; + width: 100%; + overflow-y: auto; + overflow-x: hidden; +} +/* line 156, ../src/screen.sass */ +#playlist ul#queue { + width: 100%; +} +/* line 161, ../src/screen.sass */ +#playlist ul#queue li { + padding: 5px; + display: block; + cursor: pointer; + border-bottom: 1px solid #333333; +} +/* line 166, ../src/screen.sass */ +#playlist ul#queue li span.title { + color: #dddddd; + display: block; + padding: 5px; + z-index: 1; +} +/* line 171, ../src/screen.sass */ +#playlist ul#queue li span.title:hover { + color: #dd88ff; + cursor: pointer; +} +/* line 174, ../src/screen.sass */ +#playlist ul#queue li a.user { + float: right; + font-size: 14px; + padding: 0 5px; + color: #d33682; + padding: 5px; + z-index: 2; + text-decoration: none; +} +/* line 182, ../src/screen.sass */ +#playlist ul#queue li span.like { + float: right; + font-size: 14px; + color: #657b83; + padding: 5px; + z-index: 3; +} +/* line 188, ../src/screen.sass */ +#playlist ul#queue li span.like.liked { + color: #c357a3; +} +/* line 190, ../src/screen.sass */ +#playlist ul#queue li.playing { + background-color: #222222; +} +/* line 192, ../src/screen.sass */ +#playlist ul#queue li.playing span.title { + color: white; +} + +/* line 194, ../src/screen.sass */ +#room, user { + padding: 10px; +} +/* line 196, ../src/screen.sass */ +#room label, user label { + color: #657b83; + width: 100px; + text-align: right; + padding-right: 5px; + display: inline-block; +} +/* line 202, ../src/screen.sass */ +#room span, user span { + color: #073642; +} + +/* line 206, ../src/screen.sass */ +#curtain { + background: #080810; + opacity: 0.3; + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 10; + display: none; +} + +/* line 216, ../src/screen.sass */ +#login { + background: black; + display: block; + width: 50%; + top: 20%; + left: 50%; + margin-left: -25%; + padding: 30px; + padding-bottom: 60px; + z-index: 20; + position: fixed; + text-align: center; + box-shadow: 0 5px 10px black; +} +/* line 229, ../src/screen.sass */ +#login img { + margin-bottom: 20px; +} +/* line 231, ../src/screen.sass */ +#login label { + min-width: 20%; + display: inline-block; + text-align: right; + padding-right: 10px; + font-size: 18px; + color: white; +} +/* line 238, ../src/screen.sass */ +#login #button-shim { + width: 30%; + display: inline-block; + text-align: left; + padding: 10px 10px 10px 0; + margin-right: 20px; +} +/* line 244, ../src/screen.sass */ +#login #button-shim button { + padding: 2px 5px; +} +/* line 246, ../src/screen.sass */ +#login #login-username, #login #login-password { + width: 30%; + margin-right: 10px; + font-size: 24px; + border: 2px solid #880066; + padding: 10px; +} +/* line 252, ../src/screen.sass */ +#login a { + color: #6688ff; + text-decoration: underline; +} + +/* line 255, ../src/screen.sass */ +#sitez { + position: fixed; + top: 24px; + right: 30px; + color: #888888; + z-index: 82; + color: #aaaaaa; +} +/* line 262, ../src/screen.sass */ +#sitez a, #sitez #logout { + cursor: pointer; + color: #aaaaaa; + text-decoration: underline; +} +/* line 266, ../src/screen.sass */ +#sitez select option { + color: #666666; + text-decoration: none; + padding-right: 3px; +} +/* line 270, ../src/screen.sass */ +#sitez button { + font-size: 24px; + background: #030303; + color: white; + padding: 2px; +} +/* line 275, ../src/screen.sass */ +#sitez a#faqlink { + color: #88ffff; +} +/* line 277, ../src/screen.sass */ +#sitez div { + cursor: pointer; + display: inline-block; + padding: 8px 8px 5px 8px; +} +/* line 281, ../src/screen.sass */ +#sitez div:hover { + -moz-border-radius: 10px 10px 3px 3px; + -webkit-border-radius: 10px 10px 3px 3px; + -o-border-radius: 10px 10px 3px 3px; + border-radius: 10px 10px 3px 3px; + background-color: #333333; +} +/* line 284, ../src/screen.sass */ +#sitez div.opened { + -moz-border-radius: 10px 10px 3px 3px; + -webkit-border-radius: 10px 10px 3px 3px; + -o-border-radius: 10px 10px 3px 3px; + border-radius: 10px 10px 3px 3px; + background-color: #333333; +} + +/* line 287, ../src/screen.sass */ +nav { + z-index: 10; + margin: 0 auto; +} +/* line 290, ../src/screen.sass */ +nav button, nav #video-link { + background-color: #333333; + color: #dddddd; + border: 0; + font-size: 14px; + min-width: 40px; + min-height: 20px; + padding: 5px 5px; + position: relative; + top: -1px; +} +/* line 293, ../src/screen.sass */ +nav button:hover, nav #video-link:hover { + background-color: #666666; + color: white; +} +/* line 303, ../src/screen.sass */ +nav #video-link { + top: -2px; + padding-bottom: 6px; +} + +/* line 306, ../src/screen.sass */ +#lunacy { + z-index: 40; + background: #dddddd; + color: black; + display: block; + width: 700px; + position: fixed; + top: 20%; + left: 50%; + margin-left: -390px; + opacity: 0.7; + padding: 40px; + text-align: center; + font-size: 48px; +} + +/* line 320, ../src/screen.sass */ +#plea { + z-index: 30; + background: #dddddd; + color: black; + display: block; + width: 400px; + position: fixed; + top: 20%; + left: 50%; + margin-left: -240px; + opacity: 0.7; + padding: 40px; + text-align: center; + font-size: 48px; +} + +/* line 335, ../src/screen.sass */ +#logobg { + position: fixed; + top: 10px; + left: 0; + width: 100%; + height: 64px; + background-color: black; + opacity: 0.8; + z-index: 45; +} + +/* line 344, ../src/screen.sass */ +#logo { + position: fixed; + top: 10px; + z-index: 46; + left: 10px; +} +/* line 349, ../src/screen.sass */ +#logo a { + float: left; + display: inline-block; +} +/* line 352, ../src/screen.sass */ +#logo a img { + display: inline-block; +} +/* line 354, ../src/screen.sass */ +#logo #scanjam { + padding: 10px 15px 10px 0; +} +/* line 356, ../src/screen.sass */ +#logo #preamble { + display: inline-block; + font-size: 12px; + color: white; + max-width: 80px; + padding-left: 15px; +} +/* line 362, ../src/screen.sass */ +#logo h1 { + padding: 15px 15px 0 10px; + font-size: 34px; + color: white; + font-weight: normal; + font-style: italic; + font-family: georgia, garamond, serif; + color: #88ffff; + display: inline-block; +} +/* line 371, ../src/screen.sass */ +#logo h2 { + display: inline-block; + font-size: 16px; + color: white; + position: relative; + left: 20px; + top: -5px; + color: #839496; +} +/* line 379, ../src/screen.sass */ +#logo h2 a { + display: inline; + float: none; + color: #268bd2; +} +/* line 383, ../src/screen.sass */ +#logo h2 img { + max-height: 20px; + max-width: 20px; + display: inline-block; +} +/* line 387, ../src/screen.sass */ +#logo h2.preamblish { + font-size: 12px; + color: white; + max-width: 250px; + left: 0; + top: 9px; + padding-right: 20px; +} +/* line 394, ../src/screen.sass */ +#logo h2.radio { + font-size: 12px; + top: -8px; + left: 30px; +} +/* line 395, ../src/screen.sass */ +#logo h2.radio a { + color: #ddeeff; +} +/* line 400, ../src/screen.sass */ +#logo #likebutton { + display: inline-block; + display: none; + position: relative; + top: -5px; + width: 90px; + height: 21px; + z-index: -1; +} + +/* line 408, ../src/screen.sass */ +#glasspopcornlogo { + position: absolute; + top: 80px; + left: 15px; + pointer-events: none; + opacity: 0.5; + z-index: 8; +} +/* line 415, ../src/screen.sass */ +#glasspopcornlogo img { + z-index: 8; + pointer-events: none; +} + +/* line 418, ../src/screen.sass */ +#likereport { + position: fixed; + width: 100px; + padding: 20px; + z-index: 100; + overflow-y: hidden; +} +/* line 424, ../src/screen.sass */ +#likereport a { + background-color: #222222; + display: block; + text-decoration: none; + padding: 5px; + opacity: 0.95; +} + +/* line 431, ../src/screen.sass */ +#form { + position: fixed; + bottom: 10px; + left: 10px; + padding: 10px 10px 10px 10px; + background-color: black; + white-space: nowrap; + z-index: 31; +} +/* line 439, ../src/screen.sass */ +#form #chat-message { + border: 0; + outline: 0; + font-size: 18px; + padding: 5px; + margin-right: 5px; + background-color: #f8f8f8; +} +/* line 446, ../src/screen.sass */ +#form #chat-message:hover { + background-color: white; +} +/* line 448, ../src/screen.sass */ +#form button { + margin: 0; + outline: 0; + border: 0; + background-color: #333333; + color: #dddddd; + padding: 4px 6px; + position: relative; + top: 1px; + font-size: 20px; +} +/* line 454, ../src/screen.sass */ +#form button:hover { + background-color: #666666; + color: white; +} +/* line 462, ../src/screen.sass */ +#form #videochat-badge { + cursor: auto; + pointer-events: none; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + -o-border-radius: 8px; + border-radius: 8px; + font-size: 10px; + background-color: red; + color: white; + position: absolute; + width: 10px; + height: 10px; + text-align: center; + padding: 2px 2px; + display: none; + z-index: 32; +} + +/* line 476, ../src/screen.sass */ +#formbg { + background-color: black; + opacity: 0.7; +} + +/* line 480, ../src/screen.sass */ +#chatbg { + position: fixed; + bottom: 100px; + left: 20px; + padding: 10px; + width: 600px; + background-color: black; + padding: 0 10px 5px 10px; + opacity: 0.25; + z-index: 9; +} + +/* line 491, ../src/screen.sass */ +#chat { + padding: 0 10px 5px 10px; + position: fixed; + font-size: 18px; + line-height: 26px; + vertical-align: bottom; + overflow-y: hidden; + overflow-x: hidden; + background: transparent; + z-index: 30; +} +/* line 501, ../src/screen.sass */ +#chat a { + font-weight: normal; + font-size: 11px; + opacity: 0.8; + color: #44bbff; + text-decoration: underline; +} +/* line 507, ../src/screen.sass */ +#chat a.u { + font-weight: bold; + padding-right: 10px; + display: inline-block; + color: #ff0066; + opacity: 1; + text-decoration: none; + min-width: 80px; + overflow-x: hidden; + font-size: 16px; + line-height: 26px; + vertical-align: bottom; +} +/* line 519, ../src/screen.sass */ +#chat a.pic { + opacity: 1; +} +/* line 521, ../src/screen.sass */ +#chat span { + color: honeydew; + text-shadow: black 0 0 2px; + font-weight: bold; +} +/* line 525, ../src/screen.sass */ +#chat .ytlink { + font-size: 11px; + color: #88dddd; + cursor: pointer; + text-decoration: underline; + text-shadow: none; + text-shadow: black 0 0 1px; + font-weight: normal; + opacity: 1; +} +/* line 534, ../src/screen.sass */ +#chat .ytlink:hover { + color: #dd66ff; + text-decoration: underline; + text-shadow: black 0 0 1px; +} +/* line 538, ../src/screen.sass */ +#chat .ytlink.playing { + color: #ddaaff; + font-size: 12px; + font-weight: normal; + text-decoration: none; +} +/* line 543, ../src/screen.sass */ +#chat .ytlink.playing::before { + text-decoration: none; + content: "\25b6 "; + font-weight: normal; +} +/* line 547, ../src/screen.sass */ +#chat img { + max-width: 350px; + max-height: 400px; + border: 0; +} +/* line 551, ../src/screen.sass */ +#chat #shim { + width: 10px; + height: 500px; +} + +/* line 554, ../src/screen.sass */ +#chat.fullscreen { + overflow-y: hidden; +} +/* line 556, ../src/screen.sass */ +#chat.fullscreen:hover { + overflow-y: hidden; +} + +/* line 558, ../src/screen.sass */ +#webcam-container { + z-index: 100; + position: fixed; + right: 500px; + bottom: 100px; + background-color: black; + padding: 10px; + display: none; +} + +/* line 566, ../src/screen.sass */ +#lastlogbg { + position: fixed; + background-color: black; + opacity: 0.5; + padding: 10px; + z-index: 31; +} + +/* line 572, ../src/screen.sass */ +#lastlogbox { + position: fixed; + font-size: 14px; + padding: 10px; + z-index: 32; +} +/* line 577, ../src/screen.sass */ +#lastlogbox h4 { + font-size: 12px; + font-weight: bold; + color: #eeeeee; + padding-bottom: 5px; +} +/* line 582, ../src/screen.sass */ +#lastlogbox ul { + border-top: 1px solid black; +} + +/* line 584, ../src/screen.sass */ +li.ll { + list-style-type: none; +} +/* line 586, ../src/screen.sass */ +li.ll a { + color: #d0e0fe; + padding: 5px 0; + border-bottom: 1px solid black; + display: block; + text-shadow: black 0 0 2px; + text-decoration: underline; + font-size: 16px; + font-weight: bold; +} + +/* line 596, ../src/screen.sass */ +#flower { + position: absolute; + top: 0; + right: 10%; + z-index: 50; + pointer-events: none; + display: none; +} + +/* line 603, ../src/screen.sass */ +#plant { + position: absolute; + bottom: 0; + right: 50%; + z-index: 50; + pointer-events: none; + display: none; +} + +/* line 610, ../src/screen.sass */ +#msg { + display: none; +} + +/* line 612, ../src/screen.sass */ +button { + font-size: 24px; + background: #030303; + color: white; + padding: 2px; +} + +/* line 617, ../src/screen.sass */ +#settings-container, #rooms-container, #about-container, #videochat-container { + position: fixed; + top: 59px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + -o-border-radius: 10px; + border-radius: 10px; + right: 20px; + z-index: 80; + width: 500px; + background-color: #222222; + color: #657b83; + display: none; + box-shadow: 0 5px 10px black; +} +/* line 628, ../src/screen.sass */ +#settings-container .close, #rooms-container .close, #about-container .close, #videochat-container .close { + margin: 10px 10px 0 0; + float: right; + color: #ded8c5; + width: 20px; + height: 14px; + font-size: 14px; + padding: 3px 0; + text-align: center; + vertical-align: middle; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + -o-border-radius: 10px; + border-radius: 10px; + background-color: #000b16; +} +/* line 640, ../src/screen.sass */ +#settings-container .close:hover, #rooms-container .close:hover, #about-container .close:hover, #videochat-container .close:hover { + color: white; + cursor: pointer; +} +/* line 643, ../src/screen.sass */ +#settings-container #rooms-loading, #rooms-container #rooms-loading, #about-container #rooms-loading, #videochat-container #rooms-loading { + margin: 10px; +} +/* line 645, ../src/screen.sass */ +#settings-container h5, #rooms-container h5, #about-container h5, #videochat-container h5 { + font-size: 16px; + color: #93a1a1; + display: block; + padding: 10px; + background-color: #333333; + -moz-border-radius: 10px 10px 0 0; + -webkit-border-radius: 10px 10px 0 0; + -o-border-radius: 10px 10px 0 0; + border-radius: 10px 10px 0 0; +} +/* line 652, ../src/screen.sass */ +#settings-container p, #rooms-container p, #about-container p, #videochat-container p { + padding: 10px 10px 10px 10px; + font-size: 14px; + line-height: 18px; + color: #b3c1c1; + background-color: #1b1b1f; +} +/* line 658, ../src/screen.sass */ +#settings-container label, #rooms-container label, #about-container label, #videochat-container label { + margin: 2px 0 0 10px; + font-size: 14px; + color: #657b83; + width: 150px; + text-align: right; + padding-right: 5px; + display: inline-block; +} +/* line 666, ../src/screen.sass */ +#settings-container span, #rooms-container span, #about-container span, #videochat-container span { + margin: 2px 10px 0 0; + color: #839496; + font-size: 14px; +} +/* line 670, ../src/screen.sass */ +#settings-container span#room-mod-tag a, #rooms-container span#room-mod-tag a, #about-container span#room-mod-tag a, #videochat-container span#room-mod-tag a { + float: right; + padding: 0 10px 10px 0; + display: block; + color: #dc322f; +} +/* line 675, ../src/screen.sass */ +#settings-container span#gallery-link a, #rooms-container span#gallery-link a, #about-container span#gallery-link a, #videochat-container span#gallery-link a { + color: #268bd2; + padding: 0 10px 10px 0; + display: block; + float: right; +} +/* line 680, ../src/screen.sass */ +#settings-container button, #rooms-container button, #about-container button, #videochat-container button { + position: relative; + left: 3px; +} +/* line 683, ../src/screen.sass */ +#settings-container input, #rooms-container input, #about-container input, #videochat-container input { + margin: 2px 10px 0 0; + width: 100px; +} +/* line 686, ../src/screen.sass */ +#settings-container #room-topic, #settings-container #room-bg, #settings-container #room-bgreset, #rooms-container #room-topic, #rooms-container #room-bg, #rooms-container #room-bgreset, #about-container #room-topic, #about-container #room-bg, #about-container #room-bgreset, #videochat-container #room-topic, #videochat-container #room-bg, #videochat-container #room-bgreset { + width: 300px; +} +/* line 688, ../src/screen.sass */ +#settings-container #room-settings-save, #rooms-container #room-settings-save, #about-container #room-settings-save, #videochat-container #room-settings-save { + font-size: 14px; +} +/* line 690, ../src/screen.sass */ +#settings-container .shim, #rooms-container .shim, #about-container .shim, #videochat-container .shim { + width: 1px; + height: 10px; +} +/* line 693, ../src/screen.sass */ +#settings-container ul, #rooms-container ul, #about-container ul, #videochat-container ul { + text-decoration: none; + cursor: pointer; +} +/* line 696, ../src/screen.sass */ +#settings-container ul li, #rooms-container ul li, #about-container ul li, #videochat-container ul li { + list-style-type: none; + padding: 10px; + cursor: pointer; + border-top: 1px solid black; + background-color: transparent; + text-decoration: none; + font-size: 14px; + color: #83a1a1; +} +/* line 705, ../src/screen.sass */ +#settings-container ul li:hover, #rooms-container ul li:hover, #about-container ul li:hover, #videochat-container ul li:hover { + color: #fdf6e3; +} +/* line 707, ../src/screen.sass */ +#settings-container ul a li, #rooms-container ul a li, #about-container ul a li, #videochat-container ul a li { + color: #83a1a1; + text-decoration: none; +} +/* line 710, ../src/screen.sass */ +#settings-container ul a, #rooms-container ul a, #about-container ul a, #videochat-container ul a { + color: #83a1a1; + text-decoration: none; +} + +/* line 713, ../src/screen.sass */ +#rooms-container { + right: 20px; + z-index: 80; + width: 300px; + max-height: 300px; +} + +/* line 718, ../src/screen.sass */ +#about-container { + right: 20px; + z-index: 80; + width: 300px; +} + +/* line 722, ../src/screen.sass */ +#videochat-container { + right: 20px; + z-index: 80; + width: 300px; + display: none; + cursor: pointer; +} +/* line 728, ../src/screen.sass */ +#videochat-container #videochat-disable { + display: none; +} + +/* line 730, ../src/screen.sass */ +#tokbox-embed { + position: absolute; + bottom: 10px; + left: 10px; + height: 150px; + z-index: 80; + display: none; + overflow-y: auto; +} +/* line 738, ../src/screen.sass */ +#tokbox-embed #tokbox-publisher, #tokbox-embed #tokbox-subscribers { + float: left; +} +/* line 740, ../src/screen.sass */ +#tokbox-embed #tokbox-publisher object, #tokbox-embed #tokbox-subscribers object { + float: left; +} +/* line 742, ../src/screen.sass */ +#tokbox-embed #tokbox-settings { + position: absolute; + top: 0; + right: 10px; + padding: 5px; + font-size: 12px; + color: #bbbbbb; + background-color: black; + text-align: right; +} +/* line 751, ../src/screen.sass */ +#tokbox-embed #tokbox-settings button { + padding: 2px; + font-size: 12px; + background-color: #333333; + color: #888888; + min-width: 30px; +} +/* line 757, ../src/screen.sass */ +#tokbox-embed #tokbox-settings button.on { + background-color: #dd3333; + color: white; +} + +/* line 760, ../src/screen.sass */ +.roomhello { + width: 400px; + color: white; + padding: 10px; + font-size: 18px; + background-color: black; + cursor: pointer; + position: fixed; + top: 85px; + left: 15px; + opacity: 0.9; +} + +/* line 771, ../src/screen.sass */ +.modhello { + width: 400px; + color: white; + padding: 5px; + background-color: black; + cursor: pointer; + margin-top: 10px; +} + +/* line 778, ../src/screen.sass */ +.glitter { + pointer-events: none; + position: absolute; + z-index: 23; +} + +/* line 783, ../src/screen.sass */ +.arrow-play { + width: 0; + height: 0; + border-top: 4.5px solid transparent; + border-left: 9.5px solid white; + border-bottom: 4.5px solid transparent; + display: inline-block; +} + +/* line 790, ../src/screen.sass */ +.arrow-pause { + width: 0; + height: 0; + border-top: 5px solid white; + border-right: 2.5px solid white; + border-bottom: 4px solid white; + border-left: 0; + display: inline-block; +} + +/* line 798, ../src/screen.sass */ +.arrow-prev { + width: 0; + height: 0; + border-top: 4px solid transparent; + border-right: 4px solid white; + border-bottom: 4px solid transparent; + display: inline-block; +} + +/* line 805, ../src/screen.sass */ +.arrow-next { + width: 0; + height: 0; + border-top: 4px solid transparent; + border-left: 4px solid white; + border-bottom: 4px solid transparent; + display: inline-block; +} + +/* line 813, ../src/screen.sass */ +#search-terms { + font-size: 14px; + padding: 2px 2px; + width: 200px; + position: relative; + top: -4px; + left: -10px; + background-image: url("/img/magnify.png"); + background-position: right center; + background-repeat: no-repeat; + border: 0; + outline: 0; + background-color: #dddddd; +} +/* line 826, ../src/screen.sass */ +#search-terms:hover { + background-color: white; +} +/* line 828, ../src/screen.sass */ +#search-terms:focus { + background-color: white; +} + +/* line 830, ../src/screen.sass */ +#search-results-container { + position: fixed; + top: 53px; + right: 21px; + z-index: 100; + width: 334px; + border: 2px solid black; + background: #333333; + display: none; +} +/* line 839, ../src/screen.sass */ +#search-results-container #search-loading { + margin: 10px; +} +/* line 841, ../src/screen.sass */ +#search-results-container #search-instructions { + font-size: 11px; + color: white; + padding: 3px 3px 3px 38px; + background-color: black; + width: 100%; +} +/* line 847, ../src/screen.sass */ +#search-results-container #search-results { + height: 300px; + width: 100%; + overflow-x: hidden; + overflow-y: scroll; +} +/* line 852, ../src/screen.sass */ +#search-results-container #search-results li { + clear: both; + height: 54px; + overflow: hidden; + position: relative; + border-bottom: 2px solid black; + font-size: 12px; + line-height: 15px; + color: #bbbbbb; + opacity: 0.9; +} +/* line 858, ../src/screen.sass */ +#search-results-container #search-results li div.thumb { + width: 32px; + height: 54px; + float: left; + background-position: center center; + margin: 0 5px 0 0; + border-right: 2px solid black; + cursor: pointer; +} +/* line 866, ../src/screen.sass */ +#search-results-container #search-results li h4 { + white-space: nowrap; + overflow: hidden; + font-size: 14px; + color: white; + margin: 3px 0 3px 0; + cursor: pointer; +} +/* line 873, ../src/screen.sass */ +#search-results-container #search-results li span.metadata { + cursor: pointer; + display: block; + width: 200px; +} +/* line 882, ../src/screen.sass */ +#search-results-container #search-results li a.preview { + position: absolute; + bottom: 3px; + right: 5px; + color: #268bd2; + text-decoration: underline; +} +/* line 888, ../src/screen.sass */ +#search-results-container #search-results li:hover { + background: black; + opacity: 1; +} diff --git a/frontend/static/sass/stylesheets/sewergreats.css b/frontend/static/sass/stylesheets/sewergreats.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/sass/stylesheets/test.css b/frontend/static/sass/stylesheets/test.css new file mode 100644 index 0000000..3f12363 --- /dev/null +++ b/frontend/static/sass/stylesheets/test.css @@ -0,0 +1,478 @@ +/* line 17, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +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, 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, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; +} + +/* line 22, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +html { + line-height: 1; +} + +/* line 24, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +ol, ul { + list-style: none; +} + +/* line 26, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 28, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} + +/* line 30, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q, blockquote { + quotes: none; +} +/* line 103, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q:before, q:after, blockquote:before, blockquote:after { + content: ""; + content: none; +} + +/* line 32, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +a img { + border: none; +} + +/* line 116, /var/lib/gems/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { + display: block; +} + +/* line 8, ../src/test.sass */ +body { + font-family: trebuchet ms; +} + +/* line 10, ../src/test.sass */ +#msg { + position: fixed; + top: 10px; + right: 10px; + padding: 5px; + width: 250px; + max-height: 80%; + font-size: 12px; + background-color: #eeeeee; + overflow-y: scroll; + overflow-x: hidden; + color: #333333; + z-index: 100; +} +/* line 23, ../src/test.sass */ +#msg strong { + color: #859900; +} +/* line 25, ../src/test.sass */ +#msg em { + color: #dc322f; +} +/* line 27, ../src/test.sass */ +#msg b { + color: #002b36; +} + +/* line 30, ../src/test.sass */ +#player #projector { + display: block; + position: absolute; + background-color: black; + width: 320px; + height: 240px; +} +/* line 36, ../src/test.sass */ +#player #projector #screen { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 20; +} +/* line 43, ../src/test.sass */ +#player #projector #screen #soundcloud { + position: absolute; + top: 0; + right: 0; + z-index: 21; +} +/* line 48, ../src/test.sass */ +#player #projector #screen #soundcloud-dl { + position: absolute; + top: 81px; + right: 10px; + padding: 5px; + background-color: black; + z-index: 20; +} +/* line 54, ../src/test.sass */ +#player #projector #screen #soundcloud-dl * { + color: #839496; +} +/* line 57, ../src/test.sass */ +#player #projector #screen #soundcloud-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 20; +} +/* line 64, ../src/test.sass */ +#player #projector #screen #soundcloud-img img { + max-width: 100%; + max-height: 100%; +} +/* line 67, ../src/test.sass */ +#player #projector #ytscreen { + z-index: 19; + position: absolute; + top: 0; + left: 0; +} +/* line 72, ../src/test.sass */ +#player #projector #video-title { + position: absolute; + bottom: 0; + left: 0; + color: #998888; + z-index: 20; +} +/* line 78, ../src/test.sass */ +#player #projector #projimg { + width: 100%; + height: 100%; +} +/* line 81, ../src/test.sass */ +#player nav { + position: absolute; + top: 260px; +} +/* line 84, ../src/test.sass */ +#player nav button { + color: black; +} +/* line 86, ../src/test.sass */ +#player nav #scan.blinkOn { + background-color: white; + color: black; +} +/* line 89, ../src/test.sass */ +#player nav #scan.blinkOff { + background-color: black; + color: white; +} +/* line 92, ../src/test.sass */ +#player nav #like { + color: #ee44bb; +} +/* line 94, ../src/test.sass */ +#player nav #like.liked { + color: #4444ff; +} +/* line 96, ../src/test.sass */ +#player #playlist { + position: absolute; + left: 330px; + z-index: 20; + width: 300px; +} +/* line 101, ../src/test.sass */ +#player #playlist ul#queue { + width: 100%; +} +/* line 103, ../src/test.sass */ +#player #playlist ul#queue li { + display: block; + cursor: pointer; + border-bottom: 1px solid #dddddd; +} +/* line 107, ../src/test.sass */ +#player #playlist ul#queue li span.title { + display: block; + padding: 5px; + z-index: 1; +} +/* line 111, ../src/test.sass */ +#player #playlist ul#queue li a.user { + float: right; + padding: 0 5px; + color: #d33682; + padding: 5px; + z-index: 2; +} +/* line 117, ../src/test.sass */ +#player #playlist ul#queue li span.like { + float: right; + color: #657b83; + padding: 5px; + z-index: 3; +} +/* line 122, ../src/test.sass */ +#player #playlist ul#queue li span.like.liked { + color: #a35783; +} +/* line 124, ../src/test.sass */ +#player #playlist ul#queue li.playing { + background-color: #073642; + color: white; +} + +/* line 127, ../src/test.sass */ +#room, #user { + padding: 10px; +} +/* line 129, ../src/test.sass */ +#room label, #user label { + color: #657b83; + width: 200px; + text-align: right; + padding-right: 5px; + display: inline-block; +} +/* line 135, ../src/test.sass */ +#room span, #user span { + color: #93a1a1; +} + +/* line 137, ../src/test.sass */ +a { + color: #268bd2; +} +/* line 139, ../src/test.sass */ +a:visited { + color: #6c71c4; +} + +/* line 141, ../src/test.sass */ +body { + font-size: 16px; +} + +/* line 143, ../src/test.sass */ +#bg { + position: fixed; + top: 0; + left: 0; + z-index: -1; + opacity: 0.3; +} + +/* line 149, ../src/test.sass */ +#pnp { + position: fixed; + right: 20px; + bottom: 20px; + width: 400px; + height: 285px; + background: white; +} + +/* line 156, ../src/test.sass */ +#stats { + position: fixed; + right: 20px; + top: 20px; + width: 390px; + font-size: 14px; + background-color: white; + padding: 5px; + display: none; + overflow-y: scroll; +} + +/* line 166, ../src/test.sass */ +#videos { + width: 800px; + padding-right: 5px; +} +/* line 169, ../src/test.sass */ +#videos li { + width: 100%; + list-style-type: none; + display: block; + margin-top: 3px; +} +/* line 174, ../src/test.sass */ +#videos li a, #videos li span { + display: inline-block; + margin-left: 5px; +} +/* line 177, ../src/test.sass */ +#videos li .date { + opacity: 0.8; + width: 60px; + text-align: right; + font-size: 14px; +} +/* line 182, ../src/test.sass */ +#videos li .time { + opacity: 0.8; + width: 40px; + text-align: right; + font-size: 14px; +} +/* line 187, ../src/test.sass */ +#videos li .user { + font-size: 14px; + width: 100px; + overflow: hidden; +} +/* line 191, ../src/test.sass */ +#videos li .type { + width: 20px; + text-align: center; + font-variant: small-caps; +} +/* line 195, ../src/test.sass */ +#videos li .title { + text-decoration: none; + width: 300px; + overflow: hidden; + white-space: nowrap; +} +/* line 201, ../src/test.sass */ +#videos li .remove { + color: #dc322f; + width: 200px; + cursor: pointer; + text-decoration: underline; + text-transform: uppercase; + opacity: 0.5; +} +/* line 209, ../src/test.sass */ +#videos li:hover .remove { + opacity: 1; +} +/* line 211, ../src/test.sass */ +#videos li:hover .title { + text-decoration: underline; +} + +/* line 213, ../src/test.sass */ +a#return-link { + position: absolute; + top: 10px; + left: 10px; + font-size: 14px; +} + +/* line 218, ../src/test.sass */ +h1 { + color: #bbbbbb; + font-size: 48px; + text-align: center; + width: 80%; + padding-bottom: 10px; +} + +/* line 224, ../src/test.sass */ +h2 { + color: #bbbbbb; + font-size: 24px; + padding-left: 20px; + text-transform: uppercase; +} +/* line 229, ../src/test.sass */ +h2 #room-name { + color: white; +} + +/* line 231, ../src/test.sass */ +#search-terms { + font-size: 14px; + padding: 2px 2px; + width: 200px; + background-image: url("/img/magnify.png"); + background-position: right center; + background-repeat: no-repeat; + border: 0; + outline: 0; + background-color: #dddddd; +} +/* line 241, ../src/test.sass */ +#search-terms:hover { + background-color: white; +} +/* line 243, ../src/test.sass */ +#search-terms:focus { + background-color: white; +} + +/* line 245, ../src/test.sass */ +#search-results-container { + width: 350px; + border: 2px solid black; + background: #333333; + display: none; +} +/* line 250, ../src/test.sass */ +#search-results-container #search-loading { + margin: 10px; +} +/* line 252, ../src/test.sass */ +#search-results-container #search-results { + height: 400px; + width: 100%; + overflow-x: hidden; + overflow-y: scroll; +} +/* line 257, ../src/test.sass */ +#search-results-container #search-results li { + clear: both; + height: 54px; + overflow: hidden; + border-bottom: 2px solid black; + font-size: 12px; + line-height: 15px; + color: #bbbbbb; + opacity: 0.9; + cursor: pointer; +} +/* line 262, ../src/test.sass */ +#search-results-container #search-results li div.thumb { + width: 80px; + height: 54px; + float: left; + background-position: center center; + margin: 0 5px 0 0; + border-right: 2px solid black; +} +/* line 269, ../src/test.sass */ +#search-results-container #search-results li h4 { + white-space: nowrap; + overflow: hidden; + font-size: 14px; + color: white; + margin: 3px 0 3px 0; +} +/* line 281, ../src/test.sass */ +#search-results-container #search-results li:hover { + background: black; + cursor: pointer; + opacity: 1; +} diff --git a/frontend/static/sass/stylesheets/tiny.css b/frontend/static/sass/stylesheets/tiny.css new file mode 100644 index 0000000..a12c01b --- /dev/null +++ b/frontend/static/sass/stylesheets/tiny.css @@ -0,0 +1,69 @@ +/* line 1, ../src/tiny.sass */ +#logo, #form, #logobg, #sitez { + opacity: 0; + z-index: -20; +} + +/* line 4, ../src/tiny.sass */ +#lastlogbox *, #lastlogbox h4 { + font-size: 5px; + padding: 1px; +} + +/* line 7, ../src/tiny.sass */ +#lastlogbox { + padding: 1px; +} + +/* line 9, ../src/tiny.sass */ +#chat { + font-size: 6px; + line-height: 120%; + overflow-y: hidden; +} +/* line 13, ../src/tiny.sass */ +#chat a.u { + min-width: 10px; +} +/* line 15, ../src/tiny.sass */ +#chat img { + max-height: 30px; + max-width: 30px; +} + +/* line 18, ../src/tiny.sass */ +#player *, #playlist *, #queue * { + font-size: 5px; +} + +/* line 20, ../src/tiny.sass */ +#playlist ul#queue li { + padding: 1px; +} + +/* line 22, ../src/tiny.sass */ +#playlist ul#queue li span.like { + font-size: 5px; +} + +/* line 24, ../src/tiny.sass */ +#playlist ul#queue li a.user { + font-size: 5px; +} + +/* line 26, ../src/tiny.sass */ +nav button { + font-size: 10px; + padding: 1px; + border: 1px solid #888888; + min-width: 10px; + max-width: 10px; + min-height: 10px; + max-height: 10px; + overflow: hidden; +} + +/* line 35, ../src/tiny.sass */ +*, #chat { + overflow: hidden; +} diff --git a/frontend/static/sass/stylesheets/top.css b/frontend/static/sass/stylesheets/top.css new file mode 100644 index 0000000..802b6da --- /dev/null +++ b/frontend/static/sass/stylesheets/top.css @@ -0,0 +1,77 @@ +/* line 1, ../src/top.sass */ +body { + background-color: #311296; + overflow: hidden; +} + +/* line 4, ../src/top.sass */ +#bg { + position: fixed; + top: 0; + left: 0; + height: 100%; + width: 100%; + display: block; + opacity: 1; + background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.11, #311296), color-stop(0.67, #8f26ff), color-stop(0.84, #9d42ff)); + background-image: -moz-linear-gradient(center bottom, #311296 11%, #8f26ff 67%, #9d42ff 84%); +} +/* line 14, ../src/top.sass */ +#bg img { + width: 100%; + height: 100%; +} + +/* line 17, ../src/top.sass */ +#plant1 { + z-index: -2; + position: fixed; + left: -200px; + bottom: 0; +} + +/* line 22, ../src/top.sass */ +#plant2 { + z-index: -2; + position: fixed; + right: -200px; + bottom: 0; +} + +/* line 27, ../src/top.sass */ +.cloudleft { + background-image: url(/static/other_rooms/img/cloudz1.png); + position: fixed; + bottom: 0; + left: 0; + width: 600px; + height: 400px; + opacity: 0.7; + pointer-events: none; + z-index: -1; +} + +/* line 37, ../src/top.sass */ +.cloudright { + background-image: url(/static/other_rooms/img/cloudz2.png); + position: fixed; + bottom: 0; + right: 0; + width: 600px; + height: 400px; + opacity: 0.8; + pointer-events: none; + z-index: -1; +} + +/* line 47, ../src/top.sass */ +.shimmer { + margin: 0 0 -20px 0; + opacity: 0.5; +} + +/* line 50, ../src/top.sass */ +.shimmer2 { + margin: 0 0 -40px 0; + opacity: 0.5; +} diff --git a/frontend/static/sass/stylesheets/waterfall.css b/frontend/static/sass/stylesheets/waterfall.css new file mode 100644 index 0000000..c62049c --- /dev/null +++ b/frontend/static/sass/stylesheets/waterfall.css @@ -0,0 +1,29 @@ +#logo h1 + { + color: #dde; + } +#lastlogbg + { + opacity: 0.8; + } +#controls button#like + { + color: #06f; + } +#chat a.u + { + color: #ddd; + } +#chat span a.ytlink + { + color: #8cf; + } +#chat span + { + color: #000; + text-shadow: #fff 0 0 3px; + } +#chat span .ytlink.playing + { + color: #bef; + } diff --git a/frontend/static/search/.htaccess b/frontend/static/search/.htaccess new file mode 100644 index 0000000..a8d5d20 --- /dev/null +++ b/frontend/static/search/.htaccess @@ -0,0 +1,2 @@ +DirectoryIndex /search/index.html + diff --git a/frontend/static/search/index.html b/frontend/static/search/index.html new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/stylesheets/src/avatar.css b/frontend/static/stylesheets/src/avatar.css new file mode 100644 index 0000000..6f237a8 --- /dev/null +++ b/frontend/static/stylesheets/src/avatar.css @@ -0,0 +1 @@ +table{float:left}.avatar-right{left:250px}.message{vertical-align:top}.tri{vertical-align:top;height:100%}.triangle-left{width:0;height:0;border-top:10px solid transparent;border-bottom:5px solid transparent;border-right:25px solid #fff;position:relative;top:10px;left:5px;margin-left:-16px}.triangle-right{width:0;height:0;border-top:10px solid transparent;border-bottom:5px solid transparent;border-left:25px solid #fff;position:relative;top:10px;margin-left:-12px}.message .message-blurb{box-shadow:2px 2px 10px #123;max-width:250px;font-family:"Lucida Sans Unicode","Lucida Grande",sans-serif;background-color:#fff;border-top:2px solid #f0f0f8;border-left:2px solid #ebeeef;border-right:2px solid #ddd;border-bottom:2px solid #ddd;-moz-border-radius:20px;-webkit-border-radius:20px;padding:10px;color:#222;word-wrap:break-word}#chat img{max-width:250px;max-height:250px}#chat .ytlink:hover{color:#f3c}#chat .ytlink{color:#c3d}#chat .ytlink.playing{color:#60b}div.frame{display:inline-block;padding:2px;height:300px;overflow:visible} diff --git a/frontend/static/stylesheets/src/calendar.css b/frontend/static/stylesheets/src/calendar.css new file mode 100644 index 0000000..fceae74 --- /dev/null +++ b/frontend/static/stylesheets/src/calendar.css @@ -0,0 +1 @@ +body{background-color:#f8f8f8;overflow:hidden}#calendar{position:absolute;z-index:10}#calendar *{font-size:18px}#playlist ul#queue li.playing span.score{color:#bbb}#playlist ul#queue li span.score{color:#333}#playlist ul#queue li span.title{color:#222}#player{z-index:6}#playlistbg{z-index:7;background-color:#f8f8f8}#water-cooler{position:fixed;bottom:-10px;left:-30px;height:500px;z-index:7}#office-plant{position:fixed;bottom:20px;left:160px;z-index:8}#carpet{position:fixed;width:100%;height:70px;bottom:0;left:0;background-color:#fff;z-index:6}#bg{opacity:0.1;display:none}#likebutton{position:fixed;right:20px;top:30px;opacity:0.7}#calendar{z-index:10;box-shadow:#666 5px 5px 10px;display:none}#logo h1{color:#b8d}#player #projector #video-title{bottom:5px;left:5px}.arrow-play{width:0;height:0;border-top:4.5px solid transparent;border-left:9.5px solid #fff;border-bottom:4.5px solid transparent;display:inline-block}.arrow-pause{width:0;height:0;border-top:5px solid #fff;border-right:2.5px solid #fff;border-bottom:4px solid #fff;border-left:0;display:inline-block}.arrow-prev{width:0;height:0;border-top:4px solid transparent;border-right:4px solid #fff;border-bottom:4px solid transparent;display:inline-block}.arrow-next{width:0;height:0;border-top:4px solid transparent;border-left:4px solid #fff;border-bottom:4px solid transparent;display:inline-block} diff --git a/frontend/static/stylesheets/src/diornights.css b/frontend/static/stylesheets/src/diornights.css new file mode 100644 index 0000000..c24259b --- /dev/null +++ b/frontend/static/stylesheets/src/diornights.css @@ -0,0 +1 @@ +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,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,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block}html{height:100%;width:100%}body{font-family:trebuchet ms,helvetica,arial,sans-serif;width:100%;height:100%;overflow-x:hidden;background:#fff;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0.28, #fff), color-stop(0.64, #faf7fa));background-image:-moz-linear-gradient(center bottom, #fff 28%, #faf7fa 64%);background-attachment:fixed;font-size:11px;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;color:#333}#bg{position:fixed;top:0;left:0;opacity:1;z-index:-3;width:100%;height:100%}#bg img{width:100%;height:100%;-ms-interpolation-mode:nearest-neighbor;image-rendering:-moz-crisp-edges;image-rendering:-webkit-optimize-contrast}#container{position:absolute;top:0;left:50%;width:950px;min-height:100%;margin-left:-475px;background:#fff;padding-bottom:2000px}#header{width:100%}#header #logo{height:160px}#header #likebutton{position:absolute;top:80px;right:30px}#menu{width:100%;border-top:1px solid #eee;border-bottom:1px solid #eee}#menu ul li{display:inline-block;width:153px;padding:5px 0 5px 0px;text-align:center}#menu ul li a{color:#333;text-decoration:none;display:block}#menu ul li a:hover{color:#33f}.box{width:300px;margin:10px 0 0 10px}.box img{width:100%;opacity:0.9}.box img:hover{opacity:1}.box#feed ul li{display:inline-block;height:32px;vertical-align:middle}.box#feed img{width:32px;height:32px} diff --git a/frontend/static/stylesheets/src/disaro.css b/frontend/static/stylesheets/src/disaro.css new file mode 100644 index 0000000..9787b67 --- /dev/null +++ b/frontend/static/stylesheets/src/disaro.css @@ -0,0 +1 @@ +#chat{text-align:center}#chat img{width:500px;max-width:none;max-height:none;border:10px solid #000;margin:10px auto 0;margin-right:100px}#chat a.u{font-size:14px;min-width:100px;letter-spacing:-1px;text-align:right;padding-right:20px}#chat *{font-size:14px}#chat .chatline{width:510px;background-color:#000;padding:5px;text-align:left;margin:0 auto;opacity:0.9;margin-right:100px}#chat span{color:#666;text-shadow:none;font-weight:normal} diff --git a/frontend/static/stylesheets/src/embed.css b/frontend/static/stylesheets/src/embed.css new file mode 100644 index 0000000..74c415c --- /dev/null +++ b/frontend/static/stylesheets/src/embed.css @@ -0,0 +1 @@ +body{background:#000;overflow:hidden}#logo,#form,#logobg,#sitez{opacity:0;z-index:-20}#lastlogbox *,#lastlogbox h4{font-size:12px;padding:1px}#lastlogbox{padding:1px}#chat{font-size:6px;line-height:120%;overflow-y:hidden}#chat a.u{min-width:10px}#chat img{max-height:30px;max-width:30px}#player{padding:0;margin:0}#player *,#playlist *,#queue *{font-size:12px}#playlist ul#queue li{padding:1px}#playlist ul#queue li.playing{background-color:#657}#playlist ul#queue li span.like{display:none}#playlist ul#queue li a.user{font-size:10px}#playlist{overflow-y:hidden}#queue{overflow-y:scroll}nav button{font-size:12px;padding:1px;overflow:hidden;position:relative;top:3px;left:3px}nav #video-link{position:relative;top:2px;left:3px;padding:4px;font-size:10px}#player nav#controls span.instructions{font-size:11px;color:#ddd;position:relative;top:3px;left:5px}#player nav#controls{z-index:90;overflow:visible}#player #projector #video-title{bottom:10px;left:2px}*,#chat{overflow:hidden}.arrow-play{width:0;height:0;border-top:4.5px solid transparent;border-left:9.5px solid #fff;border-bottom:4.5px solid transparent;display:inline-block}.arrow-pause{width:0;height:0;border-top:5px solid #fff;border-right:2.5px solid #fff;border-bottom:4px solid #fff;border-left:0;display:inline-block}.arrow-prev{width:0;height:0;border-top:4px solid transparent;border-right:4px solid #fff;border-bottom:4px solid transparent;display:inline-block}.arrow-next{width:0;height:0;border-top:4px solid transparent;border-left:4px solid #fff;border-bottom:4px solid transparent;display:inline-block} diff --git a/frontend/static/stylesheets/src/feederbleeder.css b/frontend/static/stylesheets/src/feederbleeder.css new file mode 100644 index 0000000..9787b67 --- /dev/null +++ b/frontend/static/stylesheets/src/feederbleeder.css @@ -0,0 +1 @@ +#chat{text-align:center}#chat img{width:500px;max-width:none;max-height:none;border:10px solid #000;margin:10px auto 0;margin-right:100px}#chat a.u{font-size:14px;min-width:100px;letter-spacing:-1px;text-align:right;padding-right:20px}#chat *{font-size:14px}#chat .chatline{width:510px;background-color:#000;padding:5px;text-align:left;margin:0 auto;opacity:0.9;margin-right:100px}#chat span{color:#666;text-shadow:none;font-weight:normal} diff --git a/frontend/static/stylesheets/src/frederick.css b/frontend/static/stylesheets/src/frederick.css new file mode 100644 index 0000000..3d6aeef --- /dev/null +++ b/frontend/static/stylesheets/src/frederick.css @@ -0,0 +1 @@ +#chat span{color:#004b27;text-shadow:0 0 2px #fff} diff --git a/frontend/static/stylesheets/src/gallery-white.css b/frontend/static/stylesheets/src/gallery-white.css new file mode 100644 index 0000000..e528b88 --- /dev/null +++ b/frontend/static/stylesheets/src/gallery-white.css @@ -0,0 +1 @@ +body{background:#fff}#loading{background:transparent;color:#e6f0f0;text-shadow:#e6f0f0 0 0 50px}#player{background:#fff}#player #projector{background-color:#000}#player #projector #video-title{color:#fff}#player nav#controls #scan.blinkOn{background-color:#fff;color:#000}#player nav#controls #scan.blinkOff{background-color:#000;color:#fff}#player nav#controls #like{color:#fae}#player nav#controls #like.liked{color:#88f}#playlistbg{background-color:#fff}#playlist ul#queue li{border-bottom:1px solid #ddd}#playlist ul#queue li span.title{color:#333}#playlist ul#queue li a.user{color:#d33682}#playlist ul#queue li span.like{color:#657b83}#playlist ul#queue li span.like.liked{color:#c357a3}#playlist ul#queue li.playing{background-color:#333}#playlist ul#queue li.playing span.title{color:#fff}#curtain{background:#080810;opacity:0.3}#login{background:#fff;box-shadow:0 5px 10px #000}#login label{color:#000}#login #button-shim button{padding:2px 5px}#login #login-username,#login #login-password{border:2px solid #806}#login a{color:#68f}#sitez div:hover{background-color:#333}#sitez div.opened{background-color:#333}nav button{background-color:#888}#logobg{background-color:#000;opacity:0.7}#logo h1{color:#8ff}#logo h2{color:#839496}#logo h2 a{color:#268bd2}#likereport a{background-color:#222;opacity:0.95}#form{background-color:#fff}#form #chat-message{border:1px solid #333}#form button{background-color:#ddd;color:#333}#form button:hover{background-color:#c8cbd6}#formbg{background-color:#fff;opacity:0.7}#chatbg{background-color:#fff;opacity:0.1}#chat{background:transparent}#chat a{color:#44f}#chat a.u{color:#f06;opacity:0.9}#chat a.pic{opacity:1}#chat span{color:#333;text-shadow:#000 0 0 0}#chat .ytlink{color:#8aaab3;text-shadow:#000 0 0 0}#chat .ytlink:hover{color:#11182f;text-shadow:#000 0 0 0}#chat .ytlink.playing{color:#c2b}#lastlogbg{background-color:#fff;opacity:0.3}#lastlogbox{opacity:0.8}#lastlogbox h4{color:#666}#lastlogbox ul{border-top:1px solid #ddd}li.ll a{color:#4a5a73;border-bottom:1px solid #ddd;text-shadow:#000 0 0 0}button{background:#ddd;color:#333}#settings-container,#rooms-container,#about-container{background-color:#222;color:#657b83}#settings-container .close,#rooms-container .close,#about-container .close{color:#ded8c5;background-color:#000b16}#settings-container .close:hover,#rooms-container .close:hover,#about-container .close:hover{color:#fff}#settings-container h5,#rooms-container h5,#about-container h5{color:#93a1a1;background-color:#333}#settings-container p,#rooms-container p,#about-container p{color:#b3c1c1;background-color:#1b1b1f}#settings-container label,#rooms-container label,#about-container label{color:#657b83}#settings-container span,#rooms-container span,#about-container span{color:#839496}#settings-container ul li,#rooms-container ul li,#about-container ul li{border-top:1px solid #000;color:#83a1a1}#settings-container ul li:hover,#rooms-container ul li:hover,#about-container ul li:hover{color:#fdf6e3}#settings-container ul a li,#rooms-container ul a li,#about-container ul a li{color:#83a1a1}#settings-container ul a,#rooms-container ul a,#about-container ul a{color:#83a1a1}#chat{text-align:center}#chat img{width:520px;max-width:none;max-height:none;border:0;margin:0 auto}#chat a.u{font-size:14px;min-width:100px;letter-spacing:-1px;text-align:right;padding-right:20px}#chat a.pic{padding:0;margin:0}#chat *{font-size:14px}#chat .chatimg{margin:0 auto;padding:0}#chat .chatline{width:510px;background-color:#fff;padding:2px 5px 2px 5px;line-height:16px;text-align:left;margin:0 auto;opacity:0.9}#chat span{color:#666;text-shadow:none;font-weight:normal}#logo h2#topic{left:5px}#logo #likebutton{position:relative;left:30px} diff --git a/frontend/static/stylesheets/src/glitter.css b/frontend/static/stylesheets/src/glitter.css new file mode 100644 index 0000000..4e4967f --- /dev/null +++ b/frontend/static/stylesheets/src/glitter.css @@ -0,0 +1 @@ +#chat *,#chat span,#chat span a{font-size:30px;line-height:38px;text-shadow:#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px,#000 0 0 5px;font-family:papyrus,comic sans,comic sans ms,sans-serif;letter-spacing:-1px;overflow:hidden}#heading img{position:relative;top:-35px;left:-18px;z-index:47}#likebutton{position:relative;top:-90px;left:-16px}#chat a.u{font-size:24px} diff --git a/frontend/static/stylesheets/src/ie.css b/frontend/static/stylesheets/src/ie.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/stylesheets/src/main.css b/frontend/static/stylesheets/src/main.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/stylesheets/src/print.css b/frontend/static/stylesheets/src/print.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/stylesheets/src/profile.css b/frontend/static/stylesheets/src/profile.css new file mode 100644 index 0000000..84b1b6d --- /dev/null +++ b/frontend/static/stylesheets/src/profile.css @@ -0,0 +1 @@ +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,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,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block}body{background:#888;overflow-y:hidden;overflow-x:hidden;font-family:trebuchet ms,sans-serif}#logo{position:absolute;z-index:20;top:15px;left:20px}#logo a{display:inline-block}#logo a img{padding-top:5px;display:inline-block}#logo h1{position:relative;top:-10px;left:10px;font-size:34px;font-weight:normal;font-style:italic;font-family:georgia,garamond,serif;color:#f8b;display:inline-block}#logo h2{position:relative;display:inline-block;font-size:12px;color:#fff;max-width:250px;left:10px;top:-6px;padding-right:20px}#logobg{position:absolute;top:10px;left:0;width:100%;height:64px;background-color:#000;opacity:0.8;z-index:19}#likebutton{display:inline-block;display:none;z-index:-1;min-width:90px}#likebutton a{color:#33f}#flower{position:absolute;top:0;right:10%;z-index:20;pointer-events:none;display:none}#contact{position:absolute;left:0;display:none}#contact #avatar,#contact .avatar{display:none;width:100%}#contact .avatar{display:block}#contact #bio p{color:#ddd;background-color:#000;padding:10px 5px;text-align:center;opacity:0.7}#contact #bio a{color:#ebf;display:block}#contact #bio img{width:100%}#sitez{position:absolute;top:30px;right:20px;text-align:right;z-index:20}#sitez div{color:#ddd;cursor:pointer;display:inline-block;padding:4px 8px 4px 8px;float:left}#sitez div a{color:#bbc}#sitez div#settings-hook{display:none;z-index:82}#sitez div#settings-hook:hover{-moz-border-radius:10px 10px 3px 3px;-webkit-border-radius:10px 10px 3px 3px;-o-border-radius:10px 10px 3px 3px;border-radius:10px 10px 3px 3px;background-color:#333;color:#fff}#sitez div#settings-hook.opened{-moz-border-radius:10px 10px 3px 3px;-webkit-border-radius:10px 10px 3px 3px;-o-border-radius:10px 10px 3px 3px;border-radius:10px 10px 3px 3px;background-color:#333;color:#fff}#fullscreen-warning{position:fixed;top:50%;left:50%;width:600px;margin-left:-300px;margin-top:-20px;text-align:center;font-size:24px;padding:10px;background-color:rgba(0,0,0,0.5);color:#fff;z-index:100;display:none}#settings-container{position:fixed;top:53px;-moz-border-radius:10px;-webkit-border-radius:10px;-o-border-radius:10px;border-radius:10px;right:20px;z-index:80;width:500px;background-color:#222;color:#657b83;display:none;box-shadow:0 5px 10px #000}#settings-container .close{margin:10px 10px 0 0;float:right;color:#ded8c5;width:20px;height:14px;font-size:14px;padding:3px 0;text-align:center;vertical-align:middle;-moz-border-radius:10px;-webkit-border-radius:10px;-o-border-radius:10px;border-radius:10px;background-color:#000b16}#settings-container .close:hover{color:#fff;cursor:pointer}#settings-container #rooms-loading{margin:10px}#settings-container h5{font-size:16px;color:#93a1a1;display:block;padding:10px;background-color:#333;-moz-border-radius:10px 10px 0 0;-webkit-border-radius:10px 10px 0 0;-o-border-radius:10px 10px 0 0;border-radius:10px 10px 0 0}#settings-container p{padding:10px 10px 10px 10px;font-size:14px;line-height:18px;color:#b3c1c1;background-color:#1b1b1f}#settings-container label{margin:2px 0 0 10px;font-size:14px;color:#657b83;width:150px;text-align:right;padding-right:5px;display:inline-block}#settings-container span{margin:2px 10px 0 0;color:#839496;font-size:14px}#settings-container input{margin:2px 10px 0 0;width:100px}#settings-container #profile-avatar,#settings-container #profile-bg{width:300px}#settings-container #profile-settings-save{font-size:14px}#settings-container textarea{width:300px;height:150px}#settings-container .shim{width:1px;height:10px}#settings-container ul{text-decoration:none;cursor:pointer}#settings-container ul li{list-style-type:none;padding:10px;cursor:pointer;border-top:1px solid #000;background-color:transparent;text-decoration:none;font-size:14px;color:#83a1a1}#settings-container ul li:hover{color:#fdf6e3}#settings-container ul a li{color:#83a1a1;text-decoration:none}#settings-container ul a{color:#83a1a1;text-decoration:none}#msg{z-index:100;position:fixed;top:10px;right:10px;padding:5px;width:250px;max-height:80%;font-size:12px;background-color:#eee;overflow-y:scroll;overflow-x:hidden;color:#333}#msg strong{color:#859900}#msg em{color:#dc322f}#msg b{color:#002b36}#player{padding:10px;position:absolute;background:#000}#player #projector{display:block;position:fixed;background-color:#000}#player #projector #screen{position:absolute;top:0;left:0;width:100%;height:100%;z-index:19}#player #projector #screen #soundcloud,#player #projector #screen #audio{position:absolute;top:0;right:0;background-color:#000;z-index:21}#player #projector #screen #soundcloud-dl,#player #projector #screen #audio-dl{position:absolute;top:81px;right:0;width:81px;padding:5px 0 5px 0;font-size:13px;text-align:center;background-color:#000;z-index:20}#player #projector #screen #soundcloud-dl *,#player #projector #screen #audio-dl *{color:#839496}#player #projector #screen #soundcloud-img,#player #projector #screen #audio-img{position:absolute;top:0;left:0;width:100%;height:100%;z-index:20}#player #projector #screen #soundcloud-img img,#player #projector #screen #audio-img img{max-width:100%;min-height:100%;max-height:100%}#player #projector #ytscreen{z-index:19;position:absolute;top:0;left:0}#player #projector #video-title{position:absolute;bottom:0;left:10px;color:#fff;z-index:20}#player #projector #video-title.fullscreen{position:fixed;bottom:90px;left:auto;right:30px;font-size:24px}#player #projector #projimg{width:100%;height:100%}#player nav#controls{z-index:40;position:absolute;display:none}#player nav#controls #video-link{color:#839496}#player nav#controls #scan.blinkOn{background-color:#fff;color:#000}#player nav#controls #scan.blinkOff{background-color:#000;color:#fff}#player nav#controls #like{color:#e4b}#player nav#controls #like.liked{color:#44f}#playlistbg{position:absolute;background-color:#000;opacity:0.5}#playlist{position:absolute;z-index:90;width:100%}#playlist ul#queue{width:100%;border-top:1px solid #888;border-left:1px solid #888;border-bottom:1px solid #888;-webkit-padding-start:0;-webkit-margin-before:0;overflow-y:scroll;overflow-x:hidden;z-index:90}#playlist ul#queue li{padding:5px;display:block;cursor:pointer;border-bottom:1px solid #333}#playlist ul#queue li span.title{color:#ddd;display:block;padding:5px;font-size:15px;z-index:1}#playlist ul#queue li span.title:hover{color:#fff}#playlist ul#queue li a.user{float:right;font-size:14px;padding:0 5px;color:#d33682;padding:5px;z-index:2;text-decoration:none}#playlist ul#queue li span.like{float:right;font-size:14px;color:#657b83;padding:5px;z-index:3}#playlist ul#queue li span.like.liked{color:#c357a3}#playlist ul#queue li span.score{float:right;font-size:14px;color:#bbb;padding:5px 10px 5px 5px}#playlist ul#queue li.playing{background-color:#222}#playlist ul#queue li.playing span.title{color:#fff}#playlist ul#queue li#queueLess{color:#fff;text-align:center;border:0;border-bottom:1px solid #333;font-size:18px;padding:10px 0;cursor:pointer}#playlist ul#queue li#queueLess:hover{background-color:#666;color:#fff}#playlist ul#queue li#queueMore{color:#fff;text-align:center;border:0;font-size:33px;padding:20px 20px 20px 20px;cursor:pointer}#playlist ul#queue li#queueMore:hover{background-color:#666;color:#fff}#playlist ul#queue li#queueDone{color:#ddd;text-align:center;border:0;font-size:33px;padding:80px 20px 200px 20px}#playlist ul#queue li#queueLoading{text-align:center;color:#fff;font-size:24px;padding:80px}#playlist ol{-webkit-padding-start:0;-webkit-margin-before:0;-webkit-margin-after:0;display:block;position:relative;top:1px}#playlist ol li{padding:5px 8px 8px 8px;margin:0 0 0 10px;list-style-type:none;border-top:1px solid #000;border-right:1px solid #000;border-left:1px solid #000;border-bottom:1px solid #888;display:inline-block;background-color:#333;color:#bbb;cursor:pointer;opacity:0.7;z-index:89}#playlist ol li.mode{position:relative;padding:8px 8px 8px 8px;border-color:#888;border-bottom:1px solid #111;background-color:#111;color:#fff;z-index:91}nav{z-index:10;margin:0 auto}nav button,nav #video-link{background-color:#333;color:#ddd;border:0;font-size:14px;min-width:40px;min-height:20px;padding:5px 5px;position:relative;top:-1px}nav button:hover,nav #video-link:hover{background-color:#666;color:#fff}nav #video-link{padding:6px 5px 5px 5px}#msg{display:none}#gif-container{position:absolute;left:0;width:100%;padding-left:10%;display:block;padding-bottom:200px}#gif-container #gifs{clear:both;display:block;text-align:center;top:0;max-width:80%;margin:0 0 200px 0;box-shadow:0 5px 10px #000;background-color:#fff}#gif-container #gifs div{padding:10px;display:inline-block}#gif-container #gifs div img{max-width:350px;max-height:400px}#bg{position:fixed;top:0;left:0;opacity:1;z-index:-3;width:100%;height:100%;display:none}#bg img{width:100%;height:100%}.arrow-play{width:0;height:0;border-top:4.5px solid transparent;border-left:9.5px solid #fff;border-bottom:4.5px solid transparent;display:inline-block}.arrow-pause{width:0;height:0;border-top:5px solid #fff;border-right:2.5px solid #fff;border-bottom:4px solid #fff;border-left:0;display:inline-block}.arrow-prev{width:0;height:0;border-top:4px solid transparent;border-right:4px solid #fff;border-bottom:4px solid transparent;display:inline-block}.arrow-next{width:0;height:0;border-top:4px solid transparent;border-left:4px solid #fff;border-bottom:4px solid transparent;display:inline-block} diff --git a/frontend/static/stylesheets/src/roomlist.css b/frontend/static/stylesheets/src/roomlist.css new file mode 100644 index 0000000..e5e91ca --- /dev/null +++ b/frontend/static/stylesheets/src/roomlist.css @@ -0,0 +1 @@ +.roomdiv{width:200px;height:100px;display:block;float:left;text-align:center;vertical-align:bottom;position:relative;font-size:30px;color:#fff;padding-top:160px;background-color:#000;cursor:pointer}.roomdiv *{cursor:pointer}.roomdiv .count{font-size:160px;color:#fff;position:absolute;left:0;top:10px;width:100%;text-align:center;vertical-align:middle;z-index:3;opacity:0.9}.roomdiv .roomname{position:absolute;left:0;top:180px;width:100%;text-align:center;vertical-align:middle;opacity:0.9;z-index:4}.roomdiv .roombg{position:absolute;background-position:center center;left:0;top:0;width:100%;height:100%;opacity:0.8;z-index:1;cursor:pointer}.roomdiv:hover .roomname{opacity:1}.roomdiv:hover .count{opacity:1}.roomdiv:hover .roombg{opacity:0.9}#roomlist{padding-top:90px}#roomlist a{text-decoration:none;cursor:pointer}body{overflow-y:scroll;background:#000}#logo{top:5px;left:10px}#logo h1#header{font-size:30px;color:#4df;top:8px;max-width:500px}#logo h2.preamblish{display:inline-block;position:relative;top:-15px;left:10px;font-size:12px;color:#fff;max-width:250px;padding-right:20px}#curtain{background:#080810;opacity:0.3;width:100%;height:100%;position:fixed;top:0;left:0;z-index:10;display:none}#login{background:#000;display:block;width:50%;top:20%;left:50%;margin-left:-25%;padding:30px;padding-bottom:60px;z-index:20;position:fixed;text-align:center;box-shadow:0 5px 10px #000}#login img{margin-bottom:20px}#login label{min-width:20%;display:inline-block;text-align:right;padding-right:10px;font-size:18px;color:#fff}#login #button-shim{width:30%;display:inline-block;text-align:left;padding:10px 10px 10px 0;margin-right:20px}#login #button-shim button{padding:2px 5px}#login #login-username,#login #login-password{width:30%;margin-right:10px;font-size:24px;border:2px solid #806;padding:10px}#login a{color:#68f;text-decoration:underline}#login button{font-size:24px} diff --git a/frontend/static/stylesheets/src/screen.css b/frontend/static/stylesheets/src/screen.css new file mode 100644 index 0000000..9ac8bdc --- /dev/null +++ b/frontend/static/stylesheets/src/screen.css @@ -0,0 +1,62 @@ +/* +Syntax error: Invalid CSS after "10px": expected expression (e.g. 1px, bold), was ";" + on line 524 of /var/www/scannerjammer.com/httpdocs/sass/src/screen.sass + +Backtrace: +/var/www/scannerjammer.com/httpdocs/sass/src/screen.sass:524 +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/scss/parser.rb:1130:in `expected' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/script/lexer.rb:199:in `expected!' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/script/parser.rb:486:in `assert_done' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/script/parser.rb:50:in `parse' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/script/parser.rb:166:in `parse' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/script.rb:31:in `parse' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:875:in `parse_script' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:608:in `parse_property' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:597:in `parse_property_or_rule' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:578:in `parse_line' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:471:in `build_tree' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:490:in `block in append_children' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:489:in `each' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:489:in `append_children' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:480:in `block in build_tree' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:473:in `each' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:473:in `build_tree' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:490:in `block in append_children' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:489:in `each' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:489:in `append_children' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:480:in `block in build_tree' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:473:in `each' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:473:in `build_tree' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:490:in `block in append_children' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:489:in `each' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:489:in `append_children' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:345:in `_to_tree' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:315:in `_render' +/var/lib/gems/1.9.1/gems/sass-3.2.1/lib/sass/engine.rb:262:in `render' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:140:in `block (2 levels) in compile' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:126:in `timed' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:139:in `block in compile' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/logger.rb:45:in `red' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:138:in `compile' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:118:in `compile_if_required' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:103:in `block (2 levels) in run' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:101:in `each' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:101:in `block in run' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:126:in `timed' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/compiler.rb:100:in `run' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/commands/watch_project.rb:147:in `recompile' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/commands/watch_project.rb:68:in `perform' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/commands/base.rb:18:in `execute' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/commands/project_base.rb:19:in `execute' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/exec/sub_command_ui.rb:43:in `perform!' +/var/lib/gems/1.9.1/gems/compass-0.12.2/lib/compass/exec/sub_command_ui.rb:15:in `run!' +/var/lib/gems/1.9.1/gems/compass-0.12.2/bin/compass:30:in `block in ' +/var/lib/gems/1.9.1/gems/compass-0.12.2/bin/compass:44:in `call' +/var/lib/gems/1.9.1/gems/compass-0.12.2/bin/compass:44:in `' +/usr/local/bin/compass:23:in `load' +/usr/local/bin/compass:23:in `
        ' +*/ +body:before { + white-space: pre; + font-family: monospace; + content: "Syntax error: Invalid CSS after \"10px\": expected expression (e.g. 1px, bold), was \";\"\A on line 524 of /var/www/scannerjammer.com/httpdocs/sass/src/screen.sass"; } diff --git a/frontend/static/stylesheets/src/sewergreats.css b/frontend/static/stylesheets/src/sewergreats.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/static/stylesheets/src/test.css b/frontend/static/stylesheets/src/test.css new file mode 100644 index 0000000..220e6fc --- /dev/null +++ b/frontend/static/stylesheets/src/test.css @@ -0,0 +1 @@ +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,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,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}html{line-height:1}ol,ul{list-style:none}table{border-collapse:collapse;border-spacing:0}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}q,blockquote{quotes:none}q:before,q:after,blockquote:before,blockquote:after{content:"";content:none}a img{border:none}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary{display:block}body{font-family:trebuchet ms}#msg{position:fixed;top:10px;right:10px;padding:5px;width:250px;max-height:80%;font-size:12px;background-color:#eee;overflow-y:scroll;overflow-x:hidden;color:#333;z-index:100}#msg strong{color:#859900}#msg em{color:#dc322f}#msg b{color:#002b36}#player #projector{display:block;position:absolute;background-color:#000;width:320px;height:240px}#player #projector #screen{position:absolute;top:0;left:0;width:100%;height:100%;z-index:20}#player #projector #screen #soundcloud{position:absolute;top:0;right:0;z-index:21}#player #projector #screen #soundcloud-dl{position:absolute;top:81px;right:10px;padding:5px;background-color:#000;z-index:20}#player #projector #screen #soundcloud-dl *{color:#839496}#player #projector #screen #soundcloud-img{position:absolute;top:0;left:0;width:100%;height:100%;z-index:20}#player #projector #screen #soundcloud-img img{max-width:100%;max-height:100%}#player #projector #ytscreen{z-index:19;position:absolute;top:0;left:0}#player #projector #video-title{position:absolute;bottom:0;left:0;color:#988;z-index:20}#player #projector #projimg{width:100%;height:100%}#player nav{position:absolute;top:260px}#player nav button{color:#000}#player nav #scan.blinkOn{background-color:#fff;color:#000}#player nav #scan.blinkOff{background-color:#000;color:#fff}#player nav #like{color:#e4b}#player nav #like.liked{color:#44f}#player #playlist{position:absolute;left:330px;z-index:20;width:300px}#player #playlist ul#queue{width:100%}#player #playlist ul#queue li{display:block;cursor:pointer;border-bottom:1px solid #ddd}#player #playlist ul#queue li span.title{display:block;padding:5px;z-index:1}#player #playlist ul#queue li a.user{float:right;padding:0 5px;color:#d33682;padding:5px;z-index:2}#player #playlist ul#queue li span.like{float:right;color:#657b83;padding:5px;z-index:3}#player #playlist ul#queue li span.like.liked{color:#a35783}#player #playlist ul#queue li.playing{background-color:#073642;color:#fff}#room,#user{padding:10px}#room label,#user label{color:#657b83;width:200px;text-align:right;padding-right:5px;display:inline-block}#room span,#user span{color:#93a1a1}a{color:#268bd2}a:visited{color:#6c71c4}body{font-size:16px}#bg{position:fixed;top:0;left:0;z-index:-1;opacity:0.3}#pnp{position:fixed;right:20px;bottom:20px;width:400px;height:285px;background:#fff}#stats{position:fixed;right:20px;top:20px;width:390px;font-size:14px;background-color:#fff;padding:5px;display:none;overflow-y:scroll}#videos{width:800px;padding-right:5px}#videos li{width:100%;list-style-type:none;display:block;margin-top:3px}#videos li a,#videos li span{display:inline-block;margin-left:5px}#videos li .date{opacity:0.8;width:60px;text-align:right;font-size:14px}#videos li .time{opacity:0.8;width:40px;text-align:right;font-size:14px}#videos li .user{font-size:14px;width:100px;overflow:hidden}#videos li .type{width:20px;text-align:center;font-variant:small-caps}#videos li .title{text-decoration:none;width:300px;overflow:hidden;white-space:nowrap}#videos li .remove{color:#dc322f;width:200px;cursor:pointer;text-decoration:underline;text-transform:uppercase;opacity:0.5}#videos li:hover .remove{opacity:1}#videos li:hover .title{text-decoration:underline}a#return-link{position:absolute;top:10px;left:10px;font-size:14px}h1{color:#bbb;font-size:48px;text-align:center;width:80%;padding-bottom:10px}h2{color:#bbb;font-size:24px;padding-left:20px;text-transform:uppercase}h2 #room-name{color:#fff}#search-terms{font-size:14px;padding:2px 2px;width:200px;background-image:url("/img/magnify.png");background-position:right center;background-repeat:no-repeat;border:0;outline:0;background-color:#ddd}#search-terms:hover{background-color:#fff}#search-terms:focus{background-color:#fff}#search-results-container{width:350px;border:2px solid #000;background:#333;display:none}#search-results-container #search-loading{margin:10px}#search-results-container #search-results{height:400px;width:100%;overflow-x:hidden;overflow-y:scroll}#search-results-container #search-results li{clear:both;height:54px;overflow:hidden;border-bottom:2px solid #000;font-size:12px;line-height:15px;color:#bbb;opacity:0.9;cursor:pointer}#search-results-container #search-results li div.thumb{width:80px;height:54px;float:left;background-position:center center;margin:0 5px 0 0;border-right:2px solid #000}#search-results-container #search-results li h4{white-space:nowrap;overflow:hidden;font-size:14px;color:#fff;margin:3px 0 3px 0}#search-results-container #search-results li:hover{background:#000;cursor:pointer;opacity:1} diff --git a/frontend/static/stylesheets/src/tiny.css b/frontend/static/stylesheets/src/tiny.css new file mode 100644 index 0000000..defd75c --- /dev/null +++ b/frontend/static/stylesheets/src/tiny.css @@ -0,0 +1 @@ +#logo,#form,#logobg,#sitez{opacity:0;z-index:-20}#lastlogbox *,#lastlogbox h4{font-size:5px;padding:1px}#lastlogbox{padding:1px}#chat{font-size:6px;line-height:120%;overflow-y:hidden}#chat a.u{min-width:10px}#chat img{max-height:30px;max-width:30px}#player *,#playlist *,#queue *{font-size:5px}#playlist ul#queue li{padding:1px}#playlist ul#queue li span.like{font-size:5px}#playlist ul#queue li a.user{font-size:5px}nav button{font-size:10px;padding:1px;border:1px solid #888;min-width:10px;max-width:10px;min-height:10px;max-height:10px;overflow:hidden}*,#chat{overflow:hidden} diff --git a/frontend/static/stylesheets/src/top.css b/frontend/static/stylesheets/src/top.css new file mode 100644 index 0000000..765c387 --- /dev/null +++ b/frontend/static/stylesheets/src/top.css @@ -0,0 +1 @@ +body{background-color:#311296;overflow:hidden}#bg{position:fixed;top:0;left:0;height:100%;width:100%;display:block;opacity:1;background-image:-webkit-gradient(linear, left bottom, left top, color-stop(0.11, #311296), color-stop(0.67, #8f26ff), color-stop(0.84, #9d42ff));background-image:-moz-linear-gradient(center bottom, #311296 11%, #8f26ff 67%, #9d42ff 84%)}#bg img{width:100%;height:100%}#plant1{z-index:-2;position:fixed;left:-200px;bottom:0}#plant2{z-index:-2;position:fixed;right:-200px;bottom:0}.cloudleft{background-image:url(/bgz/cloudz1.png);position:fixed;bottom:0;left:0;width:600px;height:400px;opacity:0.7;pointer-events:none;z-index:-1}.cloudright{background-image:url(/bgz/cloudz2.png);position:fixed;bottom:0;right:0;width:600px;height:400px;opacity:0.8;pointer-events:none;z-index:-1}.shimmer{margin:0 0 -20px 0;opacity:0.5}.shimmer2{margin:0 0 -40px 0;opacity:0.5} diff --git a/frontend/static/swf/soundmanager2.swf b/frontend/static/swf/soundmanager2.swf new file mode 100755 index 0000000..4d2dc23 Binary files /dev/null and b/frontend/static/swf/soundmanager2.swf differ diff --git a/frontend/static/swf/soundmanager2_debug.swf b/frontend/static/swf/soundmanager2_debug.swf new file mode 100755 index 0000000..01ce0ea Binary files /dev/null and b/frontend/static/swf/soundmanager2_debug.swf differ diff --git a/frontend/static/swf/soundmanager2_flash9.swf b/frontend/static/swf/soundmanager2_flash9.swf new file mode 100755 index 0000000..dad27ea Binary files /dev/null and b/frontend/static/swf/soundmanager2_flash9.swf differ diff --git a/frontend/static/swf/soundmanager2_flash9_debug.swf b/frontend/static/swf/soundmanager2_flash9_debug.swf new file mode 100755 index 0000000..cdffb46 Binary files /dev/null and b/frontend/static/swf/soundmanager2_flash9_debug.swf differ diff --git a/frontend/static/swf/webcam.swf b/frontend/static/swf/webcam.swf new file mode 100644 index 0000000..9d61ff8 Binary files /dev/null and b/frontend/static/swf/webcam.swf differ diff --git a/frontend/static/template/directory.html b/frontend/static/template/directory.html new file mode 100644 index 0000000..9622fe1 --- /dev/null +++ b/frontend/static/template/directory.html @@ -0,0 +1,282 @@ + + + +SCANNERJAMMER DIRECTORY + + + + +
        +
        +
          +
          +
          + +
          +
          +
          +
          +
          +
          +
          + + + + diff --git a/frontend/static/template/index.html b/frontend/static/template/index.html new file mode 100644 index 0000000..2a3e7aa --- /dev/null +++ b/frontend/static/template/index.html @@ -0,0 +1,96 @@ + + + +SCANNERJAMMER + + + + + + + + + + + +
          + NOTE: SCANNERJAMMER ONLY WORKS IN FIREFOX AND CHROME. DO NOT TRY THIS WITH INTERNET EXPLORER +
          +
          + +
          +
          +
          +
          +
          +
          +
          +
          +

          + need an account? +
          + + +
          +
          + INSTRUCTIONS:
          + Paste youtube urls into the chat and they will be added to the playlist.
          + You can also paste gifs and images.
          +
          + +
          +
          +
          + +
          + +
          +
          + +
            +
            + +
            +
            + +
            +
            +

            VIEW PROFILES

            +
              +
              + +
              + + +
              + +
              +
              + please enable javascript +
              +
              + loading . . . +
              + +
              logout
              + + + + + + + + + + + diff --git a/frontend/static/template/profile.html b/frontend/static/template/profile.html new file mode 100644 index 0000000..aa22c96 --- /dev/null +++ b/frontend/static/template/profile.html @@ -0,0 +1,151 @@ + + + +scanners jammed by %%NAME%% + + + + + + + + + + + + + + + + +
              + +
              + +
              +
              +
              +
              +
              +
              + +
              + +
              +
              + +
                +
                + +
                + +

                + +
                + +
                + +
                + +
                +
                EDIT YOUR PROFILE
                + +
                + + +
                +
                + +
                +
                X
                +
                EDITING %%UCNAME%%
                +
                + + +
                + + +
                +
                + + +
                +
                + +
                +
                +
                +
                + +
                +
                +
                + +
                +
                + please enable javascript +
                + +
                Hit Escape to exit fullscreen mode
                + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/static/template/redir.html b/frontend/static/template/redir.html new file mode 100644 index 0000000..d0264c5 --- /dev/null +++ b/frontend/static/template/redir.html @@ -0,0 +1,13 @@ + + + + + +
                +Sending you through to + Scanner Jammer..! +
                + + + diff --git a/frontend/static/template/register.html b/frontend/static/template/register.html new file mode 100644 index 0000000..198ce0d --- /dev/null +++ b/frontend/static/template/register.html @@ -0,0 +1,172 @@ + + + +SCANNERJAMMER REGISTRATION + + + +
                + +
                +
                +
                +
                + +

                official registration form

                + + + +
                + + + +
                + + + + +
                + + + +
                +
                + + wow okay awesome- greetings,
                + + your new ghost is online and active..
                +
                + WELCOME TO SCANNERJAMMER +
                + +
                +
                + please enable javascript +
                +
                + + + + + + + + diff --git a/frontend/static/template/room.html b/frontend/static/template/room.html new file mode 100644 index 0000000..25c4e23 --- /dev/null +++ b/frontend/static/template/room.html @@ -0,0 +1,220 @@ + + + +%%UCROOM%% + + + + + + + + + + + + + + + + + + +

                + INSTRUCTIONS: + Paste Youtube links into the chat. + You can also paste GIFs and images. +

                +
                + NOTE: SCANNERJAMMER ONLY WORKS IN FIREFOX AND CHROME. DO NOT TRY THIS WITH INTERNET EXPLORER +
                +
                + please enable javascript + +
                +
                + loading . . . +
                + +
                + +
                +
                +
                +
                +
                +
                +
                +
                +

                + get an account - no email required +
                + + +
                +
                + +
                +
                +
                +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                  +
                +
                + +
                +
                + +
                + +
                + microphone
                + mute all
                +
                +
                +
                +
                + +
                +
                +

                NOW ACTIVE

                +
                  +
                  + +
                  + + + +
                  +
                  + +
                  + +
                  click to post in the room
                  +
                    +
                    + +
                    + + +
                    + + +
                    +
                    X
                    +
                    CHANGE ROOM THEME
                    +
                    +
                    +
                    +
                    + +
                    + +
                    +
                    + + + View Background History + Gallery + +
                    +
                    + +
                    + +
                    +
                    X
                    +
                    ROOMS
                    + +
                      +
                    +
                    + +
                    +
                    X
                    +
                    INSTRUCTIONS
                    +

                    + Paste YOUTUBE, VIMEO, or SOUNDCLOUD links into the chat. + You can also paste links to GIFs and images. +

                    + +
                    + +
                    + + + + + + + + + + diff --git a/frontend/static/template/roomlist.html b/frontend/static/template/roomlist.html new file mode 100644 index 0000000..3128c8f --- /dev/null +++ b/frontend/static/template/roomlist.html @@ -0,0 +1,82 @@ + + + +SCANNERJAMMER + + + + + + + + + + + + + + + +
                    + NOTE: SCANNERJAMMER ONLY WORKS IN FIREFOX AND CHROME. DO NOT TRY THIS WITH INTERNET EXPLORER +
                    +
                    + please enable javascript + +
                    + +
                    + +
                    +
                    +
                    +
                    +
                    +

                    + get an account - no email required +
                    + +
                    + +
                    + + + +
                    +
                    + +
                    +
                    + + + + + + + + + + + + diff --git a/frontend/static/tumblrplay/index.html b/frontend/static/tumblrplay/index.html new file mode 100644 index 0000000..c67a5c3 --- /dev/null +++ b/frontend/static/tumblrplay/index.html @@ -0,0 +1,19 @@ +

                    +

                    should prob bring more of a presence in 2012









                    +

                    +

                    SPINE

                    +







                    +

                    +



                    from a tree, not a lab

                    +

                    +













                    +







                    but i guess my neck hairline pattern is most important thing here



















                    unicorngirl:
+
+going to turn this into a cross stitch design
+





                    :P

                    back to cam













                    \ No newline at end of file diff --git a/frontend/static/tumblrplay/input.html b/frontend/static/tumblrplay/input.html new file mode 100644 index 0000000..4bd5802 --- /dev/null +++ b/frontend/static/tumblrplay/input.html @@ -0,0 +1,55 @@ + + + + + + + + + + +
                    + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/static/tumblrplay/play.html b/frontend/static/tumblrplay/play.html new file mode 100644 index 0000000..376730c --- /dev/null +++ b/frontend/static/tumblrplay/play.html @@ -0,0 +1,22 @@ + + + +

                    + + +

                    + + +

                    + + +

                    + + +

                    + + +

                    + + +

                    \ No newline at end of file diff --git a/frontend/static/tumblrplay/temp.html b/frontend/static/tumblrplay/temp.html new file mode 100644 index 0000000..881b48f --- /dev/null +++ b/frontend/static/tumblrplay/temp.html @@ -0,0 +1,382 @@ + + + + + + + + + + + %Pecco_ + + + + + + + + + + + + + + +
                    +

                    %Pecco_ +

                    + + + + + + + + + + +
                    + P∪R∅S ΔRΔCLΞS +
                    + + + + + + + + +
                    + + + + + + + + + + + + +
                    + + + + + + + + +

                    permalink + +

                    + + + + + + + + + +
                    + + + + + + + + + + + + +
                    + + + + + + + + +

                    permalink + +

                    + + + + + + + + + +
                    + + + + + + + + + + + + +
                    + + + + + + + + +

                    permalink + +

                    + + + + + + + + + +
                    + + + + + + + + + + + + +
                    + + + + + + + + +

                    permalink + +

                    + + + + + + + + + +
                    + + + + + + + + + + + + +
                    + + + + + + + + +

                    permalink + +

                    + + + + + + + + + +
                    + + + + + + + + + + + + +
                    + + + + + + + + +

                    permalink + +

                    + + + + + + + + + +
                    + + + + + + + + + + + + +
                    + + + + + + + + +

                    permalink + +

                    + + + + + + + + + +
                    + + + + + + + + + + + + +
                    + + + + + + + + +

                    permalink + +

                    + + + + + +
                    + + + + + \ No newline at end of file -- cgit v1.2.3-70-g09d2