├── favicon.ico ├── img ├── digg.jpg ├── g+.jpg ├── mail.jpg ├── rss.jpg ├── flickr.jpg ├── forrst.jpg ├── skype.jpg ├── vimeo.jpg ├── zerply.jpg ├── Linkedin.jpg ├── dribbble.jpg ├── evernote.jpg ├── facebook.jpg ├── last-fm.jpg ├── pinterest.jpg ├── twitter.jpg ├── beta_ribbon.png ├── mail-backup.jpg ├── stumbleupon.jpg ├── twitter_alt.jpg └── profile │ ├── Max-Gluck.jpg │ ├── Sagar-Savla.jpg │ ├── Shiv-Patel.jpg │ ├── Colin-Bookman.jpg │ ├── Nakul-Dureja.jpg │ ├── Chris-Forrence.jpg │ ├── Joseph-Mattingly.jpg │ └── Vivek-Srinivasan.jpg ├── js ├── clippy │ ├── Agents │ │ ├── F1 │ │ │ └── map.png │ │ ├── Bonzi │ │ │ └── map.png │ │ ├── Clippy │ │ │ ├── map.png │ │ │ └── sounds-mp3.js │ │ ├── Genie │ │ │ └── map.png │ │ ├── Genius │ │ │ └── map.png │ │ ├── Links │ │ │ └── map.png │ │ ├── Merlin │ │ │ └── map.png │ │ ├── Peedy │ │ │ └── map.png │ │ ├── Rocky │ │ │ └── map.png │ │ └── Rover │ │ │ ├── map.png │ │ │ └── sounds-mp3.js │ ├── R-Wreck-vocal.mp3 │ ├── R-Wreck-vocal.ogg │ ├── src │ │ ├── images │ │ │ ├── tip.png │ │ │ └── border.png │ │ ├── queue.js │ │ ├── clippy.css │ │ ├── load.js │ │ ├── animator.js │ │ ├── balloon.js │ │ └── agent.js │ ├── MIT-LICENSE.txt │ ├── build │ │ ├── clippy.css │ │ └── clippy.min.js │ ├── README.md │ └── clippy.min.js-backup ├── bootswatch.js ├── application.js ├── searchResults.js ├── easter.js └── dataTables │ └── DT_bootstrap.js ├── css ├── dataTables │ ├── images │ │ ├── favicon.ico │ │ ├── sort_asc.png │ │ ├── sort_both.png │ │ ├── sort_desc.png │ │ ├── Sorting icons.psd │ │ ├── back_disabled.png │ │ ├── back_enabled.png │ │ ├── forward_disabled.png │ │ ├── forward_enabled.png │ │ ├── back_enabled_hover.png │ │ ├── sort_asc_disabled.png │ │ ├── sort_desc_disabled.png │ │ └── forward_enabled_hover.png │ └── DT_bootstrap.css ├── author.css ├── critique.css └── bootswatch.css ├── api.php ├── footer.php ├── README.md ├── config.php ├── elasticsearch ├── courseSchema.sh └── profSchema.sh ├── search.php ├── admin ├── getOSCAR.php └── import.php ├── datalayer.php ├── 404.html ├── index.html ├── course.php ├── prof.php ├── author └── index.html └── default ├── variables.less └── bootstrap-responsive.min.css /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/favicon.ico -------------------------------------------------------------------------------- /img/digg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/digg.jpg -------------------------------------------------------------------------------- /img/g+.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/g+.jpg -------------------------------------------------------------------------------- /img/mail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/mail.jpg -------------------------------------------------------------------------------- /img/rss.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/rss.jpg -------------------------------------------------------------------------------- /img/flickr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/flickr.jpg -------------------------------------------------------------------------------- /img/forrst.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/forrst.jpg -------------------------------------------------------------------------------- /img/skype.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/skype.jpg -------------------------------------------------------------------------------- /img/vimeo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/vimeo.jpg -------------------------------------------------------------------------------- /img/zerply.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/zerply.jpg -------------------------------------------------------------------------------- /img/Linkedin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/Linkedin.jpg -------------------------------------------------------------------------------- /img/dribbble.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/dribbble.jpg -------------------------------------------------------------------------------- /img/evernote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/evernote.jpg -------------------------------------------------------------------------------- /img/facebook.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/facebook.jpg -------------------------------------------------------------------------------- /img/last-fm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/last-fm.jpg -------------------------------------------------------------------------------- /img/pinterest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/pinterest.jpg -------------------------------------------------------------------------------- /img/twitter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/twitter.jpg -------------------------------------------------------------------------------- /img/beta_ribbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/beta_ribbon.png -------------------------------------------------------------------------------- /img/mail-backup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/mail-backup.jpg -------------------------------------------------------------------------------- /img/stumbleupon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/stumbleupon.jpg -------------------------------------------------------------------------------- /img/twitter_alt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/twitter_alt.jpg -------------------------------------------------------------------------------- /img/profile/Max-Gluck.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Max-Gluck.jpg -------------------------------------------------------------------------------- /img/profile/Sagar-Savla.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Sagar-Savla.jpg -------------------------------------------------------------------------------- /img/profile/Shiv-Patel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Shiv-Patel.jpg -------------------------------------------------------------------------------- /js/clippy/Agents/F1/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/F1/map.png -------------------------------------------------------------------------------- /js/clippy/R-Wreck-vocal.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/R-Wreck-vocal.mp3 -------------------------------------------------------------------------------- /js/clippy/R-Wreck-vocal.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/R-Wreck-vocal.ogg -------------------------------------------------------------------------------- /img/profile/Colin-Bookman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Colin-Bookman.jpg -------------------------------------------------------------------------------- /img/profile/Nakul-Dureja.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Nakul-Dureja.jpg -------------------------------------------------------------------------------- /js/clippy/src/images/tip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/src/images/tip.png -------------------------------------------------------------------------------- /img/profile/Chris-Forrence.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Chris-Forrence.jpg -------------------------------------------------------------------------------- /img/profile/Joseph-Mattingly.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Joseph-Mattingly.jpg -------------------------------------------------------------------------------- /img/profile/Vivek-Srinivasan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/img/profile/Vivek-Srinivasan.jpg -------------------------------------------------------------------------------- /js/clippy/Agents/Bonzi/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Bonzi/map.png -------------------------------------------------------------------------------- /js/clippy/Agents/Clippy/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Clippy/map.png -------------------------------------------------------------------------------- /js/clippy/Agents/Genie/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Genie/map.png -------------------------------------------------------------------------------- /js/clippy/Agents/Genius/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Genius/map.png -------------------------------------------------------------------------------- /js/clippy/Agents/Links/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Links/map.png -------------------------------------------------------------------------------- /js/clippy/Agents/Merlin/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Merlin/map.png -------------------------------------------------------------------------------- /js/clippy/Agents/Peedy/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Peedy/map.png -------------------------------------------------------------------------------- /js/clippy/Agents/Rocky/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Rocky/map.png -------------------------------------------------------------------------------- /js/clippy/Agents/Rover/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/Agents/Rover/map.png -------------------------------------------------------------------------------- /js/clippy/src/images/border.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/js/clippy/src/images/border.png -------------------------------------------------------------------------------- /css/dataTables/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/favicon.ico -------------------------------------------------------------------------------- /css/dataTables/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_asc.png -------------------------------------------------------------------------------- /css/dataTables/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_both.png -------------------------------------------------------------------------------- /css/dataTables/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_desc.png -------------------------------------------------------------------------------- /css/dataTables/images/Sorting icons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/Sorting icons.psd -------------------------------------------------------------------------------- /css/dataTables/images/back_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/back_disabled.png -------------------------------------------------------------------------------- /css/dataTables/images/back_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/back_enabled.png -------------------------------------------------------------------------------- /css/dataTables/images/forward_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/forward_disabled.png -------------------------------------------------------------------------------- /css/dataTables/images/forward_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/forward_enabled.png -------------------------------------------------------------------------------- /css/dataTables/images/back_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/back_enabled_hover.png -------------------------------------------------------------------------------- /css/dataTables/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /css/dataTables/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /css/dataTables/images/forward_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cobookman/gt-course-critique/HEAD/css/dataTables/images/forward_enabled_hover.png -------------------------------------------------------------------------------- /api.php: -------------------------------------------------------------------------------- 1 | 'invalid api call' 15 | ) 16 | ); 17 | } 18 | 19 | ?> 20 | -------------------------------------------------------------------------------- /js/bootswatch.js: -------------------------------------------------------------------------------- 1 | $('a[rel=tooltip]').tooltip({ 2 | 'placement': 'bottom' 3 | }); 4 | 5 | function parseRSS(url, callback) { 6 | $.ajax({ 7 | url: 'http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(url), 8 | dataType: 'json', 9 | success: function(data) { 10 | callback(data.responseData.feed); 11 | } 12 | }); 13 | } -------------------------------------------------------------------------------- /footer.php: -------------------------------------------------------------------------------- 1 | 3 |
4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## gt-course-critique 2 | ###### (Georgia Institute of Technology Course Critique) 3 | 4 | 5 | This is the official repository for Georgia Tech's Course Critique application. To host your own Course Critique, you need the following: 6 | 7 | * A database (MySQL, PostgreSQL, etc.) 8 | * A web server with PHP > 5.3.* 9 | * [ElasticSearch running the JDBC river](https://github.com/jprante/elasticsearch-river-jdbc) 10 | 11 | Please contact Georgia Tech's SGA for more detailed instructions on how to host your own Course Critique 12 | -------------------------------------------------------------------------------- /css/author.css: -------------------------------------------------------------------------------- 1 | .author-info h4 { 2 | margin-bottom:0px; 3 | text-decoration: underline; 4 | color:rgb(85, 85, 85); 5 | font-size:18.5px; 6 | } 7 | .author-info { 8 | text-align: center; 9 | } 10 | .author-page-title h1 { 11 | font-size:70px; 12 | } 13 | .author-page-title p { 14 | margin-top: 22px; 15 | font-size:35px; 16 | } 17 | .author-pic { 18 | width:160px; 19 | height:160px; 20 | } 21 | .author-title { 22 | display:block; 23 | font-size:17px; 24 | margin-bottom:3px; 25 | } 26 | /* Override from bootstrap */ 27 | .row { 28 | margin-bottom: 20px; 29 | } -------------------------------------------------------------------------------- /config.php: -------------------------------------------------------------------------------- 1 | pdo = new PDO($this->RDBMType . ":host=" . $this->dbhost . ";dbname=" . $this->database, $this->username, $this->password); 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /js/application.js: -------------------------------------------------------------------------------- 1 | !function ($) { 2 | 3 | $(function(){ 4 | 5 | // fix sub nav on scroll 6 | var $win = $(window) 7 | , $nav = $('.subnav') 8 | , navHeight = $('.navbar').first().height() 9 | , navTop = $('.subnav').length && $('.subnav').offset().top - navHeight 10 | , isFixed = 0 11 | 12 | processScroll() 13 | 14 | $win.on('scroll', processScroll) 15 | 16 | function processScroll() { 17 | var i, scrollTop = $win.scrollTop() 18 | if (scrollTop >= navTop && !isFixed) { 19 | isFixed = 1 20 | $nav.addClass('subnav-fixed') 21 | } else if (scrollTop <= navTop && isFixed) { 22 | isFixed = 0 23 | $nav.removeClass('subnav-fixed') 24 | } 25 | } 26 | 27 | }) 28 | 29 | }(window.jQuery) -------------------------------------------------------------------------------- /elasticsearch/courseSchema.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ELASTICSEARCH_URL = "localhost:9200" 4 | MYSQL_DATABASE = "192.168.1.1:3306/courseCritique" 5 | MYSQL_USERNAME = "*****" 6 | MYSQL_PASSWORD = "*****" 7 | MYSQL_TABLE_NAME = "Data" 8 | 9 | curl -XPUT "$ELASTICSEARCH_URL/_river/class/_meta" -d '{ 10 | "type" : "jdbc", 11 | "jdbc" : { 12 | "driver" : "com.mysql.jdbc.Driver", 13 | "url" : "jdbc:mysql://$MYSQL_DATABASE", 14 | "user" : "$MYSQL_USERNAME", 15 | "password" : "$MYSQL_PASSWORD", 16 | "sql" : "SELECT DISTINCT \"class\" as \"_index\", REPLACE(Course,\" \",\"\") as \"_id\", Course as \"course\", ROUND(AVG(GPA),2) as \"grades.gpa\", ROUND(AVG(A)) as \"grades.a\", ROUND(AVG(B)) as \"grades.b\", ROUND(AVG(C)) as \"grades.c\", ROUND(AVG(D)) as \"grades.d\", ROUND(AVG(F)) as \"grades.f\", ROUND(AVG(W)) as \"grades.w\" FROM $MYSQL_TABLE_NAME GROUP BY Course" 17 | } 18 | }' 19 | -------------------------------------------------------------------------------- /css/critique.css: -------------------------------------------------------------------------------- 1 | .dataTables_paginate > ul > li.active > a { 2 | background-color: #003049 !important; 3 | } 4 | 5 | .dataTables_paginate > ul > li:not(.disabled) > a:hover{ 6 | background-color: #B18E5F !important; 7 | color: white !important; 8 | } 9 | 10 | .avg { 11 | text-decoration: overline; 12 | } 13 | 14 | .CoursesDisabled , .TermsDisabled, .ProfessorsDisabled { 15 | display: none; 16 | } 17 | 18 | .beta-ribbon { 19 | position: fixed; 20 | pointer-events: none; 21 | top: 0px; 22 | left: 0px; 23 | height: 75px; 24 | z-index: 1; 25 | } 26 | 27 | .center-table { 28 | margin: 0 auto !important; 29 | float: none !important; 30 | } 31 | 32 | .dropdown-menu { 33 | max-height:325px; 34 | overflow-y:scroll; 35 | } 36 | 37 | .prof-flash-gold { 38 | background-color: rgb(177, 142, 95) !important; 39 | } 40 | 41 | body.extra-space-top { 42 | padding-top:60px; 43 | } -------------------------------------------------------------------------------- /elasticsearch/profSchema.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ELASTICSEARCH_URL = "localhost:9200" 4 | MYSQL_DATABASE = "192.168.1.1:3306/courseCritique" 5 | MYSQL_USERNAME = "*****" 6 | MYSQL_PASSWORD = "*****" 7 | MYSQL_TABLE_NAME = "Data" 8 | 9 | curl -XPUT "$ELASTICSEARCH_URL/_river/prof/_meta" -d '{ 10 | "type" : "jdbc", 11 | "jdbc" : { 12 | "driver" : "com.mysql.jdbc.Driver", 13 | "url" : "jdbc:mysql://$MYSQL_DATABASE", 14 | "user" : "$MYSQL_USERNAME", 15 | "password" : "$MYSQL_PASSWORD", 16 | "sql" : "SELECT DISTINCT \"prof\" as \"_index\", UPPER(REPLACE(REPLACE(Prof,\" \",\"\"),\",\",\"\")) as \"_id\", Prof as \"prof\", ROUND(AVG(GPA),2) as \"grades.gpa\", ROUND(AVG(A)) as \"grades.a\", ROUND(AVG(B)) as \"grades.b\", ROUND(AVG(C)) as \"grades.c\", ROUND(AVG(D)) as \"grades.d\", ROUND(AVG(F)) as \"grades.f\", ROUND(AVG(W)) as \"grades.w\" FROM $MYSQL_TABLE_NAME GROUP BY Prof" 17 | 18 | } 19 | }' 20 | -------------------------------------------------------------------------------- /search.php: -------------------------------------------------------------------------------- 1 | Error with query syntax"); 24 | return false; 25 | } 26 | //Output number of hits...etc 27 | temp = msg; 28 | var output = "
" + msg.hits.total + " results in: " + msg.took + "ms
"; 29 | for(var i = 0; i < msg.hits.hits.length; i++) { 30 | //type 31 | var type = msg.hits.hits[i]._index 32 | //Get title for each respective type 33 | var titleTag=""; 34 | var action = "#Error"; 35 | switch(type) { 36 | case('class') : titleTag = "course"; action="course.php"; break; 37 | case('prof') : titleTag = "prof"; action = "prof.php"; break; 38 | } 39 | var id = msg.hits.hits[i]._id; 40 | var title = msg.hits.hits[i]._source[titleTag].replace(",",", "); 41 | //Heading 42 | output += "

"+title+"

"; 43 | //End tags 44 | output += "

"; 45 | } 46 | $("#searchResults").html(output); 47 | return true; 48 | } 49 | -------------------------------------------------------------------------------- /js/clippy/build/clippy.css: -------------------------------------------------------------------------------- 1 | .clippy, .clippy-balloon { 2 | position: fixed; 3 | z-index: 1000; 4 | cursor: pointer; 5 | } 6 | 7 | .clippy-balloon { 8 | 9 | background: #FFC; 10 | color: black; 11 | padding: 8px; 12 | border: 1px solid black; 13 | border-radius: 5px; 14 | 15 | } 16 | 17 | .clippy-content { 18 | max-width: 200px; 19 | min-width: 120px; 20 | font-family: "Microsoft Sans", sans-serif; 21 | font-size: 10pt; 22 | } 23 | 24 | .clippy-tip { 25 | width: 10px; 26 | height: 16px; 27 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAMAAAAlvKiEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRF///MAAAA////52QwgAAAAAN0Uk5T//8A18oNQQAAAGxJREFUeNqs0kEOwCAIRFHn3//QTUU6xMyyxii+jQosrTPkyPEM6IN3FtzIRk1U4dFeKWQiH6pRRowMVKEmvronEynkwj0uZJgR22+YLopPSo9P34wJSamLSU7lSIWLJU7NkNomNlhqxUeAAQC+TQLZyEuJBwAAAABJRU5ErkJggg==) no-repeat; 28 | position: absolute; 29 | } 30 | 31 | .clippy-top-left .clippy-tip { 32 | top: 100%; 33 | margin-top: 0px; 34 | left: 100%; 35 | margin-left: -50px; 36 | } 37 | 38 | .clippy-top-right .clippy-tip { 39 | top: 100%; 40 | margin-top: 0px; 41 | left: 0; 42 | margin-left: 50px; 43 | background-position: -10px 0; 44 | 45 | } 46 | 47 | .clippy-bottom-right .clippy-tip { 48 | top: 0; 49 | margin-top: -16px; 50 | left: 0; 51 | margin-left: 50px; 52 | background-position: -10px -16px; 53 | } 54 | 55 | .clippy-bottom-left .clippy-tip { 56 | top: 0; 57 | margin-top: -16px; 58 | left: 100%; 59 | margin-left: -50px; 60 | background-position: 0px -16px; 61 | } 62 | 63 | -------------------------------------------------------------------------------- /js/clippy/src/clippy.css: -------------------------------------------------------------------------------- 1 | .clippy, .clippy-balloon { 2 | position: fixed; 3 | z-index: 1000; 4 | cursor: pointer; 5 | } 6 | 7 | .clippy-balloon { 8 | 9 | background: #FFC; 10 | color: black; 11 | padding: 8px; 12 | border: 1px solid black; 13 | border-radius: 5px; 14 | 15 | } 16 | 17 | .clippy-content { 18 | max-width: 200px; 19 | min-width: 120px; 20 | font-family: "Microsoft Sans", sans-serif; 21 | font-size: 10pt; 22 | } 23 | 24 | .clippy-tip { 25 | width: 10px; 26 | height: 16px; 27 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAMAAAAlvKiEAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRF///MAAAA////52QwgAAAAAN0Uk5T//8A18oNQQAAAGxJREFUeNqs0kEOwCAIRFHn3//QTUU6xMyyxii+jQosrTPkyPEM6IN3FtzIRk1U4dFeKWQiH6pRRowMVKEmvronEynkwj0uZJgR22+YLopPSo9P34wJSamLSU7lSIWLJU7NkNomNlhqxUeAAQC+TQLZyEuJBwAAAABJRU5ErkJggg==) no-repeat; 28 | position: absolute; 29 | } 30 | 31 | .clippy-top-left .clippy-tip { 32 | top: 100%; 33 | margin-top: 0px; 34 | left: 100%; 35 | margin-left: -50px; 36 | } 37 | 38 | .clippy-top-right .clippy-tip { 39 | top: 100%; 40 | margin-top: 0px; 41 | left: 0; 42 | margin-left: 50px; 43 | background-position: -10px 0; 44 | 45 | } 46 | 47 | .clippy-bottom-right .clippy-tip { 48 | top: 0; 49 | margin-top: -16px; 50 | left: 0; 51 | margin-left: 50px; 52 | background-position: -10px -16px; 53 | } 54 | 55 | .clippy-bottom-left .clippy-tip { 56 | top: 0; 57 | margin-top: -16px; 58 | left: 100%; 59 | margin-left: -50px; 60 | background-position: 0px -16px; 61 | } 62 | 63 | -------------------------------------------------------------------------------- /js/easter.js: -------------------------------------------------------------------------------- 1 | /* Easter Egg */ 2 | var clippy_easter_hold = false; 3 | function search_easter(query) { 4 | if (query === "George P. Burdell") { 5 | do_easter(); 6 | } 7 | } 8 | function do_easter() { 9 | if (clippy_easter_hold) { 10 | return false; 11 | } 12 | clippy_easter_hold = true; 13 | 14 | //Load Clippy CSS 15 | $('head').append(''); 16 | //Load clippy js 17 | $.getScript("js/clippy/build/clippy.min.js").done(function() { 18 | //Random clippy 19 | var agents = ["Bonzi", "Genius", "Clippy", "F1", "Genie", "Links", "Merlin", "Rover"]; 20 | agents = agents[Math.floor(Math.random() * agents.length)]; 21 | clippy.load(agents, function(agent) { 22 | agent.show(); 23 | agent.speak("You found me! How about we sing a song?"); 24 | setTimeout(function() { 25 | if (!window.HTMLAudioElement) { 26 | agent.speak("Seems your browser doesn't support HTML5, maybe next time"); 27 | } 28 | else { 29 | var snd = new Audio(''); 30 | if (snd.canPlayType('audio/mp3')) { 31 | snd = new Audio('js/clippy/R-Wreck-vocal.mp3'); 32 | } else if (snd.canPlayType('audio/ogg')) { 33 | snd = new Audio('js/clippy/R-Wreck-vocal.ogg'); 34 | } 35 | snd.play(); 36 | } 37 | var random = setInterval(function() { 38 | agent.animate(); 39 | }, 1000); 40 | }, 3000); 41 | }); 42 | }); 43 | } 44 | -------------------------------------------------------------------------------- /js/clippy/README.md: -------------------------------------------------------------------------------- 1 | [Clippy.JS](http://smore.com/clippy-js) 2 | ========= 3 | Add Clippy or his friends to any website for instant nostalgia. 4 | Read more about the project on [our homepage](http://smore.com/clippy-js). 5 | 6 | 7 | Usage: Setup 8 | ------------ 9 | Add this code to you to your page to enable Clippy.js. 10 | 11 | ```html 12 | 13 | 14 | 15 | ... 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | ``` 33 | 34 | Usage: Actions 35 | -------------- 36 | All the agent actions are queued and executed by order, so you could stack them. 37 | 38 | ```javascript 39 | // play a given animation 40 | agent.Play('Searching'); 41 | 42 | // play a random animation 43 | agent.animate(); 44 | 45 | // get a list of all the animations 46 | agent.animations(); 47 | // => ["MoveLeft", "Congratulate", "Hide", "Pleased", "Acknowledge", ...] 48 | 49 | // Show text balloon 50 | agent.speak('When all else fails, bind some paper together. My name is Clippy.'); 51 | 52 | // move to the given point, use animation if available 53 | agent.moveTo(100,100); 54 | 55 | // gesture at a given point (if gesture animation is available) 56 | agent.gestureAt(200,200); 57 | 58 | // stop the current action in the queue 59 | agent.stopCurrent(); 60 | 61 | // stop all actions in the queue and go back to idle mode 62 | agent.stop(); 63 | ``` 64 | 65 | Special Thanks 66 | -------------- 67 | * The awesome [Cinnamon Software](http://www.cinnamonsoftware.com/) for developing [Double Agent](http://doubleagent.sourceforge.net/) 68 | the program we used to unpack Clippy and his friends! 69 | * Microsoft, for creating clippy :) -------------------------------------------------------------------------------- /admin/getOSCAR.php: -------------------------------------------------------------------------------- 1 | \n"; 45 | echo "Course Name: $course_name\n"; 46 | 47 | // echo "
Description: $description"; 48 | echo "

Description: " . parser("", "<"); 49 | 50 | function parser($start, $end) { 51 | global $html; 52 | $position = strpos($html, $start); 53 | $position += strlen($start); 54 | $parsed = false; 55 | $text = ""; 56 | while (!$parsed) { 57 | if ($html[$position] != $end) { 58 | $text .= $html[$position]; 59 | $position++; 60 | } else { 61 | ; 62 | $parsed = true; 63 | } 64 | } 65 | return $text; 66 | } -------------------------------------------------------------------------------- /datalayer.php: -------------------------------------------------------------------------------- 1 | pdo->prepare("SELECT DISTINCT Course FROM Data WHERE courseID = :id"); 9 | $raw = $db->pdo->prepare("SELECT profID, Prof, Size, ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)), ROUND(AVG(W)) FROM Data WHERE courseID = :id AND GPA != 0 GROUP BY Prof"); 10 | $avg = $db->pdo->prepare("SELECT ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)) FROM Data WHERE courseID = :id AND GPA != 0"); 11 | 12 | if (!$courseName->execute(array(":id" => $courseID)) || !$raw->execute(array(":id" => $courseID)) || !$avg->execute(array(":id" => $courseID))) { 13 | return array( 'err' => 'failed to grab course data', 'courseId' => $courseId); 14 | } 15 | 16 | $courseName = $courseName->fetch(PDO::FETCH_NUM); 17 | $courseName = $courseName[0]; 18 | 19 | $avg = $avg->fetch(PDO::FETCH_ASSOC); 20 | $raw = $raw->fetchAll(PDO::FETCH_ASSOC); 21 | 22 | return array( 23 | 'courseId' => $courseId, 24 | 'courseName' => $courseName, 25 | 'grades' => array( 26 | 'avg' => $avg, 27 | 'raw' => $raw 28 | ) 29 | ); 30 | } 31 | 32 | function profData($profId) { 33 | $profName = $db->pdo->prepare("SELECT DISTINCT Prof FROM Data WHERE profID = :id"); 34 | $raw = $db->pdo->prepare("SELECT courseID, Course, Section, Year, Size, GPA, A, B, C, D, F, W FROM Data WHERE profID = :id"); 35 | $avg = $db->pdo->prepare("SELECT ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)) FROM Data WHERE profID = :id AND GPA != 0 GROUP BY Prof"); 36 | //execute query and handle error 37 | if (!$raw->execute(array(":id" => $profID)) || !$avg->execute(array(":id" => $profID)) || !$profName->execute(array(":id" => $profID))) { 38 | return array('err'=>'failed to grab prof data', 'profId'=>$profId); 39 | } 40 | 41 | $profName = $profName->fetch(PDO::FETCH_NUM); 42 | $profName = $profName[0]; 43 | 44 | $avg = $avg->fetch(PDO::FETCH_ASSOC); 45 | $raw = $raw->fetchAll(PDO::FETCH_ASSOC); 46 | 47 | return array( 48 | 'profId' => $profId, 49 | 'profName' => $profName, 50 | 'grades' => array( 51 | 'avg' => $avg, 52 | 'raw' => $raw 53 | ) 54 | ); 55 | } 56 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Course Critique - 404 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | beta 25 | 27 |
28 |
29 |
30 |
31 |

404 - Uh oh

32 |

Seems we've had an error!

33 | 36 |
37 |
38 |
39 | 40 | 42 |
43 | 49 |
50 | 51 | 52 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /admin/import.php: -------------------------------------------------------------------------------- 1 | 'Spring', 36 | '05' => 'Summer', 37 | '08' => 'Fall', 38 | ]; 39 | 40 | $_input = [ 41 | '201305.csv' => 0, 42 | '201308_201402_201405.csv' => 0 43 | ]; 44 | 45 | $destination = __DIR__ . '/insert.sql'; 46 | $insert = "INSERT INTO `Data` (`profID`,`courseID`,`Course`,`Section`,`Year`,`Prof`,`A`,`B`,`C`,`D`,`F`,`W`,`Size`,`Level`,`GPA`) VALUES "; 47 | $_counter = []; 48 | echo "\nCount | Filename\n------------------------------"; 49 | foreach($_input as $file => $count) { 50 | $csv = array_map('str_getcsv', file(__DIR__ . '/' . $file)); 51 | array_shift($csv); 52 | 53 | $csvlen = count($csv); 54 | echo "\n" . str_pad($csvlen, 8) . ' | ' . $file; 55 | $sql = ''; 56 | $counter = 0; 57 | foreach($csv as $row) { 58 | $name = explode(',', preg_replace("/'/", "''", $row[4])); // Now [lastname, firstname] 59 | $course = explode(' ', $row[1]); // Now [department, number] 60 | $term = $_term[substr($row[0], 4, 2)] . ' ' . substr($row[0], 0, 4); 61 | 62 | $in = [ 63 | '\'' . preg_replace('/[^A-Z]/', '', strtoupper(implode('', $name))) . '\'', 64 | '\'' . strtoupper(implode('', $course)) . '\'', 65 | '\'' . "{$course[0]} {$course[1]}" . '\'', 66 | '\'' . $row[2] . '\'', 67 | '\'' . $term . '\'', 68 | '\'' . implode(', ', $name) . '\'', 69 | preg_replace('/[^0-9]/', '', $row[5]) ?: 0, 70 | preg_replace('/[^0-9]/', '', $row[6]) ?: 0, 71 | preg_replace('/[^0-9]/', '', $row[7]) ?: 0, 72 | preg_replace('/[^0-9]/', '', $row[8]) ?: 0, 73 | preg_replace('/[^0-9]/', '', $row[9]) ?: 0, 74 | preg_replace('/[^0-9]/', '', $row[15]) ?: 0, 75 | '\'' . $row[17] . '\'', 76 | '\'' . $row[19] . '\'', 77 | $row[18] != 'N/A' ? $row[18] : 0, 78 | ]; 79 | 80 | $sql .= "\n (" . implode(', ', $in) . ")"; 81 | if(!(++$counter % 100) || $counter == $csvlen) { 82 | file_put_contents($destination, $insert . $sql . ";\n\n", FILE_APPEND); 83 | $sql = ''; 84 | } 85 | else { 86 | $sql .= ','; 87 | } 88 | } 89 | } 90 | echo "\nDone! \n"; 91 | -------------------------------------------------------------------------------- /js/clippy/src/load.js: -------------------------------------------------------------------------------- 1 | clippy.BASE_PATH = 'http://clippy.js.s3.amazonaws.com/Agents/'; 2 | 3 | clippy.load = function (name, successCb, failCb) { 4 | var path = clippy.BASE_PATH + name; 5 | 6 | var mapDfd = clippy.load._loadMap(path); 7 | var agentDfd = clippy.load._loadAgent(name, path); 8 | var soundsDfd = clippy.load._loadSounds(name, path); 9 | 10 | var data; 11 | agentDfd.done(function (d) { 12 | data = d; 13 | }); 14 | 15 | var sounds; 16 | 17 | soundsDfd.done(function (d) { 18 | sounds = d; 19 | }); 20 | 21 | // wrapper to the success callback 22 | var cb = function () { 23 | var a = new clippy.Agent(path, data,sounds); 24 | successCb(a); 25 | }; 26 | 27 | $.when(mapDfd, agentDfd, soundsDfd).done(cb).fail(failCb); 28 | }; 29 | 30 | clippy.load._maps = {}; 31 | clippy.load._loadMap = function (path) { 32 | var dfd = clippy.load._maps[path]; 33 | if (dfd) return dfd; 34 | 35 | // set dfd if not defined 36 | dfd = clippy.load._maps[path] = $.Deferred(); 37 | 38 | var src = path + '/map.png'; 39 | var img = new Image(); 40 | 41 | img.onload = dfd.resolve; 42 | img.onerror = dfd.reject; 43 | 44 | // start loading the map; 45 | img.setAttribute('src', src); 46 | 47 | return dfd.promise(); 48 | }; 49 | 50 | clippy.load._sounds = {}; 51 | 52 | clippy.load._loadSounds = function (name, path) { 53 | var dfd = clippy.load._sounds[name]; 54 | if (dfd) return dfd; 55 | 56 | // set dfd if not defined 57 | dfd = clippy.load._sounds[name] = $.Deferred(); 58 | 59 | var audio = document.createElement('audio'); 60 | var canPlayMp3 = !!audio.canPlayType && "" != audio.canPlayType('audio/mpeg'); 61 | var canPlayOgg = !!audio.canPlayType && "" != audio.canPlayType('audio/ogg; codecs="vorbis"'); 62 | 63 | if (!canPlayMp3 && !canPlayOgg) { 64 | dfd.resolve({}); 65 | } else { 66 | var src = path + (canPlayMp3 ? '/sounds-mp3.js' : '/sounds-ogg.js'); 67 | // load 68 | clippy.load._loadScript(src); 69 | } 70 | 71 | return dfd.promise() 72 | }; 73 | 74 | 75 | clippy.load._data = {}; 76 | clippy.load._loadAgent = function (name, path) { 77 | var dfd = clippy.load._data[name]; 78 | if (dfd) return dfd; 79 | 80 | dfd = clippy.load._getAgentDfd(name); 81 | 82 | var src = path + '/agent.js'; 83 | 84 | clippy.load._loadScript(src); 85 | 86 | return dfd.promise(); 87 | }; 88 | 89 | clippy.load._loadScript = function (src) { 90 | var script = document.createElement('script'); 91 | script.setAttribute('src', src); 92 | script.setAttribute('async', 'async'); 93 | script.setAttribute('type', 'text/javascript'); 94 | 95 | document.head.appendChild(script); 96 | }; 97 | 98 | clippy.load._getAgentDfd = function (name) { 99 | var dfd = clippy.load._data[name]; 100 | if (!dfd) { 101 | dfd = clippy.load._data[name] = $.Deferred(); 102 | } 103 | return dfd; 104 | }; 105 | 106 | clippy.ready = function (name, data) { 107 | var dfd = clippy.load._getAgentDfd(name); 108 | dfd.resolve(data); 109 | }; 110 | 111 | clippy.soundsReady = function (name, data) { 112 | var dfd = clippy.load._sounds[name]; 113 | if (!dfd) { 114 | dfd = clippy.load._sounds[name] = $.Deferred(); 115 | } 116 | 117 | dfd.resolve(data); 118 | }; -------------------------------------------------------------------------------- /css/dataTables/DT_bootstrap.css: -------------------------------------------------------------------------------- 1 | 2 | div.dataTables_length label { 3 | float: left; 4 | text-align: left; 5 | } 6 | 7 | div.dataTables_length select { 8 | width: 75px; 9 | } 10 | 11 | div.dataTables_filter label { 12 | float: right; 13 | } 14 | 15 | div.dataTables_info { 16 | padding-top: 8px; 17 | } 18 | 19 | div.dataTables_paginate { 20 | float: right; 21 | margin: 0; 22 | } 23 | 24 | table.table { 25 | clear: both; 26 | margin-bottom: 6px !important; 27 | max-width: none !important; 28 | } 29 | 30 | table.table thead .sorting, 31 | table.table thead .sorting_asc, 32 | table.table thead .sorting_desc, 33 | table.table thead .sorting_asc_disabled, 34 | table.table thead .sorting_desc_disabled { 35 | cursor: pointer; 36 | *cursor: hand; 37 | } 38 | 39 | table.table thead .sorting { background: url('images/sort_both.png') no-repeat center right; } 40 | table.table thead .sorting_asc { background: url('images/sort_asc.png') no-repeat center right; } 41 | table.table thead .sorting_desc { background: url('images/sort_desc.png') no-repeat center right; } 42 | 43 | table.table thead .sorting_asc_disabled { background: url('images/sort_asc_disabled.png') no-repeat center right; } 44 | table.table thead .sorting_desc_disabled { background: url('images/sort_desc_disabled.png') no-repeat center right; } 45 | 46 | table.dataTable th:active { 47 | outline: none; 48 | } 49 | 50 | /* Scrolling */ 51 | div.dataTables_scrollHead table { 52 | margin-bottom: 0 !important; 53 | border-bottom-left-radius: 0; 54 | border-bottom-right-radius: 0; 55 | } 56 | 57 | div.dataTables_scrollHead table thead tr:last-child th:first-child, 58 | div.dataTables_scrollHead table thead tr:last-child td:first-child { 59 | border-bottom-left-radius: 0 !important; 60 | border-bottom-right-radius: 0 !important; 61 | } 62 | 63 | div.dataTables_scrollBody table { 64 | border-top: none; 65 | margin-bottom: 0 !important; 66 | } 67 | 68 | div.dataTables_scrollBody tbody tr:first-child th, 69 | div.dataTables_scrollBody tbody tr:first-child td { 70 | border-top: none; 71 | } 72 | 73 | div.dataTables_scrollFoot table { 74 | border-top: none; 75 | } 76 | 77 | 78 | 79 | 80 | /* 81 | * TableTools styles 82 | */ 83 | .table tbody tr.active td, 84 | .table tbody tr.active th { 85 | background-color: #08C; 86 | color: white; 87 | } 88 | 89 | .table tbody tr.active:hover td, 90 | .table tbody tr.active:hover th { 91 | background-color: #0075b0 !important; 92 | } 93 | 94 | .table-striped tbody tr.active:nth-child(odd) td, 95 | .table-striped tbody tr.active:nth-child(odd) th { 96 | background-color: #017ebc; 97 | } 98 | 99 | table.DTTT_selectable tbody tr { 100 | cursor: pointer; 101 | *cursor: hand; 102 | } 103 | 104 | div.DTTT .btn { 105 | color: #333 !important; 106 | font-size: 12px; 107 | } 108 | 109 | div.DTTT .btn:hover { 110 | text-decoration: none !important; 111 | } 112 | 113 | 114 | ul.DTTT_dropdown.dropdown-menu a { 115 | color: #333 !important; /* needed only when demo_page.css is included */ 116 | } 117 | 118 | ul.DTTT_dropdown.dropdown-menu li:hover a { 119 | background-color: #0088cc; 120 | color: white !important; 121 | } 122 | 123 | /* TableTools information display */ 124 | div.DTTT_print_info.modal { 125 | height: 150px; 126 | margin-top: -75px; 127 | text-align: center; 128 | } 129 | 130 | div.DTTT_print_info h6 { 131 | font-weight: normal; 132 | font-size: 28px; 133 | line-height: 28px; 134 | margin: 1em; 135 | } 136 | 137 | div.DTTT_print_info p { 138 | font-size: 14px; 139 | line-height: 20px; 140 | } 141 | 142 | 143 | 144 | /* 145 | * FixedColumns styles 146 | */ 147 | div.DTFC_LeftHeadWrapper table, 148 | div.DTFC_LeftFootWrapper table, 149 | table.DTFC_Cloned tr.even { 150 | background-color: white; 151 | } 152 | 153 | div.DTFC_LeftHeadWrapper table { 154 | margin-bottom: 0 !important; 155 | border-top-right-radius: 0 !important; 156 | border-bottom-left-radius: 0 !important; 157 | border-bottom-right-radius: 0 !important; 158 | } 159 | 160 | div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child, 161 | div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child { 162 | border-bottom-left-radius: 0 !important; 163 | border-bottom-right-radius: 0 !important; 164 | } 165 | 166 | div.DTFC_LeftBodyWrapper table { 167 | border-top: none; 168 | margin-bottom: 0 !important; 169 | } 170 | 171 | div.DTFC_LeftBodyWrapper tbody tr:first-child th, 172 | div.DTFC_LeftBodyWrapper tbody tr:first-child td { 173 | border-top: none; 174 | } 175 | 176 | div.DTFC_LeftFootWrapper table { 177 | border-top: none; 178 | } 179 | 180 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Course Critique 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | beta 25 | 26 | 28 |
29 |
30 |
31 |
32 |

Course Critique

33 |

Type in a Professor or Course Name

34 |
35 |
36 |
37 | 38 | 40 |
41 | 42 | 59 | 60 |
61 | 62 | 64 |
65 |
66 | 69 |
70 |
71 |
72 |
73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 |
Example Searches:
ECE 3020
PHYS 2212
George P. Burdell
83 |
84 |
85 | 86 | 88 |
89 | 95 |
96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /js/clippy/src/animator.js: -------------------------------------------------------------------------------- 1 | /****** 2 | * 3 | * 4 | * @constructor 5 | */ 6 | clippy.Animator = function (el, path, data, sounds) { 7 | this._el = el; 8 | this._data = data; 9 | this._path = path; 10 | this._currentFrameIndex = 0; 11 | this._currentFrame = undefined; 12 | this._exiting = false; 13 | this._currentAnimation = undefined; 14 | this._endCallback = undefined; 15 | this._started = false; 16 | this._sounds = {}; 17 | this.currentAnimationName = undefined; 18 | this.preloadSounds(sounds); 19 | this._overlays = [this._el]; 20 | var curr = this._el; 21 | 22 | this._setupElement(this._el); 23 | for (var i = 1; i < this._data.overlayCount; i++) { 24 | var inner = this._setupElement($('
')); 25 | 26 | curr.append(inner); 27 | this._overlays.push(inner); 28 | curr = inner; 29 | } 30 | }; 31 | 32 | clippy.Animator.prototype = { 33 | _setupElement:function (el) { 34 | var frameSize = this._data.framesize; 35 | el.css('display', "none"); 36 | el.css({width:frameSize[0], height:frameSize[1]}); 37 | el.css('background', "url('" + this._path + "/map.png') no-repeat"); 38 | 39 | return el; 40 | }, 41 | 42 | animations:function () { 43 | var r = []; 44 | var d = this._data.animations; 45 | for (var n in d) { 46 | r.push(n); 47 | } 48 | return r; 49 | }, 50 | 51 | preloadSounds:function (sounds) { 52 | 53 | for (var i = 0; i < this._data.sounds.length; i++) { 54 | var snd = this._data.sounds[i]; 55 | var uri = sounds[snd]; 56 | if (!uri) continue; 57 | this._sounds[snd] = new Audio(uri); 58 | 59 | } 60 | }, 61 | hasAnimation:function (name) { 62 | return !!this._data.animations[name]; 63 | }, 64 | 65 | exitAnimation:function () { 66 | this._exiting = true; 67 | }, 68 | 69 | 70 | showAnimation:function (animationName, stateChangeCallback) { 71 | this._exiting = false; 72 | 73 | if (!this.hasAnimation(animationName)) { 74 | return false; 75 | } 76 | 77 | this._currentAnimation = this._data.animations[animationName]; 78 | this.currentAnimationName = animationName; 79 | 80 | 81 | if (!this._started) { 82 | this._step(); 83 | this._started = true; 84 | } 85 | 86 | this._currentFrameIndex = 0; 87 | this._currentFrame = undefined; 88 | this._endCallback = stateChangeCallback; 89 | 90 | return true; 91 | }, 92 | 93 | 94 | _draw:function () { 95 | var images = []; 96 | if (this._currentFrame) images = this._currentFrame.images || []; 97 | 98 | for (var i = 0; i < this._overlays.length; i++) { 99 | if (i < images.length) { 100 | var xy = images[i]; 101 | var bg = -xy[0] + 'px ' + -xy[1] + 'px'; 102 | this._overlays[i].css({'background-position':bg, 'display':'block'}); 103 | } 104 | else { 105 | this._overlays[i].css('display', 'none'); 106 | } 107 | 108 | } 109 | }, 110 | 111 | _getNextAnimationFrame:function () { 112 | if (!this._currentAnimation) return undefined; 113 | // No current frame. start animation. 114 | if (!this._currentFrame) return 0; 115 | var currentFrame = this._currentFrame; 116 | var branching = this._currentFrame.branching; 117 | 118 | 119 | if (this._exiting && currentFrame.exitBranch !== undefined) { 120 | return currentFrame.exitBranch; 121 | } 122 | else if (branching) { 123 | var rnd = Math.random() * 100; 124 | for (var i = 0; i < branching.branches.length; i++) { 125 | var branch = branching.branches[i]; 126 | if (rnd <= branch.weight) { 127 | return branch.frameIndex; 128 | } 129 | 130 | rnd -= branch.weight; 131 | } 132 | } 133 | 134 | return this._currentFrameIndex + 1; 135 | }, 136 | 137 | _playSound:function () { 138 | var s = this._currentFrame.sound; 139 | if (!s) return; 140 | var audio = this._sounds[s]; 141 | if (audio) audio.play(); 142 | }, 143 | 144 | _atLastFrame:function () { 145 | return this._currentFrameIndex >= this._currentAnimation.frames.length - 1; 146 | }, 147 | 148 | _step:function () { 149 | if (!this._currentAnimation) return; 150 | var newFrameIndex = Math.min(this._getNextAnimationFrame(), this._currentAnimation.frames.length - 1); 151 | var frameChanged = !this._currentFrame || this._currentFrameIndex !== newFrameIndex; 152 | this._currentFrameIndex = newFrameIndex; 153 | 154 | // always switch frame data, unless we're at the last frame of an animation with a useExitBranching flag. 155 | if (!(this._atLastFrame() && this._currentAnimation.useExitBranching)) { 156 | this._currentFrame = this._currentAnimation.frames[this._currentFrameIndex]; 157 | } 158 | 159 | this._draw(); 160 | this._playSound(); 161 | 162 | this._loop = window.setTimeout($.proxy(this._step, this), this._currentFrame.duration); 163 | 164 | 165 | // fire events if the frames changed and we reached an end 166 | if (this._endCallback && frameChanged && this._atLastFrame()) { 167 | if (this._currentAnimation.useExitBranching && !this._exiting) { 168 | this._endCallback(this.currentAnimationName, clippy.Animator.States.WAITING); 169 | } 170 | else { 171 | this._endCallback(this.currentAnimationName, clippy.Animator.States.EXITED); 172 | } 173 | } 174 | }, 175 | 176 | /*** 177 | * Pause animation execution 178 | */ 179 | pause:function () { 180 | window.clearTimeout(this._loop); 181 | }, 182 | 183 | /*** 184 | * Resume animation 185 | */ 186 | resume:function () { 187 | this._step(); 188 | } 189 | }; 190 | 191 | clippy.Animator.States = { WAITING:1, EXITED:0 }; 192 | -------------------------------------------------------------------------------- /js/clippy/src/balloon.js: -------------------------------------------------------------------------------- 1 | /****** 2 | * 3 | * 4 | * @constructor 5 | */ 6 | clippy.Balloon = function (targetEl) { 7 | this._targetEl = targetEl; 8 | 9 | this._hidden = true; 10 | this._setup(); 11 | }; 12 | 13 | clippy.Balloon.prototype = { 14 | 15 | WORD_SPEAK_TIME:200, 16 | CLOSE_BALLOON_DELAY:2000, 17 | 18 | _setup:function () { 19 | 20 | this._balloon = $('
').hide(); 21 | this._content = this._balloon.find('.clippy-content'); 22 | 23 | $(document.body).append(this._balloon); 24 | }, 25 | 26 | reposition:function () { 27 | var sides = ['top-left', 'top-right', 'bottom-left', 'bottom-right']; 28 | 29 | for (var i = 0; i < sides.length; i++) { 30 | var s = sides[i]; 31 | this._position(s); 32 | if (!this._isOut()) break; 33 | } 34 | }, 35 | 36 | _BALLOON_MARGIN:15, 37 | 38 | /*** 39 | * 40 | * @param side 41 | * @private 42 | */ 43 | _position:function (side) { 44 | var o = this._targetEl.offset(); 45 | var h = this._targetEl.height(); 46 | var w = this._targetEl.width(); 47 | o.top -= $(window).scrollTop(); 48 | o.left -= $(window).scrollLeft(); 49 | 50 | var bH = this._balloon.outerHeight(); 51 | var bW = this._balloon.outerWidth(); 52 | 53 | this._balloon.removeClass('clippy-top-left'); 54 | this._balloon.removeClass('clippy-top-right'); 55 | this._balloon.removeClass('clippy-bottom-right'); 56 | this._balloon.removeClass('clippy-bottom-left'); 57 | 58 | var left, top; 59 | switch (side) { 60 | case 'top-left': 61 | // right side of the balloon next to the right side of the agent 62 | left = o.left + w - bW; 63 | top = o.top - bH - this._BALLOON_MARGIN; 64 | break; 65 | case 'top-right': 66 | // left side of the balloon next to the left side of the agent 67 | left = o.left; 68 | top = o.top - bH - this._BALLOON_MARGIN; 69 | break; 70 | case 'bottom-right': 71 | // right side of the balloon next to the right side of the agent 72 | left = o.left; 73 | top = o.top + h + this._BALLOON_MARGIN; 74 | break; 75 | case 'bottom-left': 76 | // left side of the balloon next to the left side of the agent 77 | left = o.left + w - bW; 78 | top = o.top + h + this._BALLOON_MARGIN; 79 | break; 80 | } 81 | 82 | this._balloon.css({top:top, left:left}); 83 | this._balloon.addClass('clippy-' + side); 84 | }, 85 | 86 | _isOut:function () { 87 | var o = this._balloon.offset(); 88 | var bH = this._balloon.outerHeight(); 89 | var bW = this._balloon.outerWidth(); 90 | 91 | var wW = $(window).width(); 92 | var wH = $(window).height(); 93 | var sT = $(document).scrollTop(); 94 | var sL = $(document).scrollLeft(); 95 | 96 | var top = o.top - sT; 97 | var left = o.left - sL; 98 | var m = 5; 99 | if (top - m < 0 || left - m < 0) return true; 100 | if ((top + bH + m) > wH || (left + bW + m) > wW) return true; 101 | 102 | return false; 103 | }, 104 | 105 | speak:function (complete, text, hold) { 106 | this._hidden = false; 107 | this.show(); 108 | var c = this._content; 109 | // set height to auto 110 | c.height('auto'); 111 | c.width('auto'); 112 | // add the text 113 | c.text(text); 114 | // set height 115 | c.height(c.height()); 116 | c.width(c.width()); 117 | c.text(''); 118 | this.reposition(); 119 | 120 | this._complete = complete; 121 | this._sayWords(text, hold, complete); 122 | }, 123 | 124 | show:function () { 125 | if (this._hidden) return; 126 | this._balloon.show(); 127 | }, 128 | 129 | hide:function (fast) { 130 | if (fast) { 131 | this._balloon.hide(); 132 | return; 133 | } 134 | 135 | this._hiding = window.setTimeout($.proxy(this._finishHideBalloon, this), this.CLOSE_BALLOON_DELAY); 136 | }, 137 | 138 | _finishHideBalloon:function () { 139 | if (this._active) return; 140 | this._balloon.hide(); 141 | this._hidden = true; 142 | this._hiding = null; 143 | }, 144 | 145 | _sayWords:function (text, hold, complete) { 146 | this._active = true; 147 | this._hold = hold; 148 | var words = text.split(/[^\S-]/); 149 | var time = this.WORD_SPEAK_TIME; 150 | var el = this._content; 151 | var idx = 1; 152 | 153 | 154 | this._addWord = $.proxy(function () { 155 | if (!this._active) return; 156 | if (idx > words.length) { 157 | delete this._addWord; 158 | this._active = false; 159 | if (!this._hold) { 160 | complete(); 161 | this.hide(); 162 | } 163 | } else { 164 | el.text(words.slice(0, idx).join(' ')); 165 | idx++; 166 | this._loop = window.setTimeout($.proxy(this._addWord, this), time); 167 | } 168 | }, this); 169 | 170 | this._addWord(); 171 | 172 | }, 173 | 174 | close:function () { 175 | if (this._active) { 176 | this._hold = false; 177 | } else if (this._hold) { 178 | this._complete(); 179 | } 180 | }, 181 | 182 | pause:function () { 183 | window.clearTimeout(this._loop); 184 | if (this._hiding) { 185 | window.clearTimeout(this._hiding); 186 | this._hiding = null; 187 | } 188 | }, 189 | 190 | resume:function () { 191 | if (this._addWord) { 192 | this._addWord(); 193 | } else if (!this._hold && !this._hidden) { 194 | this._hiding = window.setTimeout($.proxy(this._finishHideBalloon, this), this.CLOSE_BALLOON_DELAY); 195 | } 196 | } 197 | 198 | 199 | }; 200 | 201 | -------------------------------------------------------------------------------- /js/dataTables/DT_bootstrap.js: -------------------------------------------------------------------------------- 1 | /* Set the defaults for DataTables initialisation */ 2 | //$.extend( true, $.fn.dataTable.defaults, { 3 | // "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>", 4 | // "sPaginationType": "bootstrap", 5 | // "oLanguage": { 6 | // "sLengthMenu": "_MENU_ records per page" 7 | // } 8 | //} ); 9 | 10 | 11 | /* Default class modification */ 12 | $.extend( $.fn.dataTableExt.oStdClasses, { 13 | "sWrapper": "dataTables_wrapper form-inline" 14 | } ); 15 | 16 | 17 | /* API method to get paging information */ 18 | //$.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings ) 19 | //{ 20 | // return { 21 | // "iStart": oSettings._iDisplayStart, 22 | // "iEnd": oSettings.fnDisplayEnd(), 23 | // "iLength": oSettings._iDisplayLength, 24 | // "iTotal": oSettings.fnRecordsTotal(), 25 | // "iFilteredTotal": oSettings.fnRecordsDisplay(), 26 | // "iPage": Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ), 27 | // "iTotalPages": Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength ) 28 | // }; 29 | //}; 30 | 31 | 32 | /* Bootstrap style pagination control */ 33 | $.extend( $.fn.dataTableExt.oPagination, { 34 | "bootstrap": { 35 | "fnInit": function( oSettings, nPaging, fnDraw ) { 36 | var oLang = oSettings.oLanguage.oPaginate; 37 | var fnClickHandler = function ( e ) { 38 | e.preventDefault(); 39 | if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) { 40 | fnDraw( oSettings ); 41 | } 42 | }; 43 | 44 | $(nPaging).addClass('pagination').append( 45 | '' 49 | ); 50 | var els = $('a', nPaging); 51 | $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler ); 52 | $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler ); 53 | }, 54 | 55 | "fnUpdate": function ( oSettings, fnDraw ) { 56 | var iListLength = 5; 57 | var oPaging = oSettings.oInstance.fnPagingInfo(); 58 | var an = oSettings.aanFeatures.p; 59 | var i, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2); 60 | 61 | if ( oPaging.iTotalPages < iListLength) { 62 | iStart = 1; 63 | iEnd = oPaging.iTotalPages; 64 | } 65 | else if ( oPaging.iPage <= iHalf ) { 66 | iStart = 1; 67 | iEnd = iListLength; 68 | } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) { 69 | iStart = oPaging.iTotalPages - iListLength + 1; 70 | iEnd = oPaging.iTotalPages; 71 | } else { 72 | iStart = oPaging.iPage - iHalf + 1; 73 | iEnd = iStart + iListLength - 1; 74 | } 75 | 76 | for ( i=0, iLen=an.length ; i'+j+'') 84 | .insertBefore( $('li:last', an[i])[0] ) 85 | .bind('click', function (e) { 86 | e.preventDefault(); 87 | oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength; 88 | fnDraw( oSettings ); 89 | } ); 90 | } 91 | 92 | // Add / remove disabled classes from the static elements 93 | if ( oPaging.iPage === 0 ) { 94 | $('li:first', an[i]).addClass('disabled'); 95 | } else { 96 | $('li:first', an[i]).removeClass('disabled'); 97 | } 98 | 99 | if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) { 100 | $('li:last', an[i]).addClass('disabled'); 101 | } else { 102 | $('li:last', an[i]).removeClass('disabled'); 103 | } 104 | } 105 | } 106 | } 107 | } ); 108 | 109 | 110 | /* 111 | * TableTools Bootstrap compatibility 112 | * Required TableTools 2.1+ 113 | */ 114 | if ( $.fn.DataTable.TableTools ) { 115 | // Set the classes that TableTools uses to something suitable for Bootstrap 116 | $.extend( true, $.fn.DataTable.TableTools.classes, { 117 | "container": "DTTT btn-group", 118 | "buttons": { 119 | "normal": "btn", 120 | "disabled": "disabled" 121 | }, 122 | "collection": { 123 | "container": "DTTT_dropdown dropdown-menu", 124 | "buttons": { 125 | "normal": "", 126 | "disabled": "disabled" 127 | } 128 | }, 129 | "print": { 130 | "info": "DTTT_print_info modal" 131 | }, 132 | "select": { 133 | "row": "active" 134 | } 135 | } ); 136 | 137 | // Have the collection use a bootstrap compatible dropdown 138 | $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, { 139 | "collection": { 140 | "container": "ul", 141 | "button": "li", 142 | "liner": "a" 143 | } 144 | } ); 145 | } 146 | 147 | 148 | /* Table initialisation */ 149 | var dataTable = ""; 150 | function initTable() { 151 | $(document).ready(function() { 152 | dataTable = $('#dataTable').dataTable( { 153 | "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>", 154 | "bPaginate": false, 155 | "bInfo": false, 156 | "bFilter" : false, 157 | "iDisplayLength" : -1, 158 | "bLengthChange" : false, 159 | "oLanguage": { 160 | "sLengthMenu": "_MENU_ records per page" 161 | } 162 | }); 163 | //Init Search the Critique textbox 164 | // $("div#dataTable_wrapper > div.row > div.span6").eq(1).html('
\ 165 | // \ 169 | //
'); 170 | 171 | $("div#dataTable_wrapper > div.row > div.span6").eq(1).html('
\ 172 | \ 173 |
'); 174 | //Bind Search Results 175 | // $("#quickSearchCritique").keyup(function(event) { 176 | // if(event.which==13) { 177 | // quickSearch(); 178 | // } else { 179 | // clearTimeout($(this).data('timer')); 180 | // var search = $(this).val(); 181 | // //If we have more than 3 chars... 182 | // if(search.length >= 3) { 183 | // //Query every .333 seconds 184 | // $(this).data('timer', setTimeout(function() { 185 | // quickSearch(); 186 | // }, 333)); 187 | // } 188 | // } 189 | // }); 190 | }); 191 | }//END DataTable INIT 192 | 193 | /* dataTable searchbar ajax, and auto complete */ 194 | //function quickSearch() { 195 | // var query = $("#quickSearch.Critique").val(); 196 | // 197 | //} 198 | -------------------------------------------------------------------------------- /course.php: -------------------------------------------------------------------------------- 1 | pdo->prepare("SELECT DISTINCT Course FROM Data WHERE courseID = :id"); 20 | $raw = $db->pdo->prepare("SELECT profID, Prof, Size, ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)), ROUND(AVG(W)) FROM Data WHERE courseID = :id AND GPA != 0 GROUP BY Prof"); 21 | $avg = $db->pdo->prepare("SELECT ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)) FROM Data WHERE courseID = :id AND GPA != 0"); 22 | 23 | //execute query and handle error 24 | if (!$courseName->execute(array(":id" => $courseID)) || !$raw->execute(array(":id" => $courseID)) || !$avg->execute(array(":id" => $courseID))) { 25 | $error = file_get_contents("404.html"); 26 | die($error); 27 | } 28 | //Get course name 29 | $courseName = $courseName->fetch(PDO::FETCH_NUM); 30 | $courseName = $courseName[0]; 31 | 32 | //Get the avg marks 33 | $avg = $avg->fetch(PDO::FETCH_NUM); 34 | ?> 35 | 36 | 37 | 38 | 39 | Course Critique - <?= $courseName ?> 40 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | beta 61 |
62 |
63 |

64 |
65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 |
Average MarksGPAA%B%C%D%F%
86 |
87 |
88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | fetch(PDO::FETCH_NUM)): ?> 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 |
ProfessorSizeGPAA%B%C%D%F%W%
">
114 | 115 | 116 | 117 | 118 | 161 | 162 |
163 | 164 | 165 | -------------------------------------------------------------------------------- /css/bootswatch.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 20px; 3 | padding-bottom: 20px; 4 | } 5 | 6 | .navbar a > i { 7 | opacity: 1; 8 | } 9 | 10 | .navbar a:hover > i { 11 | opacity: 0.5; 12 | } 13 | section { 14 | margin-top: 100px; 15 | } 16 | 17 | .subhead { 18 | padding-bottom: 0; 19 | margin-bottom: 9px; 20 | } 21 | 22 | .subhead h1 { 23 | font-size: 54px; 24 | } 25 | 26 | .subnav { 27 | margin-bottom: 60px; 28 | width: 100%; 29 | height: 36px; 30 | background-color: #eeeeee; /* Old browsers */ 31 | background-repeat: repeat-x; /* Repeat the gradient */ 32 | background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); /* FF3.6+ */ 33 | background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#eeeeee)); /* Chrome,Safari4+ */ 34 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Chrome 10+,Safari 5.1+ */ 35 | background-image: -ms-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* IE10+ */ 36 | background-image: -o-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Opera 11.10+ */ 37 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0 ); /* IE6-9 */ 38 | background-image: linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* W3C */ 39 | border: 1px solid #e5e5e5; 40 | -webkit-border-radius: 4px; 41 | -moz-border-radius: 4px; 42 | border-radius: 4px; 43 | } 44 | 45 | .subnav .nav { 46 | margin-bottom: 0; 47 | } 48 | 49 | .subnav .nav > li > a { 50 | margin: 0; 51 | padding-top: 11px; 52 | padding-bottom: 11px; 53 | border-left: 1px solid #f5f5f5; 54 | border-right: 1px solid #e5e5e5; 55 | -webkit-border-radius: 0; 56 | -moz-border-radius: 0; 57 | border-radius: 0; 58 | } 59 | 60 | .subnav .nav > .active > a, 61 | .subnav .nav > .active > a:hover { 62 | padding-left: 13px; 63 | color: #777; 64 | background-color: #e9e9e9; 65 | border-right-color: #ddd; 66 | border-left: 0; 67 | -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.05); 68 | -moz-box-shadow: inset 0 3px 5px rgba(0,0,0,.05); 69 | box-shadow: inset 0 3px 5px rgba(0,0,0,.05); 70 | } 71 | 72 | .subnav .nav > .active > a .caret, 73 | .subnav .nav > .active > a:hover .caret { 74 | border-top-color: #777; 75 | } 76 | 77 | .subnav .nav > li:first-child > a, 78 | .subnav .nav > li:first-child > a:hover { 79 | border-left: 0; 80 | padding-left: 12px; 81 | -webkit-border-radius: 4px 0 0 4px; 82 | -moz-border-radius: 4px 0 0 4px; 83 | border-radius: 4px 0 0 4px; 84 | } 85 | 86 | .subnav .nav > li:last-child > a { 87 | border-right: 0; 88 | } 89 | 90 | .subnav .dropdown-menu { 91 | -webkit-border-radius: 0 0 4px 4px; 92 | -moz-border-radius: 0 0 4px 4px; 93 | border-radius: 0 0 4px 4px; 94 | } 95 | 96 | .tooltip-inner { 97 | max-width: 500px; 98 | } 99 | 100 | .hero-unit { 101 | margin-bottom: 10px; 102 | text-align: center; 103 | } 104 | 105 | .hero-unit h1, 106 | .hero-unit p { 107 | margin-bottom: 15px; 108 | } 109 | 110 | #social { 111 | display: inline-block; 112 | margin-top: 45px; 113 | text-align: center; 114 | } 115 | 116 | #gh-star { 117 | margin-right: 10px; 118 | } 119 | 120 | .twitter-follow-button { 121 | width: 60px !important; 122 | } 123 | 124 | .twitter-share-button { 125 | margin-right: 15px; 126 | } 127 | 128 | .rss-button { 129 | width: 40px; 130 | height: 14px; 131 | font-size: 11px; 132 | line-height: 14px; 133 | font-weight: bold; 134 | margin: 0 0 10px; 135 | padding: 2px 5px 2px 4px; 136 | } 137 | 138 | .icon-rss { 139 | background: url(../img/rss-icons.png) no-repeat 0 0; 140 | opacity: .65; 141 | width: 16px; 142 | } 143 | 144 | #ticker { 145 | margin-bottom: 40px; 146 | } 147 | 148 | .about { 149 | margin-top: 20px; 150 | } 151 | 152 | .about > div { 153 | margin-bottom: 20px; 154 | } 155 | 156 | .about h3 { 157 | margin: 0 0 5px 35px; 158 | } 159 | 160 | .about img { 161 | float: left; 162 | margin-top: 5px; 163 | opacity: 0.7; 164 | } 165 | 166 | #gallery { 167 | margin: 45px 0 30px 0; 168 | padding-right: 20px; 169 | text-align: center; 170 | } 171 | 172 | .thumbnail { 173 | margin-bottom: 20px; 174 | background-color: rgba(0, 0, 0, 0.05); 175 | } 176 | 177 | .thumbnail img { 178 | width: 100%; 179 | -webkit-border-radius: 7px; 180 | -moz-border-radius: 7px; 181 | border-radius: 7px; 182 | } 183 | 184 | .thumbnail .caption { 185 | color: inherit !important; 186 | } 187 | 188 | .thumbnail h3 { 189 | margin-bottom: 0; 190 | } 191 | 192 | .thumbnail .btn-toolbar { 193 | margin-top: 15px; 194 | text-align: right; 195 | } 196 | 197 | .links { 198 | margin-bottom: 20px; 199 | } 200 | 201 | .links > a { 202 | margin-right: 10px; 203 | } 204 | 205 | div.one .bsa_it_ad { 206 | padding: 25px 25px 15px 25px; 207 | } 208 | 209 | div.one .bsa_it_p { 210 | display: none; 211 | } 212 | 213 | .bsa { 214 | float: right; 215 | max-width: 400px; 216 | padding: 0; 217 | } 218 | 219 | body .one .bsa_it_ad { 220 | margin-bottom: -10px; 221 | background: none; 222 | border: none; 223 | font-family: inherit; 224 | color: inherit; 225 | } 226 | 227 | body .one .bsa_it_ad .bsa_it_t, 228 | body .one .bsa_it_ad .bsa_it_d { 229 | color: inherit; 230 | font-size: inherit; 231 | } 232 | 233 | body .one .bsa_it_p { 234 | display: none; 235 | } 236 | 237 | #bsap_aplink { 238 | float: right; 239 | position: relative; 240 | right: 10px; 241 | height: 0; 242 | font-size: 11px; 243 | } 244 | 245 | .links { 246 | margin-bottom: 20px; 247 | } 248 | 249 | .links > a { 250 | margin-right: 10px; 251 | } 252 | 253 | @media (max-width: 480px) { 254 | 255 | .hero-unit { 256 | padding: 20px 20px 0; 257 | margin: 0 0 20px; 258 | } 259 | 260 | .hero-unit h1 { 261 | font-size: 36px; 262 | } 263 | 264 | .hero-unit iframe { 265 | margin-right: 0 !important; 266 | } 267 | 268 | #social { 269 | margin-top: 0px; 270 | margin-bottom: 20px; 271 | } 272 | 273 | #social > span { 274 | display: block; 275 | } 276 | 277 | .about { 278 | margin-top: 0; 279 | } 280 | 281 | .about h3 { 282 | margin-top: 20px; 283 | } 284 | 285 | .about p { 286 | margin-bottom: 0; 287 | } 288 | 289 | .modal { 290 | position: fixed !important; 291 | top: 25% !important; 292 | } 293 | } 294 | 295 | /* Landscape phone to portrait tablet */ 296 | @media (min-width: 481px) and (max-width: 767px) { 297 | 298 | .hero-unit { 299 | margin-top: 0; 300 | padding: 30px; 301 | } 302 | 303 | .about { 304 | margin-top: 0; 305 | } 306 | } 307 | 308 | @media (max-width: 767px) { 309 | 310 | body { 311 | padding-top: 0; 312 | } 313 | 314 | .subnav { 315 | position: static; 316 | top: auto; 317 | z-index: auto; 318 | width: auto; 319 | height: auto; 320 | background: #fff; /* whole background property since we use a background-image for gradient */ 321 | -webkit-box-shadow: none; 322 | -moz-box-shadow: none; 323 | box-shadow: none; 324 | } 325 | 326 | .subnav .nav > li { 327 | float: none; 328 | } 329 | 330 | .subnav .nav > li > a { 331 | border: 0; 332 | } 333 | 334 | .subnav .nav > li + li > a { 335 | border-top: 1px solid #e5e5e5; 336 | } 337 | 338 | .subnav .nav > li:first-child > a, 339 | .subnav .nav > li:first-child > a:hover { 340 | -webkit-border-radius: 4px 4px 0 0; 341 | -moz-border-radius: 4px 4px 0 0; 342 | border-radius: 4px 4px 0 0; 343 | } 344 | 345 | .bsa { 346 | float: none; 347 | } 348 | } 349 | 350 | /* Portrait tablet to landscape and desktop */ 351 | @media (min-width: 768px) and (max-width: 979px) { 352 | 353 | .hero-unit { 354 | margin-top: 0; 355 | } 356 | 357 | .thumbnail p { 358 | font-size: 12px; 359 | } 360 | 361 | .thumbnail .btn { 362 | padding: 8px 12px; 363 | font-size: 12px; 364 | } 365 | } 366 | 367 | /* Fixed subnav on scroll, but only for 980px and up (sorry IE!) */ 368 | @media (min-width: 980px) { 369 | .subnav-fixed { 370 | position: fixed; 371 | top: 40px; 372 | left: 0; 373 | right: 0; 374 | z-index: 1020; /* 10 less than .navbar-fixed to prevent any overlap */ 375 | border-color: #d5d5d5; 376 | border-width: 0 0 1px; /* drop the border on the fixed edges */ 377 | -webkit-border-radius: 0; 378 | -moz-border-radius: 0; 379 | border-radius: 0; 380 | -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1); 381 | -moz-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1); 382 | box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1); 383 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */ 384 | } 385 | .subnav-fixed .nav { 386 | width: 938px; 387 | margin: 0 auto; 388 | padding: 0 1px; 389 | } 390 | .subnav .nav > li:first-child > a, 391 | .subnav .nav > li:first-child > a:hover { 392 | -webkit-border-radius: 0; 393 | -moz-border-radius: 0; 394 | border-radius: 0; 395 | } 396 | } 397 | 398 | @media (min-width: 768px) and (max-width: 979px) { 399 | 400 | /* Remove any padding from the body */ 401 | body { 402 | padding-top: 0; 403 | } 404 | } 405 | 406 | @media (min-width: 1210px) { 407 | 408 | .subnav-fixed .nav { 409 | width: 1168px; /* 2px less to account for left/right borders being removed when in fixed mode */ 410 | } 411 | } 412 | -------------------------------------------------------------------------------- /prof.php: -------------------------------------------------------------------------------- 1 | pdo->prepare("SELECT DISTINCT Prof FROM Data WHERE profID = :id"); 18 | $raw = $db->pdo->prepare("SELECT courseID, Course, Section, Year, Size, GPA, A, B, C, D, F, W FROM Data WHERE profID = :id"); 19 | $avg = $db->pdo->prepare("SELECT ROUND(AVG(GPA),2), ROUND(AVG(A)), ROUND(AVG(B)), ROUND(AVG(C)), ROUND(AVG(D)), ROUND(AVG(F)) FROM Data WHERE profID = :id AND GPA != 0 GROUP BY Prof"); 20 | 21 | //execute query and handle error 22 | if (!$raw->execute(array(":id" => $profID)) || !$avg->execute(array(":id" => $profID)) || !$profName->execute(array(":id" => $profID))) { 23 | $error = file_get_contents("404.html"); 24 | die($error); 25 | } 26 | 27 | // Get the professor's name 28 | $profName = $profName->fetch(PDO::FETCH_NUM); 29 | $profName = $profName[0]; 30 | 31 | //Get the avg 32 | $avg = $avg->fetch(PDO::FETCH_NUM); 33 | ?> 34 | 35 | 36 | 37 | 38 | Course Critique - <?= $profName ?> 39 | 40 | 41 | 42 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | beta 60 |
61 |
62 |

63 |
64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 |
Average MarksGPAA%B%C%D%F%
85 |
86 |
87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | fetch(PDO::FETCH_NUM)): ?> 106 | "> 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 |
CourseSectionYearSizeGPAA%B%C%D%F%W%
115 | 116 | 117 | 118 | 119 | 205 | 206 |
207 | 208 | 209 | -------------------------------------------------------------------------------- /author/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | About the Critiquers 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 42 | 43 | 44 | 45 | 46 | 48 |
49 |
50 |
51 |
52 |

Authors

53 |

Of Course Critique

54 |
55 |
56 |
57 | 59 |
60 |
61 | Picture of Joseph 62 |
63 |

SGA Director of IT

64 | Joseph Mattingly 65 |
66 | facebook-icon 67 | Linkedin-icon 68 | twitter-icon 69 | 70 |
71 | 72 |
73 | Picture of Colin 74 |
75 |

SGA IT Specialist - Project Lead

76 | Colin Bookman 77 |
78 | facebook-icon 79 | Linkedin-icon 80 | 81 |
82 | 83 |
84 | Picture of Shiv 85 |
86 |

Project Designer

87 | Shiv Patel 88 |
89 | facebook-icon 90 | Linkedin-icon 91 | twitter-icon 92 | 93 |
94 | 95 |
96 | 97 |
98 |
99 | Picture of Max 100 |
101 |

Creative Director

102 | Max Gluck 103 |
104 | facebook-icon 105 | 106 |
107 | 108 |
109 | Picture of Sagar 110 |
111 |

Consultant

112 | Sagar Savla 113 |
114 | facebook-icon 115 | Linkedin-icon 116 | twitter-icon 117 | 118 |
119 | 120 |
121 | Picture of Vivek 122 |
123 |

Consultant

124 | Vivek Srinivasan 125 |
126 | facebook-icon 127 | 128 |
129 |
130 |
131 |
132 | Picture of Nakul 133 |
134 |

Consultant

135 | Nakul Dureja 136 |
137 | facebook-icon 138 | 139 |
140 | 141 | 142 |
143 | Picture of Chris 144 |
145 |

Software Engineer

146 | Chris Forrence 147 |
148 | Linkedin-icon 149 | 150 |
151 |
152 | 153 | 155 |
156 | 162 |
163 | 164 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | -------------------------------------------------------------------------------- /default/variables.less: -------------------------------------------------------------------------------- 1 | // Swatch 2.2.1 2 | // Variables 3 | // -------------------------------------------------- 4 | 5 | 6 | // Global values 7 | // -------------------------------------------------- 8 | 9 | 10 | // Grays 11 | // ------------------------- 12 | @black: #000; 13 | @grayDarker: #222; 14 | @grayDark: #333; 15 | @gray: #555; 16 | @grayLight: #999; 17 | @grayLighter: #eee; 18 | @white: #fff; 19 | 20 | 21 | // Accent colors 22 | // ------------------------- 23 | @blue: #049cdb; 24 | @blueDark: #0064cd; 25 | @green: #46a546; 26 | @red: #9d261d; 27 | @yellow: #ffc40d; 28 | @orange: #f89406; 29 | @pink: #c3325f; 30 | @purple: #7a43b6; 31 | 32 | 33 | // Scaffolding 34 | // ------------------------- 35 | @bodyBackground: @white; 36 | @textColor: @grayDark; 37 | 38 | 39 | // Links 40 | // ------------------------- 41 | @linkColor: #08c; 42 | @linkColorHover: darken(@linkColor, 15%); 43 | 44 | 45 | // Typography 46 | // ------------------------- 47 | @sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; 48 | @serifFontFamily: Georgia, "Times New Roman", Times, serif; 49 | @monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; 50 | 51 | @baseFontSize: 14px; 52 | @baseFontFamily: @sansFontFamily; 53 | @baseLineHeight: 20px; 54 | @altFontFamily: @serifFontFamily; 55 | 56 | @headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily 57 | @headingsFontWeight: bold; // instead of browser default, bold 58 | @headingsColor: inherit; // empty to use BS default, @textColor 59 | 60 | 61 | // Component sizing 62 | // ------------------------- 63 | // Based on 14px font-size and 20px line-height 64 | 65 | @fontSizeLarge: @baseFontSize * 1.25; // ~18px 66 | @fontSizeSmall: @baseFontSize * 0.85; // ~12px 67 | @fontSizeMini: @baseFontSize * 0.75; // ~11px 68 | 69 | @paddingLarge: 11px 19px; // 44px 70 | @paddingSmall: 2px 10px; // 26px 71 | @paddingMini: 1px 6px; // 24px 72 | 73 | @baseBorderRadius: 4px; 74 | @borderRadiusLarge: 6px; 75 | @borderRadiusSmall: 3px; 76 | 77 | 78 | // Tables 79 | // ------------------------- 80 | @tableBackground: transparent; // overall background-color 81 | @tableBackgroundAccent: #f9f9f9; // for striping 82 | @tableBackgroundHover: #f5f5f5; // for hover 83 | @tableBorder: #ddd; // table and cell border 84 | 85 | // Buttons 86 | // ------------------------- 87 | @btnBackground: @white; 88 | @btnBackgroundHighlight: darken(@white, 10%); 89 | @btnBorder: #bbb; 90 | 91 | @btnPrimaryBackground: @linkColor; 92 | @btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%); 93 | 94 | @btnInfoBackground: #5bc0de; 95 | @btnInfoBackgroundHighlight: #2f96b4; 96 | 97 | @btnSuccessBackground: #62c462; 98 | @btnSuccessBackgroundHighlight: #51a351; 99 | 100 | @btnWarningBackground: lighten(@orange, 15%); 101 | @btnWarningBackgroundHighlight: @orange; 102 | 103 | @btnDangerBackground: #ee5f5b; 104 | @btnDangerBackgroundHighlight: #bd362f; 105 | 106 | @btnInverseBackground: #444; 107 | @btnInverseBackgroundHighlight: @grayDarker; 108 | 109 | 110 | // Forms 111 | // ------------------------- 112 | @inputBackground: @white; 113 | @inputBorder: #ccc; 114 | @inputBorderRadius: @baseBorderRadius; 115 | @inputDisabledBackground: @grayLighter; 116 | @formActionsBackground: #f5f5f5; 117 | @inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border 118 | 119 | 120 | // Dropdowns 121 | // ------------------------- 122 | @dropdownBackground: @white; 123 | @dropdownBorder: rgba(0,0,0,.2); 124 | @dropdownDividerTop: #e5e5e5; 125 | @dropdownDividerBottom: @white; 126 | 127 | @dropdownLinkColor: @grayDark; 128 | @dropdownLinkColorHover: @white; 129 | @dropdownLinkColorActive: @dropdownLinkColor; 130 | 131 | @dropdownLinkBackgroundActive: @linkColor; 132 | @dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; 133 | 134 | 135 | 136 | // COMPONENT VARIABLES 137 | // -------------------------------------------------- 138 | 139 | 140 | // Z-index master list 141 | // ------------------------- 142 | // Used for a bird's eye view of components dependent on the z-axis 143 | // Try to avoid customizing these :) 144 | @zindexDropdown: 1000; 145 | @zindexPopover: 1010; 146 | @zindexTooltip: 1030; 147 | @zindexFixedNavbar: 1030; 148 | @zindexModalBackdrop: 1040; 149 | @zindexModal: 1050; 150 | 151 | 152 | // Sprite icons path 153 | // ------------------------- 154 | @iconSpritePath: "../img/glyphicons-halflings.png"; 155 | @iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; 156 | 157 | 158 | // Input placeholder text color 159 | // ------------------------- 160 | @placeholderText: @grayLight; 161 | 162 | 163 | // Hr border color 164 | // ------------------------- 165 | @hrBorder: @grayLighter; 166 | 167 | 168 | // Horizontal forms & lists 169 | // ------------------------- 170 | @horizontalComponentOffset: 180px; 171 | 172 | 173 | // Wells 174 | // ------------------------- 175 | @wellBackground: #f5f5f5; 176 | 177 | 178 | // Navbar 179 | // ------------------------- 180 | @navbarCollapseWidth: 979px; 181 | @navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; 182 | 183 | @navbarHeight: 40px; 184 | @navbarBackgroundHighlight: #ffffff; 185 | @navbarBackground: darken(@navbarBackgroundHighlight, 5%); 186 | @navbarBorder: darken(@navbarBackground, 12%); 187 | 188 | @navbarText: #777; 189 | @navbarLinkColor: #777; 190 | @navbarLinkColorHover: @grayDark; 191 | @navbarLinkColorActive: @gray; 192 | @navbarLinkBackgroundHover: transparent; 193 | @navbarLinkBackgroundActive: darken(@navbarBackground, 5%); 194 | 195 | @navbarBrandColor: @navbarLinkColor; 196 | 197 | // Inverted navbar 198 | @navbarInverseBackground: #111111; 199 | @navbarInverseBackgroundHighlight: #222222; 200 | @navbarInverseBorder: #252525; 201 | 202 | @navbarInverseText: @grayLight; 203 | @navbarInverseLinkColor: @grayLight; 204 | @navbarInverseLinkColorHover: @white; 205 | @navbarInverseLinkColorActive: @navbarInverseLinkColorHover; 206 | @navbarInverseLinkBackgroundHover: transparent; 207 | @navbarInverseLinkBackgroundActive: @navbarInverseBackground; 208 | 209 | @navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); 210 | @navbarInverseSearchBackgroundFocus: @white; 211 | @navbarInverseSearchBorder: @navbarInverseBackground; 212 | @navbarInverseSearchPlaceholderColor: #ccc; 213 | 214 | @navbarInverseBrandColor: @navbarInverseLinkColor; 215 | 216 | 217 | // Pagination 218 | // ------------------------- 219 | @paginationBackground: #fff; 220 | @paginationBorder: #ddd; 221 | @paginationActiveBackground: #f5f5f5; 222 | 223 | 224 | // Hero unit 225 | // ------------------------- 226 | @heroUnitBackground: @grayLighter; 227 | @heroUnitHeadingColor: inherit; 228 | @heroUnitLeadColor: inherit; 229 | 230 | 231 | // Form states and alerts 232 | // ------------------------- 233 | @warningText: #c09853; 234 | @warningBackground: #fcf8e3; 235 | @warningBorder: darken(spin(@warningBackground, -10), 3%); 236 | 237 | @errorText: #b94a48; 238 | @errorBackground: #f2dede; 239 | @errorBorder: darken(spin(@errorBackground, -10), 3%); 240 | 241 | @successText: #468847; 242 | @successBackground: #dff0d8; 243 | @successBorder: darken(spin(@successBackground, -10), 5%); 244 | 245 | @infoText: #3a87ad; 246 | @infoBackground: #d9edf7; 247 | @infoBorder: darken(spin(@infoBackground, -10), 7%); 248 | 249 | 250 | // Tooltips and popovers 251 | // ------------------------- 252 | @tooltipColor: #fff; 253 | @tooltipBackground: #000; 254 | @tooltipArrowWidth: 5px; 255 | @tooltipArrowColor: @tooltipBackground; 256 | 257 | @popoverBackground: #fff; 258 | @popoverArrowWidth: 10px; 259 | @popoverArrowColor: #fff; 260 | @popoverTitleBackground: darken(@popoverBackground, 3%); 261 | 262 | // Special enhancement for popovers 263 | @popoverArrowOuterWidth: @popoverArrowWidth + 1; 264 | @popoverArrowOuterColor: rgba(0,0,0,.25); 265 | 266 | 267 | 268 | // GRID 269 | // -------------------------------------------------- 270 | 271 | 272 | // Default 940px grid 273 | // ------------------------- 274 | @gridColumns: 12; 275 | @gridColumnWidth: 60px; 276 | @gridGutterWidth: 20px; 277 | @gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); 278 | 279 | // 1200px min 280 | @gridColumnWidth1200: 70px; 281 | @gridGutterWidth1200: 30px; 282 | @gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); 283 | 284 | // 768px-979px 285 | @gridColumnWidth768: 42px; 286 | @gridGutterWidth768: 20px; 287 | @gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); 288 | 289 | 290 | // Fluid grid 291 | // ------------------------- 292 | @fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); 293 | @fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); 294 | 295 | // 1200px min 296 | @fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); 297 | @fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); 298 | 299 | // 768px-979px 300 | @fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); 301 | @fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); 302 | -------------------------------------------------------------------------------- /js/clippy/build/clippy.min.js: -------------------------------------------------------------------------------- 1 | var clippy={};clippy.Agent=function(a,b,c){this.path=a,this._queue=new clippy.Queue($.proxy(this._onQueueEmpty,this)),this._el=$('
').hide(),$(document.body).append(this._el),this._animator=new clippy.Animator(this._el,a,b,c),this._balloon=new clippy.Balloon(this._el),this._setupEvents()},clippy.Agent.prototype={gestureAt:function(a,b){var c=this._getDirection(a,b),d="Gesture"+c,e="Look"+c,f=this.hasAnimation(d)?d:e;return this.play(f)},hide:function(a,b){this._hidden=!0;var c=this._el;this.stop();if(a){this._el.hide(),this.stop(),this.pause(),b&&b();return}return this._playInternal("Hide",function(){c.hide(),this.pause(),b&&b()})},moveTo:function(a,b,c){var d=this._getDirection(a,b),e="Move"+d;c===undefined&&(c=1e3),this._addToQueue(function(d){if(c===0){this._el.css({top:b,left:a}),this.reposition(),d();return}if(!this.hasAnimation(e)){this._el.animate({top:b,left:a},c,d);return}var f=$.proxy(function(e,f){f===clippy.Animator.States.EXITED&&d(),f===clippy.Animator.States.WAITING&&this._el.animate({top:b,left:a},c,$.proxy(function(){this._animator.exitAnimation()},this))},this);this._playInternal(e,f)},this)},_playInternal:function(a,b){this._isIdleAnimation()&&this._idleDfd&&this._idleDfd.state()==="pending"&&this._idleDfd.done($.proxy(function(){this._playInternal(a,b)},this)),this._animator.showAnimation(a,b)},play:function(a,b,c){return this.hasAnimation(a)?(b===undefined&&(b=5e3),this._addToQueue(function(d){var e=!1,f=function(a,b){b===clippy.Animator.States.EXITED&&(e=!0,c&&c(),d())};b&&window.setTimeout($.proxy(function(){if(e)return;this._animator.exitAnimation()},this),b),this._playInternal(a,f)},this),!0):!1},show:function(a){this._hidden=!1;if(a){this._el.show(),this.resume(),this._onQueueEmpty();return}if(this._el.css("top")==="auto"||!this._el.css("left")==="auto"){var b=$(window).width()*.8,c=($(window).height()+$(document).scrollTop())*.8;this._el.css({top:c,left:b})}return this.resume(),this.play("Show")},speak:function(a,b){this._addToQueue(function(c){this._balloon.speak(c,a,b)},this)},closeBalloon:function(){this._balloon.hide()},delay:function(a){a=a||250,this._addToQueue(function(b){this._onQueueEmpty(),window.setTimeout(b,a)})},stopCurrent:function(){this._animator.exitAnimation(),this._balloon.close()},stop:function(){this._queue.clear(),this._animator.exitAnimation(),this._balloon.hide()},hasAnimation:function(a){return this._animator.hasAnimation(a)},animations:function(){return this._animator.animations()},animate:function(){var a=this.animations(),b=a[Math.floor(Math.random()*a.length)];return b.indexOf("Idle")===0?this.animate():this.play(b)},_getDirection:function(a,b){var c=this._el.offset(),d=this._el.height(),e=this._el.width(),f=c.left+e/2,g=c.top+d/2,h=g-b,i=f-a,j=Math.round(180*Math.atan2(h,i)/Math.PI);return-45<=j&&j<45?"Right":45<=j&&j<135?"Up":135<=j&&j<=180||-180<=j&&j<-135?"Left":-135<=j&&j<-45?"Down":"Top"},_onQueueEmpty:function(){if(this._hidden||this._isIdleAnimation())return;var a=this._getIdleAnimation();this._idleDfd=$.Deferred(),this._animator.showAnimation(a,$.proxy(this._onIdleComplete,this))},_onIdleComplete:function(a,b){b===clippy.Animator.States.EXITED&&this._idleDfd.resolve()},_isIdleAnimation:function(){var a=this._animator.currentAnimationName;return a&&a.indexOf("Idle")===0},_getIdleAnimation:function(){var a=this.animations(),b=[];for(var c=0;ce&&(h=e-b-j),i-j<0?i=j:i+c+j>d&&(i=d-c-j),this._el.css({left:i,top:h}),this._balloon.reposition()},_onMouseDown:function(a){a.preventDefault(),this._startDrag(a)},_startDrag:function(a){this.pause(),this._balloon.hide(!0),this._offset=this._calculateClickOffset(a),this._moveHandle=$.proxy(this._dragMove,this),this._upHandle=$.proxy(this._finishDrag,this),$(window).on("mousemove",this._moveHandle),$(window).on("mouseup",this._upHandle),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_calculateClickOffset:function(a){var b=a.pageX,c=a.pageY,d=this._el.offset();return{top:c-d.top,left:b-d.left}},_updateLocation:function(){this._el.css({top:this._targetY,left:this._taregtX}),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_dragMove:function(a){a.preventDefault();var b=a.clientX-this._offset.left,c=a.clientY-this._offset.top;this._taregtX=b,this._targetY=c},_finishDrag:function(){window.clearTimeout(this._dragUpdateLoop),$(window).off("mousemove",this._moveHandle),$(window).off("mouseup",this._upHandle),this._balloon.show(),this.reposition(),this.resume()},_addToQueue:function(a,b){b&&(a=$.proxy(a,b)),this._queue.queue(a)},pause:function(){this._animator.pause(),this._balloon.pause()},resume:function(){this._animator.resume(),this._balloon.resume()}},clippy.Animator=function(a,b,c,d){this._el=a,this._data=c,this._path=b,this._currentFrameIndex=0,this._currentFrame=undefined,this._exiting=!1,this._currentAnimation=undefined,this._endCallback=undefined,this._started=!1,this._sounds={},this.currentAnimationName=undefined,this.preloadSounds(d),this._overlays=[this._el];var e=this._el;this._setupElement(this._el);for(var f=1;f"));e.append(g),this._overlays.push(g),e=g}},clippy.Animator.prototype={_setupElement:function(a){var b=this._data.framesize;return a.css("display","none"),a.css({width:b[0],height:b[1]}),a.css("background","url('"+this._path+"/map.png') no-repeat"),a},animations:function(){var a=[],b=this._data.animations;for(var c in b)a.push(c);return a},preloadSounds:function(a){for(var b=0;b=this._currentAnimation.frames.length-1},_step:function(){if(!this._currentAnimation)return;var a=Math.min(this._getNextAnimationFrame(),this._currentAnimation.frames.length-1),b=!this._currentFrame||this._currentFrameIndex!==a;this._currentFrameIndex=a;if(!this._atLastFrame()||!this._currentAnimation.useExitBranching)this._currentFrame=this._currentAnimation.frames[this._currentFrameIndex];this._draw(),this._playSound(),this._loop=window.setTimeout($.proxy(this._step,this),this._currentFrame.duration),this._endCallback&&b&&this._atLastFrame()&&(this._currentAnimation.useExitBranching&&!this._exiting?this._endCallback(this.currentAnimationName,clippy.Animator.States.WAITING):this._endCallback(this.currentAnimationName,clippy.Animator.States.EXITED))},pause:function(){window.clearTimeout(this._loop)},resume:function(){this._step()}},clippy.Animator.States={WAITING:1,EXITED:0},clippy.Balloon=function(a){this._targetEl=a,this._hidden=!0,this._setup()},clippy.Balloon.prototype={WORD_SPEAK_TIME:200,CLOSE_BALLOON_DELAY:2e3,_setup:function(){this._balloon=$('
').hide(),this._content=this._balloon.find(".clippy-content"),$(document.body).append(this._balloon)},reposition:function(){var a=["top-left","top-right","bottom-left","bottom-right"];for(var b=0;be||i+c+j>d?!0:!1},speak:function(a,b,c){this._hidden=!1,this.show();var d=this._content;d.height("auto"),d.width("auto"),d.text(b),d.height(d.height()),d.width(d.width()),d.text(""),this.reposition(),this._complete=a,this._sayWords(b,c,a)},show:function(){if(this._hidden)return;this._balloon.show()},hide:function(a){if(a){this._balloon.hide();return}this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)},_finishHideBalloon:function(){if(this._active)return;this._balloon.hide(),this._hidden=!0,this._hiding=null},_sayWords:function(a,b,c){this._active=!0,this._hold=b;var d=a.split(/[^\S-]/),e=this.WORD_SPEAK_TIME,f=this._content,g=1;this._addWord=$.proxy(function(){if(!this._active)return;g>d.length?(this._active=!1,this._hold||(c(),this.hide())):(f.text(d.slice(0,g).join(" ")),g++,this._loop=window.setTimeout($.proxy(this._addWord,this),e))},this),this._addWord()},close:function(){this._active?this._hold=!1:this._hold&&this._complete()},pause:function(){window.clearTimeout(this._loop),this._hiding&&(window.clearTimeout(this._hiding),this._hiding=null)},resume:function(){this._addWord&&this._addWord(),this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)}},clippy.BASE_PATH="https://critique.gatech.edu/js/clippy/Agents/",clippy.load=function(a,b,c){var d=clippy.BASE_PATH+a,e=clippy.load._loadMap(d),f=clippy.load._loadAgent(a,d),g=clippy.load._loadSounds(a,d),h;f.done(function(a){h=a});var i;g.done(function(a){i=a});var j=function(){var a=new clippy.Agent(d,h,i);b(a)};$.when(e,f,g).done(j).fail(c)},clippy.load._maps={},clippy.load._loadMap=function(a){var b=clippy.load._maps[a];if(b)return b;b=clippy.load._maps[a]=$.Deferred();var c=a+"/map.png",d=new Image;return d.onload=b.resolve,d.onerror=b.reject,d.setAttribute("src",c),b.promise()},clippy.load._sounds={},clippy.load._loadSounds=function(a,b){var c=clippy.load._sounds[a];if(c)return c;c=clippy.load._sounds[a]=$.Deferred();var d=document.createElement("audio"),e=!!d.canPlayType&&""!=d.canPlayType("audio/mpeg"),f=!!d.canPlayType&&""!=d.canPlayType('audio/ogg; codecs="vorbis"');if(!e&&!f)c.resolve({});else{var g=b+(e?"/sounds-mp3.js":"/sounds-ogg.js");clippy.load._loadScript(g)}return c.promise()},clippy.load._data={},clippy.load._loadAgent=function(a,b){var c=clippy.load._data[a];if(c)return c;c=clippy.load._getAgentDfd(a);var d=b+"/agent.js";return clippy.load._loadScript(d),c.promise()},clippy.load._loadScript=function(a){var b=document.createElement("script");b.setAttribute("src",a),b.setAttribute("async","async"),b.setAttribute("type","text/javascript"),document.head.appendChild(b)},clippy.load._getAgentDfd=function(a){var b=clippy.load._data[a];return b||(b=clippy.load._data[a]=$.Deferred()),b},clippy.ready=function(a,b){var c=clippy.load._getAgentDfd(a);c.resolve(b)},clippy.soundsReady=function(a,b){var c=clippy.load._sounds[a];c||(c=clippy.load._sounds[a]=$.Deferred()),c.resolve(b)},clippy.Queue=function(a){this._queue=[],this._onEmptyCallback=a},clippy.Queue.prototype={queue:function(a){this._queue.push(a),this._queue.length===1&&!this._active&&this._progressQueue()},_progressQueue:function(){if(!this._queue.length){this._onEmptyCallback();return}var a=this._queue.shift();this._active=!0;var b=$.proxy(this.next,this);a(b)},clear:function(){this._queue=[]},next:function(){this._active=!1,this._progressQueue()}} -------------------------------------------------------------------------------- /js/clippy/clippy.min.js-backup: -------------------------------------------------------------------------------- 1 | var clippy={};clippy.Agent=function(a,b,c){this.path=a,this._queue=new clippy.Queue($.proxy(this._onQueueEmpty,this)),this._el=$('
').hide(),$(document.body).append(this._el),this._animator=new clippy.Animator(this._el,a,b,c),this._balloon=new clippy.Balloon(this._el),this._setupEvents()},clippy.Agent.prototype={gestureAt:function(a,b){var c=this._getDirection(a,b),d="Gesture"+c,e="Look"+c,f=this.hasAnimation(d)?d:e;return this.play(f)},hide:function(a,b){this._hidden=!0;var c=this._el;this.stop();if(a){this._el.hide(),this.stop(),this.pause(),b&&b();return}return this._playInternal("Hide",function(){c.hide(),this.pause(),b&&b()})},moveTo:function(a,b,c){var d=this._getDirection(a,b),e="Move"+d;c===undefined&&(c=1e3),this._addToQueue(function(d){if(c===0){this._el.css({top:b,left:a}),this.reposition(),d();return}if(!this.hasAnimation(e)){this._el.animate({top:b,left:a},c,d);return}var f=$.proxy(function(e,f){f===clippy.Animator.States.EXITED&&d(),f===clippy.Animator.States.WAITING&&this._el.animate({top:b,left:a},c,$.proxy(function(){this._animator.exitAnimation()},this))},this);this._playInternal(e,f)},this)},_playInternal:function(a,b){this._isIdleAnimation()&&this._idleDfd&&this._idleDfd.state()==="pending"&&this._idleDfd.done($.proxy(function(){this._playInternal(a,b)},this)),this._animator.showAnimation(a,b)},play:function(a,b,c){return this.hasAnimation(a)?(b===undefined&&(b=5e3),this._addToQueue(function(d){var e=!1,f=function(a,b){b===clippy.Animator.States.EXITED&&(e=!0,c&&c(),d())};b&&window.setTimeout($.proxy(function(){if(e)return;this._animator.exitAnimation()},this),b),this._playInternal(a,f)},this),!0):!1},show:function(a){this._hidden=!1;if(a){this._el.show(),this.resume(),this._onQueueEmpty();return}if(this._el.css("top")==="auto"||!this._el.css("left")==="auto"){var b=$(window).width()*.8,c=($(window).height()+$(document).scrollTop())*.8;this._el.css({top:c,left:b})}return this.resume(),this.play("Show")},speak:function(a,b){this._addToQueue(function(c){this._balloon.speak(c,a,b)},this)},closeBalloon:function(){this._balloon.hide()},delay:function(a){a=a||250,this._addToQueue(function(b){this._onQueueEmpty(),window.setTimeout(b,a)})},stopCurrent:function(){this._animator.exitAnimation(),this._balloon.close()},stop:function(){this._queue.clear(),this._animator.exitAnimation(),this._balloon.hide()},hasAnimation:function(a){return this._animator.hasAnimation(a)},animations:function(){return this._animator.animations()},animate:function(){var a=this.animations(),b=a[Math.floor(Math.random()*a.length)];return b.indexOf("Idle")===0?this.animate():this.play(b)},_getDirection:function(a,b){var c=this._el.offset(),d=this._el.height(),e=this._el.width(),f=c.left+e/2,g=c.top+d/2,h=g-b,i=f-a,j=Math.round(180*Math.atan2(h,i)/Math.PI);return-45<=j&&j<45?"Right":45<=j&&j<135?"Up":135<=j&&j<=180||-180<=j&&j<-135?"Left":-135<=j&&j<-45?"Down":"Top"},_onQueueEmpty:function(){if(this._hidden||this._isIdleAnimation())return;var a=this._getIdleAnimation();this._idleDfd=$.Deferred(),this._animator.showAnimation(a,$.proxy(this._onIdleComplete,this))},_onIdleComplete:function(a,b){b===clippy.Animator.States.EXITED&&this._idleDfd.resolve()},_isIdleAnimation:function(){var a=this._animator.currentAnimationName;return a&&a.indexOf("Idle")===0},_getIdleAnimation:function(){var a=this.animations(),b=[];for(var c=0;ce&&(h=e-b-j),i-j<0?i=j:i+c+j>d&&(i=d-c-j),this._el.css({left:i,top:h}),this._balloon.reposition()},_onMouseDown:function(a){a.preventDefault(),this._startDrag(a)},_startDrag:function(a){this.pause(),this._balloon.hide(!0),this._offset=this._calculateClickOffset(a),this._moveHandle=$.proxy(this._dragMove,this),this._upHandle=$.proxy(this._finishDrag,this),$(window).on("mousemove",this._moveHandle),$(window).on("mouseup",this._upHandle),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_calculateClickOffset:function(a){var b=a.pageX,c=a.pageY,d=this._el.offset();return{top:c-d.top,left:b-d.left}},_updateLocation:function(){this._el.css({top:this._targetY,left:this._taregtX}),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_dragMove:function(a){a.preventDefault();var b=a.clientX-this._offset.left,c=a.clientY-this._offset.top;this._taregtX=b,this._targetY=c},_finishDrag:function(){window.clearTimeout(this._dragUpdateLoop),$(window).off("mousemove",this._moveHandle),$(window).off("mouseup",this._upHandle),this._balloon.show(),this.reposition(),this.resume()},_addToQueue:function(a,b){b&&(a=$.proxy(a,b)),this._queue.queue(a)},pause:function(){this._animator.pause(),this._balloon.pause()},resume:function(){this._animator.resume(),this._balloon.resume()}},clippy.Animator=function(a,b,c,d){this._el=a,this._data=c,this._path=b,this._currentFrameIndex=0,this._currentFrame=undefined,this._exiting=!1,this._currentAnimation=undefined,this._endCallback=undefined,this._started=!1,this._sounds={},this.currentAnimationName=undefined,this.preloadSounds(d),this._overlays=[this._el];var e=this._el;this._setupElement(this._el);for(var f=1;f"));e.append(g),this._overlays.push(g),e=g}},clippy.Animator.prototype={_setupElement:function(a){var b=this._data.framesize;return a.css("display","none"),a.css({width:b[0],height:b[1]}),a.css("background","url('"+this._path+"/map.png') no-repeat"),a},animations:function(){var a=[],b=this._data.animations;for(var c in b)a.push(c);return a},preloadSounds:function(a){for(var b=0;b=this._currentAnimation.frames.length-1},_step:function(){if(!this._currentAnimation)return;var a=Math.min(this._getNextAnimationFrame(),this._currentAnimation.frames.length-1),b=!this._currentFrame||this._currentFrameIndex!==a;this._currentFrameIndex=a;if(!this._atLastFrame()||!this._currentAnimation.useExitBranching)this._currentFrame=this._currentAnimation.frames[this._currentFrameIndex];this._draw(),this._playSound(),this._loop=window.setTimeout($.proxy(this._step,this),this._currentFrame.duration),this._endCallback&&b&&this._atLastFrame()&&(this._currentAnimation.useExitBranching&&!this._exiting?this._endCallback(this.currentAnimationName,clippy.Animator.States.WAITING):this._endCallback(this.currentAnimationName,clippy.Animator.States.EXITED))},pause:function(){window.clearTimeout(this._loop)},resume:function(){this._step()}},clippy.Animator.States={WAITING:1,EXITED:0},clippy.Balloon=function(a){this._targetEl=a,this._hidden=!0,this._setup()},clippy.Balloon.prototype={WORD_SPEAK_TIME:200,CLOSE_BALLOON_DELAY:2e3,_setup:function(){this._balloon=$('
').hide(),this._content=this._balloon.find(".clippy-content"),$(document.body).append(this._balloon)},reposition:function(){var a=["top-left","top-right","bottom-left","bottom-right"];for(var b=0;be||i+c+j>d?!0:!1},speak:function(a,b,c){this._hidden=!1,this.show();var d=this._content;d.height("auto"),d.width("auto"),d.text(b),d.height(d.height()),d.width(d.width()),d.text(""),this.reposition(),this._complete=a,this._sayWords(b,c,a)},show:function(){if(this._hidden)return;this._balloon.show()},hide:function(a){if(a){this._balloon.hide();return}this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)},_finishHideBalloon:function(){if(this._active)return;this._balloon.hide(),this._hidden=!0,this._hiding=null},_sayWords:function(a,b,c){this._active=!0,this._hold=b;var d=a.split(/[^\S-]/),e=this.WORD_SPEAK_TIME,f=this._content,g=1;this._addWord=$.proxy(function(){if(!this._active)return;g>d.length?(this._active=!1,this._hold||(c(),this.hide())):(f.text(d.slice(0,g).join(" ")),g++,this._loop=window.setTimeout($.proxy(this._addWord,this),e))},this),this._addWord()},close:function(){this._active?this._hold=!1:this._hold&&this._complete()},pause:function(){window.clearTimeout(this._loop),this._hiding&&(window.clearTimeout(this._hiding),this._hiding=null)},resume:function(){this._addWord&&this._addWord(),this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)}},clippy.BASE_PATH="http://critique.gatech.edu/js/clippy/Agents/",clippy.load=function(a,b,c){var d=clippy.BASE_PATH+a,e=clippy.load._loadMap(d),f=clippy.load._loadAgent(a,d),g=clippy.load._loadSounds(a,d),h;f.done(function(a){h=a});var i;g.done(function(a){i=a});var j=function(){var a=new clippy.Agent(d,h,i);b(a)};$.when(e,f,g).done(j).fail(c)},clippy.load._maps={},clippy.load._loadMap=function(a){var b=clippy.load._maps[a];if(b)return b;b=clippy.load._maps[a]=$.Deferred();var c=a+"/map.png",d=new Image;return d.onload=b.resolve,d.onerror=b.reject,d.setAttribute("src",c),b.promise()},clippy.load._sounds={},clippy.load._loadSounds=function(a,b){var c=clippy.load._sounds[a];if(c)return c;c=clippy.load._sounds[a]=$.Deferred();var d=document.createElement("audio"),e=!!d.canPlayType&&""!=d.canPlayType("audio/mpeg"),f=!!d.canPlayType&&""!=d.canPlayType('audio/ogg; codecs="vorbis"');if(!e&&!f)c.resolve({});else{var g=b+(e?"/sounds-mp3.js":"/sounds-ogg.js");clippy.load._loadScript(g)}return c.promise()},clippy.load._data={},clippy.load._loadAgent=function(a,b){var c=clippy.load._data[a];if(c)return c;c=clippy.load._getAgentDfd(a);var d=b+"/agent.js";return clippy.load._loadScript(d),c.promise()},clippy.load._loadScript=function(a){var b=document.createElement("script");b.setAttribute("src",a),b.setAttribute("async","async"),b.setAttribute("type","text/javascript"),document.head.appendChild(b)},clippy.load._getAgentDfd=function(a){var b=clippy.load._data[a];return b||(b=clippy.load._data[a]=$.Deferred()),b},clippy.ready=function(a,b){var c=clippy.load._getAgentDfd(a);c.resolve(b)},clippy.soundsReady=function(a,b){var c=clippy.load._sounds[a];c||(c=clippy.load._sounds[a]=$.Deferred()),c.resolve(b)},clippy.Queue=function(a){this._queue=[],this._onEmptyCallback=a},clippy.Queue.prototype={queue:function(a){this._queue.push(a),this._queue.length===1&&!this._active&&this._progressQueue()},_progressQueue:function(){if(!this._queue.length){this._onEmptyCallback();return}var a=this._queue.shift();this._active=!0;var b=$.proxy(this.next,this);a(b)},clear:function(){this._queue=[]},next:function(){this._active=!1,this._progressQueue()}} -------------------------------------------------------------------------------- /js/clippy/src/agent.js: -------------------------------------------------------------------------------- 1 | var clippy = {}; 2 | 3 | /****** 4 | * 5 | * 6 | * @constructor 7 | */ 8 | clippy.Agent = function (path, data, sounds) { 9 | this.path = path; 10 | 11 | this._queue = new clippy.Queue($.proxy(this._onQueueEmpty, this)); 12 | 13 | this._el = $('
').hide(); 14 | 15 | $(document.body).append(this._el); 16 | 17 | this._animator = new clippy.Animator(this._el, path, data, sounds); 18 | 19 | this._balloon = new clippy.Balloon(this._el); 20 | 21 | this._setupEvents(); 22 | }; 23 | 24 | clippy.Agent.prototype = { 25 | 26 | /**************************** API ************************************/ 27 | 28 | /*** 29 | * 30 | * @param {Number} x 31 | * @param {Number} y 32 | */ 33 | gestureAt:function (x, y) { 34 | var d = this._getDirection(x, y); 35 | var gAnim = 'Gesture' + d; 36 | var lookAnim = 'Look' + d; 37 | 38 | var animation = this.hasAnimation(gAnim) ? gAnim : lookAnim; 39 | return this.play(animation); 40 | }, 41 | 42 | /*** 43 | * 44 | * @param {Boolean=} fast 45 | * 46 | */ 47 | hide:function (fast, callback) { 48 | this._hidden = true; 49 | var el = this._el; 50 | this.stop(); 51 | if (fast) { 52 | this._el.hide(); 53 | this.stop(); 54 | this.pause(); 55 | if (callback) callback(); 56 | return; 57 | } 58 | 59 | return this._playInternal('Hide', function () { 60 | el.hide(); 61 | this.pause(); 62 | if (callback) callback(); 63 | }) 64 | }, 65 | 66 | 67 | moveTo:function (x, y, duration) { 68 | var dir = this._getDirection(x, y); 69 | var anim = 'Move' + dir; 70 | if (duration === undefined) duration = 1000; 71 | 72 | this._addToQueue(function (complete) { 73 | // the simple case 74 | if (duration === 0) { 75 | this._el.css({top:y, left:x}); 76 | this.reposition(); 77 | complete(); 78 | return; 79 | } 80 | 81 | // no animations 82 | if (!this.hasAnimation(anim)) { 83 | this._el.animate({top:y, left:x}, duration, complete); 84 | return; 85 | } 86 | 87 | var callback = $.proxy(function (name, state) { 88 | // when exited, complete 89 | if (state === clippy.Animator.States.EXITED) { 90 | complete(); 91 | } 92 | // if waiting, 93 | if (state === clippy.Animator.States.WAITING) { 94 | this._el.animate({top:y, left:x}, duration, $.proxy(function () { 95 | // after we're done with the movement, do the exit animation 96 | this._animator.exitAnimation(); 97 | }, this)); 98 | } 99 | 100 | }, this); 101 | 102 | this._playInternal(anim, callback); 103 | }, this); 104 | }, 105 | 106 | _playInternal:function (animation, callback) { 107 | 108 | // if we're inside an idle animation, 109 | if (this._isIdleAnimation() && this._idleDfd && this._idleDfd.state() === 'pending') { 110 | this._idleDfd.done($.proxy(function () { 111 | this._playInternal(animation, callback); 112 | }, this)) 113 | } 114 | 115 | this._animator.showAnimation(animation, callback); 116 | }, 117 | 118 | play:function (animation, timeout, cb) { 119 | if (!this.hasAnimation(animation)) return false; 120 | 121 | if (timeout === undefined) timeout = 5000; 122 | 123 | 124 | this._addToQueue(function (complete) { 125 | var completed = false; 126 | // handle callback 127 | var callback = function (name, state) { 128 | if (state === clippy.Animator.States.EXITED) { 129 | completed = true; 130 | if (cb) cb(); 131 | complete(); 132 | } 133 | }; 134 | 135 | // if has timeout, register a timeout function 136 | if (timeout) { 137 | window.setTimeout($.proxy(function () { 138 | if (completed) return; 139 | // exit after timeout 140 | this._animator.exitAnimation(); 141 | }, this), timeout) 142 | } 143 | 144 | this._playInternal(animation, callback); 145 | }, this); 146 | 147 | return true; 148 | }, 149 | 150 | /*** 151 | * 152 | * @param {Boolean=} fast 153 | */ 154 | show:function (fast) { 155 | 156 | this._hidden = false; 157 | if (fast) { 158 | this._el.show(); 159 | this.resume(); 160 | this._onQueueEmpty(); 161 | return; 162 | } 163 | 164 | if (this._el.css('top') === 'auto' || !this._el.css('left') === 'auto') { 165 | var left = $(window).width() * 0.8; 166 | var top = ($(window).height() + $(document).scrollTop()) * 0.8; 167 | this._el.css({top:top, left:left}); 168 | } 169 | 170 | this.resume(); 171 | return this.play('Show'); 172 | }, 173 | 174 | /*** 175 | * 176 | * @param {String} text 177 | */ 178 | speak:function (text, hold) { 179 | this._addToQueue(function (complete) { 180 | this._balloon.speak(complete, text, hold); 181 | }, this); 182 | }, 183 | 184 | 185 | /*** 186 | * Close the current balloon 187 | */ 188 | closeBalloon:function () { 189 | this._balloon.hide(); 190 | }, 191 | 192 | delay:function (time) { 193 | time = time || 250; 194 | 195 | this._addToQueue(function (complete) { 196 | this._onQueueEmpty(); 197 | window.setTimeout(complete, time); 198 | }); 199 | }, 200 | 201 | /*** 202 | * Skips the current animation 203 | */ 204 | stopCurrent:function () { 205 | this._animator.exitAnimation(); 206 | this._balloon.close(); 207 | }, 208 | 209 | 210 | stop:function () { 211 | // clear the queue 212 | this._queue.clear(); 213 | this._animator.exitAnimation(); 214 | this._balloon.hide(); 215 | }, 216 | 217 | /*** 218 | * 219 | * @param {String} name 220 | * @returns {Boolean} 221 | */ 222 | hasAnimation:function (name) { 223 | return this._animator.hasAnimation(name); 224 | }, 225 | 226 | /*** 227 | * Gets a list of animation names 228 | * 229 | * @return {Array.} 230 | */ 231 | animations:function () { 232 | return this._animator.animations(); 233 | }, 234 | 235 | /*** 236 | * Play a random animation 237 | * @return {jQuery.Deferred} 238 | */ 239 | animate:function () { 240 | var animations = this.animations(); 241 | var anim = animations[Math.floor(Math.random() * animations.length)]; 242 | // skip idle animations 243 | if (anim.indexOf('Idle') === 0) { 244 | return this.animate(); 245 | } 246 | return this.play(anim); 247 | }, 248 | 249 | /**************************** Utils ************************************/ 250 | 251 | /*** 252 | * 253 | * @param {Number} x 254 | * @param {Number} y 255 | * @return {String} 256 | * @private 257 | */ 258 | _getDirection:function (x, y) { 259 | var offset = this._el.offset(); 260 | var h = this._el.height(); 261 | var w = this._el.width(); 262 | 263 | var centerX = (offset.left + w / 2); 264 | var centerY = (offset.top + h / 2); 265 | 266 | 267 | var a = centerY - y; 268 | var b = centerX - x; 269 | 270 | var r = Math.round((180 * Math.atan2(a, b)) / Math.PI); 271 | 272 | // Left and Right are for the character, not the screen :-/ 273 | if (-45 <= r && r < 45) return 'Right'; 274 | if (45 <= r && r < 135) return 'Up'; 275 | if (135 <= r && r <= 180 || -180 <= r && r < -135) return 'Left'; 276 | if (-135 <= r && r < -45) return 'Down'; 277 | 278 | // sanity check 279 | return 'Top'; 280 | }, 281 | 282 | /**************************** Queue and Idle handling ************************************/ 283 | 284 | /*** 285 | * Handle empty queue. 286 | * We need to transition the animation to an idle state 287 | * @private 288 | */ 289 | _onQueueEmpty:function () { 290 | if (this._hidden || this._isIdleAnimation()) return; 291 | var idleAnim = this._getIdleAnimation(); 292 | this._idleDfd = $.Deferred(); 293 | 294 | this._animator.showAnimation(idleAnim, $.proxy(this._onIdleComplete, this)); 295 | }, 296 | 297 | _onIdleComplete:function (name, state) { 298 | if (state === clippy.Animator.States.EXITED) { 299 | this._idleDfd.resolve(); 300 | } 301 | }, 302 | 303 | 304 | /*** 305 | * Is the current animation is Idle? 306 | * @return {Boolean} 307 | * @private 308 | */ 309 | _isIdleAnimation:function () { 310 | var c = this._animator.currentAnimationName; 311 | return c && c.indexOf('Idle') === 0; 312 | }, 313 | 314 | 315 | /** 316 | * Gets a random Idle animation 317 | * @return {String} 318 | * @private 319 | */ 320 | _getIdleAnimation:function () { 321 | var animations = this.animations(); 322 | var r = []; 323 | for (var i = 0; i < animations.length; i++) { 324 | var a = animations[i]; 325 | if (a.indexOf('Idle') === 0) { 326 | r.push(a); 327 | } 328 | } 329 | 330 | // pick one 331 | var idx = Math.floor(Math.random() * r.length); 332 | return r[idx]; 333 | }, 334 | 335 | /**************************** Events ************************************/ 336 | 337 | _setupEvents:function () { 338 | $(window).on('resize', $.proxy(this.reposition, this)); 339 | 340 | this._el.on('mousedown', $.proxy(this._onMouseDown, this)); 341 | 342 | this._el.on('dblclick', $.proxy(this._onDoubleClick, this)); 343 | }, 344 | 345 | _onDoubleClick:function () { 346 | if (!this.play('ClickedOn')) { 347 | this.animate(); 348 | } 349 | }, 350 | 351 | reposition:function () { 352 | if (!this._el.is(':visible')) return; 353 | var o = this._el.offset(); 354 | var bH = this._el.outerHeight(); 355 | var bW = this._el.outerWidth(); 356 | 357 | var wW = $(window).width(); 358 | var wH = $(window).height(); 359 | var sT = $(window).scrollTop(); 360 | var sL = $(window).scrollLeft(); 361 | 362 | var top = o.top - sT; 363 | var left = o.left - sL; 364 | var m = 5; 365 | if (top - m < 0) { 366 | top = m; 367 | } else if ((top + bH + m) > wH) { 368 | top = wH - bH - m; 369 | } 370 | 371 | if (left - m < 0) { 372 | left = m; 373 | } else if (left + bW + m > wW) { 374 | left = wW - bW - m; 375 | } 376 | 377 | this._el.css({left:left, top:top}); 378 | // reposition balloon 379 | this._balloon.reposition(); 380 | }, 381 | 382 | _onMouseDown:function (e) { 383 | e.preventDefault(); 384 | this._startDrag(e); 385 | }, 386 | 387 | 388 | /**************************** Drag ************************************/ 389 | 390 | _startDrag:function (e) { 391 | // pause animations 392 | this.pause(); 393 | this._balloon.hide(true); 394 | this._offset = this._calculateClickOffset(e); 395 | 396 | this._moveHandle = $.proxy(this._dragMove, this); 397 | this._upHandle = $.proxy(this._finishDrag, this); 398 | 399 | $(window).on('mousemove', this._moveHandle); 400 | $(window).on('mouseup', this._upHandle); 401 | 402 | this._dragUpdateLoop = window.setTimeout($.proxy(this._updateLocation, this), 10); 403 | }, 404 | 405 | _calculateClickOffset:function (e) { 406 | var mouseX = e.pageX; 407 | var mouseY = e.pageY; 408 | var o = this._el.offset(); 409 | return { 410 | top:mouseY - o.top, 411 | left:mouseX - o.left 412 | } 413 | 414 | }, 415 | 416 | _updateLocation:function () { 417 | this._el.css({top:this._targetY, left:this._targetX}); 418 | this._dragUpdateLoop = window.setTimeout($.proxy(this._updateLocation, this), 10); 419 | }, 420 | 421 | _dragMove:function (e) { 422 | e.preventDefault(); 423 | var x = e.clientX - this._offset.left; 424 | var y = e.clientY - this._offset.top; 425 | this._targetX = x; 426 | this._targetY = y; 427 | }, 428 | 429 | _finishDrag:function () { 430 | window.clearTimeout(this._dragUpdateLoop); 431 | // remove handles 432 | $(window).off('mousemove', this._moveHandle); 433 | $(window).off('mouseup', this._upHandle); 434 | // resume animations 435 | this._balloon.show(); 436 | this.reposition(); 437 | this.resume(); 438 | 439 | }, 440 | 441 | _addToQueue:function (func, scope) { 442 | if (scope) func = $.proxy(func, scope); 443 | this._queue.queue(func); 444 | }, 445 | 446 | /**************************** Pause and Resume ************************************/ 447 | 448 | pause:function () { 449 | this._animator.pause(); 450 | this._balloon.pause(); 451 | 452 | }, 453 | 454 | resume:function () { 455 | this._animator.resume(); 456 | this._balloon.resume(); 457 | } 458 | 459 | }; 460 | -------------------------------------------------------------------------------- /default/bootstrap-responsive.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Responsive v2.2.2 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */@-ms-viewport{width:device-width}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} 10 | -------------------------------------------------------------------------------- /js/clippy/Agents/Clippy/sounds-mp3.js: -------------------------------------------------------------------------------- 1 | clippy.soundsReady('Clippy', {'1':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAABAAAAckACQkJCQkJDMzMzMzM0FBQUFBQVBQUFBQUF5eXl5eXl5tbW1tbW18fHx8fHyKioqKioqZmZmZmZmZqKioqKiotra2tra2xcXFxcXF1NTU1NTU1OLi4uLi4vHx8fHx8f///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEJkyjYNBGABO+ACgXjGNYAAAADGN+aIiJ9DgAAnX//+IWnXDgbvHfRC9AMDFvEAJn/5QMcH/8P/6PP//g+H//lAQOYPnygIf/4IK8G+r//SVb/9lL1eislc6nrPoLzdWkl9b/+MixBgWQ0LEy4FoABsZLLnVGP7lgHgPcwVsGsvLUyo4mZ+pa6kt6utH3oIdDdDWbGj9vlbdWvo9VS1vft/67avv/V660ES1zv5Pvd4lmqKqSolBW0pas1CKns7VUrvTnDbUmzp3a6CD/+MgxBsbKk65lcVoAJFHCS1FSt012oUHEDLEXuztsnrUivUtjdlpsfWpbjvIgmgfQ4xgBzlAplwvpoOgvqs9XrQXstCiX3D7VL5cdUcYbkFIKdhSf7tjBIGibNnSnKWhfvjf0//7f97/4yLECRTTasTKEJS+Xd1/6Qop/qt/wYcH/X9P/b/IAVF/99dLaG2Ywz1ZILItnJ69dkMZUa/1pcwow/IgWBoK5ceFGPQw84w9j7H73T3mkhUMI+XL+jpVGf/s76+26endQATR+qInoID/4yDEERc7aqgAEVq86nk8/FXDiq//UtvRqqSa9HMTqiilU9dtevr/dlPuio6mMxDZW9vv0a/+1kEluZg3Q4TBzVBlJtUykr6e7MvUqiomOHjjPiImGZkf1FqqqqmAAxiqbRqX0JvOe//jIsQPF4tyrZQqlLw6O97I8NyVvRE01mhRiZbq63WuTiwHB5ppSYrou/VfqtZGeBG9W+9K1MMNbs10vZpYWz9fp6TDLf9NrmmDwaovv/+zPpemhAQo7/vndSHV1Qz9PpTRbN/Wi4mtb//jIMQMFONmqAAqjry3+IgcdtNOiIhICIKW6dadddvXt3qC0ChNGMbr6721znsvQ84bjyH87dfcmajfpv2dCgQkS3U7t+99/OoiEQcIbvXXW9zZqbUMbXSaRlbf+f29Qs7f+bnAcVRL/+MixBMSMuKoAClOuFSe6FQfEsGJmfo9/3/9MqA06/vbpmo3069WHShin6Uu3z5/9f2Pj5ESv/9x4ZDRVn6782q/rQzX+/67/99WAOt9pv7K33svqhgQh2tNW7/76a1eiDoTHUr2p+t0/+MgxCYSG26kACnOvH6Zy55jl3T9G9bfTbN/ue1Wp6/9v+qpHxYc3SXlGIHporHKR//429P+/V9fM/HBZ6JfnbUChb72r2ng/DjV/p+rp1vb84sGKI9VtXm7/+Y63PjZ32TzmXSvm33/4yLEOBRLaqzKEc68NFRaoITWqv1f3/vdFug85NupYvsTXjGqitUErzu2uSn2zP03HXd9OtejiFrf/VzAIsZZnfXa3Rl02XsqIFA9kX2/+S11qeqnKLszq7/1sqLf+6+ylYBdmkebXp3/4yDEQhQLbqAAKcq8dPc8iUEjDs46+VgGvtQqDP96U//Qvtrfl/+wQ+vbTVwWDf27Lbv7P9dWQ00TGt9N/bpdL/1MIibaVQtHrx6DhUs6lJUwdU+vPJpa+z9SykXIMzEMZdt26/oqfv/jIsRMEPpGpAApTrhu2Ge/1uvSFv3W/6lQFCVXVuiVs3MfrS9jnqLUT6e9dEbTXdPHAq288LEmtrRfUp6lmnUJmdOzLrSy86EP1KL9Cgy1NW3NoutVS/70tNbfPT36u79DZ19dwo0ri//jIMRkEkJGoAAojri8qpRdGhaDiT5wF2hwLd6bTkbBZLG2zi5tK99QfaTdF0JfpUpib0CrCzHIims4KGCTTSy5diUIQETU1nqEVXrzLYbRzqOPzWYyEH2X8qyqyly10M9lZhsjKDO//+MixHYUMSacAUc4AJpKsUUPIAPwtVgSvFiRg5JvsYUrW8sWNogg4QYJRiRbh7tFSHgiqe0kdaMRtcSTLEX6PMkg2JvR0Y/TsYqQajHHxR7N7spYvF3TXErxBzd0hUkIWpqdGm6z0r1e/+MgxIEklAKQAYtAAZU3JsMx6tEC67bzjKuIylKCleEIQhTCFwhDiEshc///////0MZkMY2UpuUv/MY1DGeUKAhUFXCIOFj0FdKzuCoKrUDQ8N8FeVOiVxYGvPf+Ingq8FQ0WDgiPf//4yLESRKBsmADwRAAlkxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=','2':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAsAAAUZADMzMzMzMzMzM0dHR0dHR0dHR1xcXFxcXFxcXHBwcHBwcHBwcIWFhYWFhYWFhZmZmZmZmZmZma6urq6urq6ursLCwsLCwsLCwtfX19fX19fX1+vr6+vr6+vr6////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAERgCxlVBGABpeOEAAQEB+CByCETn3ZQEwfB94IA+D4Ph8Rg/BAMeDgIHOoMet/+D4IHPLg/B8H/E4P5cHwfBwEAQBDzn3fynl3//ggrfoNfAMmppHbcjFOkREnlKl3EWUWcP/+MixBYXygrsAYMoADJOOPZBEMEGynGmcxHQSdnQz0LSJndrpxAwldtSLftPIssh2noyPZBHNi7wneDYIgFDREVPO8gaGPzr5SAYuwUHf1f/hYc8KvXVqqmazxvyD9Vh5qwPHcpUUKRM/+MgxBIWmVbZi8MYANAIHsbKDBp0kigU/CrxyjU4wMur/5mO1VcrhQ0WSCo8sVO5FT4KuWE8OFgaPFeDQMnTtzXckE3ezhoaeCgURjRqx0qGv/d/uUrRHxbLSRUikq9WmJNhVUxjqjP/4yLEEhhh/rDCSMaYSq5MKUTkEUBEt4VFEsRdKhhRsBAWFUyZDvlqFAc+W5QCPyz857ExlIzQvOMZcqleUBNK0iIBNBqJopLXuc+vRlk0aEWI72sb2Wt/c4n9gEotfYCYcYVVoZSGAg7/4yDEDBawsqDKGMZMDUMUagJWplWxlBCuQTsKMGzBPWJwZERNaBYubHB4KHWzqa1xAIHiEOgZo0JEQ8wXAyFNehy0H2Lok+gpQ526uPrRu1uFvS4XculbXf0srh//wJ5hbCsZUEhRqP/jIsQME9AuoMoQRAARmnkToWeDFqaT8WeA1lC0UeZi9k+KiECKKo3UqFN0kapQkJpXEM7ZPtHdiE77LGNfTUqPsWBEajbnrNZBNjVy9xRqakv///9lZZ0z2BTeWaEowJg9UBmhA84+Hv/jIMQYFGheqZQIxiigaWHKCLybxzRUMPTeah5tAwHjLgyRiYIIa+xSVqKp8xFAOlSqdrPftUldC7ZmRRMpU+99yDSf/Y9dBoqqqfIdKiNIO0Lg2BBUCC4DEoGQpTSgYFz0wBDYIvYg/+MixCEUqAahkgBEAKnwoJhPIlUHzh9WPeGHrPUFXvt1HETKDTDdMTbmXTECDUJlUzyid/Why419qUKSk19KB3//8GST5FOcW4RCyd0kJxA57iaG3XMjgxKCp8BtWfEFCb19Vx/eyHyL/+MgxCoUcJ6kAUEQADuIHwiFwIJ2H5RY51z3ROQCwAAZRlsPOWWBAToUTKCeGFr+gPkBAJ4CIYYIBgQCyBCb1XyhPMJCb8HscB7/jw8OiKFP/NOKnkV//c0bDYqKRt//joiuAKDwVA//4yLEMxijbpj9gjgBhkB3//8fOMc0IQlZRQItfp//7IPD5Sw2KCUxopLJ////+OkUKmTXKjhVUGzoJ3AqTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/4yDELAAAA0gBwAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==','3':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAsAAAUZADMzMzMzMzMzM0dHR0dHR0dHR1xcXFxcXFxcXHBwcHBwcHBwcIWFhYWFhYWFhZmZmZmZmZmZma6urq6urq6ursLCwsLCwsLCwtfX19fX19fX1+vr6+vr6+vr6////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEkB+eAlGSAIn//aP4jO93bXbEAAAAAgeCAYJGHfLggCAIAgCYPn8oCAYQX+c6wfwQd///E4EBAEHcoCAJg+D4Pn//gg4oCH/4P8oCDsMeJwfQ89XeJbWwxIOXMB8lFxKUAIC/+MixBIU4JasAYZIAMszld2+yeo2QEYqJab3FRVmRR45aj41iHXpcezzNNFEVeZLMTHnmTNS0Z3CBsYhlnMmmlFuhzvYRvF21r87JyKplakAKqr7j9bzuHJEkb30znIvIxgcXJUF3YAq/+MgxBoZiP6pk89AAM5oysIDRQUIHB0FXPhYieKdd7qbtu0XciXoqW95pyErsOPYVehpsHTwCGmxFFK0OJHHvXJs3re9rK5XajliGN3bOsi77967FtSLMfQq4D/41inbGjkCtnkMZXX/4yLEDhfYpqzKHh5M5qXLARxpIjapmWpOm0lA8B5Hg2u6q9yc9z41SYwYA8fFBV5xziZ8o5LE1urymoHGOsJVNTaj7cwbRa9VLdleK1q0JPSK7X2dNiscrWmb7EC9VZAACqqqnJzkMt7/4yDEChbw7rmUZgxwpIFYJ0nF8AZAYsChNfQ0BaNX60EcYvHotT1r7sZVr6AqrJtxusme8F3rP+Z1FaKhpj0Xm1T6xrFr0Vq3bS2iTOeR1fu269/3/Z+v9VNcl33opbEAATLdtttqrv/jIsQJFYia1l4zzEzYEoUsS8Vj5mLELOKSiXCEzRXEdvpnma7LLxiR4GwTCaQCeYHSI5ryqAUIjluQy/4oh91NNHRsJDbu39V0dU5aEspOsr9NdCquPZ9X9aqNAFS222222qVCNkVSB//jIMQOFHBe8l4IxiqGoZiXwJAmEJcRLAYQPC+5pRT09SHYbKRZE4lyHMMqHbDBEsTchU0hiHVTStuw/t0Of0CJC219FOd67e0UdUeSiUueSgX/eV9lIOKQsyUyACiFtDmxvQxjjVc4/+MixBcUiHKoyhvGSCQUjUAKZQmWvQkWfZO5JpxOxJpa0UBZIfaetb1elgx7Hp6ERZuXfcZQEnWvOWLaqvpZal9VWukffHu0VaqqqRGP//5FCIiB0Mno4YzELOHhCu5Qo9zlvXURtCCG/+MgxCATkFqoVUkQAIXSzQdYdvkw7quFkUKZFiUbIk1PM0OFHLc6srWpp2mR93oRnmVOYadsXkaN/ZpVAAggQAEScnCUPETCmBZ9B8v8487/NSrf+QmExzr/+QlDyEtN//wlCcIIbjj/4yLELBczdogVilAASkxqf//qLmIR6RKzCsI5F///+4lFgbiqlCcViYmFYjZP////yIvOIdDTTEPMVpEPnUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/4yDEKwAAA0gBwAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','4':'data:audio/mpeg;base64,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','5':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAkAAARIADw8PDw8PDw8PDw8VVVVVVVVVVVVVVVtbW1tbW1tbW1tbYaGhoaGhoaGhoaGnp6enp6enp6enp62tra2tra2tra2ts/Pz8/Pz8/Pz8/P5+fn5+fn5+fn5+f//////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAE7nidAFBEAD/gAv/jG/1PnOc/5znOc53b/ITOc53/zgAAII055z/+QhCEIc5zvoQDFuIAQBA/BB2D79QIAgCYPn/xIcxAD4Pn/4gBBwOAgc/qBAMQxggVV/Pc++tvRmalfpM/+MixAwUMhq4AYFQANFSzKe6k7GmLCQSSqERG1RYLI46h4s5osGDgiiUqQ2M9Dj1OMZVc8fqcTmuYTohImqegtqTNCwu4TChX/zjP1OZ/6vvpnLbbbboqkjZtTsrV1NKyUHAV+S0JCRN/+MgxBcaAg6+V8JAAMwa0ptbVUPD3N99/8XdfRIuFZ6xIJSYb+u55lY4Xhvqf2uZNq4nYf3dxf7GnmNsULVDlCMilwXU4q4UmEZokSS2lAqtNDCTFR6337V2jWL3m7//5A7miSjMpZL/4yLEChXRarGUCMaUAihSZnsZ0yQF+TmiddxYgAEIiIiO/E+aIhFyQHTtUtRTGBgwpCCEyR4KAIDPQiL8XADBUTtZUK6iTOxN7HPtplyFf7Siv0bEXf27GLpqcul2kAac7pfhowoUMRT/4yDEDheBErZcGYxwZOOaSZLvKLRp1SRCc+HBSW55ma3tXeZqqpJ581kmyx0isFTtqBKDTxQUzrgqRkKWUsA8JW1C+bbfRt1RoCetSbGOQJXyKfYe+rQt0XchyOnDf//fb7a2SgD7kP/jIsQLFHE2+l4IxnLGWYiXd7OX0RNNAjmEimZ17CqbHH9DEG9dKT1ziuaCATHyDir4rIDZIYNcKIWEVOStSe+XA6LUME7Sa59t6tP/9//9e9/QYv///61T9E/1dKyv99SEVz1Svk/kV//jIMQVFWOuwAFAKADrQQIvot1Ogo6znOel5DmazsdxNGZZiiCs90Qgwp0KY18iDahAVMSfYxEVBAokJDXVF0eSX1S1WoPKIqIBYYh+qjr////f//X/0pb//Jmq11T/ZtqEZWVKOcFm/+MixBoYa6bIAYEoAPVCoPSOUB1fdg44CjgiZnW9dIiK4jC2ZRcjiYbOooKuBgmBwI9xrq6h8RNlKXsYRMLZSoVCisfGGGoe+5LDxzKrsLSdLa6stUBACAhBBJIIEBfL8/Wv6sd//Hf//+MgxBQRSp56LYE4AFr//07jq//845zZoqHv//y41HTDzlHkOFI7///+YecaKhsoRCouwaZ//wkwUUFWWMUqTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=','6':'data:audio/mpeg;base64,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','7':'data:audio/mpeg;base64,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','8':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAUAAAKmAGJiYmJiYmJiYmJiYmJiYmJiYmKJiYmJiYmJiYmJiYmJiYmJiYmJibGxsbGxsbGxsbGxsbGxsbGxsbGx2NjY2NjY2NjY2NjY2NjY2NjY2Nj//////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAFGGKoidBGACMATACpHGMf/8YAL4Hd3d3f/QvroiIXogGBgYGLf0d3OIAJQiFoEAAAQLd3d3c+uHAwMDcHAQBD+Xg+HwQOf3f4PviB0HwffUCDv/Lg///+nkFVf//JtszOzTM/+MixAkUIX68AYFgAJmZpkztWcq1+S9FnzNYkItj5AE6hWZOEGiHEAwv0K4xLQloIhmRJsRz1uTKxWE5WbDrArisGgWBpfhn/d+/9TP/0f///9/+lUSr3xetKtl6lLso21J+plLU1rvr/+MgxBQWwX6sAYFoAC4J2SxgXaxdNDJBpYUV3SHwKVSiGiiZmKlGzJkUh0zc1nD9Uetda0rKWm3jX8ilYsh9A5exeX891pqtIpdqSxe3FT1uL2XpBQ+nBRHxQW8xo/pKSR/zJMnFpR//4yLEFBezboQBhWgAV81LoJ8kYrV/8zKJFE+LRdEy16K/5RLyLnjU3PK9X/8xpzVTrSMWO////oHVs6aBskkZHD6zb////8wLyJiYGR00QTrMls5go3+pTEFNRTMuOTkuNVVVVVVVVVX/4yDEEQAAA0gBwAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','9':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAwAAAWCAC8vLy8vLy8vQkJCQkJCQkJVVVVVVVVVVWhoaGhoaGhoaHt7e3t7e3t7jo6Ojo6Ojo6hoaGhoaGhoaG0tLS0tLS0tMbGxsbGxsbG2tra2tra2tra7Ozs7Ozs7Oz//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAD1AGfbFBEACo6gABAAEAQBA5qIZyXBB2CYf+IAQU4uH/TqBB3+sEHZcHz/5cH+GPiAEDniN5T8Ez//+oEPygIHPhj5cH1WRrW0okEn7XPctERlZmO/UWVqiIY1J7Pozs6Wur/+MixB0bVAKsAYUoAKOjEvTsplQOVTZjpTVEFkMRBasYR3cdQTF6szudDyPOo4UozlhE7sgYncedkS9vqQRSyoVqoRCtFx8qqyPKm9nPPbXWjvPerTadlrZ++e7D1aKpqqkstq85UYOn/+MgxAsWChKtkco4AM5Wo+qkE/+lXZ6zUflRwylJx9FUwXvzKUeNgXljmeqUfOVaujVShw618748cx/fzSofdXScb1CgPhvwAHGDn7vpG6dAmb8Z4upCtr7kqqqqqqoo57elYiAjaUf/4yLEDRbLXq2SKcS8+56bO7TVMtOXX1MPmXuiURQeiW2/OdB0Ktba9lRJn+ybkFsnR32Urv177X36pdQRL6N0UI7f3ZDtdK60cknv+z/+6Dgm/zRzL5wzeemkVc/////oiyt6X0CeTs3/4yDEDReCxrWUUcq4s9upe9t1ZLi/zrLS5hN3Od9dBMAUQ06XqwDnlv94kuyWXoNF91ZkmzGdmeyOqNUXvuf7ORqbfvP2t0DysY4dJiAa0RtgH+j55zS2oYTcK6Fpb0/gsf29Ktp61P/jIsQKE/OqpAA4jtzwttl+qG9nvzAy+3usGb3/YzvrmeS7N1rspy03z9ntb6Majd+/ktGf1uezGP5ymDoyGF06ohpjv+v7aMnVHOJGIpoLvY6h/////+LHyrZcNq47OgNHXfxNxXc83f/jIMQWF+uqtZRaBNx9daXbenzF8JxXU3HE8UdUTDRT7LC0Ds3KYya5imGulQtDznTRd/R7H2+ZqGlat/1Tf/Usv///qFG/utq+tvy9/9RJDSD0tPa4qgYmvdzIA0chrULE5+BiqhYS/+MixBESEDqgADhUBBlBkAi0yLbyIzw2utli5ZfP2LdYKY66hG0rocIV01oRdYcoINbWoUQPfaxqVqwJc4m6LWP26Vpqv/+Aa2kvWzrazBgttZkJZemU4aeWp9vYeTPQxNz3RqVdPdqP/+MgxCQUacqgykDElHq2anQ7zKdL9qPukLUdSg2cNmSwvE7W7HbCXvbZWctRW7jgrbe9+jmKH8UyD03//0CM74xZg6hgBFZpAEMi54BFw6bFhrHSMjebNQ4Bng+T4DUOWsoo1CblpOH/4yLELROoPqDLQhAAFRpg5oshwzodY9q0r2o3rpYepG5BXzH05pT4unsertKPSgZWSNvHktNvxKbpHvGglDmdzweg5GysvwLD8bg6NHUc35UgRGgGiTQeQ7+OCKFRqOliKHdP88LIPFz/4yDEOiBjeoABizgBkOEBV9WO/8mLTh0gWcUk0OIedm9P/yQ2FAsPQaCQPDRhsRUkcdHhsrDyzlr//4pCg4SB8OOIsmWHhqD4SBlh0sWXh2/vCKFKTEFNRTMuOTkuNaqqqqqqqqqqqv/jIsQTAAADSAHAAACqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==','10':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAQAAAI+AHNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc6KioqKioqKioqKioqKioqKioqKioqKioqLR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR/////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAETJuillBEAAFGIkCRonmNuQx3KQBjGMbxkIT/9T/znORv/59TnP8jc7/////rO///+hDnOd+cAIcB8H8EAQcGC4PvEYPv/L////+oEEVgkMabVbm66Uvr2vtV3butvmR4WOc/+MixBYZe96sAYU4AMOlOiPVtVez3dGRUsjta1UU2c/+y37uZR0ckp9q77R/7U46BR0HhYaYM6MyIDDpQnKC41rTItZpyFBtn512pfmN26Guqa9+y+bdFcq4U6w6ggLSHguHfQ/x5/5p/+MgxAwWu3Z8CYc4AKyf5ynKb/46YSHgfE//x4lnHf/9Dh1kNNNHv//xsIw6RFRpQbR0ahD///+ASNAhByWYIhKHiQpHiR3////9JxJR0iaPDYqPHkR0wRhqUG1MQU1FMy45OS41VVX/4yLEDAAAA0gBwAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=','11':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAwAAAWCAC8vLy8vLy8vQkJCQkJCQkJVVVVVVVVVVWhoaGhoaGhoaHt7e3t7e3t7jo6Ojo6Ojo6hoaGhoaGhoaG0tLS0tLS0tMbGxsbGxsbG2tra2tra2tra7Ozs7Ozs7Oz//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEegCcjFBEAARCpTGYDETw9dUD8Tn/1ZQEDn+oEEB/8oc/8Tg+f4nP+CYPg+H4Pn/lAQB8HwfygIOg+D4f/DCwfB/8Tg+H/hiXB9+CEhB8Poa0b1r//Vvp7rWntsT3f+nKnq+/+MixBMX8+akAYIQAcm/si9n2vXdqyao1zFo+1Ps57Uoys87FYhnRTM2ZmbUiqdWNncO7IRbQYNBIJnGRGd5EbIjMRVIrsyoYjOrYhCSQbJYxitMZwazfS5KalltttsikCl6olp6plYu/+MgxA8X6ZquW8UwAK7ilz29S7ZkJmF+D9WpoQc6h9kkC4lMrULM+xvUyL+Np3vo6fqNx8dcJ1lm0YJhouaFxgP4SW9SSy4Rv74srUcU2rUnjHqywstCuU7+v25XRXBZttbG0pAnt7L/4yLEChYg8q5aKMZww+7OgekzqBL+WsJZWZSgRXX8yYILlEEXaJGBgakCtGFg89IOmmQDclBstcQj4x8k9SRVwp70wwwlA3S1iFFX4etp03jXS97FPEDZP0UetZsP4hobS2RJMbvr8LD/4yDEDRaJNrp+EMZwRYcnKIGBfTNyBsosFXd+/DycVIDLe9tbRzRcqeYYVaHyQbHZxQIC7x8ZAznMe8OLaXLFyAxBZ/ZyS0W0EmuUgsReqj2+xvF0J1f1uxKqg//76vBn/eRiTynhDP/jIsQNFnGepZIozJTOMlc45o6L9P3Di7lmiC9wMckgZytlBmRaq3Kh1XENV53qnzNftjtvKfE4lSJSp1qZ7lWFHLDa3PGilg5GtotI2Or9xBd/qdO6UVf/or/fgGfZUVBITOYReHnuXv/jIMQPFEj+mMooRnC+c7GYpAzCj1Zo0qic3PLawedFyIu4MIWrhSixJtTRR+deSbtQWJLap1GKIUWGxyla1sJXs1X5VVqEY8d4dm16GsTVg/+gb/W4XBdVgCaYwyC40IsZiFh5oOmn/+MixBgTsAaYyjBGAJAJXtFiATKkazSiYUnsk4Gyui6OFAJU4A7LPKyYfSSPlmLJBNiy9Lj525S7+/rC4ykXurWlFimb/8Bn+py96OtmHlXnBr0BkUeTgIUDFITF40IUrewBBCLIURUP/+MgxCUT6G6YyihEKK1pTtpExmLrfQAkhoqgnaOZYXGpsSZdapx2SXnlOm7kMQs4/IWUe6OqXLqP/4Bn/9H15I4CCyBUTDm1kxVLTZcmDopEo4ChcSHWz5lbCLMe15YXJObUJGrU5a7/4yLEMBPoZpjLRRgASaxxFFPIvNTKqLyz0pES4K2e4AJbL6LbPAGhqK6HNMUNWGoWoabjeq9lCgtTWMBYIdC3+LDgCCIoKIg34oEDYBa6uJ+HPFHQZi/ILapfw/gcFsMFLtfMIZM1Y1b/4yDEPCBTtogBiBgBPxBBsgxG44lgQqsDkgKUtfrCj9W0dHIuBXxSvUqmRg3kMGSGv+a/6rgyIwRsNHqo18OLodHDDxzsHzHIDoi8qf2F4rL8lQSCRgYCY9f/1KMxRj6v+WhjMhn6Gv/jIsQVEXGOHYHDEACG+b9Slepf/1L//M6lAR4alToKuiX7VPBV+VOiXEv/h2JTold/ywNKDv/+oGhgNfh1TEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','12':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAUAAAKmAGJiYmJiYmJiYmJiYmJiYmJiYmKJiYmJiYmJiYmJiYmJiYmJiYmJibGxsbGxsbGxsbGxsbGxsbGxsbGx2NjY2NjY2NjY2NjY2NjY2NjY2Nj//////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEXgGnlFBEAAtqhC1kICsHwfDCMu/ggCByUOQfeD/BMPxA7sLh//KHP9QIYgDEoc///B8Hz+JwfNS4f9QJh8QAgCAPg/iMP/DH/gQEDkmGYaNvfIRBcW/2+Z/cdczizyZmhyo/+MixBUXwyq4AYI4ADhB3xsQ8go4OXOWJiveUGj+q5typyv//8sJAsVkPOIotxuWlkp6hGbbv0U05TUUsLzEir/NiYvv9K4Vbl3B0GgeWx7QCd9an7PqDIZDKvTGoKCVFy9VSlE6/Eg3/+MgxBIWGxKsAYU4AChHjrfWEQb6lAbzYVPEm+4hIv0enp/Q/+76/jhEuJ/fjwOQcETdeaPGnf+3MKlyoAxyffx0F4ZX9e4+IoeV+k798VAvt8RVFZBRtstLpW5OW36LomGkrxMaKnP/4yLEFBgLXowBjWgBJKtH6bGBJF8NPrJH8huamrMd0v/sYmFBaVKl+v/oDJHqICYH1m5izWMlLLqkv//rrMkFIIkmF4JbW36kjFkv//6DVKUtdFRqXsriuSpMQU1FMy45OS41qqqqqqr/4yDEDwAAA0gBwAAAqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==','13':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAUAAAKmAGJiYmJiYmJiYmJiYmJiYmJiYmKJiYmJiYmJiYmJiYmJiYmJiYmJibGxsbGxsbGxsbGxsbGxsbGxsbGx2NjY2NjY2NjY2NjY2NjY2NjY2Nj//////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAExEijgNBKACywOBgZjGN8HyGP8BznfyHfIQhP6EIcPgOAYBh8+8hGU4ucEDggDHiAHwfB8+XB9YPvD5QEHAmD5+c//8uH3f4fggc/5QMfUCH/BMH1fXXzP/xrEO/xbH+vvev/+MixA4WedbEAYF4APG//v08G2twaXlNxkyn6UwjYIp7uZfe3i01TWr7v0g6233rZ7nEaNbFL3w2RP5YUGS9P6zXrNeAKhR92ETD20ta/o6v9n//T6/q/yLmv8je5v1rOZMzPbNL17fn/+MgxBAWYdq8AYFgAGZvt8lzuvq9fCXC+BW1nh5IILR8tKXC13oIIWcZ1qDFHq3lfWXPrq0ukdmm9fXT69Nyi2i3qVhJCWvj0v616NX2muxf/30LV/lqEEkD8y819Re/MhzieMf8ulj/4yLEERjbXowjgYgAFmigRCv/jHD0BAgJgH4DY9rX/lMMuhllFEhpDv/8QsQo5REklLI4mf//zQ2Mi85ianETI2Jr///82MUkq0WRRUiXS6l/////R0UnMUkkpkXpUZVMQU1FMy45OS7/4yDECQAAA0gBwAAANVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','14':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAkAAARIADw8PDw8PDw8PDw8VVVVVVVVVVVVVVVtbW1tbW1tbW1tbYaGhoaGhoaGhoaGnp6enp6enp6enp62tra2tra2tra2ts/Pz8/Pz8/Pz8/P5+fn5+fn5+fn5+f//////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEAiuhNVBMAAGGGBjxjGMYwAAAAAJDGMYxjf97PJk02JpmAAAAAgCB/lz/B9+XP/4gDHrf/yjuD4PvlP/8Tn///z+UDH8oCH0Khom3fq1J9sbuCyKaCkq1ZGAwlc8LmTZGPS2/+MixBoXwNasAYJ4AJeBznGuGSOS8v7+23NXIRTmnmShgYqtKzg1jWpuCLr3wslkWC5IsLcbUEjpg+Yr8okv35exNHCZKPehPhLu121rTc1tKsD6A///xv/17WMIBngB8PK1V8lVxcsC/+MgxBcaEV7FlcJ4AB5oMpO15kJgJgbi7ThuCYK1uZHBWOoEffr/rGqazTecvI7x/CifPrH+JQKDr7BY0LATCzTgEYaUGxjCgbtXTW/e1dP51LKFa1143K+3V+uteupMyA//8v5/7/X/4yLECRbY9sV0Chhw8UISAfD8PA/BuBhDuByTjNwkCeVwoJYjKaB8cFd19t9dSk5HZ4spVxiGQmcFCJaJAOLjFKNoothp+D4y1NvcU1MPtT2IWyxb1ze39mtyK9X/fTVgQSEAAySSSKX/4yDECRa5qspeCkqU+v196qGNIiZbWn2wpNtEYbdJZygmLGz+BQJiBQiKOGsiCZv/an7IZWR1EcrFZzaIcUHkHlCosWAe8jd3pGO3lq0p3dfsb0P7O4t7ko1+26ua1oNtsyQ5ttraN//jIsQJFgjy0l4RknD2v+bux9n+cKB3Rg9Tqt7QjYUQEhRdvNbbQdVlQzmtFWWEj52HlJSPIoW2WE6BDDp5SkiUXGPSx0cQqGgO1DU77zEW29XfMo4zv8tt/v8T1Rv/0rftWGfNILhlsf/jIMQMFHjqpAFCeABGdKPLcWM6W8YAAuDZOkqHieS6tXL2FS2H0eo4KKgYs9GXPBkqPULiQGjyUKnpvNLWtbK7L2Ja6y5ScYhXf+3vrjdn19fWDFvnbzopcqYmdzRWBuJengVQBQNQ/+MixBUYU3aUAYVQAF8SkxCpqfInNJkHuhppv7uRGljE9Dv89zZx55h3rX/5Kaeikh7Exy/p//+hYoiHmnqYS0Jc75v0//+VRzjR4YSnHHE9jZpKSrLHi2SqTEFNRTMuOTkuNaqqqqqq/+MgxA8AAANIAcAAAKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=','15':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAMAAAHVAI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjcfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAAAADSAAAAABMQU1FMy45OS41VVVVVVVVVVVVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MixFsAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/+MgxKQAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU='}); -------------------------------------------------------------------------------- /js/clippy/Agents/Rover/sounds-mp3.js: -------------------------------------------------------------------------------- 1 | clippy.soundsReady('Rover', {'1':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/7MMAAAAAAAAAAAAAAAAAAAAAAAEluZm8AAAAHAAAABQAABLAATU1NTU1NTU1NTU1NTU1NTU1NTXp6enp6enp6enp6enp6enp6enp6pqampqampqampqampqampqampqbT09PT09PT09PT09PT09PT09PT0///////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAP/7UMQAAAf4HSZEpGJBYQ/n8PYNLABq8Uh0DADkQ4jkICEHggPhEBkAsNA5A+ETWNAiGhECEws5DXZM4NRrQ05kwiBEe12kVNf6Wf45L9aRUCE/xyQrbtLXVCBCwk2L6wGUfKwfzengRaHI9MT7XTlg+OZerD/WhltTcwAncQkG0mrVWSWm9BUelb3BBzzjkVAM+IAEYKSa2QHlxZHsJ7FW5Tn+ikYaL+hyO9mTClsdjIRBIJgzA2DBYIAkGBUEg/JxAIBxs4hE+UQMKVc18ub/+1LEEYAMRJ1BpiRpQbqgKEDEJXCM0iUir9v50zoGBixGiIQQAoAgIgNsDNz9BFJMPpD4Pg+gwsmJw/C7w/iCKOw+D9oIBGfQLBj/1JF/Su5b9U0BIrYbOn56VlDpy8eIIucYY60kLQ09FUMhY6HJo+g4ViI7xNcnLrH4jktziETsBxcuiPGCyFoVLU2wWZYQIEoMtzYdhxIkdBxG0upFGk5Ag6SC5+aNpBVqSTRtwTvF+QOGISUUFmFxMQUCe2nIr6F/+fETi5I2FhZHCRlAb//7UsQHAAw8/UykmMuBWRIrPJSVKM00GSUuvXfZAa6bqErD9d7fwyma/sFNFKYhxVGDQg5ALHMPzQlywoGGgCkyy02tsDdM8tzSjKlTPAw9bNve8dfeCT/EEnE6g8KCWTrDlqKCqYWbNsivEQyqcyCSUwiQEofELB88jGUMZQJ2BO64sPdjt9oY9xXqICyIZifcilMxZUI+2odJCAuacdPHb2w44qOW8GAsLGCMimFH/Zpj3Vyyw1b1PooFbuSLKlczZYZFFsAApwUK6RRJ3VVa//tSxAiAC8iBReewyUGUHOb9hg1wpTVZCqtNTEEYj0OVa3ptzuTWsD1oo+jZmq3s3r/1VdqrSgqyJUAUAlQEIlG3EwkHcs9LFhoFDzIdHXnREImPnYhypKoedCT3b2afluOI1aGeWUkiE2owQtQh+4Ff62yl7XGhq7eEI/MVhOCUunhaOVsXremtF39/WgjrMza9Ye38p7GomUlKZrhUhl6+bYZypNbn6r7OgrY79RrRgq1pL+M1uBUjEtgsePZbyZ1sqBjzJCoAACQEBhDRJQb/+1LEBIPJQF75B4xnAAAANIAAAARaMW3B2MscjL7Zc/lv/+bWWKwUECDgmZAQuzAQVDICCQGFjQMiprijcFgqKxUUFosLCN0VZqFvF2YqLNxfircWF0xBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==','2':'data:audio/mpeg;base64,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','3':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/7MMAAAAAAAAAAAAAAAAAAAAAAAEluZm8AAAAHAAAADAAACmcAIiIiIiIiIiI3Nzc3Nzc3N0tLS0tLS0tLX19fX19fX19fc3Nzc3Nzc3OHh4eHh4eHh5ubm5ubm5ubm6+vr6+vr6+vw8PDw8PDw8PX19fX19fX19fr6+vr6+vr6///////////AAAAAAAAAAAAAAAAAAAAAAAAAP/7UMQAAATIAzmAhGAhZwpntPYk5AYojAWqgOIPrIJJzilOk8vWPz+crecL6jmo58Mc5/8+jiB3+CH6jK03WQQACEoLexGRY6C+ZLYlA4Pj1Qb7ZEIdlDuXazguBCbaire0p7nNcKqD5AHxdiDDNo0PJE8mhoUe4TA0uboa9NiZYGDsWPGIBSUTiiyvpt9DQDk+jZ4EYAB4uNcEdkNyItaZa96g6pmmK2IxrSQgTlY+j45TEHzijxtnV0g4Djs4Mii4AHEyBiHQuxgI0v55EIb/+1LEHYAO/J8yrGHpQccUqrz3sTRCe3VbZhdJRSRIsOFE3qHjw63i5V8NjjekjW5QNwIuy4woDdDgQLilQmc9KHJRKJMLyArRx+/omPQMt//StY6qqGQOTXXbBgUcUNJxlIrk61BsukBmLI3UgczRlpviPPEewnjx+Nc/z3Y3mjISU6IWUbqdLy+6oNzumw+ZvW2b1WnLK718dEl3E65fmfVwyD5gi8RAd9anF6lhY4HBUCNkBAwVM5PZY7RJq3/07utSn7bagAO1eqkYYopIgf/7UsQGgAwEdV+HvGlxYZZsdMSNNg/aoBAMcdTpJh2mYyPAvhkGukP6wcXrFyLCtVoPMGyBUOAALCGsg4J2hs0Iz41whCWWg4CDoqvNscKswoKCu1NI00TSuSrB9BCYQouACj60O2UULaNttEApNJwnyWUljMaBokxDwWEwoAcNCsSCvHkzMoFxWKqzHy3PtVbSYhZqehS5n/C75iZLOEb3Ujlj0HQmFAmHbWUv1PWif6E36QE7mrffbDKZUjsMJorfyNJEAT14TMvfQrwaG9jZ//tSxAgAC1hzXYwkaXF4lmk1hhUwJO40NExOiEQhDxgiE4lVJppdKcq2OB1JJ0jGMlQv3UsHXHIu4JmjwqZxzgCC7RKH4q1S0WChJNZn18VO5kMoa8BjSR1Qwbd//emu/EkggABO7bAYiWcNP9HZ6w6d+HzA9OiuYDIwBQbD56TeYBEtl1gck7EZXmiKNQBjjAY9EcXEFVCpro7Msfd5WRk2qqrmESwUPZgCi7lMS8/3R+/f0Xb9ihX/1bn00TiWIhAgABSXfYCQGgwHAGQfjQD/+1LECYALrGFF5jEnAWEUZqWGGSjxVJiQlILArClEwPDr7G0NAkFl9gmSoGprZsXRQ5K520IREaNF0Fj4mB0cChwjUkGiJR6HwC0gK2OoStYshYnaQSSqYL06v79//UXjAALVeGLgxr8tl0BtcfF0qJCLR7AAKOrC5oyvu1WFpk7cOjoc52/GlD0oj8A0Dou/ZeM2dWO/fZi4p7p97LWRnTxFKAuNUixi0KHJ0t+i++PpU5Kf0e9aVtlsiIINYDRCtOkgpe1fGNNEImIEiMWBDP/7UsQMgAuEfzGHsGlJY5Al8PYZKHJqWVCelTrolz8y4xcYGEDpGUQYNUiQIOOZwr4TamXEttEp/TQGxoFaxfVgMoDG/rvLWQpNscr3zk/vTbztu34OM20ZG3YgAAFkA6ciPE6b4LOokuuiricjG5DKQroqUJaXvbm+XrSbuRTLltk1ohFw98pOKjdh/MncHSwGDAHSg8XOLeW13LSfJPDAGKTo2sWU9bzzKqp/uUWt6gtOvCQAACnGFRWV7vIzdlz8w4wx64DcsiDLanjfA0CI//tSxBAAjSxpNaxlJwGUEaaU96UoIFrxiltlHAIEQ2CBIRgmRvJ3oJTxhBaNql19rqQUCIAFkjgM0PmQ8dMWiyW49yBUSLgdh+/Ebz5BweXa3uQbAyCY2kaqf9np/U1B4A+Gq3TIYrDdKsg4sKFHyewwhLDHEkHwQSGIAkEMVChBTsRdznJ6qQkyuRzOClaIWDMiggNh8TvYFZVvUkEF5z7C/JKhFuw+pBcB7ixhYDFUQwWpBxo9QZaQtWUan9P/Td/9VVYyQQgQCm5aRxsVyUX/+1LEBoAL5JdFpjDJQW6NKfTGGODSHIpDs8JJlADQGMShUysE4ew6qX15EaEdIE44WCkkwS60q2OgHROQfM6E7GZsebLjUMeOyHOwYFjIsKHxo9OnePajlRWH8TMQm7xk12v7f1fKe5xhAAAl2/8hh4IytsvlYwEgzXD3QUFos0Xr3VMUcScnJ+gx1eZtFu7HJQHyy0TrBUa+wUKIBYDCE0wuoJVOYFA23AwY8PSI8cdeoeSh44lDNNt7p2tti7PsVk2SpooEEEpuSiqg8EFcdP/7UsQHAAtAp1OmJGmRYRFpvPeJKLisboYgRsqCBUZUXxZNTiFbZWktGE76XMuhSji6anD///rxhoSmeVKH7iUhYcyxznlSCvtNBpJwu8YddY5F2HNaBXl6ENUi1se7U6pmk0YWIAABk2/B1GQwEGNglkQ5HyLYF3zTTo62FdMLPHdwdvXnxu8AC563OWeyilBm3t7/IwkaMFnFFRcNKPJdnUlb10qOvMUHWseevmGbxQxP3Y+1vvf6VY4iSiAAUm5IDbOY63rtiYFKnIullSNa//tSxAuAC+irTaewaZFVEekw9ZUuQIykOtkxGpNapFxq607a0dfltyJ4wQ5I5qRDjM3xjmOl5nlsxRtBWGg4wRupPTj/zQiFWAyMQaUPF3Dsy01R6UbLlN3UokkkZdo20RBXdiMuL6zGQkuy0pjRJpBADBtJJHSPR1Ekk2vSNq/cxnCItqWpaGoY3q0vrcrOHRU6oKunYNA0DKzsreIuWPag6DTcRCVQdJFj2HSv9Z2v+WUr5oP//////9H//////+hlR9YGDAMQgMOAbYExH5X/+1LEDwOB4ALCD4AAAhudn0nEjXHe87huPNAAPBcTlBQ0KDBGTpChyMkTJ5EDC5PQregYXRyQYACKBmER3rmEEUWaPErmiUQTmiVzAxaCKHNEiE7olcg4uAChxaAbABBxcAFAEZYQPD4CMsJER4DJEeIj5pCJ4gAjpGTx8COkLGDwCIjaIjx8DNpgyfRN01IwViDRgUUyMuS1FKpdL1LGJ4AotDoDxfBJBEEdS8Iy8QURJJqEJT5JPUxkwZPHJ7AZPnKRoSYAlgoSURgGSNIsSf/7UsQiARJ44PwMsMuI1gSV2JSMUWSSNIwSSNRcjhyRpGCWHJORw5I0lZHDknIwbNJORw6mSs1EVFgsINREhoLCjJSQ0UCwkpI4aCwkpU0aCwURU0aFRUTZMUFRUTBUUFRsWCpJQVqgCwhBYDxgjFArQMGrKwMFaoiwTRVUs/Kqqq/8qqp93K6aVf7TTb/7TTf/7RV//9V///qqTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq','4':'data:audio/mpeg;base64,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OH5/OUS2hpttkmpdjT9jW8atbLVWlqctYV+Uf5cy1avV5un1hhjqzV5l+WX/Vy79XQoXkVsItWPCwUGNErtR5YNq//KM//OqAAAQAggQAQgwARiPPBJC6PjICQ+COiceSzl38AsgIMJWLD/EmI4wpiOX/yoyMScZGP/4xh3Hzhk6P//kiYmqToju///JI+TjI2MUVEiTTX///0qI7iSPk4yNjFFQ7SRNf//AQAAgCVDmeDyE18dCf4pLeNjl/CIRhcO/5qCkdb/whEUwTjpb/86cVNFf7RdyD3+WURCf///7kmRLgAMbV0HOQaAAOMU4IcacAAAAAaQcAAAgAAA0g4AABNijwo+L1UxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+5JkQI/wAABpAAAACAAADSAAAAEAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//uSZECP8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==','5':'data:audio/mpeg;base64,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','6':'data:audio/mpeg;base64,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','7':'data:audio/mpeg;base64,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','8':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/zUMAAAAAAAAAAAABJbmZvAAAABwAAAAMAAAG7AIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw////////////////////////////////////////////wD/80DEAA+pQtbrQRgAZWiWtjWLZEAAMYxj8Ax+Y3+iJ+7n/00RP//d3f93d3/dEREAABDnh/LmlAgCAIA//gg7/icP//+IAQ+GPqDCfwl7L62/U7/pLU/+arMkBMvMfiapC6bglgJqFP/zQsQcGiM2yAGBaAAUUUScJcTv5aJsbjFICRLCfiZFIxSo0S6j/ycWrROrOmhiPY2TGKz/0Uf/+O5R0aS8fNEWWXi8YqcwMVPWi3WytL//yVLpqTj5n/kY+j4at7zn7zPqt71Vd5ztM//zQMQPEDmldAvAMAGdq/7VXec7GkUcOJJbJIBEtIgFFjiJEjhxJJzSRKtkiSCQXIK6FHArgkVwbj///jeiuUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV','9':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAQAAAI+AHNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc6KioqKioqKioqKioqKioqKioqKioqKioqLR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR/////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQADrgGRXdAEABZVxgAGNQIROCDlh+D71OIcuH+fqcUdwQd/DFb/g/yjv/B8cD5/L1AgsEDn8PqdAn+Ug/+XeCH9vD8MPP5c39ma4gTntRf/1qMX8jIjyi4oI/850ZZC7CQ9f+Q/+MixCAa89awAYEoAIrMEA66KLhwOiYedzd9NXIjBgs5kKY5yOHx4dERMgGMPFDtoz/84oMlQQcMhwXIjC4wcHlECIpCpm///0Fxo8QFxUXU5/0yNFTrtiYpqYNTf9UL68Smce/zj1Ex/+MgxBAX41KYAYI4AL2/UamiMJR2b/5AkpEeB7R//gtESJQRMPmEazTTv/xlypAFBahQamA+Om49Vv//Gxw4PHDgyIriYbjYSiQ8h2cmtf//6ikecTjaWNlJ7ZkqlbNUqlLMYylM/7r/4yLECxHysWABwBAAGM5SlQzI9S5v//1KWYzqVQolgwEZQpjfuhjSlKhm//tQ0xpSlQxf1ZQESwYCMoU3qfyKzv///4dWdLKeVkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqo=','10':'data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjU0LjUuMTAwAP/jMMAAAAAAAAAAAABJbmZvAAAABwAAAAQAAAI+AHNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc6KioqKioqKioqKioqKioqKioqKioqKioqLR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR/////////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jIMQAEYoqOlNBEADhnREVyAEH8h9GNkP5yOf+c/U//z6fO//8jSNoQjKQjKfQh3/neSp3Q53+cjeRjgAhi5/5QMZc4XfKHKrPxOOB+7ykEP8Pqs8vL4V26N7bT2/8mdf3kerHqd+p/+MixBQXm46kAYEoAN17G2W8pju34iZkj0Yg4ROLgOFDlVXt5OZDEJYJq6DFUhrIwmg4Y3ujH9rHK487xfU51REYMF1EbSO5ft//utXFQ+Q6IKkUHQ+pVQ/P6FLdRv4dDpU/zXIfob5S/+MgxBEXay6QAYEoAYhDrUMv+okJuDGEKUm/xAHBw4AQfFQLiMpTaf8oRDw8WHhITgCKkNxGyaf/zhJChExyQ8MFRRCGVDKaWoiYxv//EmaaI0FzdYxTcTYqgYUYKhIOCJ+VcDQ86Cr/4yLEDhFwEYQBwxgA4O/8SlToiHnRL/8RCI8CowOA0eKnSowGgKGwVcDXBVR78SqPA0VDRZ3cJfgqo95VwNDzv/JKPFZMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo='}); --------------------------------------------------------------------------------