[
  {
    "path": ".gitignore",
    "content": "*.DS_Store\n.DS_Store*\ndev_examples/\ncdn/\ncompiled\n*.tmproj\n*.tmproject\ntmtags\nsource/gfx/Sprites/\n/node_modules\n*.pyc\ncodekit-config.json\nbuild\n\n"
  },
  {
    "path": ".gitmodules",
    "content": ""
  },
  {
    "path": "CHANGELOG",
    "content": "2.35.6 (2015-03-25)\n------\nRestore original animation/easing (revert pull #681)\n\n2.35.5 (2015-02-26)\n------\n#672,679,681,683 a series of presentation/performance tweaks from @acdha\nFix auto-linking regression\n\n2.35.4 (2015-02-17)\n------\nFix Stamen map tile URL bug\n\n\n2.35.3 (2015-02-17)\n------\n#673 Update Taiwanese locale\n#689 Update Thai locale\n#693 Update Polish locale\n#705 Frisian localization\n#722 Support 'youtubeTheme' config option\n#732 Updated German Translations\n#733 Move \"Swipe to Navigate\" to I18N. Now we need translations for 55 languages!\n#744 Hindi localization\n#745 Update Icelandic date formats\n#749 Irish localization\n#762 Belarusian localization\n\n2.35.2 (2014-11-24)\n------\nfix half-width bug on small displays\n\n2.35.1 (2014-11-19)\n------\n#719 whackamole with JS dates\n\n2.35.0 (2014-11-19)\n------\n#718 Issue with dates in 1970 in GMT/BST time zones\n\n2.34.1\n------\n#710 fix regression from #706 re IE https\n#709 retina image for loading.gif (even though we don't use it)\n\n2.34.0\n------\nRemove HTTPS URL rewriting for older IE.\ndon't do analytics on https\nCheck to make sure that every slide has a start date, so that people get a clear warning if the spreadsheet header has been changed.\nfix jquery version check, again. (should accept jquery 2, although TimelineJS has not been tested with jquery 2) cf. #551\nUpdate ko.js translation file\nUpdate fa.js\n\n2.33.1\n------\nFix bug in handling maps.google URLs\nUpdate zh-cn localization file.\n\n2.33.0\n------\n#638 (WIP) better handle new-format Google Maps URLs \n#597 parse new-format Google Spreadsheet URLs correctly\n(no ticket) Support \"W\" as date format token for \"week\" based on existing getWeek add on to Date.prototype \n#632 Accept *.bmp as image URL in media field\n#631 Add bower file\n#589 remove unused code that refers to non-existent modules\n#526 fix jQuery version check so 1.10.x > 1.9.x\n#529 fix untagify to remove closing tags as well\n#567 be more permissive about iframe markup\n#512 fix Dark.css theme even though themes are generally not supported\n#520 treat Streetview API urls as images, not maps\n#536 fix typo in README.md\n#623 set maxheight on soundcloud embeds\n#624 'crush' pngs\n#625 deal with nutty MSIE user agent strings\n\n2.32.0\n------\nStop YouTube players when slide changes\nBetter method for determining embed path root\nCheck for iframe and blockquote media before other url tests\nAdd languages: 'hr' (Croatian), 'uk' (Ukrainian)\nminor fixes to language files for 'fi' (Finnish) 'sl' (Slovenian)\n\n2.31.0\n------\nAdd languages: 'ro' (Romanian), 'th' (Thai)\nminor fixes to language files for 'es' (Spanish) 'fa' (Farsi), 'hu' (Hungarian), 'no' (Norwegian)\nadd OpenStreetMap as a map option ('osm')\nSupport '.svg' as an image media type\nsupport custom thumbnails when no media is specified\nclearer warning about \"compatibility mode\" to IE users.\n\n2.30.0\n------\nFix language code for 'zh-cn' (Chinese)\nadd 'fa' (Farsi)\nMove 'remove' function from Array.prototype to a util method to avoid adverse affects on other JS code.\n\n2.26.2\n-----\n\n* Start a CHANGELOG\n* Change embed HTML to dynamically set the embed path, to support use over https\n\n"
  },
  {
    "path": "DEVELOPER.md",
    "content": "## Requirements\n\n python 2.7.x\n \n [virtualenvwrapper](http://virtualenvwrapper.readthedocs.org/)\n \n [Node.js](http://nodejs.org)\n \n [LESS](http://lesscss.org)\n \n    # npm install -g less\n  \n [UglifyJS](https://github.com/mishoo/UglifyJS)\n \n    # npm install -g uglify-js@\">=2.4\"\n\n## Setup\n\n    # Change into the parent directory containing your repositories\n    cd path_to_repos_root\n  \n    # Clone the secrets repository (if necessary)\n    git clone git@github.com:NUKnightLab/secrets.git\n  \n    # Clone KnightLab support repositories (General public, you can skip this step)\n    git clone git@github.com:NUKnightLab/cdn.knightlab.com.git\n    git clone git@github.com:NUKnightLab/fablib.git\n \n    # Clone the timeline repository (and the submodules)\n    git clone --recursive git@github.com:NUKnightLab/TimelineJS.git\n  \n    # Change into the timeline repository\n    cd TimelineJS\n  \n    # Create a virtual environment\n    mkvirtualenv TimelineJS\n  \n    # Activate the virtual environment\n    workon TimelineJS\n  \n    # Install python requirements\n    pip install -r requirements.txt\n  \n    # Run the development server. \n    fab serve\n\n    # Re-compile to preview changes. Of course this will need to be in another terminal, or after the fab serve command was put in the\n    # background. It would be great to automate this, but we would like to not add another build system and haven't figured out how to\n    # do it with fabric. Pull requests are welcome!\n    fab build\n\n## Overview\n\nFiles in the `source` directory are resources for deployment to the CDN.\n\nFiles in the `website` directory are specific to the website.\n\n`config.json` is used to control building, staging, and deployment\n\n## Updating the documentation site\n\nDocumentation site files are in the `website` directory. To review your edits locally, run `fab serve` to start a local server on [http://localhost:5000](http://localhost:5000). \n\n## Deploying updates to the documentation site (timeline.knightlab.com)\n\nTo deploy to S3, type `fab deploy`.\n\n## Adding support for a new language\n\n* Add the file with the correct ISO-639 language code name in the `source/js/Core/Language/locale` directory.\n* Update website/templates/_make.html to refer to the new file (remember to sort alphabetically by language name, not code)\n* create a test timeline using the new language to verify that it basically works\n* deploy a new version (don't forget to stage_wp)\n* update knightlab-timeline.php in the TimelineJS-Wordpress-Plugin repo and release that too.\n\n\n## Deploying javascript changes to the CDN\n\nTo stage your changes to a versioned directory in your local CDN repository, type `fab stage` You will be prompted for the new version number. After you provide it, this `fab stage` runs a build, copies the files into a versioned directory in your local `cdn.knightlab.com` repository, and tags the last commit with a version number.\n\nTo stage your changes to the `latest` directory in your local CDN repository, type `fab stage_latest` You will be prompted for which version number you want to stage as the 'latest' version on the CDN. This copies files from the directory with that version in your local `cdn.knightlab.com` respository into the corresponding `latest` directory -- so you will have to have used `fab stage` before this.\n\nYou must push and deploy all CDN changes separately from that repository. Don't forget to edit the index page there until we work out some automated index building system.\n\n"
  },
  {
    "path": "LICENSE",
    "content": "This Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nMozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\"\n    means each individual or legal entity that creates, contributes to\n    the creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n    means the combination of the Contributions of others (if any) used\n    by a Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n    means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n    means Source Code Form to which the initial Contributor has attached\n    the notice in Exhibit A, the Executable Form of such Source Code\n    Form, and Modifications of such Source Code Form, in each case\n    including portions thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n    means\n\n    (a) that the initial Contributor has attached the notice described\n        in Exhibit B to the Covered Software; or\n\n    (b) that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the\n        terms of a Secondary License.\n\n1.6. \"Executable Form\"\n    means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n    means a work that combines Covered Software with other material, in \n    a separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n    means this document.\n\n1.9. \"Licensable\"\n    means having the right to grant, to the maximum extent possible,\n    whether at the time of the initial grant or subsequently, any and\n    all of the rights conveyed by this License.\n\n1.10. \"Modifications\"\n    means any of the following:\n\n    (a) any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered\n        Software; or\n\n    (b) any new file in Source Code Form that contains any Covered\n        Software.\n\n1.11. \"Patent Claims\" of a Contributor\n    means any patent claim(s), including without limitation, method,\n    process, and apparatus claims, in any patent Licensable by such\n    Contributor that would be infringed, but for the grant of the\n    License, by the making, using, selling, offering for sale, having\n    made, import, or transfer of either its Contributions or its\n    Contributor Version.\n\n1.12. \"Secondary License\"\n    means either the GNU General Public License, Version 2.0, the GNU\n    Lesser General Public License, Version 2.1, the GNU Affero General\n    Public License, Version 3.0, or any later versions of those\n    licenses.\n\n1.13. \"Source Code Form\"\n    means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n    means an individual or a legal entity exercising rights under this\n    License. For legal entities, \"You\" includes any entity that\n    controls, is controlled by, or is under common control with You. For\n    purposes of this definition, \"control\" means (a) the power, direct\n    or indirect, to cause the direction or management of such entity,\n    whether by contract or otherwise, or (b) ownership of more than\n    fifty percent (50%) of the outstanding shares or beneficial\n    ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive license:\n\n(a) under intellectual property rights (other than patent or trademark)\n    Licensable by such Contributor to use, reproduce, make available,\n    modify, display, perform, distribute, and otherwise exploit its\n    Contributions, either on an unmodified basis, with Modifications, or\n    as part of a Larger Work; and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n    for sale, have made, import, and otherwise transfer either its\n    Contributions or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in Section 2.1 with respect to any Contribution\nbecome effective for each Contribution on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted under\nthis License. No additional rights or licenses will be implied from the\ndistribution or licensing of Covered Software under this License.\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code that a Contributor has removed from Covered Software;\n    or\n\n(b) for infringements caused by: (i) Your and any other third party's\n    modifications of Covered Software, or (ii) the combination of its\n    Contributions with other software (except as part of its Contributor\n    Version); or\n\n(c) under Patent Claims infringed by Covered Software in the absence of\n    its Contributions.\n\nThis License does not grant any rights in the trademarks, service marks,\nor logos of any Contributor (except as may be necessary to comply with\nthe notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional grants as a result of Your choice to\ndistribute the Covered Software under a subsequent version of this\nLicense (see Section 10.2) or under the terms of a Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach Contributor represents that the Contributor believes its\nContributions are its original creation(s) or it has sufficient rights\nto grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to limit any rights You have under\napplicable copyright doctrines of fair use, fair dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. Distribution of Source Form\n\nAll distribution of Covered Software in Source Code Form, including any\nModifications that You create or to which You contribute, must be under\nthe terms of this License. You must inform recipients that the Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, and how they can obtain a copy of this License. You may not\nattempt to alter or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) such Covered Software must also be made available in Source Code\n    Form, as described in Section 3.1, and You must inform recipients of\n    the Executable Form how they can obtain a copy of such Source Code\n    Form by reasonable means in a timely manner, at a charge no more\n    than the cost of distribution to the recipient; and\n\n(b) You may distribute such Executable Form under the terms of this\n    License, or sublicense it under different terms, provided that the\n    license for the Executable Form does not attempt to limit or alter\n    the recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\nYou may create and distribute a Larger Work under terms of Your choice,\nprovided that You also comply with the requirements of this License for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware with a work governed by one or more Secondary Licenses, and the\nCovered Software is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally distribute such Covered Software\nunder the terms of such Secondary License(s), so that the recipient of\nthe Larger Work may, at their option, further distribute the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. Notices\n\nYou may not remove or alter the substance of any license notices\n(including copyright notices, patent notices, disclaimers of warranty,\nor limitations of liability) contained within the Source Code Form of\nthe Covered Software, except that You may alter any license notices to\nthe extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose to offer, and to charge a fee for, warranty, support,\nindemnity or liability obligations to one or more recipients of Covered\nSoftware. However, You may do so only on Your own behalf, and not on\nbehalf of any Contributor. You must make it absolutely clear that any\nsuch warranty, support, indemnity, or liability obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity or liability terms You offer. You may include additional\ndisclaimers of warranty and limitations of liability specific to any\njurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this\nLicense with respect to some or all of the Covered Software due to\nstatute, judicial order, or regulation then You must: (a) comply with\nthe terms of this License to the maximum extent possible; and (b)\ndescribe the limitations and the code they affect. Such description must\nbe placed in a text file included with all distributions of the Covered\nSoftware under this License. Except to the extent prohibited by statute\nor regulation, such description must be sufficiently detailed for a\nrecipient of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. The rights granted under this License will terminate automatically\nif You fail to comply with any of its terms. However, if You become\ncompliant, then the rights granted under this License from a particular\nContributor are reinstated (a) provisionally, unless and until such\nContributor explicitly and finally terminates Your grants, and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance by some reasonable means prior to 60 days after You have\ncome back into compliance. Moreover, Your grants from a particular\nContributor are reinstated on an ongoing basis if such Contributor\nnotifies You of the non-compliance by some reasonable means, this is the\nfirst time You have received notice of non-compliance with this License\nfrom such Contributor, and You become compliant prior to 30 days after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\ninfringement claim (excluding declaratory judgment actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly or indirectly infringes any patent, then the rights granted to\nYou by any and all Contributors for the Covered Software under Section\n2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\nend user license agreements (excluding distributors and resellers) which\nhave been validly granted by You or Your distributors under this License\nprior to termination shall survive termination.\n\n************************************************************************\n*                                                                      *\n*  6. Disclaimer of Warranty                                           *\n*  -------------------------                                           *\n*                                                                      *\n*  Covered Software is provided under this License on an \"as is\"       *\n*  basis, without warranty of any kind, either expressed, implied, or  *\n*  statutory, including, without limitation, warranties that the       *\n*  Covered Software is free of defects, merchantable, fit for a        *\n*  particular purpose or non-infringing. The entire risk as to the     *\n*  quality and performance of the Covered Software is with You.        *\n*  Should any Covered Software prove defective in any respect, You     *\n*  (not any Contributor) assume the cost of any necessary servicing,   *\n*  repair, or correction. This disclaimer of warranty constitutes an   *\n*  essential part of this License. No use of any Covered Software is   *\n*  authorized under this License except under this disclaimer.         *\n*                                                                      *\n************************************************************************\n\n************************************************************************\n*                                                                      *\n*  7. Limitation of Liability                                          *\n*  --------------------------                                          *\n*                                                                      *\n*  Under no circumstances and under no legal theory, whether tort      *\n*  (including negligence), contract, or otherwise, shall any           *\n*  Contributor, or anyone who distributes Covered Software as          *\n*  permitted above, be liable to You for any direct, indirect,         *\n*  special, incidental, or consequential damages of any character      *\n*  including, without limitation, damages for lost profits, loss of    *\n*  goodwill, work stoppage, computer failure or malfunction, or any    *\n*  and all other commercial damages or losses, even if such party      *\n*  shall have been informed of the possibility of such damages. This   *\n*  limitation of liability shall not apply to liability for death or   *\n*  personal injury resulting from such party's negligence to the       *\n*  extent applicable law prohibits such limitation. Some               *\n*  jurisdictions do not allow the exclusion or limitation of           *\n*  incidental or consequential damages, so this exclusion and          *\n*  limitation may not apply to You.                                    *\n*                                                                      *\n************************************************************************\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace of business and such litigation shall be governed by laws of that\njurisdiction, without reference to its conflict-of-law provisions.\nNothing in this Section shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject\nmatter hereof. If any provision of this License is held to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary to make it enforceable. Any law or regulation which provides\nthat the language of a contract shall be construed against the drafter\nshall not be used to construe this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. New Versions\n\nMozilla Foundation is the license steward. Except as provided in Section\n10.3, no one other than the license steward has the right to modify or\npublish new versions of this License. Each version will be given a\ndistinguishing version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered Software under the terms of the version\nof the License under which You originally received the Covered Software,\nor under the terms of any subsequent version published by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software not governed by this License, and you want to\ncreate a new license for such software, you may create and use a\nmodified version of this License if you rename the license and remove\nany references to the name of the license steward (except to note that\nsuch modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose to distribute Source Code Form that is Incompatible With\nSecondary Licenses under the terms of this version of the License, the\nnotice described in Exhibit B of this License must be attached.\n\n\n-------------------------------------------\n\nMap tiles by [Stamen Design](http://stamen.com \"Stamen Design\"), under \n[CC BY 3.0](http://creativecommons.org/licenses/by/3.0 \"CC BY 3.0\"). \nData by [OpenStreetMap](http://openstreetmap.org \"OpenStreetMap\"), \nunder [CC BY SA](http://creativecommons.org/licenses/by-sa/3.0 \"CC BY SA\").\n"
  },
  {
    "path": "README.markdown",
    "content": "# This Version of Timeline is no longer under development\n\nTherefore, GitHub issues and pull requests have been disabled. \n\nKnight Lab has created a new version at https://github.com/NUKnightLab/TimelineJS3 . The new library should work with existing Google Spreadsheets, but not existing TimelineJS JSON files. The new version of TimelineJS requires a new JSON format, and there is no direct conversion tool, although it should not be too complicated to manually or programatically convert an old JSON file.\n\nKnight Lab will continue to serve this version of Timeline from\n\n* https://cdn.knightlab.com/libs/timeline/latest/js/timeline-min.js\n* https://cdn.knightlab.com/libs/timeline/latest/js/timeline.js\n* https://cdn.knightlab.com/libs/timeline/latest/css/timeline.css\n\nHowever, no future development on this line of code is planned.\n\n----\n\n**Table of Contents**\n\n- [TimelineJS](#timelinejs)\n\t- [Document history with TimelineJS](#document-history-with-timelinejs)\n\t- [Add it to your site](#add-it-to-your-site)\n\t\t- [Using Inline (easiest)](#using-inline-easiest)\n\t\t- [Using a method (advanced)](#using-a-method-advanced)\n\t\t- [Loading the files](#loading-the-files)\n\t- [Config Options](#config-options)\n\t\t- [Language](#language)\n\t\t- [Start at End](#start-at-end)\n\t\t- [Start at Slide](#start-at-slide)\n\t\t- [Start Zoom Adjust](#start-zoom-adjust)\n\t\t- [Hash Bookmark](#hash-bookmark)\n\t\t- [Debug](#debug)\n\t\t- [Map Style Types](#map-style-types)\n\t\t- [Font Options](#font-options)\n\t\t\t- [Font Combination Preview:](#font-combination-preview)\n\t- [File Formats](#file-formats)\n\t\t- [JSON:](#json)\n\t\t- [JSONP :](#jsonp-)\n\t\t- [Google Docs:](#google-docs)\n\t\t- [Storify:](#storify)\n\t- [Media](#media)\n\t- [Best practices](#best-practices)\n\t- [License](#license)\n\n# TimelineJS\n## Document history with TimelineJS\n\nThere are lots of timeline tools on the web but they are almost all either\nhard on the eyes or hard to use. Create timelines that are at the same time\nbeautiful and intuitive for users\n\nTimelineJS is great for pulling in media from different sources. Just throw in a\nlink from Twitter, YouTube, Flickr, Vimeo, Google Maps or SoundCloud and\nTimelineJS will format it to fit perfectly. More media types will be supported\nin the future.\n\nCreating one is as easy as filling in a Google spreadsheet or as detailed as\nJSON.\n\n## Add it to your site\n\n### Using Inline (*easiest*)\nPlace the embed code where you want the timeline to show in the `<body>` of your site. See [Config Options](#config-options) for a full list of what you can set in the config.\n\n```html\n\t<div id=\"timeline-embed\"></div>\n\t<script type=\"text/javascript\">\n\t    var timeline_config = {\n\t\t\twidth:\t\t\t\t'100%',\n\t\t\theight:\t\t\t\t'600',\n\t\t\tsource:\t\t\t\t'path_to_json/or_link_to_googlespreadsheet',\n\t\t\tembed_id:\t\t\t'timeline-embed',\t\t\t\t//OPTIONAL USE A DIFFERENT DIV ID FOR EMBED\n\t\t\tstart_at_end: \t\tfalse,\t\t\t\t\t\t\t//OPTIONAL START AT LATEST DATE\n\t\t\tstart_at_slide:\t\t'4',\t\t\t\t\t\t\t//OPTIONAL START AT SPECIFIC SLIDE\n\t\t\tstart_zoom_adjust:\t'3',\t\t\t\t\t\t\t//OPTIONAL TWEAK THE DEFAULT ZOOM LEVEL\n\t\t\thash_bookmark:\t\ttrue,\t\t\t\t\t\t\t//OPTIONAL LOCATION BAR HASHES\n\t\t\tfont:\t\t\t\t'Bevan-PotanoSans',\t\t\t\t//OPTIONAL FONT\n\t\t\tdebug:\t\t\t\ttrue,\t\t\t\t\t\t\t//OPTIONAL DEBUG TO CONSOLE\n\t\t\tlang:\t\t\t\t'fr',\t\t\t\t\t\t\t//OPTIONAL LANGUAGE\n\t\t\tmaptype:\t\t\t'watercolor',\t\t\t\t\t//OPTIONAL MAP STYLE\n\t\t\tcss:\t\t\t\t'path_to_css/timeline.css',\t\t//OPTIONAL PATH TO CSS\n\t\t\tjs:\t\t\t\t\t'path_to_js/timeline-min.js'\t//OPTIONAL PATH TO JS\n\t\t}\n\t</script>\n\t<script type=\"text/javascript\" src=\"https://cdn.knightlab.com/libs/timeline/latest/js/storyjs-embed.js\"></script>\n```\n### Using a method (*advanced*)\nYou could also initialize a new timeline using the `createStoryJS` method after `storyjs-embed.js` has been loaded\n```javascript\n\tcreateStoryJS({\n\t\ttype:\t\t'timeline',\n\t\twidth:\t\t'800',\n\t\theight:\t\t'600',\n\t\tsource:\t\t'path_to_json/or_link_to_googlespreadsheet',\n\t\tembed_id:\t'my-timeline'\t\t\t// ID of the DIV you want to load the timeline into\n\t});\n```\n\nHere's a simple example:\n\n```html\n\t<head>\n\t\t<!-- jQuery -->\n\t\t<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\"></script>\n\t\t<!-- BEGIN TimelineJS -->\n\t\t<script type=\"text/javascript\" src=\"https://cdn.knightlab.com/libs/timeline/latest/js/storyjs-embed.js\"></script>\n\t\t<script>\n\t\t\t$(document).ready(function() {\n\t\t\t\tcreateStoryJS({\n\t\t\t\t\ttype:\t\t'timeline',\n\t\t\t\t\twidth:\t\t'800',\n\t\t\t\t\theight:\t\t'600',\n\t\t\t\t\tsource:\t\t'path_to_json/or_link_to_googlespreadsheet',\n\t\t\t\t\tembed_id:\t'my-timeline'\n\t\t\t\t});\n\t\t\t});\n\t\t</script>\n\t\t<!-- END TimelineJS -->\n\t</head>\n\t<body>\n\t\t<div id=\"my-timeline\"></div>\n\t</body>\n```\n\n### Loading the files\nIf you like, you may load TimelineJS from the KnightLab's CDN. The examples above demonstrate how to do this using `story-embed.js`, which is the simplest way to set up a Timeline of your own.\n\nIf for some reason you need more fine-grained control over your timeline, load the javascript and CSS files separately. We recommend that you load them from our CDN.\n\n```html\n<!-- always load the CSS -->\n<link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdn.knightlab.com/libs/timeline/latest/css/timeline.css\">\n<!-- and then one of either -->\n<script type=\"text/javascript\" src=\"https://cdn.knightlab.com/libs/timeline/latest/js/timeline.js\"></script>\n<!-- or -->\n<script type=\"text/javascript\" src=\"https://cdn.knightlab.com/libs/timeline/latest/js/timeline-min.js\"></script>\n<!-- but no need for both -->\n```\n\nIf you need to serve copies of the files from your own server, use the entire contents of the [\"/build/\" directory](https://github.com/NUKnightLab/TimelineJS/tree/master/build) of our GitHub repository. If you use a local copy of `story-embed.js` it should automatically load the other Timeline resources from your server.\n\n## Config Options\nHere are some of the options you can set in the config.\n\n### Source\n`source` Should be either the path to the JSON resource to load, or a JavaScript\nobject corresponding to the Timeline model.\n\nHere is an example using a data object:\n\n```javascript\n\n\tvar dataObject = {timeline: {headline: \"Headline\", type: ... }}\n\tcreateStoryJS({\n\t\ttype:\t\t'timeline',\n\t\twidth:\t\t'800',\n\t\theight:\t\t'600',\n\t\tsource:\t\tdataObject,\n\t\tembed_id:\t'my-timeline'\n\t});\n```\n\nIf source is a string, we will try to automatically recognize resources that are\nTwitter searches, Google Spreadsheets or Storify stories. Failing that, we assume\nthe source is either JSON or JSONP. If string matches on `.jsonp`, we will treat it\nas JSONP, otherwise, we will append `?callback=onJSONP_Data`. See more details below.\n\n### Language\n`lang`\nLocalization\n*default is `en` English*\nLanguages available:\n* `af` *Afrikaans*\n* `ar` *Arabic*\n* `hy` *Armenian*\n* `eu` *Basque*\n* `be` *Belarusian*\n* `bg` *Bulgarian*\n* `ca` *Catalan*\n* `zh-cn` *Chinese*\n* `hr` *Croatian / Hrvatski*\n* `cz` *Czech*\n* `da` *Danish*\n* `nl` *Dutch*\n* `en` *English*\n* `en-24hr` *English (24-hour time)*\n* `eo` *Esperanto*\n* `et` *Estonian*\n* `fo` *Faroese*\n* `fa` *Farsi*\n* `fi` *Finnish*\n* `fr` *French*\n* `fy` *Frisian*\n* `gl` *Galician*\n* `ka` *Georgian*\n* `de` *German / Deutsch*\n* `el` *Greek*\n* `he` *Hebrew*\n* `hi` *Hindi*\n* `hu` *Hungarian*\n* `is` *Icelandic*\n* `id` *Indonesian*\n* `ga` *Irish*\n* `it` *Italian*\n* `ja` *Japanese*\n* `ko` *Korean*\n* `lv` *Latvian*\n* `lt` *Lithuanian*\n* `lb` *Luxembourgish*\n* `ms` *Malay*\n* `ne` *Nepali*\n* `no` *Norwegian*\n* `pl` *Polish*\n* `pt` *Portuguese*\n* `pt-br` *Portuguese (Brazilian)*\n* `ro` *Romanian*\n* `rm` *Romansh*\n* `ru` *Russian*\n* `sr-cy` *Serbian - Cyrillic*\n* `sr` *Serbian - Latin*\n* `si` *Sinhalese*\n* `sk` *Slovak*\n* `sl` *Slovenian*\n* `es` *Spanish*\n* `sv` *Swedish*\n* `tl` *Tagalog*\n* `ta` *Tamil*\n* `zh-tw` *Taiwanese*\n* `te` *Telugu*\n* `th` *Thai*\n* `tr` *Turkish*\n* `uk` *Ukrainian*\n\n\n\nHelp us add more. Grab a copy of a language file and replace it with your language [Example language file](https://github.com/NUKnightLab/TimelineJS/blob/master/source/js/Core/Language/locale/en.js) and find your language's [two letter code here](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)\n\n###Start at End\n`start_at_end`\nset to true to start the timeline on the last date.\n*default is false*\n\n###Start at Slide\n`start_at_slide`\nYou can tell TimelineJS to start at a specific slide number\n*default is 0*\n\n###Start Zoom Adjust\n`start_zoom_adjust`\nThis will tweak the default zoom level. Equivalent to pressing the zoom in or zoom out button the specified number of times. Negative numbers zoom out.\n*default is 0*\n\n###Hash Bookmark\n`hash_bookmark`\nset to true to allow bookmarking slides using the hash tag\n*default is false*\n\n###Debug\n`debug`\nWill log events etc to the console.\n*default is false*\n\n\n###Map Style Types\nDue to recent changes to the Google Maps API, you need a [API Key](https://developers.google.com/places/documentation/#Authentication) in order to use custom map types.\n`gmap_key:`\n*required in order to use maptype*\n\n`maptype:`\n* [Stamen Maps ](http://maps.stamen.com)\n\t* `toner`\n\t* `toner-lines`\n\t* `toner-labels`\n\t* `watercolor`\n\t* `sterrain`\n\n* Google Maps\n\t* `ROADMAP`\n\t* `TERRAIN`\n\t* `HYBRID`\n\t* `SATELLITE`\n\n* OpenStreetMap\n\t- `osm`\n\n###Font Options\n`font:`\n* `AbrilFatface-Average` *Abril Fatface & Average*\n* `Arvo-PTSans` *Arvo & PT Sans*\n* `Bevan-PotanoSans` *Bevan & Potano Sans*\n* `BreeSerif-OpenSans` *Bree Serif & Open Sans*\n* `DroidSerif-DroidSans` *Droid Serif & Droid Sans*\n* `Georgia-Helvetica` *Georgia & Helvetica Neue*\n* `Lekton-Molengo` *Lekton & Molengo*\n* `Merriweather-NewsCycle` *Merriweather & News Cycle*\n* `NewsCycle-Merriweather` *News Cycle & Merriweather*\n* `NixieOne-Ledger` *Nixie One & Ledger*\n* `Pacifico-Arimo` *Pacifico & Arimo*\n* `PlayfairDisplay-Muli` *Playfair Display & Muli*\n* `PoiretOne-Molengo` *Poiret One & Molengo*\n* `PTSerif-PTSans` *PT Serif & PT Sans*\n* `PT` *PT Sans & PT Narrow & PT Serif*\n* `Rancho-Gudea` *Rancho & Gudea*\n* `SansitaOne-Kameron` *Sansita One & Kameron*\n* Or make your own\n\n####Font Combination Preview:\n![Font Combination Preview](http://timeline.knightlab.com/static/img/make/font-options.png)\n\n## File Formats\n\n### JSON:\n\nJSON is the native data format for TimelineJS.\n\nRemember, JSON is picky. A misplaced comma or quotation mark can\nprevent the timeline from loading properly.\n\nHere is the full model:\n```javascript\n\n{\n\t\"timeline\":\n\t{\n\t\t\"headline\":\"The Main Timeline Headline Goes here\",\n\t\t\"type\":\"default\",\n\t\t\"text\":\"<p>Intro body text goes here, some HTML is ok</p>\",\n\t\t\"asset\": {\n\t\t\t\"media\":\"http://yourdomain_or_socialmedialink_goes_here.jpg\",\n\t\t\t\"credit\":\"Credit Name Goes Here\",\n\t\t\t\"caption\":\"Caption text goes here\"\n\t\t},\n\t\t\"date\": [\n\t\t\t{\n\t\t\t\t\"startDate\":\"2011,12,10,07,02,10\",\n\t\t\t\t\"endDate\":\"2011,12,11,08,11\",\n\t\t\t\t\"headline\":\"Headline Goes Here\",\n\t\t\t\t\"text\":\"<p>Body text goes here, some HTML is OK</p>\",\n\t\t\t\t\"tag\":\"This is Optional\",\n\t\t\t\t\"classname\":\"optionaluniqueclassnamecanbeaddedhere\",\n\t\t\t\t\"asset\": {\n\t\t\t\t\t\"media\":\"http://twitter.com/ArjunaSoriano/status/164181156147900416\",\n\t\t\t\t\t\"thumbnail\":\"optional-32x32px.jpg\",\n\t\t\t\t\t\"credit\":\"Credit Name Goes Here\",\n\t\t\t\t\t\"caption\":\"Caption text goes here\"\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t\"era\": [\n\t\t\t{\n\t\t\t\t\"startDate\":\"2011,12,10\",\n\t\t\t\t\"endDate\":\"2011,12,11\",\n\t\t\t\t\"headline\":\"Headline Goes Here\",\n\t\t\t\t\"text\":\"<p>Body text goes here, some HTML is OK</p>\",\n\t\t\t\t\"tag\":\"This is Optional\"\n\t\t\t}\n\n\t\t]\n\t}\n}\n```\n\n### JSONP :\n\nTimeline can use a variation of JSONP to allow you to easily load data across different domains.\n\nTo allow this to happen, the file must end with the extension `.jsonp`\n\nHere is the full model:\n```javascript\nstoryjs_jsonp_data = {\n\t\"timeline\":\n\t{\n\t\t\"headline\":\"The Main Timeline Headline Goes here\",\n\t\t\"type\":\"default\",\n\t\t\"text\":\"<p>Intro body text goes here, some HTML is ok</p>\",\n\t\t\"asset\": {\n\t\t\t\"media\":\"http://yourdomain_or_socialmedialink_goes_here.jpg\",\n\t\t\t\"credit\":\"Credit Name Goes Here\",\n\t\t\t\"caption\":\"Caption text goes here\"\n\t\t},\n\t\t\"date\": [\n\t\t\t{\n\t\t\t\t\"startDate\":\"2011,12,10\",\n\t\t\t\t\"endDate\":\"2011,12,11\",\n\t\t\t\t\"headline\":\"Headline Goes Here\",\n\t\t\t\t\"text\":\"<p>Body text goes here, some HTML is OK</p>\",\n\t\t\t\t\"tag\":\"This is Optional\",\n\t\t\t\t\"classname\":\"optionaluniqueclassnamecanbeaddedhere\",\n\t\t\t\t\"asset\": {\n\t\t\t\t\t\"media\":\"http://twitter.com/ArjunaSoriano/status/164181156147900416\",\n\t\t\t\t\t\"thumbnail\":\"optional-32x32px.jpg\",\n\t\t\t\t\t\"credit\":\"Credit Name Goes Here\",\n\t\t\t\t\t\"caption\":\"Caption text goes here\"\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t\"era\": [\n\t\t\t{\n\t\t\t\t\"startDate\":\"2011,12,10\",\n\t\t\t\t\"endDate\":\"2011,12,11\",\n\t\t\t\t\"headline\":\"Headline Goes Here\",\n\t\t\t\t\"tag\":\"This is Optional\"\n\t\t\t}\n\n\t\t]\n\n\t}\n}\n```\n\n### Google Docs:\n\nIf you don’t want to mess with JSON, fire up Google Docs and build your\ntimeline in a spreadsheet. It’s as simple as dropping a date, text, and links\ninto the appropriate columns in TimelineJS’s template.\n\nYou can find the template here: [TimelineJS Google Spreadsheet Template](https://drive.google.com/previewtemplate?id=0AppSVxABhnltdEhzQjQ4MlpOaldjTmZLclQxQWFTOUE&mode=public&pli=1#)\n\nThere are only a couple things you need to know in order to create a timeline\nusing Google Docs:\n\n  1. Make the spreadsheet public:   \n\tGoogle Docs are automatically set to private but the spreadsheet must be\n\tpublic.\n\n\tClick the blue “Share” button on the top right-hand corner. In the “Share\n\tsettings” window, you’ll see the private setting of the spreadsheet: click\n\t“Change...”. In the Visibility options window, choose “Public on the Web” and\n\tsave.\n\n  2. Publish to the Web  \n\tUnder the File menu, select “Publish to the Web.”\n\n\tIn the next window, check the box next to “Automatically republish when\n\tchanges are made.” Uncheck all other boxes. Click “start publishing.” This\n\twill give you the URL to embed in your HTML file.\n\n  3. Copy/paste the Web URL into your TimelineJS HTML file  \n\tAfter you publish the spreadsheet, Google Docs will generate a link to the\n\tfile. Copy the link for the Web Page option (as opposed to PDF, HTML, XLS,\n\tetc.), then paste it into the timeline’s HTML file (see [Add it to your site](#add-it-to-your-site) )\n\n\n\n### Storify:\n\nSupport for Storify is still in its early stages. It works though. Just paste a link to the storify story as the source.\n\n## Media\n\nIncluded in the zip file is a kitchen sink example. This timeline shows how to\nincorporate the different media types from different services like Twitter,\nYouTube, Flickr, Instagram, TwitPic, Wikipedia, Dailymotion, SoundCloud and Vimeo.\n\nJust copy and paste the address of the media from the browser bar\ninto the media parameter. TimelineJS will auto-magically pull in the media via their api and\nformat it.\n\n## Best practices\n\nTips and tricks to best utilize TimelineJS\n\n  1. Keep it light - don’t get bogged down by text or other elements\n  2. Pick stories that have a strong chronological narrative. It does not work well for stories that need to jump around in the timeline.\n  3. Include events that build up to major occurrences, not just the major events.\n  4. Don't overwhelm the user. A timeline with hundreds of events is probably not the best use of the format.\n\n## License\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n"
  },
  {
    "path": "bower.json",
    "content": "{\n  \"name\": \"TimelineJS\",\n  \"version\": \"2.32.0\",\n  \"homepage\": \"http://timeline.knightlab.com\",\n  \"authors\": [\n    \"Zach Wise <zach@digitalartwork.net>\",\n    \"NUKnightLab\"\n  ],\n  \"description\": \"A Storytelling Timeline built in JavaScript.\",\n  \"main\": [\n    \"build/js/timeline.js\",\n    \"build/css/timeline.css\",\n    \"build/embed/index.html\",\n    \"build/js/storyjs-embed.js\",\n    \"build/js/storyjs-embed-generator.js\",\n    \"build/js/storyjs-embed-cdn.js\"\n  ],\n  \"keywords\": [\n    \"timeline\",\n    \"storytelling\",\n    \"timelinejs\",\n    \"timeline.js\",\n    \"history\",\n    \"googledocs\",\n    \"storify\"\n  ],\n  \"repository\": {\n  \"type\": \"git\",\n  \"url\": \"git@github.com:NUKnightLab/TimelineJS.git\"\n  },\n  \"license\": \"MPL v2.0\",\n  \"ignore\": [\n    \"**/.*\",\n    \"examples\",\n    \"tests\",\n    \"website\"\n  ]\n}\n"
  },
  {
    "path": "config.json",
    "content": "//\n// timelinejs configuration \n// \n// All file/directory paths are relative to the project directory.\n//\n// Regular expressions must be specified in python regular expression format,\n// but backslashes must be escaped for JSON.  When used to match files, \n// matching will take place against the the file/directory path relative to \n// the project directory.\n//\n{\n    \"name\": \"timeline\",\n    \"author\": \"Zach Wise\",\n    //\n    // build\n    // These commands will be run the exact order in which they appear.\n    //\n    \"build\": {\n        //\n        // copy files\n        // input: list of objects specifying inputs and outputs\n        //      @src: source file/directory\n        //      @dst: destination file/directory\n        //      @regex: regular expression to match files (if @src is directory)\n        //\n        \"copy\": [\n            {   \n                \"src\": \"source\",\n                \"dst\": \"build\",\n                \"regex\": \"css/.*\\\\.(png|gif)$\"\n            },\n            {   \n                \"src\": \"source/embed\",\n                \"dst\": \"build/embed\"\n            }\n        ],\n        //\n        // compile less files\n        // input: list of objects specifying inputs and output\n        //      @src: source file/directory\n        //      @dst: destination file/directory\n        //      @regex: regular expression to match files (if @src is directory)\n        //\n        \"lessc\": [\n            {\n                \"src\": \"source/less/VMM.Timeline.less\",\n                \"dst\": \"build/css/timeline.css\"\n            },\n            {\n                \"src\": \"source/less/Theme/Dark.less\",\n                \"dst\": \"build/css/themes/dark.css\"\n            },\n            {\n                \"src\": \"source/less/Core/Font\",\n                \"dst\": \"build/css/themes/font\",\n                \"regex\": \".*\\\\.less\"\n            }\n        ],\n        // \n        // process codekit style imports on files\n        // input: list of objects specifying inputs and output\n        //      @src:    source file\n        //      @dst:    destination file\n        //\n        \"process\": [\n            {\n                \"src\": \"source/js/VMM.Timeline.js\",\n                \"dst\": \"build/js/timeline.js\"\n            },\n            {\n                \"src\": \"source/js/VMM.Timeline.Min.js\",\n                \"dst\": \"build/js/timeline-min.js\"\n            },\n            {\n                \"src\": \"source/js/Core/Embed/Embed.CDN.Generator.js\",\n                \"dst\": \"build/js/storyjs-embed-generator.js\"\n            },\n            {\n                \"src\": \"source/js/Core/Embed/Embed.CDN.js\",\n                \"dst\": \"build/js/storyjs-embed-cdn.js\"\n            },\n            {\n                \"src\": \"source/js/Core/Embed/Embed.js\",\n                \"dst\": \"build/js/storyjs-embed.js\"\n            }\n        ],\n        //\n        // concatenate files\n        // input: list of objects specifying inputs and output\n        //      @src:    list of source files\n        //      @dst:    destination file\n        //\n        \"concat\": [ ],\n        //\n        // minify files using uglifyjs\n        // input list of objects specifying inputs and output\n        //      @src:   source file/directory\n        //      @dst:   destination file/directory \n        //      @opt:   options to pass to uglifyjs\n        //      @ext:   extension to prepend to destination file name (optional, default = none)\n        //\n        \"minify\": [\n            {\n                \"src\": \"source/js/Core/Language/locale\",\n                \"dst\": \"build/js/locale\",\n                \"opt\": \"--no-seqs\"\n            },\n            {\n                \"src\": \"build/js/timeline-min.js\",\n                \"dst\": \"build/js/timeline-min.js\",\n                \"opt\": \"--no-seqs\"\n            },\n            {\n                \"src\": \"build/js/storyjs-embed-generator.js\",\n                \"dst\": \"build/js/storyjs-embed-generator.js\",\n                \"opt\": \"--no-seqs\"\n            },\n            {\n                \"src\": \"build/js/storyjs-embed-cdn.js\",\n                \"dst\": \"build/js/storyjs-embed-cdn.js\",\n                \"opt\": \"--no-seqs\"\n            },\n            {\n                \"src\": \"build/js/storyjs-embed.js\",\n                \"dst\": \"build/js/storyjs-embed.js\",\n                \"opt\": \"--no-seqs\"\n            }                \n        ],\n        //\n        // process usermin style build blocks on html files\n        // input: list of files/directorys to process in-place\n        //\n        \"usemin\": [\n            \"build/embed\"      \n        ],\n        //\n        // banner-ize files\n        // input: list of objects specifying inputs\n        //      @src:       source file/directory\n        //      @regex:     regular expression to match files (if @src is directory)\n        //      @template:  template to use for banner (optional) \n        //\n        \"banner\": [\n            {\n                \"src\": \"build\",\n                \"regex\": \"(js|css)/.*\\\\.(css|js)$\",\n                \"template\": [\n                    \"/*\",\n                    \"    TimelineJS - ver. %(version)s - %(date)s\",\n                    \"    Copyright (c) 2012-2015 Northwestern University\",\n                    \"    a project of the Northwestern University Knight Lab, originally created by Zach Wise\",\n                    \"    https://github.com/NUKnightLab/TimelineJS\",\n                    \"    This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.\",\n                    \"    If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.\",\n                    \"*/\"\n                ]\n            }\n        ]\n    },\n    //\n    // stage\n    // copy files a versioned directory in local cdn repository\n    // input: list of objects specifying inputs and outputs\n    //      @src: source file/directory\n    //      @regex: regular expression to match files (if @src is directory)\n    \"stage\": [\n        {\n            \"src\": \"build\",\n            \"regex\": \"(css|embed|js|lib)/.*\"\n        }\n    ],\n    //\n    // deploy the website to S3 \n    // - render website/templates >> build/website\n    // - copy website/static >> build/website/static\n    // - run usemin on all html in build/website\n    // - sync build/website with bucket\n     \"deploy\": {\n        \"stg\": {\n            \"bucket\": \"timeline.knilab.com\", \n            \"usemin_context\": {\n                \"cdn\": \"dev\"\n            },\n            \"deploy_context\": {\n                \"generator_embed_path\": \"https://cdn.knightlab.com/libs/timeline/dev/embed/index.html\"\n            }                \n        },\n        \"prd\": {\n            \"bucket\": \"timeline.knightlab.com\", \n            \"usemin_context\": {\n                \"cdn\": \"latest\"\n            },\n            \"deploy_context\": {\n                \"generator_embed_path\": \"https://cdn.knightlab.com/libs/timeline/latest/embed/index.html\"\n            }                \n        }\n    }\n}"
  },
  {
    "path": "examples/README.md",
    "content": "NOTE: To use these examples, you must run a simple local webserver. They WILL NOT work if you simply open them in a browser from the file system.\n\nIf you have python installed, here are simple steps to do this.\n\n1. Open a terminal shell\n1. Make sure you are in the \"root\" directory that you checked out from GitHub\n1. Type `python -m SimpleHTTPServer 8000`\n1. in your web browser, open `http://localhost:8000/examples/example_json.html` (or whatever other file you want to see\n)\n\n"
  },
  {
    "path": "examples/example_googlespreadsheet.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         source: 'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadHdKcHlHcTB5bzhvbF9iTWwyMmJHdkE&amp;output=html'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "examples/example_jquery_load.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\t\t<title>jQuery Load Example Timeline</title>\n\t\t<meta name=\"description\" content=\"TimelineJS example\">\n\t\t\n\t\t<!-- jQuery -->\n\t\t<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\"></script>\n\t\t\n\t\t<!-- BEGIN TimelineJS -->\n\t\t<script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n\t\t<script>\n\t\t\t$(document).ready(function() {\n\t\t\t\tcreateStoryJS({\n\t\t\t\t\ttype:\t\t'timeline',\n\t\t\t\t\twidth:\t\t'800',\n\t\t\t\t\theight:\t\t'600',\n\t\t\t\t\tsource:\t\t'example_json.json',\n\t\t\t\t\tembed_id:\t'my-timeline',\n\t\t\t\t\tdebug:\t\ttrue\n\t\t\t\t});\n\t\t\t});\n\t\t</script>\n\t\t<!-- END TimelineJS -->\n\t\t\n\t</head>\n\n\t<body>\n\t\t\n\t\t<div id=\"my-timeline\"></div>\n\t\t\n\t</body>\n</html>\n"
  },
  {
    "path": "examples/example_json.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         source: 'example_json.json'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "examples/example_json.json",
    "content": "\n{\n    \"timeline\":\n    {\n        \"headline\":\"Sh*t People Say\",\n        \"type\":\"default\",\n\t\t\"text\":\"People say stuff\",\n\t\t\"startDate\":\"2012,1,26\",\n        \"date\": [\n            {\n                \"startDate\":\"2011,12,12\",\n\t\t\t\t\"endDate\":\"2012,1,27\",\n                \"headline\":\"Vine\",\n                \"text\":\"<p>Vine Test</p>\",\n                \"asset\":\n                {\n                    \"media\":\"https://vine.co/v/b55LOA1dgJU\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"2012,1,26\",\n\t\t\t\t\"endDate\":\"2012,1,27\",\n                \"headline\":\"Sh*t Politicians Say\",\n                \"text\":\"<p>In true political fashion, his character rattles off common jargon heard from people running for office.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/u4XpeU9erbg\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"2012,1,10\",\n                \"headline\":\"Sh*t Nobody Says\",\n                \"text\":\"<p>Have you ever heard someone say “can I burn a copy of your Nickelback CD?” or “my Bazooka gum still has flavor!” Nobody says that.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/f-x8t0JOnVw\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,26\",\n                \"headline\":\"Sh*t Chicagoans Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/Ofy5gNkKGOo\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,12\",\n                \"headline\":\"Sh*t Girls Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/u-yLGIH7W9Y\",\n                    \"credit\":\"\",\n                    \"caption\":\"Writers & Creators: Kyle Humphrey & Graydon Sheppard\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,4\",\n                \"headline\":\"Sh*t Broke People Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/zyyalkHjSjo\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\n\t\t\t{\n                \"startDate\":\"2012,1,4\",\n                \"headline\":\"Sh*t Silicon Valley Says\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/BR8zFANeBGQ\",\n                    \"credit\":\"\",\n                    \"caption\":\"written, filmed, and edited by Kate Imbach & Tom Conrad\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,25\",\n                \"headline\":\"Sh*t Vegans Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/OmWFnd-p0Lw\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,23\",\n                \"headline\":\"Sh*t Graphic Designers Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/KsT3QTmsN5Q\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,30\",\n                \"headline\":\"Sh*t Wookiees Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/vJpBCzzcSgA\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,17\",\n                \"headline\":\"Sh*t People Say About Sh*t People Say Videos\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/c9ehQ7vO7c0\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,20\",\n                \"headline\":\"Sh*t Social Media Pros Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/eRQe-BT9g_U\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,11\",\n                \"headline\":\"Sh*t Old People Say About Computers\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/HRmc5uuoUzA\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,11\",\n                \"headline\":\"Sh*t College Freshmen Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/rwozXzo0MZk\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,16\",\n                \"headline\":\"Sh*t Girls Say - Episode 2\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/kbovd-e-hRg\",\n                    \"credit\":\"\",\n                    \"caption\":\"Writers & Creators: Kyle Humphrey & Graydon Sheppard\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,24\",\n                \"headline\":\"Sh*t Girls Say - Episode 3 Featuring Juliette Lewis\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/bDHUhT71JN8\",\n                    \"credit\":\"\",\n                    \"caption\":\"Writers & Creators: Kyle Humphrey & Graydon Sheppard\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,27\",\n                \"headline\":\"Sh*t Web Designers Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/MEOb_meSHhQ\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,12\",\n                \"headline\":\"Sh*t Hipsters Say\",\n                \"text\":\"No meme is complete without a bit of hipster-bashing.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/FUhrSVyu0Kw\",\n                    \"credit\":\"\",\n                    \"caption\":\"Written, Directed, Conceptualized and Performed by Carrie Valentine and Jessica Katz\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,6\",\n                \"headline\":\"Sh*t Cats Say\",\n                \"text\":\"No meme is complete without cats. This had to happen, obviously.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/MUX58Vi-YLg\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,21\",\n                \"headline\":\"Sh*t Cyclists Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/GMCkuqL9IcM\",\n                    \"credit\":\"\",\n                    \"caption\":\"Video script, production, and editing by Allen Krughoff of Hardcastle Photography\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,30\",\n                \"headline\":\"Sh*t Yogis Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/IMC1_RH_b3k\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\n\n\n\n\t\t\t{\n                \"startDate\":\"2012,1,18\",\n                \"headline\":\"Sh*t New Yorkers Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/yRvJylbSg7o\",\n                    \"credit\":\"\",\n                    \"caption\":\"Directed and Edited by Matt Mayer, Produced by Seth Keim, Written by Eliot Glazer. Featuring Eliot and Ilana Glazer, who are siblings, not married.\"\n                }\n            }\n        ]\n    }\n}"
  },
  {
    "path": "examples/example_jsonp.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         source: 'example_jsonp.jsonp'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "examples/example_jsonp.jsonp",
    "content": "storyjs_jsonp_data = {\n    \"timeline\":\n    {\n        \"headline\":\"Sh*t People Say\",\n        \"type\":\"default\",\n\t\t\"text\":\"People say stuff\",\n\t\t\"startDate\":\"2012,1,26\",\n        \"date\": [\n            {\n                \"startDate\":\"2012,1,26\",\n\t\t\t\t\"endDate\":\"2012,1,27\",\n                \"headline\":\"Sh*t Politicians Say\",\n                \"text\":\"<p>In true political fashion, his character rattles off common jargon heard from people running for office.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/u4XpeU9erbg\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"2012,1,10\",\n                \"headline\":\"Sh*t Nobody Says\",\n                \"text\":\"<p>Have you ever heard someone say “can I burn a copy of your Nickelback CD?” or “my Bazooka gum still has flavor!” Nobody says that.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/f-x8t0JOnVw\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,26\",\n                \"headline\":\"Sh*t Chicagoans Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/Ofy5gNkKGOo\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,12\",\n                \"headline\":\"Sh*t Girls Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/u-yLGIH7W9Y\",\n                    \"credit\":\"\",\n                    \"caption\":\"Writers & Creators: Kyle Humphrey & Graydon Sheppard\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,4\",\n                \"headline\":\"Sh*t Broke People Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/zyyalkHjSjo\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\n\t\t\t{\n                \"startDate\":\"2012,1,4\",\n                \"headline\":\"Sh*t Silicon Valley Says\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/BR8zFANeBGQ\",\n                    \"credit\":\"\",\n                    \"caption\":\"written, filmed, and edited by Kate Imbach & Tom Conrad\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,25\",\n                \"headline\":\"Sh*t Vegans Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/OmWFnd-p0Lw\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,23\",\n                \"headline\":\"Sh*t Graphic Designers Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/KsT3QTmsN5Q\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,30\",\n                \"headline\":\"Sh*t Wookiees Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/vJpBCzzcSgA\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,17\",\n                \"headline\":\"Sh*t People Say About Sh*t People Say Videos\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/c9ehQ7vO7c0\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,20\",\n                \"headline\":\"Sh*t Social Media Pros Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/eRQe-BT9g_U\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,11\",\n                \"headline\":\"Sh*t Old People Say About Computers\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/HRmc5uuoUzA\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,11\",\n                \"headline\":\"Sh*t College Freshmen Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/rwozXzo0MZk\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,16\",\n                \"headline\":\"Sh*t Girls Say - Episode 2\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/kbovd-e-hRg\",\n                    \"credit\":\"\",\n                    \"caption\":\"Writers & Creators: Kyle Humphrey & Graydon Sheppard\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,24\",\n                \"headline\":\"Sh*t Girls Say - Episode 3 Featuring Juliette Lewis\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/bDHUhT71JN8\",\n                    \"credit\":\"\",\n                    \"caption\":\"Writers & Creators: Kyle Humphrey & Graydon Sheppard\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,27\",\n                \"headline\":\"Sh*t Web Designers Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/MEOb_meSHhQ\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,12\",\n                \"headline\":\"Sh*t Hipsters Say\",\n                \"text\":\"No meme is complete without a bit of hipster-bashing.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/FUhrSVyu0Kw\",\n                    \"credit\":\"\",\n                    \"caption\":\"Written, Directed, Conceptualized and Performed by Carrie Valentine and Jessica Katz\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,6\",\n                \"headline\":\"Sh*t Cats Say\",\n                \"text\":\"No meme is complete without cats. This had to happen, obviously.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/MUX58Vi-YLg\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,21\",\n                \"headline\":\"Sh*t Cyclists Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/GMCkuqL9IcM\",\n                    \"credit\":\"\",\n                    \"caption\":\"Video script, production, and editing by Allen Krughoff of Hardcastle Photography\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,30\",\n                \"headline\":\"Sh*t Yogis Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/IMC1_RH_b3k\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\n\n\n\n\t\t\t{\n                \"startDate\":\"2012,1,18\",\n                \"headline\":\"Sh*t New Yorkers Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/yRvJylbSg7o\",\n                    \"credit\":\"\",\n                    \"caption\":\"Directed and Edited by Matt Mayer, Produced by Seth Keim, Written by Eliot Glazer. Featuring Eliot and Ilana Glazer, who are siblings, not married.\"\n                }\n            }\n        ]\n    }\n}"
  },
  {
    "path": "examples/example_storify.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         source: 'http://storify.com/zachwise/test'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "examples/model.json",
    "content": "\n{\n\t\"timeline\":\n\t{\n\t\t\"headline\":\"The Main Timeline Headline Goes here\",\n\t\t\"type\":\"default\",\n\t\t\"text\":\"<p>Intro body text goes here, some HTML is ok</p>\",\n\t\t\"asset\": {\n\t\t\t\"media\":\"http://yourdomain_or_socialmedialink_goes_here.jpg\",\n\t\t\t\"credit\":\"Credit Name Goes Here\",\n\t\t\t\"caption\":\"Caption text goes here\"\n\t\t},\n\t\t\"date\": [\n\t\t\t{\n\t\t\t\t\"startDate\":\"2011,12,10\",\n\t\t\t\t\"endDate\":\"2011,12,11\",\n\t\t\t\t\"headline\":\"Headline Goes Here\",\n\t\t\t\t\"text\":\"<p>Body text goes here, some HTML is OK</p>\",\n\t\t\t\t\"tag\":\"This is Optional\",\n\t\t\t\t\"asset\": {\n\t\t\t\t\t\"media\":\"http://twitter.com/ArjunaSoriano/status/164181156147900416\",\n\t\t\t\t\t\"thumbnail\":\"optional-32x32px.jpg\",\n\t\t\t\t\t\"credit\":\"Credit Name Goes Here\",\n\t\t\t\t\t\"caption\":\"Caption text goes here\"\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t\"era\": [\n\t\t\t{\n\t\t\t\t\"startDate\":\"2011,12,10\",\n\t\t\t\t\"endDate\":\"2011,12,11\",\n\t\t\t\t\"headline\":\"Headline Goes Here\",\n\t\t\t\t\"tag\":\"This is Optional\"\n\t\t\t}\n\t\t\t\n\t\t]\n\t\t\n\t}\n}"
  },
  {
    "path": "examples/model.jsonp",
    "content": "storyjs_jsonp_data = {\n\t\"timeline\":\n\t{\n\t\t\"headline\":\"The Main Timeline Headline Goes here\",\n\t\t\"type\":\"default\",\n\t\t\"text\":\"<p>Intro body text goes here, some HTML is ok</p>\",\n\t\t\"asset\": {\n\t\t\t\"media\":\"http://yourdomain_or_socialmedialink_goes_here.jpg\",\n\t\t\t\"credit\":\"Credit Name Goes Here\",\n\t\t\t\"caption\":\"Caption text goes here\"\n\t\t},\n\t\t\"date\": [\n\t\t\t{\n\t\t\t\t\"startDate\":\"2011,12,10\",\n\t\t\t\t\"endDate\":\"2011,12,11\",\n\t\t\t\t\"headline\":\"Headline Goes Here\",\n\t\t\t\t\"text\":\"<p>Body text goes here, some HTML is OK</p>\",\n\t\t\t\t\"tag\":\"This is Optional\",\n\t\t\t\t\"asset\": {\n\t\t\t\t\t\"media\":\"http://twitter.com/ArjunaSoriano/status/164181156147900416\",\n\t\t\t\t\t\"thumbnail\":\"optional-32x32px.jpg\",\n\t\t\t\t\t\"credit\":\"Credit Name Goes Here\",\n\t\t\t\t\t\"caption\":\"Caption text goes here\"\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t\"era\": [\n\t\t\t{\n\t\t\t\t\"startDate\":\"2011,12,10\",\n\t\t\t\t\"endDate\":\"2011,12,11\",\n\t\t\t\t\"headline\":\"Headline Goes Here\",\n\t\t\t\t\"tag\":\"This is Optional\"\n\t\t\t}\n\t\t\t\n\t\t]\n\t\t\n\t}\n}"
  },
  {
    "path": "fabfile.py",
    "content": "from os.path import abspath, basename, dirname, join\nimport sys\nfrom fabric.api import env\nfrom fabric.decorators import roles, runs_once, task\nimport distutils.core\n\n#\n# Project-specific settings, alter as needed\n#\n# env.project_name = basename(dirname(__file__))\nenv.project_name = 'TimelineJS'\n\n#\n# Add paths\n#\ndef add_paths(*args):\n    \"\"\"Make paths are in sys.path.\"\"\"\n    for p in args:\n        if p not in sys.path:\n            sys.path.append(p)\n \nproject_path = dirname(abspath(__file__))\nrepos_path = dirname(project_path)\nfablib_path = join(repos_path, 'fablib')\n\nadd_paths(project_path, repos_path, fablib_path)\n\n#\n# Import from fablib\n#\nfrom fablib import *\n\n@task\ndef stage_wp():\n    \"\"\"* Use to copy over CSS/JS files to WP Plugin directory\"\"\"    \n    print(\"This will copy over the css/js folders from within build to the Wordpress Plugin Directory\")\n    if not confirm('Is your TimelineJS-Wordpress-Plugin Directory in the same directory as where TimelineJS is located? (y/n) '):\n    \tabort('Cancelling')\n\n    # # Copy over CSS files\n    build_css_dir = \"build/css\"\n    wp_css_dir = \"../TimelineJS-Wordpress-Plugin/css\"\n    distutils.dir_util.copy_tree(build_css_dir, wp_css_dir)\n\n    # # Copy over JS files\n    build_js_dir = \"build/js\"\n    wp_js_dir = \"../TimelineJS-Wordpress-Plugin/js\"\n    distutils.dir_util.copy_tree(build_js_dir, wp_js_dir)\n\n    print(\"\\nRemember to push the updated files in TimelineJS-Wordpress-Plugin as well....\")\n\n\n\n\n\n"
  },
  {
    "path": "requirements.txt",
    "content": "Fabric==1.6.1\nFlask==0.10.1\nJinja2==2.7\nMarkupSafe==0.18\nWerkzeug==0.9.3\nboto==2.13.3\nitsdangerous==0.22\nparamiko==1.10.1\nply==3.4\npycrypto==2.6\nwsgiref==0.1.2\npython-magic==0.4.6\npyOpenSSL==0.15.1\n\n"
  },
  {
    "path": "source/embed/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n     \n    88888888888 d8b                        888 d8b                888888   d8888b  \n        888     Y8P                        888 Y8P                   88b d88P  Y88b \n        888                                888                       888 Y88b\n        888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n        888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n        888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n        888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n        888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n                                                                    d88P            \n                                                                  d88P             \n                                                                888P              \n     -->\n  <head>\n    <title>TimelineJS Embed</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS Embed\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <link href=\"http://cdn.knightlab.com/libs/blueline/latest/assets/logos/favicon.png\" rel=\"shortcut icon\">\n\n\n    <!-- Style-->\n    <style>\n      html, body {\n      height:100%;\n      padding: 0px;\n      margin: 0px;\n      }\n\n      #timeline-embed { height: 100%; }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"//html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n<body>\n  <!-- BEGIN Timeline Embed -->\n  <div id=\"timeline-embed\"></div>\n  <!-- Override -->\n  <script type=\"text/javascript\">\n    var trim_point = window.location.href.indexOf('embed/index.html');\n    if (trim_point > 0) {\n      var embed_path = window.location.href.substring(0,trim_point); // supports https access via https://s3.amazonaws.com/cdn.knightlab.com/libs/timeline/latest/embed/index.html \n    } else {\n      var embed_path = \"https://cdn.knightlab.com/libs/timeline/latest/\";\n    }\n  </script>\n  <!-- build:js ../js/storyjs-embed-cdn.js?v214 -->\n  <script type=\"text/javascript\">\n    var embed_path = \"/build/\";\n  </script>\n  <script type=\"text/javascript\" src=\"/build/js/storyjs-embed-cdn.js?v214\"></script>\n  <!-- endbuild -->\n  <!-- END Timeline Embed-->\n</body>\n</html>\n"
  },
  {
    "path": "source/js/Core/.gitignore",
    "content": ".buildpath\n.project\n.settings\n*.DS_Store\n.DS_Store*"
  },
  {
    "path": "source/js/Core/Core/VMM.Browser.js",
    "content": "/*\t* DEVICE AND BROWSER DETECTION\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.Browser == 'undefined') {\n\t\n\tVMM.Browser = {\n\t\tinit: function () {\n\t\t\tthis.browser = this.searchString(this.dataBrowser) || \"An unknown browser\";\n\t\t\tthis.version = this.searchVersion(navigator.userAgent)\n\t\t\t\t|| this.searchVersion(navigator.appVersion)\n\t\t\t\t|| \"an unknown version\";\n\t\t\tthis.tridentVersion = this.searchTridentVersion(navigator.userAgent);\n\t\t\tthis.OS = this.searchString(this.dataOS) || \"an unknown OS\";\n\t\t\tthis.device = this.searchDevice(navigator.userAgent);\n\t\t\tthis.orientation = this.searchOrientation(window.orientation);\n\t\t},\n\t\tsearchOrientation: function(orientation) {\n\t\t\tvar orient = \"\";\n\t\t\tif ( orientation == 0  || orientation == 180) {  \n\t\t\t\torient = \"portrait\";\n\t\t\t} else if ( orientation == 90 || orientation == -90) {  \n\t\t\t\torient = \"landscape\";\n\t\t\t} else {\n\t\t\t\torient = \"normal\";\n\t\t\t}\n\t\t\treturn orient;\n\t\t},\n\t\tsearchDevice: function(d) {\n\t\t\tvar device = \"\";\n\t\t\tif (d.match(/Android/i) || d.match(/iPhone|iPod/i)) {\n\t\t\t\tdevice = \"mobile\";\n\t\t\t} else if (d.match(/iPad/i)) {\n\t\t\t\tdevice = \"tablet\";\n\t\t\t} else if (d.match(/BlackBerry/i) || d.match(/IEMobile/i)) {\n\t\t\t\tdevice = \"other mobile\";\n\t\t\t} else {\n\t\t\t\tdevice = \"desktop\";\n\t\t\t}\n\t\t\treturn device;\n\t\t},\n\t\tsearchString: function (data) {\n\t\t\tfor (var i=0;i<data.length;i++)\t{\n\t\t\t\tvar dataString\t= data[i].string,\n\t\t\t\t\tdataProp\t= data[i].prop;\n\t\t\t\t\t\n\t\t\t\tthis.versionSearchString = data[i].versionSearch || data[i].identity;\n\t\t\t\t\n\t\t\t\tif (dataString) {\n\t\t\t\t\tif (dataString.indexOf(data[i].subString) != -1) {\n\t\t\t\t\t\treturn data[i].identity;\n\t\t\t\t\t}\n\t\t\t\t} else if (dataProp) {\n\t\t\t\t\treturn data[i].identity;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsearchVersion: function (dataString) {\n\t\t\tvar index = dataString.indexOf(this.versionSearchString);\n\t\t\tif (index == -1) return;\n\t\t\treturn parseFloat(dataString.substring(index+this.versionSearchString.length+1));\n\t\t},\n\t\tsearchTridentVersion: function (dataString) {\n\t\t    var index = dataString.indexOf(\"Trident/\");\n\t\t    if (index == -1) return 0;\n\t\t    return parseFloat(dataString.substring(index + 8));\n\t\t},\n\t\tdataBrowser: [\n\t\t\t{\n\t\t\t\tstring: navigator.userAgent,\n\t\t\t\tsubString: \"Chrome\",\n\t\t\t\tidentity: \"Chrome\"\n\t\t\t},\n\t\t\t{ \tstring: navigator.userAgent,\n\t\t\t\tsubString: \"OmniWeb\",\n\t\t\t\tversionSearch: \"OmniWeb/\",\n\t\t\t\tidentity: \"OmniWeb\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tstring: navigator.vendor,\n\t\t\t\tsubString: \"Apple\",\n\t\t\t\tidentity: \"Safari\",\n\t\t\t\tversionSearch: \"Version\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tprop: window.opera,\n\t\t\t\tidentity: \"Opera\",\n\t\t\t\tversionSearch: \"Version\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tstring: navigator.vendor,\n\t\t\t\tsubString: \"iCab\",\n\t\t\t\tidentity: \"iCab\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tstring: navigator.vendor,\n\t\t\t\tsubString: \"KDE\",\n\t\t\t\tidentity: \"Konqueror\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tstring: navigator.userAgent,\n\t\t\t\tsubString: \"Firefox\",\n\t\t\t\tidentity: \"Firefox\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tstring: navigator.vendor,\n\t\t\t\tsubString: \"Camino\",\n\t\t\t\tidentity: \"Camino\"\n\t\t\t},\n\t\t\t{\t\t// for newer Netscapes (6+)\n\t\t\t\tstring: navigator.userAgent,\n\t\t\t\tsubString: \"Netscape\",\n\t\t\t\tidentity: \"Netscape\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tstring: navigator.userAgent,\n\t\t\t\tsubString: \"MSIE\",\n\t\t\t\tidentity: \"Explorer\",\n\t\t\t\tversionSearch: \"MSIE\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tstring: navigator.userAgent,\n\t\t\t\tsubString: \"Gecko\",\n\t\t\t\tidentity: \"Mozilla\",\n\t\t\t\tversionSearch: \"rv\"\n\t\t\t},\n\t\t\t{ \t\t// for older Netscapes (4-)\n\t\t\t\tstring: navigator.userAgent,\n\t\t\t\tsubString: \"Mozilla\",\n\t\t\t\tidentity: \"Netscape\",\n\t\t\t\tversionSearch: \"Mozilla\"\n\t\t\t}\n\t\t],\n\t\tdataOS : [\n\t\t\t{\n\t\t\t\tstring: navigator.platform,\n\t\t\t\tsubString: \"Win\",\n\t\t\t\tidentity: \"Windows\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tstring: navigator.platform,\n\t\t\t\tsubString: \"Mac\",\n\t\t\t\tidentity: \"Mac\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tstring: navigator.userAgent,\n\t\t\t\tsubString: \"iPhone\",\n\t\t\t\tidentity: \"iPhone/iPod\"\n\t\t    },\n\t\t\t{\n\t\t\t\tstring: navigator.userAgent,\n\t\t\t\tsubString: \"iPad\",\n\t\t\t\tidentity: \"iPad\"\n\t\t    },\n\t\t\t{\n\t\t\t\tstring: navigator.platform,\n\t\t\t\tsubString: \"Linux\",\n\t\t\t\tidentity: \"Linux\"\n\t\t\t}\n\t\t]\n\n\t}\n\tVMM.Browser.init();\n}"
  },
  {
    "path": "source/js/Core/Core/VMM.Core.js",
    "content": "/* VeriteCo Core\n================================================== */\n\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n================================================== */\n// @codekit-prepend \"VMM.js\";\n// @codekit-prepend \"VMM.Library.js\";\n// @codekit-prepend \"VMM.Browser.js\";\n// @codekit-prepend \"VMM.FileExtention.js\";\n// @codekit-prepend \"VMM.Date.js\";\n// @codekit-prepend \"VMM.Util.js\";\n// @codekit-prepend \"VMM.LoadLib.js\";\n// @codekit-prepend \"VMM.Language.js\";\n\n"
  },
  {
    "path": "source/js/Core/Core/VMM.Date.js",
    "content": "/*\t* Utilities and Useful Functions\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.Date == 'undefined') {\n\t\n\tVMM.Date = ({\n\t\t\n\t\tinit: function() {\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' hh:MM TT\",\n\t\t\tfull_long_small_date: \"hh:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\t\t\n\t\tmonth: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"March\", \"April\", \"May\", \"June\", \"July\", \"Aug.\", \"Sept.\", \"Oct.\", \"Nov.\", \"Dec.\"],\n\t\tday: [\"Sunday\",\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\tday_abbr: [\"Sun.\", \"Mon.\", \"Tues.\", \"Wed.\", \"Thurs.\", \"Fri.\", \"Sat.\"],\n\t\thour: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],\n\t\thour_suffix: [\"am\"],\n\t\t\t\n\t\t//B.C.\n\t\tbc_format: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"dddd', 'h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' mmm d',' yyyy 'at' hh:MM TT\",\n\t\t\tfull_long_small_date: \"hh:MM TT'<br/><small>'dddd',' mmm d',' yyyy'</small>'\"\n\t\t},\n\t\t\t\n\t\tsetLanguage: function(lang) {\n\t\t\ttrace(\"SET DATE LANGUAGE\");\n\t\t\tVMM.Date.dateformats\t\t=\tlang.dateformats;\t\n\t\t\tVMM.Date.month\t\t\t\t=\tlang.date.month;\n\t\t\tVMM.Date.month_abbr\t\t\t=\tlang.date.month_abbr;\n\t\t\tVMM.Date.day\t\t\t\t=\tlang.date.day;\n\t\t\tVMM.Date.day_abbr\t\t\t=\tlang.date.day_abbr;\n\t\t\tdateFormat.i18n.dayNames\t=\tlang.date.day_abbr.concat(lang.date.day);\n\t\t\tdateFormat.i18n.monthNames\t=\tlang.date.month_abbr.concat(lang.date.month);\n\t\t},\n\t\t\t\n\t\tparse: function(d, precision) {\n\t\t\t\"use strict\";\n\t\t\tvar date,\n\t\t\t\tdate_array,\n\t\t\t\ttime_array,\n\t\t\t\ttime_parse,\n\t\t\t\tp = {\n\t\t\t\t\tyear: \t\t\tfalse,\n\t\t\t\t\tmonth: \t\t\tfalse,\n\t\t\t\t\tday: \t\t\tfalse,\n\t\t\t\t\thour: \t\t\tfalse,\n\t\t\t\t\tminute: \t\tfalse,\n\t\t\t\t\tsecond: \t\tfalse,\n\t\t\t\t\tmillisecond: \tfalse\n\t\t\t\t};\n\t\t\t\t\n\t\t\tif (type.of(d) == \"date\") {\n\t\t\t\ttrace(\"DEBUG THIS, ITs A DATE\");\n\t\t\t\tdate = d;\n\t\t\t} else {\n\t\t\t\tdate = new Date(0); \n\t\t\t\tdate.setMonth(0); date.setDate(1); date.setHours(0); date.setMinutes(0); date.setSeconds(0); date.setMilliseconds(0);\n\t\t\t\tif ( d.match(/,/gi) ) {\n\t\t\t\t\tdate_array = d.split(\",\");\n\t\t\t\t\tfor(var i = 0; i < date_array.length; i++) {\n\t\t\t\t\t\tdate_array[i] = parseInt(date_array[i], 10);\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[0]) {\t\n\t\t\t\t\t\tdate.setFullYear(date_array[0]);\n\t\t\t\t\t\tp.year = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[1]) {\n\t\t\t\t\t\tdate.setMonth(date_array[1] - 1);\n\t\t\t\t\t\tp.month = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[2]) {\n\t\t\t\t\t\tdate.setDate(date_array[2]);\n\t\t\t\t\t\tp.day = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[3]) {\n\t\t\t\t\t\tdate.setHours(date_array[3]);\n\t\t\t\t\t\tp.hour = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[4]) {\n\t\t\t\t\t\tdate.setMinutes(date_array[4]);\n\t\t\t\t\t\tp.minute = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[5]) {\n\t\t\t\t\t\tdate.setSeconds(date_array[5]);\n\t\t\t\t\t\tif (date_array[5] >= 1) {\n\t\t\t\t\t\t\tp.second = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[6]) {\n\t\t\t\t\t\tdate.setMilliseconds(date_array[6]);\n\t\t\t\t\t\tif (date_array[6] >= 1) {\n\t\t\t\t\t\t\tp.millisecond = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (d.match(\"/\")) {\n\t\t\t\t\tif (d.match(\" \")) {\n\t\t\t\t\t\t\n\t\t\t\t\t\ttime_parse = d.split(\" \");\n\t\t\t\t\t\tif (d.match(\":\")) {\n\t\t\t\t\t\t\ttime_array = time_parse[1].split(\":\");\n\t\t\t\t\t\t\tif (time_array[0] >= 0 ) {\n\t\t\t\t\t\t\t\tdate.setHours(time_array[0]);\n\t\t\t\t\t\t\t\tp.hour = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (time_array[1] >= 0) {\n\t\t\t\t\t\t\t\tdate.setMinutes(time_array[1]);\n\t\t\t\t\t\t\t\tp.minute = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (time_array[2] >= 0) {\n\t\t\t\t\t\t\t\tdate.setSeconds(time_array[2]);\n\t\t\t\t\t\t\t\tp.second = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (time_array[3] >= 0) {\n\t\t\t\t\t\t\t\tdate.setMilliseconds(time_array[3]);\n\t\t\t\t\t\t\t\tp.millisecond = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdate_array = time_parse[0].split(\"/\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdate_array = d.split(\"/\");\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[2]) {\n\t\t\t\t\t\tdate.setFullYear(date_array[2]);\n\t\t\t\t\t\tp.year = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[0] >= 0) {\n\t\t\t\t\t\tvar month = date_array[0] - 1;\n\t\t\t\t\t\tdate.setMonth(month);\n\t\t\t\t\t\t// if (date.getMonth() != month) { \n\t\t\t\t\t\t// \tdate.setMonth(month); // WTF javascript?\n\t\t\t\t\t\t// }\n\t\t\t\t\t\tp.month = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (date_array[1] >= 0) {\n\t\t\t\t\t\tif (date_array[1].length > 2) {\n\t\t\t\t\t\t\tdate.setFullYear(date_array[1]);\n\t\t\t\t\t\t\tp.year = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdate.setDate(date_array[1]);\n\t\t\t\t\t\t\tp.day = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (d.match(\"now\")) {\n\t\t\t\t\tvar now = new Date();\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tdate.setFullYear(now.getFullYear());\n\t\t\t\t\tp.year = true;\n\t\t\t\t\t\n\t\t\t\t\tdate.setMonth(now.getMonth());\n\t\t\t\t\tp.month = true;\n\t\t\t\t\t\n\t\t\t\t\tdate.setDate(now.getDate());\n\t\t\t\t\tp.day = true;\n\t\t\t\t\t\n\t\t\t\t\tif (d.match(\"hours\")) {\n\t\t\t\t\t\tdate.setHours(now.getHours());\n\t\t\t\t\t\tp.hour = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (d.match(\"minutes\")) {\n\t\t\t\t\t\tdate.setHours(now.getHours());\n\t\t\t\t\t\tdate.setMinutes(now.getMinutes());\n\t\t\t\t\t\tp.hour = true;\n\t\t\t\t\t\tp.minute = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (d.match(\"seconds\")) {\n\t\t\t\t\t\tdate.setHours(now.getHours());\n\t\t\t\t\t\tdate.setMinutes(now.getMinutes());\n\t\t\t\t\t\tdate.setSeconds(now.getSeconds());\n\t\t\t\t\t\tp.hour = true;\n\t\t\t\t\t\tp.minute = true;\n\t\t\t\t\t\tp.second = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (d.match(\"milliseconds\")) {\n\t\t\t\t\t\tdate.setHours(now.getHours());\n\t\t\t\t\t\tdate.setMinutes(now.getMinutes());\n\t\t\t\t\t\tdate.setSeconds(now.getSeconds());\n\t\t\t\t\t\tdate.setMilliseconds(now.getMilliseconds());\n\t\t\t\t\t\tp.hour = true;\n\t\t\t\t\t\tp.minute = true;\n\t\t\t\t\t\tp.second = true;\n\t\t\t\t\t\tp.millisecond = true;\n\t\t\t\t\t}\n\t\t\t\t} else if (d.length <= 8) {\n\t\t\t\t\tp.year = true;\n\t\t\t\t\tdate.setFullYear(parseInt(d, 10));\n\t\t\t\t\tdate.setMonth(0);\n\t\t\t\t\tdate.setDate(1);\n\t\t\t\t\tdate.setHours(0);\n\t\t\t\t\tdate.setMinutes(0);\n\t\t\t\t\tdate.setSeconds(0);\n\t\t\t\t\tdate.setMilliseconds(0);\n\t\t\t\t} else if (d.match(\"T\")) {\n\t\t\t\t\tif (navigator.userAgent.match(/MSIE\\s(?!9.0)/)) {\n\t\t\t\t\t    // IE 8 < Won't accept dates with a \"-\" in them.\n\t\t\t\t\t\ttime_parse = d.split(\"T\");\n\t\t\t\t\t\tif (d.match(\":\")) {\n\t\t\t\t\t\t\ttime_array = time_parse[1].split(\":\");\n\t\t\t\t\t\t\tif (time_array[0] >= 1) {\n\t\t\t\t\t\t\t\tdate.setHours(time_array[0]);\n\t\t\t\t\t\t\t\tp.hour = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (time_array[1] >= 1) {\n\t\t\t\t\t\t\t\tdate.setMinutes(time_array[1]);\n\t\t\t\t\t\t\t\tp.minute = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (time_array[2] >= 1) {\n\t\t\t\t\t\t\t\tdate.setSeconds(time_array[2]);\n\t\t\t\t\t\t\t\tif (time_array[2] >= 1) {\n\t\t\t\t\t\t\t\t\tp.second = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (time_array[3] >= 1) {\n\t\t\t\t\t\t\t\tdate.setMilliseconds(time_array[3]);\n\t\t\t\t\t\t\t\tif (time_array[3] >= 1) {\n\t\t\t\t\t\t\t\t\tp.millisecond = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdate_array = time_parse[0].split(\"-\");\n\t\t\t\t\t\tif (date_array[0]) {\n\t\t\t\t\t\t\tdate.setFullYear(date_array[0]);\n\t\t\t\t\t\t\tp.year = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (date_array[1] >= 0) {\n\t\t\t\t\t\t\tdate.setMonth(date_array[1] - 1);\n\t\t\t\t\t\t\tp.month = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (date_array[2] >= 0) {\n\t\t\t\t\t\t\tdate.setDate(date_array[2]);\n\t\t\t\t\t\t\tp.day = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdate = new Date(Date.parse(d));\n\t\t\t\t\t\tp.year = true;\n\t\t\t\t\t\tp.month = true;\n\t\t\t\t\t\tp.day = true;\n\t\t\t\t\t\tp.hour = true;\n\t\t\t\t\t\tp.minute = true;\n\t\t\t\t\t\tif (date.getSeconds() >= 1) {\n\t\t\t\t\t\t\tp.second = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (date.getMilliseconds() >= 1) {\n\t\t\t\t\t\t\tp.millisecond = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdate = new Date(\n\t\t\t\t\t\tparseInt(d.slice(0,4), 10), \n\t\t\t\t\t\tparseInt(d.slice(4,6), 10) - 1, \n\t\t\t\t\t\tparseInt(d.slice(6,8), 10), \n\t\t\t\t\t\tparseInt(d.slice(8,10), 10), \n\t\t\t\t\t\tparseInt(d.slice(10,12), 10)\n\t\t\t\t\t);\n\t\t\t\t\tp.year = true;\n\t\t\t\t\tp.month = true;\n\t\t\t\t\tp.day = true;\n\t\t\t\t\tp.hour = true;\n\t\t\t\t\tp.minute = true;\n\t\t\t\t\tif (date.getSeconds() >= 1) {\n\t\t\t\t\t\tp.second = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (date.getMilliseconds() >= 1) {\n\t\t\t\t\t\tp.millisecond = true;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif (precision != null && precision != \"\") {\n\t\t\t\treturn {\n\t\t\t\t\tdate: \t\tdate,\n\t\t\t\t\tprecision: \tp\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn date;\n\t\t\t}\n\t\t},\n\t\t\n\t\t\n\t\t\t\n\t\tprettyDate: function(d, is_abbr, p, d2) {\n\t\t\tvar _date,\n\t\t\t\t_date2,\n\t\t\t\tformat,\n\t\t\t\tbc_check,\n\t\t\t\tis_pair = false,\n\t\t\t\tbc_original,\n\t\t\t\tbc_number,\n\t\t\t\tbc_string;\n\t\t\t\t\n\t\t\tif (d2 != null && d2 != \"\" && typeof d2 != 'undefined') {\n\t\t\t\tis_pair = true;\n\t\t\t\ttrace(\"D2 \" + d2);\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif (type.of(d) == \"date\") {\n\t\t\t\t\n\t\t\t\tif (type.of(p) == \"object\") {\n\t\t\t\t\tif (p.millisecond || p.second && d.getSeconds() >= 1) {\n\t\t\t\t\t\t// YEAR MONTH DAY HOUR MINUTE\n\t\t\t\t\t\tif (is_abbr){\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.time_short; \n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.time_short;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (p.minute) {\n\t\t\t\t\t\t// YEAR MONTH DAY HOUR MINUTE\n\t\t\t\t\t\tif (is_abbr){\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.time_no_seconds_short; \n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.time_no_seconds_small_date;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (p.hour) {\n\t\t\t\t\t\t// YEAR MONTH DAY HOUR\n\t\t\t\t\t\tif (is_abbr) {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.time_no_seconds_short;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.time_no_seconds_small_date;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (p.day) {\n\t\t\t\t\t\t// YEAR MONTH DAY\n\t\t\t\t\t\tif (is_abbr) {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.full_short;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.full;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (p.month) {\n\t\t\t\t\t\t// YEAR MONTH\n\t\t\t\t\t\tif (is_abbr) {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.month_short;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.month;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (p.year) {\n\t\t\t\t\t\tformat = VMM.Date.dateformats.year;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tformat = VMM.Date.dateformats.year;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t\tif (d.getMonth() === 0 && d.getDate() == 1 && d.getHours() === 0 && d.getMinutes() === 0 ) {\n\t\t\t\t\t\t// YEAR ONLY\n\t\t\t\t\t\tformat = VMM.Date.dateformats.year;\n\t\t\t\t\t} else if (d.getDate() <= 1 && d.getHours() === 0 && d.getMinutes() === 0) {\n\t\t\t\t\t\t// YEAR MONTH\n\t\t\t\t\t\tif (is_abbr) {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.month_short;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.month;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (d.getHours() === 0 && d.getMinutes() === 0) {\n\t\t\t\t\t\t// YEAR MONTH DAY\n\t\t\t\t\t\tif (is_abbr) {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.full_short;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.full;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else  if (d.getMinutes() === 0) {\n\t\t\t\t\t\t// YEAR MONTH DAY HOUR\n\t\t\t\t\t\tif (is_abbr) {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.time_no_seconds_short;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.time_no_seconds_small_date;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// YEAR MONTH DAY HOUR MINUTE\n\t\t\t\t\t\tif (is_abbr){\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.time_no_seconds_short; \n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tformat = VMM.Date.dateformats.full_long; \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t_date = dateFormat(d, format, false);\n\t\t\t\t//_date = \"Jan\"\n\t\t\t\tbc_check = _date.split(\" \");\n\t\t\t\t\t\n\t\t\t\t// BC TIME SUPPORT\n\t\t\t\tfor(var i = 0; i < bc_check.length; i++) {\n\t\t\t\t\tif ( parseInt(bc_check[i], 10) < 0 ) {\n\t\t\t\t\t\ttrace(\"YEAR IS BC\");\n\t\t\t\t\t\tbc_original\t= bc_check[i];\n\t\t\t\t\t\tbc_number\t= Math.abs( parseInt(bc_check[i], 10) );\n\t\t\t\t\t\tbc_string\t= bc_number.toString() + \" B.C.\";\n\t\t\t\t\t\t_date\t\t= _date.replace(bc_original, bc_string);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\tif (is_pair) {\n\t\t\t\t\t_date2 = dateFormat(d2, format, false);\n\t\t\t\t\tbc_check = _date2.split(\" \");\n\t\t\t\t\t// BC TIME SUPPORT\n\t\t\t\t\tfor(var j = 0; j < bc_check.length; j++) {\n\t\t\t\t\t\tif ( parseInt(bc_check[j], 10) < 0 ) {\n\t\t\t\t\t\t\ttrace(\"YEAR IS BC\");\n\t\t\t\t\t\t\tbc_original\t= bc_check[j];\n\t\t\t\t\t\t\tbc_number\t= Math.abs( parseInt(bc_check[j], 10) );\n\t\t\t\t\t\t\tbc_string\t= bc_number.toString() + \" B.C.\";\n\t\t\t\t\t\t\t_date2\t\t\t= _date2.replace(bc_original, bc_string);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttrace(\"NOT A VALID DATE?\");\n\t\t\t\ttrace(d);\n\t\t\t}\n\t\t\t\t\n\t\t\tif (is_pair) {\n\t\t\t\treturn _date + \" &mdash; \" + _date2;\n\t\t\t} else {\n\t\t\t\treturn _date;\n\t\t\t}\n\t\t}\n\t\t\n\t}).init();\n\t\n\t/*\n\t * Date Format 1.2.3\n\t * (c) 2007-2009 Steven Levithan <stevenlevithan.com>\n\t * MIT license\n\t *\n\t * Includes enhancements by Scott Trenda <scott.trenda.net>\n\t * and Kris Kowal <cixar.com/~kris.kowal/>\n\t *\n\t * Accepts a date, a mask, or a date and a mask.\n\t * Returns a formatted version of the given date.\n\t * The date defaults to the current date/time.\n\t * The mask defaults to dateFormat.masks.default.\n\t */\n\n\tvar dateFormat = function () {\n\t\tvar\ttoken = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|[WLloSZ]|\"[^\"]*\"|'[^']*'/g,\n\t\t\ttimezone = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\n\t\t\ttimezoneClip = /[^-+\\dA-Z]/g,\n\t\t\tpad = function (val, len) {\n\t\t\t\tval = String(val);\n\t\t\t\tlen = len || 2;\n\t\t\t\twhile (val.length < len) val = \"0\" + val;\n\t\t\t\treturn val;\n\t\t\t};\n\n\t\t// Regexes and supporting functions are cached through closure\n\t\treturn function (date, mask, utc) {\n\t\t\tvar dF = dateFormat;\n\n\t\t\t// You can't provide utc if you skip other args (use the \"UTC:\" mask prefix)\n\t\t\tif (arguments.length == 1 && Object.prototype.toString.call(date) == \"[object String]\" && !/\\d/.test(date)) {\n\t\t\t\tmask = date;\n\t\t\t\tdate = undefined;\n\t\t\t}\n\n\t\t\t// Passing date through Date applies Date.parse, if necessary\n\t\t\t// Caused problems in IE\n\t\t\t// date = date ? new Date(date) : new Date;\n\t\t\tif (isNaN(date)) {\n\t\t\t\ttrace(\"invalid date \" + date);\n\t\t\t\t//return \"\";\n\t\t\t} \n\n\t\t\tmask = String(dF.masks[mask] || mask || dF.masks[\"default\"]);\n\n\t\t\t// Allow setting the utc argument via the mask\n\t\t\tif (mask.slice(0, 4) == \"UTC:\") {\n\t\t\t\tmask = mask.slice(4);\n\t\t\t\tutc = true;\n\t\t\t}\n\n\t\t\tvar\t_ = utc ? \"getUTC\" : \"get\",\n\t\t\t\td = date[_ + \"Date\"](),\n\t\t\t\tD = date[_ + \"Day\"](),\n\t\t\t\tm = date[_ + \"Month\"](),\n\t\t\t\ty = date[_ + \"FullYear\"](),\n\t\t\t\tH = date[_ + \"Hours\"](),\n\t\t\t\tM = date[_ + \"Minutes\"](),\n\t\t\t\ts = date[_ + \"Seconds\"](),\n\t\t\t\tL = date[_ + \"Milliseconds\"](),\n\t\t\t\tW = date.getWeek(),\n\t\t\t\to = utc ? 0 : date.getTimezoneOffset(),\n\t\t\t\tflags = {\n\t\t\t\t\td:    d,\n\t\t\t\t\tdd:   pad(d),\n\t\t\t\t\tddd:  dF.i18n.dayNames[D],\n\t\t\t\t\tdddd: dF.i18n.dayNames[D + 7],\n\t\t\t\t\tm:    m + 1,\n\t\t\t\t\tmm:   pad(m + 1),\n\t\t\t\t\tmmm:  dF.i18n.monthNames[m],\n\t\t\t\t\tmmmm: dF.i18n.monthNames[m + 12],\n\t\t\t\t\tyy:   String(y).slice(2),\n\t\t\t\t\tyyyy: y,\n\t\t\t\t\th:    H % 12 || 12,\n\t\t\t\t\thh:   pad(H % 12 || 12),\n\t\t\t\t\tH:    H,\n\t\t\t\t\tHH:   pad(H),\n\t\t\t\t\tM:    M,\n\t\t\t\t\tMM:   pad(M),\n\t\t\t\t\ts:    s,\n\t\t\t\t\tss:   pad(s),\n\t\t\t\t\tl:    pad(L, 3),\n\t\t\t\t\tL:    pad(L > 99 ? Math.round(L / 10) : L),\n\t\t\t\t\tt:    H < 12 ? \"a\"  : \"p\",\n\t\t\t\t\ttt:   H < 12 ? \"am\" : \"pm\",\n\t\t\t\t\tT:    H < 12 ? \"A\"  : \"P\",\n\t\t\t\t\tTT:   H < 12 ? \"AM\" : \"PM\",\n\t\t\t\t\tZ:    utc ? \"UTC\" : (String(date).match(timezone) || [\"\"]).pop().replace(timezoneClip, \"\"),\n\t\t\t\t\to:    (o > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),\n\t\t\t\t\tS:    [\"th\", \"st\", \"nd\", \"rd\"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10],\n\t\t\t\t\tW: \tW\n\t\t\t\t};\n\n\t\t\treturn mask.replace(token, function ($0) {\n\t\t\t\treturn $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);\n\t\t\t});\n\t\t};\n\t}();\n\n\t// Some common format strings\n\tdateFormat.masks = {\n\t\t\"default\":      \"ddd mmm dd yyyy HH:MM:ss\",\n\t\tshortDate:      \"m/d/yy\",\n\t\tmediumDate:     \"mmm d, yyyy\",\n\t\tlongDate:       \"mmmm d, yyyy\",\n\t\tfullDate:       \"dddd, mmmm d, yyyy\",\n\t\tshortTime:      \"h:MM TT\",\n\t\tmediumTime:     \"h:MM:ss TT\",\n\t\tlongTime:       \"h:MM:ss TT Z\",\n\t\tisoDate:        \"yyyy-mm-dd\",\n\t\tisoTime:        \"HH:MM:ss\",\n\t\tisoDateTime:    \"yyyy-mm-dd'T'HH:MM:ss\",\n\t\tisoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n\t};\n\n\t// Internationalization strings\n\tdateFormat.i18n = {\n\t\tdayNames: [\n\t\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\",\n\t\t\t\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"\n\t\t],\n\t\tmonthNames: [\n\t\t\t\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n\t\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t\t]\n\t};\n\n\t// For convenience...\n\tDate.prototype.format = function (mask, utc) {\n\t\treturn dateFormat(this, mask, utc);\n\t};\n\t\n}"
  },
  {
    "path": "source/js/Core/Core/VMM.FileExtention.js",
    "content": "/*\t* File Extention\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.FileExtention == 'undefined') {\n\tVMM.FileExtention = {\n\t\tgoogleDocType: function(url) {\n\t\t\tvar fileName\t\t\t= url.replace(/\\s\\s*$/, ''),\n\t\t\t\tfileExtension\t\t= \"\",\n\t\t\t\tvalidFileExtensions = [\"DOC\",\"DOCX\",\"XLS\",\"XLSX\",\"PPT\",\"PPTX\",\"PDF\",\"PAGES\",\"AI\",\"PSD\",\"TIFF\",\"DXF\",\"SVG\",\"EPS\",\"PS\",\"TTF\",\"XPS\",\"ZIP\",\"RAR\"],\n\t\t\t\tflag\t\t\t\t= false;\n\t\t\t\t\n\t\t\tfileExtension = fileName.substr(fileName.length - 5, 5);\n\t\t\t\n\t\t\tfor (var i = 0; i < validFileExtensions.length; i++) {\n\t\t\t\tif (fileExtension.toLowerCase().match(validFileExtensions[i].toString().toLowerCase()) || fileName.match(\"docs.google.com\") ) {\n\t\t\t\t\tflag = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn flag;\n\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Core/VMM.Library.js",
    "content": "/*\t* LIBRARY ABSTRACTION\n================================================== */\nif(typeof VMM != 'undefined') {\n\t\n\tVMM.smoothScrollTo = function(elem, duration, ease) {\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\tvar _ease\t\t= \"easein\",\n\t\t\t\t_duration\t= 1000;\n\t\t\n\t\t\tif (duration != null) {\n\t\t\t\tif (duration < 1) {\n\t\t\t\t\t_duration = 1;\n\t\t\t\t} else {\n\t\t\t\t\t_duration = Math.round(duration);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif (ease != null && ease != \"\") {\n\t\t\t\t_ease = ease;\n\t\t\t}\n\t\t\t\n\t\t\tif (jQuery(window).scrollTop() != VMM.Lib.offset(elem).top) {\n\t\t\t\tVMM.Lib.animate('html,body', _duration, _ease, {scrollTop: VMM.Lib.offset(elem).top})\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t};\n\t\n\tVMM.attachElement = function(element, content) {\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\tjQuery(element).html(content);\n\t\t}\n\t\t\n\t};\n\t\n\tVMM.appendElement = function(element, content) {\n\t\t\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\tjQuery(element).append(content);\n\t\t}\n\t\t\n\t};\n\t\n\tVMM.getHTML = function(element) {\n\t\tvar e;\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\te = jQuery(element).html();\n\t\t\treturn e;\n\t\t}\n\t\t\n\t};\n\t\n\tVMM.getElement = function(element, p) {\n\t\tvar e;\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\tif (p) {\n\t\t\t\te = jQuery(element).parent().get(0);\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\te = jQuery(element).get(0);\n\t\t\t}\n\t\t\treturn e;\n\t\t}\n\t\t\n\t};\n\t\n\tVMM.bindEvent = function(element, the_handler, the_event_type, event_data) {\n\t\tvar e;\n\t\tvar _event_type = \"click\";\n\t\tvar _event_data = {};\n\t\t\n\t\tif (the_event_type != null && the_event_type != \"\") {\n\t\t\t_event_type = the_event_type;\n\t\t}\n\t\t\n\t\tif (_event_data != null && _event_data != \"\") {\n\t\t\t_event_data = event_data;\n\t\t}\n\t\t\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\tjQuery(element).bind(_event_type, _event_data, the_handler);\n\t\t\t\n\t\t\t//return e;\n\t\t}\n\t\t\n\t};\n\t\n\tVMM.unbindEvent = function(element, the_handler, the_event_type) {\n\t\tvar e;\n\t\tvar _event_type = \"click\";\n\t\tvar _event_data = {};\n\t\t\n\t\tif (the_event_type != null && the_event_type != \"\") {\n\t\t\t_event_type = the_event_type;\n\t\t}\n\t\t\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\tjQuery(element).unbind(_event_type, the_handler);\n\t\t\t\n\t\t\t//return e;\n\t\t}\n\t\t\n\t};\n\t\n\tVMM.fireEvent = function(element, the_event_type, the_data) {\n\t\tvar e;\n\t\tvar _event_type = \"click\";\n\t\tvar _data = [];\n\t\t\n\t\tif (the_event_type != null && the_event_type != \"\") {\n\t\t\t_event_type = the_event_type;\n\t\t}\n\t\tif (the_data != null && the_data != \"\") {\n\t\t\t_data = the_data;\n\t\t}\n\t\t\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\tjQuery(element).trigger(_event_type, _data);\n\t\t\t\n\t\t\t//return e;\n\t\t}\n\t\t\n\t};\n\t\n\tVMM.getJSON = function(url, data, callback) {\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\tjQuery.ajaxSetup({\n\t\t\t     timeout: 3000\n\t\t\t});\n\t\t\t/* CHECK FOR IE\n\t\t\t================================================== */\n\t\t\tif ( VMM.Browser.browser == \"Explorer\" && \n\t\t\t\t parseInt(VMM.Browser.version, 10) >= 7 && \n\t\t\t\t window.XDomainRequest && \n\t\t\t\t url.match('^https?://')) {\n\t\t\t\ttrace(\"old IE JSON doesn't like retrieving from different protocol\");\n\t\t\t\t\tvar colon = url.indexOf(':');\n\t\t\t\t\turl = url.substr(colon+1); \n\t\t\t}\n\t\t\treturn jQuery.getJSON(url, data, callback);\n\n\t\t}\n\t}\n\t\n\tVMM.parseJSON = function(the_json) {\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\treturn jQuery.parseJSON(the_json);\n\t\t}\n\t}\n\t\n\t// ADD ELEMENT AND RETURN IT\n\tVMM.appendAndGetElement = function(append_to_element, tag, cName, content) {\n\t\tvar e,\n\t\t\t_tag\t\t= \"<div>\",\n\t\t\t_class\t\t= \"\",\n\t\t\t_content\t= \"\",\n\t\t\t_id\t\t\t= \"\";\n\t\t\n\t\tif (tag != null && tag != \"\") {\n\t\t\t_tag = tag;\n\t\t}\n\t\t\n\t\tif (cName != null && cName != \"\") {\n\t\t\t_class = cName;\n\t\t}\n\t\t\n\t\tif (content != null && content != \"\") {\n\t\t\t_content = content;\n\t\t}\n\t\t\n\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\n\t\t\te = jQuery(tag);\n\t\t\t\n\t\t\te.addClass(_class);\n\t\t\te.html(_content);\n\t\t\t\n\t\t\tjQuery(append_to_element).append(e);\n\t\t\t\n\t\t}\n\t\t\n\t\treturn e;\n\t\t\n\t};\n\t\n\tVMM.Lib = {\n\t\t\n\t\tinit: function() {\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\thide: function(element, duration) {\n\t\t\tif (duration != null && duration != \"\") {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).hide(duration);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).hide();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\tremove: function(element) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).remove();\n\t\t\t}\n\t\t},\n\t\t\n\t\tdetach: function(element) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).detach();\n\t\t\t}\n\t\t},\n\t\t\n\t\tappend: function(element, value) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).append(value);\n\t\t\t}\n\t\t},\n\t\t\n\t\tprepend: function(element, value) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).prepend(value);\n\t\t\t}\n\t\t},\n\t\t\n\t\tshow: function(element, duration) {\n\t\t\tif (duration != null && duration != \"\") {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).show(duration);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).show();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\tload: function(element, callback_function, event_data) {\n\t\t\tvar _event_data = {elem:element}; // return element by default\n\t\t\tif (_event_data != null && _event_data != \"\") {\n\t\t\t\t_event_data = event_data;\n\t\t\t}\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).load(_event_data, callback_function);\n\t\t\t}\n\t\t},\n\t\t\n\t\taddClass: function(element, cName) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).addClass(cName);\n\t\t\t}\n\t\t},\n\t\t\n\t\tremoveClass: function(element, cName) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).removeClass(cName);\n\t\t\t}\n\t\t},\n\t\t\n\t\tattr: function(element, aName, value) {\n\t\t\tif (value != null && value != \"\") {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).attr(aName, value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\treturn jQuery(element).attr(aName);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tprop: function(element, aName, value) {\n\t\t\tif (typeof jQuery == 'undefined' || !/[1-9]\\.[3-9].[1-9]/.test(jQuery.fn.jquery)) {\n\t\t\t    VMM.Lib.attribute(element, aName, value);\n\t\t\t} else {\n\t\t\t\tjQuery(element).prop(aName, value);\n\t\t\t}\n\t\t},\n\t\t\n\t\tattribute: function(element, aName, value) {\n\t\t\t\n\t\t\tif (value != null && value != \"\") {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).attr(aName, value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\treturn jQuery(element).attr(aName);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tvisible: function(element, show) {\n\t\t\tif (show != null) {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\tjQuery(element).show(0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery(element).hide(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tif ( jQuery(element).is(':visible')){\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tcss: function(element, prop, value) {\n\n\t\t\tif (value != null && value != \"\") {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).css(prop, value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\treturn jQuery(element).css(prop);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tcssmultiple: function(element, propval) {\n\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\treturn jQuery(element).css(propval);\n\t\t\t}\n\t\t},\n\t\t\n\t\toffset: function(element) {\n\t\t\tvar p;\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tp = jQuery(element).offset();\n\t\t\t}\n\t\t\treturn p;\n\t\t},\n\t\t\n\t\tposition: function(element) {\n\t\t\tvar p;\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tp = jQuery(element).position();\n\t\t\t}\n\t\t\treturn p;\n\t\t},\n\t\t\n\t\twidth: function(element, s) {\n\t\t\tif (s != null && s != \"\") {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).width(s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\treturn jQuery(element).width();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\theight: function(element, s) {\n\t\t\tif (s != null && s != \"\") {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).height(s);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\treturn jQuery(element).height();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\ttoggleClass: function(element, cName) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).toggleClass(cName);\n\t\t\t}\n\t\t},\n\t\t\n\t\teach:function(element, return_function) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).each(return_function);\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\thtml: function(element, str) {\n\t\t\tvar e;\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\te = jQuery(element).html();\n\t\t\t\treturn e;\n\t\t\t}\n\t\t\t\n\t\t\tif (str != null && str != \"\") {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).html(str);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar e;\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\te = jQuery(element).html();\n\t\t\t\t\treturn e;\n\t\t\t\t}\n\t\t\t}\n\n\t\t},\n\t\t\n\t\tfind: function(element, selec) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\treturn jQuery(element).find(selec);\n\t\t\t}\n\t\t},\n\t\t\n\t\tstop: function(element) {\n\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\tjQuery(element).stop();\n\t\t\t}\n\t\t},\n\t\t\n\t\tdelay_animate: function(delay, element, duration, ease, att, callback_function) {\n\t\t\tif (VMM.Browser.device == \"mobile\" || VMM.Browser.device == \"tablet\") {\n\t\t\t\tvar _tdd\t\t= Math.round((duration/1500)*10)/10,\n\t\t\t\t\t__duration\t= _tdd + 's';\n\t\t\t\t\t\n\t\t\t\tVMM.Lib.css(element, '-webkit-transition', 'all '+ __duration + ' ease');\n\t\t\t\tVMM.Lib.css(element, '-moz-transition', 'all '+ __duration + ' ease');\n\t\t\t\tVMM.Lib.css(element, '-o-transition', 'all '+ __duration + ' ease');\n\t\t\t\tVMM.Lib.css(element, '-ms-transition', 'all '+ __duration + ' ease');\n\t\t\t\tVMM.Lib.css(element, 'transition', 'all '+ __duration + ' ease');\n\t\t\t\tVMM.Lib.cssmultiple(element, _att);\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tjQuery(element).delay(delay).animate(att, {duration:duration, easing:ease} );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\tanimate: function(element, duration, ease, att, que, callback_function) {\n\t\t\t\n\t\t\tvar _ease\t\t= \"easein\",\n\t\t\t\t_que\t\t= false,\n\t\t\t\t_duration\t= 1000,\n\t\t\t\t_att\t\t= {};\n\t\t\t\n\t\t\tif (duration != null) {\n\t\t\t\tif (duration < 1) {\n\t\t\t\t\t_duration = 1;\n\t\t\t\t} else {\n\t\t\t\t\t_duration = Math.round(duration);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tif (ease != null && ease != \"\") {\n\t\t\t\t_ease = ease;\n\t\t\t}\n\t\t\t\n\t\t\tif (que != null && que != \"\") {\n\t\t\t\t_que = que;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif (att != null) {\n\t\t\t\t_att = att\n\t\t\t} else {\n\t\t\t\t_att = {opacity: 0}\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tif (VMM.Browser.device == \"mobile\" || VMM.Browser.device == \"tablet\") {\n\t\t\t\t\n\t\t\t\tvar _tdd\t\t= Math.round((_duration/1500)*10)/10,\n\t\t\t\t\t__duration\t= _tdd + 's';\n\t\t\t\t\t\n\t\t\t\t_ease = \" cubic-bezier(0.33, 0.66, 0.66, 1)\";\n\t\t\t\t//_ease = \" ease-in-out\";\n\t\t\t\tfor (x in _att) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(_att, x)) {\n\t\t\t\t\t\ttrace(x + \" to \" + _att[x]);\n\t\t\t\t\t\tVMM.Lib.css(element, '-webkit-transition',  x + ' ' + __duration + _ease);\n\t\t\t\t\t\tVMM.Lib.css(element, '-moz-transition', x + ' ' + __duration + _ease);\n\t\t\t\t\t\tVMM.Lib.css(element, '-o-transition', x + ' ' + __duration + _ease);\n\t\t\t\t\t\tVMM.Lib.css(element, '-ms-transition', x + ' ' + __duration + _ease);\n\t\t\t\t\t\tVMM.Lib.css(element, 'transition', x + ' ' + __duration + _ease);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tVMM.Lib.cssmultiple(element, _att);\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tif( typeof( jQuery ) != 'undefined' ){\n\t\t\t\t\tif (callback_function != null && callback_function != \"\") {\n\t\t\t\t\t\tjQuery(element).animate(_att, {queue:_que, duration:_duration, easing:_ease, complete:callback_function} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery(element).animate(_att, {queue:_que, duration:_duration, easing:_ease} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t}\n}\n\nif( typeof( jQuery ) != 'undefined' ){\n\t\n\t/*\tXDR AJAX EXTENTION FOR jQuery\n\t\thttps://github.com/jaubourg/ajaxHooks/blob/master/src/ajax/xdr.js\n\t================================================== */\n\t(function( jQuery ) {\n\t\tif ( window.XDomainRequest ) {\n\t\t\tjQuery.ajaxTransport(function( s ) {\n\t\t\t\tif ( s.crossDomain && s.async ) {\n\t\t\t\t\tif ( s.timeout ) {\n\t\t\t\t\t\ts.xdrTimeout = s.timeout;\n\t\t\t\t\t\tdelete s.timeout;\n\t\t\t\t\t}\n\t\t\t\t\tvar xdr;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsend: function( _, complete ) {\n\t\t\t\t\t\t\tfunction callback( status, statusText, responses, responseHeaders ) {\n\t\t\t\t\t\t\t\txdr.onload = xdr.onerror = xdr.ontimeout = jQuery.noop;\n\t\t\t\t\t\t\t\txdr = undefined;\n\t\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\txdr = new XDomainRequest();\n\t\t\t\t\t\t\txdr.open( s.type, s.url );\n\t\t\t\t\t\t\txdr.onload = function() {\n\t\t\t\t\t\t\t\tcallback( 200, \"OK\", { text: xdr.responseText }, \"Content-Type: \" + xdr.contentType );\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\txdr.onerror = function() {\n\t\t\t\t\t\t\t\tcallback( 404, \"Not Found\" );\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif ( s.xdrTimeout ) {\n\t\t\t\t\t\t\t\txdr.ontimeout = function() {\n\t\t\t\t\t\t\t\t\tcallback( 0, \"timeout\" );\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\txdr.timeout = s.xdrTimeout;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\txdr.send( ( s.hasContent && s.data ) || null );\n\t\t\t\t\t\t},\n\t\t\t\t\t\tabort: function() {\n\t\t\t\t\t\t\tif ( xdr ) {\n\t\t\t\t\t\t\t\txdr.onerror = jQuery.noop();\n\t\t\t\t\t\t\t\txdr.abort();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t})( jQuery );\n\t\n\t/*\tjQuery Easing v1.3\n\t\thttp://gsgd.co.uk/sandbox/jquery/easing/\n\t================================================== */\n\tjQuery.easing['jswing'] = jQuery.easing['swing'];\n\n\tjQuery.extend( jQuery.easing, {\n\t\tdef: 'easeOutQuad',\n\t\tswing: function (x, t, b, c, d) {\n\t\t\t//alert(jQuery.easing.default);\n\t\t\treturn jQuery.easing[jQuery.easing.def](x, t, b, c, d);\n\t\t},\n\t\teaseInExpo: function (x, t, b, c, d) {\n\t\t\treturn (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\n\t\t},\n\t\teaseOutExpo: function (x, t, b, c, d) {\n\t\t\treturn (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n\t\t},\n\t\teaseInOutExpo: function (x, t, b, c, d) {\n\t\t\tif (t==0) return b;\n\t\t\tif (t==d) return b+c;\n\t\t\tif ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;\n\t\t\treturn c/2 * (-Math.pow(2, -10 * --t) + 2) + b;\n\t\t},\n\t\teaseInQuad: function (x, t, b, c, d) {\n\t\t\treturn c*(t/=d)*t + b;\n\t\t},\n\t\teaseOutQuad: function (x, t, b, c, d) {\n\t\t\treturn -c *(t/=d)*(t-2) + b;\n\t\t},\n\t\teaseInOutQuad: function (x, t, b, c, d) {\n\t\t\tif ((t/=d/2) < 1) return c/2*t*t + b;\n\t\t\treturn -c/2 * ((--t)*(t-2) - 1) + b;\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "source/js/Core/Core/VMM.LoadLib.js",
    "content": "/*\n\tLoadLib\n\tDesigned and built by Zach Wise digitalartwork.net\n*/\n\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n================================================== */\n// @codekit-prepend \"../Library/LazyLoad.js\";\n\nLoadLib = (function (doc) {\n\tvar loaded\t= [];\n\t\n\tfunction isLoaded(url) {\n\t\t\n\t\tvar i\t\t\t= 0,\n\t\t\thas_loaded\t= false;\n\t\t\n\t\tfor (i = 0; i < loaded.length; i++) {\n\t\t\tif (loaded[i] == url) {\n\t\t\t\thas_loaded = true;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (has_loaded) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tloaded.push(url);\n\t\t\treturn false;\n\t\t}\n\t\t\n\t}\n\t\n\treturn {\n\t\t\n\t\tcss: function (urls, callback, obj, context) {\n\t\t\tif (!isLoaded(urls)) {\n\t\t\t\tLazyLoad.css(urls, callback, obj, context);\n\t\t\t}\n\t\t},\n\n\t\tjs: function (urls, callback, obj, context) {\n\t\t\tif (!isLoaded(urls)) {\n\t\t\t\tLazyLoad.js(urls, callback, obj, context);\n\t\t\t}\n\t\t}\n    };\n\t\n})(this.document);\n"
  },
  {
    "path": "source/js/Core/Core/VMM.Util.js",
    "content": "/*\t* Utilities and Useful Functions\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.Util == 'undefined') {\n\t\n\tVMM.Util = ({\n\t\t\n\t\tinit: function() {\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\tremoveRange: function(array, from, to) { // rather than change Array.prototype; Thanks Jeff McWhirter for nudge\n  \t\t\tvar rest = array.slice((to || from) + 1 || array.length);\n  \t\t\tarray.length = from < 0 ? array.length + from : from;\n  \t\t\treturn array.push.apply(array, rest);\n\t\t},\n\n\t\t/*\t* CORRECT PROTOCOL (DOES NOT WORK)\n\t\t================================================== */\n\t\tcorrectProtocol: function(url) {\n\t\t\tvar loc = (window.parent.location.protocol).toString(),\n\t\t\t\tprefix = \"\",\n\t\t\t\tthe_url = url.split(\"://\", 2);\n\t\t\t\n\t\t\tif (loc.match(\"http\")) {\n\t\t\t\tprefix = loc;\n\t\t\t} else {\n\t\t\t\tprefix = \"https\";\n\t\t\t}\n\t\t\t\n\t\t\treturn prefix + \"://\" + the_url[1];\n\t\t\t\n\t\t},\n\t\t\n\t\t/*\t* MERGE CONFIG\n\t\t================================================== */\n\t\tmergeConfig: function(config_main, config_to_merge) {\n\t\t\tvar x;\n\t\t\tfor (x in config_to_merge) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(config_to_merge, x)) {\n\t\t\t\t\tconfig_main[x] = config_to_merge[x];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn config_main;\n\t\t},\n\t\t\n\t\t/*\t* GET OBJECT ATTRIBUTE BY INDEX\n\t\t================================================== */\n\t\tgetObjectAttributeByIndex: function(obj, index) {\n\t\t\tif(typeof obj != 'undefined') {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (var attr in obj){\n\t\t\t\t\tif (index === i){\n\t\t\t\t\t\treturn obj[attr];\n\t\t\t\t\t}\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\t/*\t* ORDINAL\n\t\t================================================== */\n\t\tordinal: function(n) {\n\t\t    return [\"th\",\"st\",\"nd\",\"rd\"][(!( ((n%10) >3) || (Math.floor(n%100/10)==1)) ) * (n%10)]; \n\t\t},\n\t\t\n\t\t/*\t* RANDOM BETWEEN\n\t\t================================================== */\n\t\t//VMM.Util.randomBetween(1, 3)\n\t\trandomBetween: function(min, max) {\n\t\t\treturn Math.floor(Math.random() * (max - min + 1) + min);\n\t\t},\n\t\t\n\t\t/*\t* AVERAGE\n\t\t\t* http://jsfromhell.com/array/average\n\t\t\t* var x = VMM.Util.average([2, 3, 4]);\n\t\t\t* VMM.Util.average([2, 3, 4]).mean\n\t\t================================================== */\n\t\taverage: function(a) {\n\t\t    var r = {mean: 0, variance: 0, deviation: 0}, t = a.length;\n\t\t    for(var m, s = 0, l = t; l--; s += a[l]);\n\t\t    for(m = r.mean = s / t, l = t, s = 0; l--; s += Math.pow(a[l] - m, 2));\n\t\t    return r.deviation = Math.sqrt(r.variance = s / t), r;\n\t\t},\n\t\t\n\t\t/*\t* CUSTOM SORT\n\t\t================================================== */\n\t\tcustomSort: function(a, b) {\n\t\t\tvar a1= a, b1= b;\n\t\t\tif(a1== b1) return 0;\n\t\t\treturn a1> b1? 1: -1;\n\t\t},\n\t\t\n\t\t/*\t* Remove Duplicates from Array\n\t\t================================================== */\n\t\tdeDupeArray: function(arr) {\n\t\t\tvar i,\n\t\t\t\tlen=arr.length,\n\t\t\t\tout=[],\n\t\t\t\tobj={};\n\n\t\t\tfor (i=0;i<len;i++) {\n\t\t\t\tobj[arr[i]]=0;\n\t\t\t}\n\t\t\tfor (i in obj) {\n\t\t\t\tout.push(i);\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\t\t\n\t\t/*\t* Returns a word count number\n\t\t================================================== */\n\t\twordCount: function(s) {\n\t\t\tvar fullStr = s + \" \";\n\t\t\tvar initial_whitespace_rExp = /^[^A-Za-z0-9\\'\\-]+/gi;\n\t\t\tvar left_trimmedStr = fullStr.replace(initial_whitespace_rExp, \"\");\n\t\t\tvar non_alphanumerics_rExp = /[^A-Za-z0-9\\'\\-]+/gi;\n\t\t\tvar cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, \" \");\n\t\t\tvar splitString = cleanedStr.split(\" \");\n\t\t\tvar word_count = splitString.length -1;\n\t\t\tif (fullStr.length <2) {\n\t\t\t\tword_count = 0;\n\t\t\t}\n\t\t\treturn word_count;\n\t\t},\n\t\t\n\t\tratio: {\n\t\t\tfit: function(w, h, ratio_w, ratio_h) {\n\t\t\t\t//VMM.Util.ratio.fit(w, h, ratio_w, ratio_h).width;\n\t\t\t\tvar _fit = {width:0,height:0};\n\t\t\t\t// TRY WIDTH FIRST\n\t\t\t\t_fit.width = w;\n\t\t\t\t//_fit.height = Math.round((h / ratio_h) * ratio_w);\n\t\t\t\t_fit.height = Math.round((w / ratio_w) * ratio_h);\n\t\t\t\tif (_fit.height > h) {\n\t\t\t\t\t_fit.height = h;\n\t\t\t\t\t//_fit.width = Math.round((w / ratio_w) * ratio_h);\n\t\t\t\t\t_fit.width = Math.round((h / ratio_h) * ratio_w);\n\t\t\t\t\t\n\t\t\t\t\tif (_fit.width > w) {\n\t\t\t\t\t\ttrace(\"FIT: DIDN'T FIT!!! \")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn _fit;\n\t\t\t\t\n\t\t\t},\n\t\t\tr16_9: function(w,h) {\n\t\t\t\t//VMM.Util.ratio.r16_9(w, h) // Returns corresponding number\n\t\t\t\tif (w !== null && w !== \"\") {\n\t\t\t\t\treturn Math.round((h / 16) * 9);\n\t\t\t\t} else if (h !== null && h !== \"\") {\n\t\t\t\t\treturn Math.round((w / 9) * 16);\n\t\t\t\t}\n\t\t\t},\n\t\t\tr4_3: function(w,h) {\n\t\t\t\tif (w !== null && w !== \"\") {\n\t\t\t\t\treturn Math.round((h / 4) * 3);\n\t\t\t\t} else if (h !== null && h !== \"\") {\n\t\t\t\t\treturn Math.round((w / 3) * 4);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tdoubledigit: function(n) {\n\t\t\treturn (n < 10 ? '0' : '') + n;\n\t\t},\n\t\t\n\t\t/*\t* Returns a truncated segement of a long string of between min and max words. If possible, ends on a period (otherwise goes to max).\n\t\t================================================== */\n\t\ttruncateWords: function(s, min, max) {\n\t\t\t\n\t\t\tif (!min) min = 30;\n\t\t\tif (!max) max = min;\n\t\t\t\n\t\t\tvar initial_whitespace_rExp = /^[^A-Za-z0-9\\'\\-]+/gi;\n\t\t\tvar left_trimmedStr = s.replace(initial_whitespace_rExp, \"\");\n\t\t\tvar words = left_trimmedStr.split(\" \");\n\t\t\t\n\t\t\tvar result = [];\n\t\t\t\n\t\t\tmin = Math.min(words.length, min);\n\t\t\tmax = Math.min(words.length, max);\n\t\t\t\n\t\t\tfor (var i = 0; i<min; i++) {\n\t\t\t\tresult.push(words[i]);\n\t\t\t}\t\t\n\t\t\t\n\t\t\tfor (var j = min; i<max; i++) {\n\t\t\t\tvar word = words[i];\n\t\t\t\t\n\t\t\t\tresult.push(word);\n\t\t\t\t\n\t\t\t\tif (word.charAt(word.length-1) == '.') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\t\t\n\t\t\t\n\t\t\treturn (result.join(' '));\n\t\t},\n\t\t\n\t\t/*\t* Turns plain text links into real links\n\t\t================================================== */\n\t\tlinkify: function(text,targets,is_touch) {\n\t\t\t\n\t\t\t// http://, https://, ftp://\n\t\t\tvar urlPattern = /\\b(?:https?|ftp):\\/\\/[a-z0-9-+&@#\\/%?=~_|!:,.;]*[a-z0-9-+&@#\\/%=~_|]/gim;\n\n\t\t\t// www. sans http:// or https://\n\t\t\tvar pseudoUrlPattern = /(^|[^\\/])(www\\.[\\S]+(\\b|$))/gim;\n\n\t\t\t// Email addresses\n\t\t\tvar emailAddressPattern = /(([a-zA-Z0-9_\\-\\.]+)@[a-zA-Z_]+?(?:\\.[a-zA-Z]{2,6}))+/gim;\n\t\t\t\n\n\t\t\treturn text\n\t\t\t\t.replace(urlPattern, \"<a target='_blank' href='$&' onclick='void(0)'>$&</a>\")\n\t\t\t\t.replace(pseudoUrlPattern, \"$1<a target='_blank' onclick='void(0)' href='http://$2'>$2</a>\")\n\t\t\t\t.replace(emailAddressPattern, \"<a target='_blank' onclick='void(0)' href='mailto:$1'>$1</a>\");\n\t\t},\n\t\t\n\t\tlinkify_with_twitter: function(text,targets,is_touch) {\n\t\t\t\n\t\t\t// http://, https://, ftp://\n\t\t\tvar urlPattern = /\\b(?:https?|ftp):\\/\\/[a-z0-9-+&@#\\/%?=~_|!:,.;]*[a-z0-9-+&@#\\/%=~_|]/gim;\n\t\t\tvar url_pattern = /(\\()((?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]+)(\\))|(\\[)((?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]+)(\\])|(\\{)((?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]+)(\\})|(<|&(?:lt|#60|#x3c);)((?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]+)(>|&(?:gt|#62|#x3e);)|((?:^|[^=\\s'\"\\]])\\s*['\"]?|[^=\\s]\\s+)(\\b(?:ht|f)tps?:\\/\\/[a-z0-9\\-._~!$'()*+,;=:\\/?#[\\]@%]+(?:(?!&(?:gt|#0*62|#x0*3e);|&(?:amp|apos|quot|#0*3[49]|#x0*2[27]);[.!&',:?;]?(?:[^a-z0-9\\-._~!$&'()*+,;=:\\/?#[\\]@%]|$))&[a-z0-9\\-._~!$'()*+,;=:\\/?#[\\]@%]*)*[a-z0-9\\-_~$()*+=\\/#[\\]@%])/img;\n\t\t\tvar url_replace = '$1$4$7$10$13<a href=\"$2$5$8$11$14\" target=\"_blank\" class=\"hyphenate\">$2$5$8$11$14</a>$3$6$9$12';\n\t\t\t\n\t\t\t// www. sans http:// or https://\n\t\t\tvar pseudoUrlPattern = /(^|[^\\/])(www\\.[\\S]+(\\b|$))/gim;\n\t\t\tfunction replaceURLWithHTMLLinks(text) {\n\t\t\t    var exp = /(\\b(https?|ftp|file):\\/\\/([-A-Z0-9+&@#%?=~_|!:,.;]*)([-A-Z0-9+&@#%?\\/=~_|!:,.;]*)[-A-Z0-9+&@#\\/%=~_|])/ig;\n\t\t\t    return text.replace(exp, \"<a href='$1' target='_blank'>$3</a>\");\n\t\t\t}\n\t\t\t// Email addresses\n\t\t\tvar emailAddressPattern = /([a-z0-9!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)/gim;\n\t\t\t\n\t\t\t//var twitterHandlePattern = /(@([\\w]+))/g;\n\t\t\tvar twitterHandlePattern = /\\B@([\\w-]+)/gm;\n\t\t\tvar twitterSearchPattern = /(#([\\w]+))/g;\n\n\t\t\treturn text\n\t\t\t\t//.replace(urlPattern, \"<a target='_blank' href='$&' onclick='void(0)'>$&</a>\")\n\t\t\t\t.replace(url_pattern, url_replace)\n\t\t\t\t.replace(pseudoUrlPattern, \"$1<a target='_blank' class='hyphenate' onclick='void(0)' href='http://$2'>$2</a>\")\n\t\t\t\t.replace(emailAddressPattern, \"<a target='_blank' onclick='void(0)' href='mailto:$1'>$1</a>\")\n\t\t\t\t.replace(twitterHandlePattern, \"<a href='http://twitter.com/$1' target='_blank' onclick='void(0)'>@$1</a>\");\n\t\t\t\t\n\t\t\t\t// TURN THIS BACK ON TO AUTOMAGICALLY LINK HASHTAGS TO TWITTER SEARCH\n\t\t\t\t//.replace(twitterSearchPattern, \"<a href='http://twitter.com/search?q=%23$2' target='_blank' 'void(0)'>$1</a>\");\n\t\t},\n\t\t\n\t\tlinkify_wikipedia: function(text) {\n\t\t\t\n\t\t\tvar urlPattern = /<i[^>]*>(.*?)<\\/i>/gim;\n\t\t\treturn text\n\t\t\t\t.replace(urlPattern, \"<a target='_blank' href='http://en.wikipedia.org/wiki/$&' onclick='void(0)'>$&</a>\")\n\t\t\t\t.replace(/<i\\b[^>]*>/gim, \"\")\n\t\t\t\t.replace(/<\\/i>/gim, \"\")\n\t\t\t\t.replace(/<b\\b[^>]*>/gim, \"\")\n\t\t\t\t.replace(/<\\/b>/gim, \"\");\n\t\t},\n\t\t\n\t\t/*\t* Turns plain text links into real links\n\t\t================================================== */\n\t\t// VMM.Util.unlinkify();\n\t\tunlinkify: function(text) {\n\t\t\tif(!text) return text;\n\t\t\ttext = text.replace(/<a\\b[^>]*>/i,\"\");\n\t\t\ttext = text.replace(/<\\/a>/i, \"\");\n\t\t\treturn text;\n\t\t},\n\t\t\n\t\tuntagify: function(text) {\n\t\t\tif (!text) {\n\t\t\t\treturn text;\n\t\t\t}\n\t\t\ttext = text.replace(/<\\/?\\s*\\w.*?>/g,\"\");\n\t\t\treturn text;\n\t\t},\n\t\t\n\t\t/*\t* TK\n\t\t================================================== */\n\t\tnl2br: function(text) {\n\t\t\treturn text.replace(/(\\r\\n|[\\r\\n]|\\\\n|\\\\r)/g,\"<br/>\");\n\t\t},\n\t\t\n\t\t/*\t* Generate a Unique ID\n\t\t================================================== */\n\t\t// VMM.Util.unique_ID(size);\n\t\tunique_ID: function(size) {\n\t\t\t\n\t\t\tvar getRandomNumber = function(range) {\n\t\t\t\treturn Math.floor(Math.random() * range);\n\t\t\t};\n\n\t\t\tvar getRandomChar = function() {\n\t\t\t\tvar chars = \"abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ\";\n\t\t\t\treturn chars.substr( getRandomNumber(62), 1 );\n\t\t\t};\n\n\t\t\tvar randomID = function(size) {\n\t\t\t\tvar str = \"\";\n\t\t\t\tfor(var i = 0; i < size; i++) {\n\t\t\t\t\tstr += getRandomChar();\n\t\t\t\t}\n\t\t\t\treturn str;\n\t\t\t};\n\t\t\t\n\t\t\treturn randomID(size);\n\t\t},\n\t\t/*\t* Tells you if a number is even or not\n\t\t================================================== */\n\t\t// VMM.Util.isEven(n)\n\t\tisEven: function(n){\n\t\t\treturn (n%2 === 0) ? true : false;\n\t\t},\n\t\t/*\t* Get URL Variables\n\t\t================================================== */\n\t\t//\tvar somestring = VMM.Util.getUrlVars(str_url)[\"varname\"];\n\t\tgetUrlVars: function(string) {\n\t\t\t\n\t\t\tvar str = string.toString();\n\t\t\t\n\t\t\tif (str.match('&#038;')) { \n\t\t\t\tstr = str.replace(\"&#038;\", \"&\");\n\t\t\t} else if (str.match('&#38;')) {\n\t\t\t\tstr = str.replace(\"&#38;\", \"&\");\n\t\t\t} else if (str.match('&amp;')) {\n\t\t\t\tstr = str.replace(\"&amp;\", \"&\");\n\t\t\t}\n\t\t\t\n\t\t\tvar vars = [], hash;\n\t\t\tvar hashes = str.slice(str.indexOf('?') + 1).split('&');\n\t\t\tfor(var i = 0; i < hashes.length; i++) {\n\t\t\t\thash = hashes[i].split('=');\n\t\t\t\tvars.push(hash[0]);\n\t\t\t\tvars[hash[0]] = hash[1];\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\treturn vars;\n\t\t},\n\n\t\t/*\t* Cleans up strings to become real HTML\n\t\t================================================== */\n\t\ttoHTML: function(text) {\n\t\t\t\n\t\t\ttext = this.nl2br(text);\n\t\t\ttext = this.linkify(text);\n\t\t\t\n\t\t\treturn text.replace(/\\s\\s/g,\"&nbsp;&nbsp;\");\n\t\t},\n\t\t\n\t\t/*\t* Returns text strings as CamelCase\n\t\t================================================== */\n\t\ttoCamelCase: function(s,forceLowerCase) {\n\t\t\t\n\t\t\tif(forceLowerCase !== false) forceLowerCase = true;\n\t\t\t\n\t\t\tvar sps = ((forceLowerCase) ? s.toLowerCase() : s).split(\" \");\n\t\t\t\n\t\t\tfor(var i=0; i<sps.length; i++) {\n\t\t\t\t\n\t\t\t\tsps[i] = sps[i].substr(0,1).toUpperCase() + sps[i].substr(1);\n\t\t\t}\n\t\t\t\n\t\t\treturn sps.join(\" \");\n\t\t},\n\t\t\n\t\t/*\t* Replaces dumb quote marks with smart ones\n\t\t================================================== */\n\t\tproperQuotes: function(str) {\n\t\t\treturn str.replace(/\\\"([^\\\"]*)\\\"/gi,\"&#8220;$1&#8221;\");\n\t\t},\n\t\t/*\t* Add Commas to numbers\n\t\t================================================== */\n\t\tniceNumber: function(nStr){\n\t\t\tnStr += '';\n\t\t\tx = nStr.split('.');\n\t\t\tx1 = x[0];\n\t\t\tx2 = x.length > 1 ? '.' + x[1] : '';\n\t\t\tvar rgx = /(\\d+)(\\d{3})/;\n\t\t\twhile (rgx.test(x1)) {\n\t\t\t\tx1 = x1.replace(rgx, '$1' + ',' + '$2');\n\t\t\t}\n\t\t\treturn x1 + x2;\n\t\t},\n\t\t/*\t* Transform text to Title Case\n\t\t================================================== */\n\t\ttoTitleCase: function(t){\n\t\t\tif ( VMM.Browser.browser == \"Explorer\" && parseInt(VMM.Browser.version, 10) >= 7) {\n\t\t\t\treturn t.replace(\"_\", \"%20\");\n\t\t\t} else {\n\t\t\t\tvar __TitleCase = {\n\t\t\t\t\t__smallWords: ['a', 'an', 'and', 'as', 'at', 'but','by', 'en', 'for', 'if', 'in', 'of', 'on', 'or','the', 'to', 'v[.]?', 'via', 'vs[.]?'],\n\n\t\t\t\t\tinit: function() {\n\t\t\t\t\t\tthis.__smallRE = this.__smallWords.join('|');\n\t\t\t\t\t\tthis.__lowerCaseWordsRE = new RegExp('\\\\b(' + this.__smallRE + ')\\\\b', 'gi');\n\t\t\t\t\t\tthis.__firstWordRE = new RegExp('^([^a-zA-Z0-9 \\\\r\\\\n\\\\t]*)(' + this.__smallRE + ')\\\\b', 'gi');\n\t\t\t\t\t\tthis.__lastWordRE = new RegExp('\\\\b(' + this.__smallRE + ')([^a-zA-Z0-9 \\\\r\\\\n\\\\t]*)$', 'gi');\n\t\t\t\t\t},\n\n\t\t\t\t\ttoTitleCase: function(string) {\n\t\t\t\t\t\tvar line = '';\n\n\t\t\t\t\t\tvar split = string.split(/([:.;?!][ ]|(?:[ ]|^)[\"“])/);\n\n\t\t\t\t\t\tfor (var i = 0; i < split.length; ++i) {\n\t\t\t\t\t\t\tvar s = split[i];\n\n\t\t\t\t\t\t\ts = s.replace(/\\b([a-zA-Z][a-z.'’]*)\\b/g,this.__titleCaseDottedWordReplacer);\n\n\t\t\t \t\t\t\t// lowercase the list of small words\n\t\t\t\t\t\t\ts = s.replace(this.__lowerCaseWordsRE, this.__lowerReplacer);\n\n\t\t\t\t\t\t\t// if the first word in the title is a small word then capitalize it\n\t\t\t\t\t\t\ts = s.replace(this.__firstWordRE, this.__firstToUpperCase);\n\n\t\t\t\t\t\t\t// if the last word in the title is a small word, then capitalize it\n\t\t\t\t\t\t\ts = s.replace(this.__lastWordRE, this.__firstToUpperCase);\n\n\t\t\t\t\t\t\tline += s;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// special cases\n\t\t\t\t\t\tline = line.replace(/ V(s?)\\. /g, ' v$1. ');\n\t\t\t\t\t\tline = line.replace(/(['’])S\\b/g, '$1s');\n\t\t\t\t\t\tline = line.replace(/\\b(AT&T|Q&A)\\b/ig, this.__upperReplacer);\n\n\t\t\t\t\t\treturn line;\n\t\t\t\t\t},\n\n\t\t\t\t\t__titleCaseDottedWordReplacer: function (w) {\n\t\t\t\t\t\treturn (w.match(/[a-zA-Z][.][a-zA-Z]/)) ? w : __TitleCase.__firstToUpperCase(w);\n\t\t\t\t\t},\n\n\t\t\t\t\t__lowerReplacer: function (w) { return w.toLowerCase() },\n\n\t\t\t\t\t__upperReplacer: function (w) { return w.toUpperCase() },\n\n\t\t\t\t\t__firstToUpperCase: function (w) {\n\t\t\t\t\t\tvar split = w.split(/(^[^a-zA-Z0-9]*[a-zA-Z0-9])(.*)$/);\n\t\t\t\t\t\tif (split[1]) {\n\t\t\t\t\t\t\tsplit[1] = split[1].toUpperCase();\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\treturn split.join('');\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t__TitleCase.init();\n\t\t\t\n\t\t\t\tt = t.replace(/_/g,\" \");\n\t\t\t\tt = __TitleCase.toTitleCase(t);\n\t\t\t\n\t\t\t\treturn t;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t}).init();\n}\n"
  },
  {
    "path": "source/js/Core/Core/VMM.js",
    "content": "/**\n\t* VéritéCo JS Core\n\t* Designed and built by Zach Wise at VéritéCo zach@verite.co\n\n\t* This Source Code Form is subject to the terms of the Mozilla Public\n\t* License, v. 2.0. If a copy of the MPL was not distributed with this\n\t* file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n*/  \n\n\n/*\tSimple JavaScript Inheritance\n\tBy John Resig http://ejohn.org/\n\tMIT Licensed.\n================================================== */\n(function() {\n\tvar initializing = false,\n\tfnTest = /xyz/.test(function() {\n\t\txyz;\n\t\t}) ? /\\b_super\\b/: /.*/;\n\t\t// The base Class implementation (does nothing)\n\tthis.Class = function() {};\n\n    // Create a new Class that inherits from this class\n\tClass.extend = function(prop) {\n\t\tvar _super = this.prototype;\n\n        // Instantiate a base class (but only create the instance,\n        // don't run the init constructor)\n\t\tinitializing = true;\n\t\tvar prototype = new this();\n\t\tinitializing = false;\n\n        // Copy the properties over onto the new prototype\n\t\tfor (var name in prop) {\n            // Check if we're overwriting an existing function\n\t\t\tprototype[name] = typeof prop[name] == \"function\" &&\n\t\t\ttypeof _super[name] == \"function\" && fnTest.test(prop[name]) ?\n\t\t\t(function(name, fn) {\n\t\t\t\treturn function() {\n\t\t\t\t\tvar tmp = this._super;\n\n\t\t\t\t\t// Add a new ._super() method that is the same method\n\t\t\t\t\t// but on the super-class\n\t\t\t\t\tthis._super = _super[name];\n\n\t\t\t\t\t// The method only need to be bound temporarily, so we\n\t\t\t\t\t// remove it when we're done executing\n\t\t\t\t\tvar ret = fn.apply(this, arguments);\n\t\t\t\t\tthis._super = tmp;\n\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\t\t\t})(name, prop[name]) :\n\t\t\tprop[name];\n\t\t}\n\n\t\t// The dummy class constructor\n\t\tfunction Class() {\n\t\t\t// All construction is actually done in the init method\n\t\t\tif (!initializing && this.init)\n\t\t\tthis.init.apply(this, arguments);\n\t\t}\n\n\t\t// Populate our constructed prototype object\n\t\tClass.prototype = prototype;\n\n\t\t// Enforce the constructor to be what we expect\n\t\tClass.prototype.constructor = Class;\n\n\t\t// And make this class extendable\n\t\tClass.extend = arguments.callee;\n\n\t\treturn Class;\n    };\n})();\n\n/*\tAccess to the Global Object\n\taccess the global object without hard-coding the identifier window\n================================================== */\nvar global = (function () {\n   return this || (1,eval)('this');\n}());\n\n/* VMM\n================================================== */\nif (typeof VMM == 'undefined') {\n\t\n\t/* Main Scope Container\n\t================================================== */\n\t//var VMM = {};\n\tvar VMM = Class.extend({});\n\t\n\t/* Debug\n\t================================================== */\n\tVMM.debug = true;\n\t\n\t/* Master Config\n\t================================================== */\n\t\n\tVMM.master_config = ({\n\t\t\n\t\tinit: function() {\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\tsizes: {\n\t\t\tapi: {\n\t\t\t\twidth:\t\t\t0,\n\t\t\t\theight:\t\t\t0\n\t\t\t}\n\t\t},\n\t\t\n\t\tvp:\t\t\t\t\"Pellentesque nibh felis, eleifend id, commodo in, interdum vitae, leo\",\n\t\t\n\t\tapi_keys_master: {\n\t\t\tflickr:\t\t\"RAIvxHY4hE/Elm5cieh4X5ptMyDpj7MYIxziGxi0WGCcy1s+yr7rKQ==\",\n\t\t\t//google:\t\t\"jwNGnYw4hE9lmAez4ll0QD+jo6SKBJFknkopLS4FrSAuGfIwyj57AusuR0s8dAo=\",\n\t\t\tgoogle:\t\t\"uQKadH1VMlCsp560gN2aOiMz4evWkl1s34yryl3F/9FJOsn+/948CbBUvKLN46U=\",\n\t\t\ttwitter:\t\"\"\n\t\t},\n\t\t\n\t\ttimers: {\n\t\t\tapi:\t\t\t7000\n\t\t},\n\t\t\n\t\tapi:\t{\n\t\t\tpushques:\t\t[]\n\t\t\t\n\t\t},\n\t\t\n\t\ttwitter: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t},\n\t\t\n\t\tflickr: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t},\n\t\t\n\t\tyoutube: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t},\n\t\t\n\t\tvimeo: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t},\n\t\t\n\t\tvine: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t},\n\t\t\n\t\twebthumb: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t},\n\t\t\n\t\tgooglemaps: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tmap_active:\t\tfalse,\n\t\t\tplaces_active:\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t},\n\t\t\n\t\tgoogledocs: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t},\n\t\t\n\t\tgoogleplus: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t},\n\t\t\n\t\twikipedia: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[],\n\t\t\ttries:\t\t\t0\n\t\t},\n\t\t\n\t\tsoundcloud: {\n\t\t\tactive:\t\t\tfalse,\n\t\t\tarray:\t\t\t[],\n\t\t\tapi_loaded:\t\tfalse,\n\t\t\tque:\t\t\t[]\n\t\t}\n\t\t\n\t}).init();\n\t\n\t//VMM.createElement(tag, value, cName, attrs, styles);\n\tVMM.createElement = function(tag, value, cName, attrs, styles) {\n\t\t\n\t\tvar ce = \"\";\n\t\t\n\t\tif (tag != null && tag != \"\") {\n\t\t\t\n\t\t\t// TAG\n\t\t\tce += \"<\" + tag;\n\t\t\tif (cName != null && cName != \"\") {\n\t\t\t\tce += \" class='\" + cName + \"'\";\n\t\t\t};\n\t\t\t\n\t\t\tif (attrs != null && attrs != \"\") {\n\t\t\t\tce += \" \" + attrs;\n\t\t\t};\n\t\t\t\n\t\t\tif (styles != null && styles != \"\") {\n\t\t\t\tce += \" style='\" + styles + \"'\";\n\t\t\t};\n\t\t\t\n\t\t\tce += \">\";\n\t\t\t\n\t\t\tif (value != null && value != \"\") {\n\t\t\t\tce += value;\n\t\t\t}\n\t\t\t\n\t\t\t// CLOSE TAG\n\t\t\tce = ce + \"</\" + tag + \">\";\n\t\t}\n\t\t\n\t\treturn ce;\n\t\t\n    };\n\n\tVMM.createMediaElement = function(media, caption, credit) {\n\t\t\n\t\tvar ce = \"\";\n\t\t\n\t\tvar _valid = false;\n\t\t\n\t\tce += \"<div class='media'>\";\n\t\t\n\t\tif (media != null && media != \"\") {\n\t\t\t\n\t\t\tvalid = true;\n\t\t\t\n\t\t\tce += \"<img src='\" + media + \"'>\";\n\t\t\t\n\t\t\t// CREDIT\n\t\t\tif (credit != null && credit != \"\") {\n\t\t\t\tce += VMM.createElement(\"div\", credit, \"credit\");\n\t\t\t}\n\t\t\t\n\t\t\t// CAPTION\n\t\t\tif (caption != null && caption != \"\") {\n\t\t\t\tce += VMM.createElement(\"div\", caption, \"caption\");\n\t\t\t}\n\n\t\t}\n\t\t\n\t\tce += \"</div>\";\n\t\t\n\t\treturn ce;\n\t\t\n    };\n\n\t// Hide URL Bar for iOS and Android by Scott Jehl\n\t// https://gist.github.com/1183357\n\n\tVMM.hideUrlBar = function () {\n\t\tvar win = window,\n\t\t\tdoc = win.document;\n\n\t\t// If there's a hash, or addEventListener is undefined, stop here\n\t\tif( !location.hash || !win.addEventListener ){\n\n\t\t\t//scroll to 1\n\t\t\twindow.scrollTo( 0, 1 );\n\t\t\tvar scrollTop = 1,\n\n\t\t\t//reset to 0 on bodyready, if needed\n\t\t\tbodycheck = setInterval(function(){\n\t\t\t\tif( doc.body ){\n\t\t\t\t\tclearInterval( bodycheck );\n\t\t\t\t\tscrollTop = \"scrollTop\" in doc.body ? doc.body.scrollTop : 1;\n\t\t\t\t\twin.scrollTo( 0, scrollTop === 1 ? 0 : 1 );\n\t\t\t\t}\t\n\t\t\t}, 15 );\n\n\t\t\twin.addEventListener( \"load\", function(){\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t//reset to hide addr bar at onload\n\t\t\t\t\twin.scrollTo( 0, scrollTop === 1 ? 0 : 1 );\n\t\t\t\t}, 0);\n\t\t\t}, false );\n\t\t}\n\t};\n\t\n\n}\n\n/* Trace (console.log)\n================================================== */\nfunction trace( msg ) {\n\tif (VMM.debug) {\n\t\tif (window.console) {\n\t\t\tconsole.log(msg);\n\t\t} else if ( typeof( jsTrace ) != 'undefined' ) {\n\t\t\tjsTrace.send( msg );\n\t\t} else {\n\t\t\t//alert(msg);\n\t\t}\n\t}\n}\n\n/* Extending Date to include Week\n================================================== */\nDate.prototype.getWeek = function() {\n\tvar onejan = new Date(this.getFullYear(),0,1);\n\treturn Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);\n}\n\n/* Extending Date to include Day of Year\n================================================== */\nDate.prototype.getDayOfYear = function() {\n\tvar onejan = new Date(this.getFullYear(),0,1);\n\treturn Math.ceil((this - onejan) / 86400000);\n}\n\n/* A MORE SPECIFIC TYPEOF();\n//\thttp://rolandog.com/archives/2007/01/18/typeof-a-more-specific-typeof/\n================================================== */\n// type.of()\nvar is={\n\tNull:function(a){return a===null;},\n\tUndefined:function(a){return a===undefined;},\n\tnt:function(a){return(a===null||a===undefined);},\n\tFunction:function(a){return(typeof(a)===\"function\")?a.constructor.toString().match(/Function/)!==null:false;},\n\tString:function(a){return(typeof(a)===\"string\")?true:(typeof(a)===\"object\")?a.constructor.toString().match(/string/i)!==null:false;},\n\tArray:function(a){return(typeof(a)===\"object\")?a.constructor.toString().match(/array/i)!==null||a.length!==undefined:false;},\n\tBoolean:function(a){return(typeof(a)===\"boolean\")?true:(typeof(a)===\"object\")?a.constructor.toString().match(/boolean/i)!==null:false;},\n\tDate:function(a){return(typeof(a)===\"date\")?true:(typeof(a)===\"object\")?a.constructor.toString().match(/date/i)!==null:false;},\n\tHTML:function(a){return(typeof(a)===\"object\")?a.constructor.toString().match(/html/i)!==null:false;},\n\tNumber:function(a){return(typeof(a)===\"number\")?true:(typeof(a)===\"object\")?a.constructor.toString().match(/Number/)!==null:false;},\n\tObject:function(a){return(typeof(a)===\"object\")?a.constructor.toString().match(/object/i)!==null:false;},\n\tRegExp:function(a){return(typeof(a)===\"function\")?a.constructor.toString().match(/regexp/i)!==null:false;}\n};\nvar type={\n\tof:function(a){\n\t\tfor(var i in is){\n\t\t\tif(is[i](a)){\n\t\t\t\treturn i.toLowerCase();\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\n"
  },
  {
    "path": "source/js/Core/Embed/Embed.CDN.Generator.js",
    "content": "/* Support Timeline Embed Generator web form (becomes storyjs-embed-generator.js) */  \nif(typeof generator_embed_path == 'undefined' || typeof generator_embed_path == 'undefined') {\n\t// REPLACE WITH YOUR BASEPATH IF YOU WANT OTHERWISE IT WILL TRY AND FIGURE IT OUT\n\t// TODO Issue #618 better splitting\n\tvar generator_embed_path = getScriptPath(\"storyjs-embed-generator.js\").split(\"js/\")[0];\n\tif (generator_embed_path.match(\"http\")) {\n\t\tgenerator_embed_path = generator_embed_path;\n\t} else if (generator_embed_path == \"/\") {\n\t\tgenerator_embed_path = \"index.html\";\n\t} else {\n\t\tgenerator_embed_path = generator_embed_path + \"index.html\";\n\t} \n}\nfunction getScriptPath(scriptname) {\n\tvar scriptTags = document.getElementsByTagName('script'),\n\t\tscript_path = \"\";\n\tfor(var i = 0; i < scriptTags.length; i++) {\n\t\tif (scriptTags[i].src.match(scriptname)) {\n\t\t\tscript_path = scriptTags[i].src;\n\t\t}\n\t}\n\treturn script_path.split('?')[0].split('/').slice(0, -1).join('/') + '/';\n}\n\n\n/* EXTRA\n================================================== */\nfunction getUrlVars(string) {\n\tvar vars = [],\n\t\thash,\n\t\thashes,\n\t\tstr = string.toString();\n\t\t\t\n\tif (str.match('&#038;')) { \n\t\tstr = str.replace(\"&#038;\", \"&\");\n\t} else if (str.match('&#38;')) {\n\t\tstr = str.replace(\"&#38;\", \"&\");\n\t} else if (str.match('&amp;')) {\n\t\tstr = str.replace(\"&amp;\", \"&\");\n\t}\n\tif (str.match('#')) { \n\t\tstr = str.split('#')[0];\n\t}\n\thashes = str.slice(str.indexOf('?') + 1).split('&');\n\t\t\n\tfor(var i = 0; i < hashes.length; i++) {\n\t\thash = hashes[i].split('=');\n\t\tvars.push(hash[0]);\n\t\tvars[hash[0]] = hash[1];\n\t}\n\t\n\treturn vars;\n};\n\nfunction getLinkAndIframe() {\n\t\n\tvar theobj\t\t\t\t= {},\n\t\te_source\t\t\t= document.getElementById('embed-source-url'),\n\t\te_width\t\t\t\t= document.getElementById('embed-width'),\n\t\te_height\t\t\t= document.getElementById('embed-height'),\n\t\te_maptype\t\t\t= document.getElementById('embed-maptype'),\n\t\te_language\t\t\t= document.getElementById('embed-language'),\n\t\te_embed\t\t\t\t= document.getElementById('embed_code'),\n\t\te_font\t\t\t\t= document.getElementById('embed-font'),\n\t\te_wordpress\t\t\t= document.getElementById('embed-wordpressplugin'),\n\t\te_startatend\t\t= document.getElementById('embed-startatend'),\n\t\te_hashbookmark\t\t= document.getElementById('embed-hashbookmark'),\n\t\te_startzoomadjust\t= document.getElementById('embed-startzoomadjust'),\n\t\te_startatslide\t\t= document.getElementById('embed-startatslide'),\n\t\te_debug\t\t\t\t= document.getElementById('embed-debug'),\n\t\te_googlemapkey\t\t= document.getElementById('embed-googlemapkey'),\n\t\tstart_at_end\t\t= false,\n\t\thash_bookmark\t\t= false,\n\t\tis_debug\t\t\t= false,\n\t\tiframe,\n\t\tlink,\n\t\tvars,\n\t\twp,\n\t\tsource_key;\n\t\n\t/* SOURCE KEY\n\t================================================== */\n\tif (e_source.value.match(\"docs.google.com\")) {\n\t\tsource_key = VMM.Timeline.DataObj.model.googlespreadsheet.extractSpreadsheetKey(e_source.value);\n\t} else {\n\t\tif (e_source.value == \"\") {\n\t\t\tsource_key\t= \"0Agl_Dv6iEbDadHdKcHlHcTB5bzhvbF9iTWwyMmJHdkE\"\n\t\t} else {\n\t\t\tsource_key\t= e_source.value;\n\t\t}\n\t}\n\t\n\t/* START AT END\n\t================================================== */\n\tif (e_startatend.checked) {\n\t\tstart_at_end = true;\n\t}\n\t\n\t/* HASH BOOKMARK\n\t================================================== */\n\tif (e_hashbookmark.checked) {\n\t\thash_bookmark = true;\n\t}\n\t\n\t/* DEBUG\n\t================================================== */\n\tif (e_debug.checked) {\n\t\tis_debug = true;\n\t}\n\t\n\t/* WORDPRESS\n\t================================================== */\n\twp\t\t= \"[timeline \";\n\tif (e_width.value > 0) {\n\t\twp\t+= \"width='\" + e_width.value + \"' \"; \n\t}\n\tif (e_height.value > 0) {\n\t\twp\t+= \"height='\" + e_width.value + \"' \"; \n\t}\n\t\t\n\twp\t\t+= \"font='\" + e_font.value + \"' \"; \n\twp\t\t+= \"maptype='\" + e_maptype.value + \"' \";\n\twp\t\t+= \"lang='\" + e_language.value + \"' \";\n\twp\t\t+= \"src='\" + e_source.value + \"' \";\n\tif (start_at_end) {\n\t\twp\t+= \"start_at_end='\" + start_at_end + \"' \";\n\t}\n\tif (hash_bookmark) {\n\t\twp\t+= \"hash_bookmark='\" + hash_bookmark + \"' \";\n\t}\n\tif (is_debug) {\n\t\twp\t+= \"debug='\" + is_debug + \"' \";\n\t}\n\t\n\tif (e_googlemapkey.value != \"\") {\n\t\twp\t+= \"gmap_key='\" + e_googlemapkey.value + \"' \";\n\t}\n\t\n\tif (parseInt(e_startatslide.value, 10) > 0) {\n\t\twp\t+= \"start_at_slide='\" + parseInt(e_startatslide.value, 10) + \"' \";\n\t}\n\tif (parseInt(e_startzoomadjust.value, 10) > 0) {\n\t\twp\t+= \"start_zoom_adjust='\" + parseInt(e_startzoomadjust.value, 10) + \"' \";\n\t}\n\t\n\twp\t\t+= \"]\";\n\t\n\ttheobj.wordpress = wp;\n\t\n\t/* IFRAME AND LINK\n\t================================================== */\n\tvars\t\t=  generator_embed_path + \"?source=\" + source_key;\n\tvars\t\t+= \"&font=\" + e_font.value; \n\tvars\t\t+= \"&maptype=\" + e_maptype.value;\n\tvars\t\t+= \"&lang=\" + e_language.value;\n\tif (start_at_end) {\n\t\tvars\t+= \"&start_at_end=\" + start_at_end;\n\t}\n\tif (hash_bookmark) {\n\t\tvars\t+= \"&hash_bookmark=\" + hash_bookmark;\n\t}\n\tif (is_debug) {\n\t\tvars\t+= \"&debug=\" + is_debug;\n\t}\n\t\n\tif (parseInt(e_startatslide.value, 10) > 0) {\n\t\tvars\t+= \"&start_at_slide=\" + parseInt(e_startatslide.value, 10); \n\t}\n\t\n\tif (parseInt(e_startzoomadjust.value, 10) > 0) {\n\t\tvars\t+= \"&start_zoom_adjust=\" + parseInt(e_startzoomadjust.value, 10);\n\t}\n\t\n\tif (e_googlemapkey.value != \"\") {\n\t\tvars\t+= \"&gmap_key=\" + e_googlemapkey.value;\n\t}\n\t\n\tif (e_width.value > 0) {\n\t\tvars\t+= \"&width=\" + e_width.value; \n\t}\n\tif (e_height.value > 0) {\n\t\tvars\t+= \"&height=\" + e_height.value; \n\t}\n\t\n\tiframe\t\t= \"<iframe src='\" + vars + \"'\";\n\t\n\tif (e_width.value > 0 || e_width.value.match(\"%\")) {\n\t\tiframe\t+= \" width='\" + e_width.value + \"'\";\n\t}\n\tif (e_height.value > 0 || e_height.value.match(\"%\")) {\n\t\tiframe\t+= \" height='\" + e_height.value + \"'\";\n\t}\n\tiframe\t\t+= \" frameborder='0'></iframe>\";\n\t\n\ttheobj.iframe\t= iframe;\n\ttheobj.link\t\t= vars;\n\t\n\tif (e_wordpress.checked) {\n\t\ttheobj.copybox = wp;\n\t} else {\n\t\ttheobj.copybox = iframe;\n\t}\n\t\n\treturn theobj;\n};\n\n/* EMBED GENERATOR\n================================================== */\nfunction updateEmbedCode(element, options) {\n\t\n\tvar e_embed\t\t= document.getElementById('embed_code'),\n\t\tel\t\t\t= getLinkAndIframe();\n\t\n\te_embed.value\t= el.copybox;\n\tjQuery(\"#preview-embed-link\").attr('href', el.link);\n\tjQuery(\"#preview-embed-iframe\").html(el.iframe);\n\tjQuery(\"#preview-embed\").css(\"display\",\"block\");\n\t\n}\n\n\n\n"
  },
  {
    "path": "source/js/Core/Embed/Embed.CDN.js",
    "content": "/* Embed.CDN\n\tExtend the basic 'embed' functionality with Google Analytics tracking and url parsing to support URLs created with the Timeline generator form.\n*/  \n\n/* \tCodeKit Import\n\thttp://incident57.com/codekit/\n================================================== */\n// @codekit-append \"Embed.js\";\n\n/* REPLACE THIS WITH YOUR GOOGLE ANALYTICS ACCOUNT\n================================================== */\nvar embed_analytics = \"UA-537357-20\";\n\n/* REPLACE THIS WITH YOUR BASE PATH FOR TIMELINE\n================================================== */\n//var embed_path = \"http://embed.verite.co/timeline/\";\n\n/* LOAD TIMER\n================================================== */\nvar load_time_start = new Date().getTime(), the_load_time = 0;\n\n/* GOOGLE ANALYTICS\n================================================== */\nvar _gaq = _gaq || [];\n\n\n(function() {\n\tvar ga = document.createElement('script'), s = document.getElementsByTagName('script')[0];\n\tga.type = 'text/javascript';\n\tga.async = true;\n\n\tif ('https:' != document.location.protocol) { // analytics in https embeds problematic for IE 9/10/some Android\n\t\tga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n\t\ts.parentNode.insertBefore(ga, s);\n\t\t\n\t\t_gaq.push(['_setAccount', embed_analytics]);\n\t\t_gaq.push(['_trackPageview']);\n\n\t}\n\t\n})();\n\n/* TIMELINE CDN SPECIFIC\n================================================== */ \nvar getUrlVars = function() {\n\tvar varobj = {}, url_vars = [], uv ;\n\t\t\n\t//url_vars = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');\n\turl_vars = window.location.href.slice(window.location.href.indexOf('?') + 1);\n\t\n\tif (url_vars.match('#')) {\n\t\turl_vars = url_vars.split('#')[0];\n\t}\n\turl_vars = url_vars.split('&');\n\t\t\n\tfor(var i = 0; i < url_vars.length; i++) {\n\t\tuv = url_vars[i].split('=');\n\t\tvarobj[uv[0]] = uv[1];\n\t}\n\t\t\n\treturn varobj;\n};\n\nvar onHeadline = function(e, headline) {\n\tvar the_page_title = \"/\" + headline,\n\t\tthe_page_url\t=\tlocation.href;\n\t\n\tdocument.title = headline;\n\tthe_load_time = Math.floor((new Date().getTime() - load_time_start)/100)/10;\n\t_gaq.push(['_trackEvent', 'Timeline', headline, the_page_url, the_load_time]);\n\t\n};\n\nvar url_config = getUrlVars();\n\n\n"
  },
  {
    "path": "source/js/Core/Embed/Embed.LoadLib.js",
    "content": "/*\n\tLoadLib\n\tDesigned and built by Zach Wise http://zachwise.com/\n\tExtends LazyLoad\n*/\n\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n================================================== */\n// @codekit-prepend \"../Library/LazyLoad.js\";\n\nLoadLib = (function (doc) {\n\tvar loaded\t= [];\n\t\n\tfunction isLoaded(url) {\n\t\t\n\t\tvar i\t\t\t= 0,\n\t\t\thas_loaded\t= false;\n\t\t\t\n\t\tfor (i = 0; i < loaded.length; i++) {\n\t\t\tif (loaded[i] == url) {\n\t\t\t\thas_loaded = true;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (has_loaded) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tloaded.push(url);\n\t\t\treturn false;\n\t\t}\n\t\t\n\t}\n\t\n\treturn {\n\t\t\n\t\tcss: function (urls, callback, obj, context) {\n\t\t\tif (!isLoaded(urls)) {\n\t\t\t\tLazyLoad.css(urls, callback, obj, context);\n\t\t\t}\n\t\t},\n\n\t\tjs: function (urls, callback, obj, context) {\n\t\t\tif (!isLoaded(urls)) {\n\t\t\t\tLazyLoad.js(urls, callback, obj, context);\n\t\t\t}\n\t\t}\n    };\n\t\n})(this.document);\n"
  },
  {
    "path": "source/js/Core/Embed/Embed.js",
    "content": "//StoryJS Embed Loader\n// Provide a bootstrap method for instantiating a timeline. On page load, check the definition of these window scoped variables in this order: [url_config, timeline_config, storyjs_config, config]. As soon as one of these is found to be defined with type 'object,' it will be used to automatically instantiate a timeline.\n\n/* \tCodeKit Import\n\thttp://incident57.com/codekit/ \n================================================== */\n// @codekit-prepend \"Embed.LoadLib.js\";\n\nvar WebFontConfig;\n\nif(typeof embed_path == 'undefined') {\n\t// REPLACE WITH YOUR BASEPATH IF YOU WANT OTHERWISE IT WILL TRY AND FIGURE IT OUT\n\tvar _tmp_script_path = getEmbedScriptPath(\"storyjs-embed.js\");\n\tvar embed_path = _tmp_script_path.substr(0,_tmp_script_path.lastIndexOf('js/'))\n}\n\nfunction getEmbedScriptPath(scriptname) {\n\tvar scriptTags = document.getElementsByTagName('script'),\n\t\tscript_path = \"\",\n\t\tscript_path_end = \"\";\n\tfor(var i = 0; i < scriptTags.length; i++) {\n\t\tif (scriptTags[i].src.match(scriptname)) {\n\t\t\tscript_path = scriptTags[i].src;\n\t\t}\n\t}\n\tif (script_path != \"\") {\n\t\tscript_path_end = \"/\"\n\t}\n\treturn script_path.split('?')[0].split('/').slice(0, -1).join('/') + script_path_end;\n}\n\n/* CHECK TO SEE IF A CONFIG IS ALREADY DEFINED (FOR EASY EMBED)\n================================================== */\n(function() {\n\tif (typeof url_config == 'object') {\n\t\tcreateStoryJS(url_config);\n\t} else if (typeof timeline_config == 'object') {\n\t\tcreateStoryJS(timeline_config);\n\t} else if (typeof storyjs_config == 'object') {\n\t\tcreateStoryJS(storyjs_config);\n\t} else if (typeof config == 'object') {\n\t\tcreateStoryJS(config);\n\t} else {\n\t\t// No existing config. Call createStoryJS(your_config) manually with a config\n\t}\n})();\n\n/* CREATE StoryJS Embed\n================================================== */\nfunction createStoryJS(c, src) {\n\t/* VARS\n\t================================================== */\n\tvar storyjs_embedjs, t, te, x,\n\t\tisCDN\t\t\t\t\t= false,\n\t\tjs_version\t\t\t\t= \"2.24\",\n\t\tjquery_version_required\t= \"1.7.1\",\n\t\tjquery_version\t\t\t= \"\",\n\t\tready = {\n\t\t\ttimeout:\t\"\",\n\t\t\tchecks:\t\t0,\n\t\t\tfinished:\tfalse,\n\t\t\tjs:\t\t\tfalse,\n\t\t\tcss:\t\tfalse,\n\t\t\tjquery:\t\tfalse,\n\t\t\thas_jquery:\tfalse,\n\t\t\tlanguage:\tfalse,\n\t\t\tfont: {\n\t\t\t\tcss:\tfalse,\n\t\t\t\tjs:\t\tfalse\n\t\t\t}\n\t\t},\n\t\tpath = {\n\t\t\tbase:\t\tembed_path,\n\t\t\tcss:\t\tembed_path + \"css/\",\n\t\t\tjs:\t\t\tembed_path + \"js/\",\n\t\t\tlocale:\t\tembed_path + \"js/locale/\",\n\t\t\tjquery:\t\t\"//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\",\n\t\t\tfont: {\n\t\t\t\tgoogle:\tfalse,\n\t\t\t\tcss:\tembed_path + \"css/themes/font/\",\n\t\t\t\tjs:\t\t\"//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js\"\n\t\t\t}\n\t\t},\n\t\tstoryjs_e_config = {\n\t\t\tversion:\tjs_version,\n\t\t\tdebug:\t\tfalse,\n\t\t\ttype:\t\t'timeline',\n\t\t\tid:\t\t\t'storyjs',\n\t\t\tembed_id:\t'timeline-embed',\n\t\t\tembed:\t\ttrue,\n\t\t\twidth:\t\t'100%',\n\t\t\theight:\t\t'100%',\n\t\t\tsource:\t\t'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadFYzRjJPUGktY0NkWXFUWkVIZDNGRHc&output=html',\n\t\t\tlang:\t\t'en',\n\t\t\tfont:\t\t'default',\n\t\t\tcss:\t\tpath.css + 'timeline.css?'+js_version,\n\t\t\tjs:\t\t\t'',\n\t\t\tapi_keys: {\n\t\t\t\tgoogle:\t\t\t\t\"\",\n\t\t\t\tflickr:\t\t\t\t\"\",\n\t\t\t\ttwitter:\t\t\t\"\"\n\t\t\t},\n\t\t\tgmap_key: \t\"\"\n\t\t},\n\t\tfont_presets = [\n\t\t\t{ name:\t\"Merriweather-NewsCycle\",\t\tgoogle:\t[ 'News+Cycle:400,700:latin', 'Merriweather:400,700,900:latin' ] },\n\t\t\t{ name:\t\"NewsCycle-Merriweather\",\t\tgoogle:\t[ 'News+Cycle:400,700:latin', 'Merriweather:300,400,700:latin' ] },\n\t\t\t{ name:\t\"PoiretOne-Molengo\",\t\t\tgoogle:\t[ 'Poiret+One::latin', 'Molengo::latin' ] },\n\t\t\t{ name:\t\"Arvo-PTSans\",\t\t\t\t\tgoogle:\t[ 'Arvo:400,700,400italic:latin', 'PT+Sans:400,700,400italic:latin' ] },\n\t\t\t{ name:\t\"PTSerif-PTSans\",\t\t\t\tgoogle:\t[ 'PT+Sans:400,700,400italic:latin', 'PT+Serif:400,700,400italic:latin' ] },\n\t\t\t{ name:\t\"PT\",\t\t\t\t\t\t\tgoogle:\t[ 'PT+Sans+Narrow:400,700:latin', 'PT+Sans:400,700,400italic:latin', 'PT+Serif:400,700,400italic:latin' ] },\n\t\t\t{ name:\t\"DroidSerif-DroidSans\",\t\t\tgoogle:\t[ 'Droid+Sans:400,700:latin', 'Droid+Serif:400,700,400italic:latin' ] },\n\t\t\t{ name:\t\"Lekton-Molengo\",\t\t\t\tgoogle:\t[ 'Lekton:400,700,400italic:latin', 'Molengo::latin' ] },\n\t\t\t{ name:\t\"NixieOne-Ledger\",\t\t\t\tgoogle:\t[ 'Nixie+One::latin', 'Ledger::latin' ] },\n\t\t\t{ name:\t\"AbrilFatface-Average\",\t\t\tgoogle:\t[ 'Average::latin', 'Abril+Fatface::latin' ] },\n\t\t\t{ name:\t\"PlayfairDisplay-Muli\",\t\t\tgoogle:\t[ 'Playfair+Display:400,400italic:latin', 'Muli:300,400,300italic,400italic:latin' ] },\n\t\t\t{ name:\t\"Rancho-Gudea\",\t\t\t\t\tgoogle:\t[ 'Rancho::latin', 'Gudea:400,700,400italic:latin' ] },\n\t\t\t{ name:\t\"Bevan-PotanoSans\",\t\t\t\tgoogle:\t[ 'Bevan::latin', 'Pontano+Sans::latin' ] },\n\t\t\t{ name:\t\"BreeSerif-OpenSans\",\t\t\tgoogle:\t[ 'Bree+Serif::latin', 'Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800:latin' ] },\n\t\t\t{ name:\t\"SansitaOne-Kameron\",\t\t\tgoogle:\t[ 'Sansita+One::latin', 'Kameron:400,700:latin' ] },\n\t\t\t{ name:\t\"Lora-Istok\",\t\t\t\t\tgoogle:\t[ 'Lora:400,700,400italic,700italic:latin', 'Istok+Web:400,700,400italic,700italic:latin' ] },\n\t\t\t{ name:\t\"Pacifico-Arimo\",\t\t\t\tgoogle:\t[ 'Pacifico::latin', 'Arimo:400,700,400italic,700italic:latin' ] }\n\t\t];\n\t\t\t\n\t/* BUILD CONFIG\n\t================================================== */\t\n\tif (typeof c == 'object') {\n\t\tfor (x in c) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(c, x)) {\n\t\t\t\tstoryjs_e_config[x] = c[x];\n\t\t\t}\n\t\t}\n\t}\n\t\t\n\tif (typeof src != 'undefined') {\n\t\tstoryjs_e_config.source = src;\n\t}\n\t\t\n\t/* CDN VERSION?\n\t================================================== */\n\tif (typeof url_config == 'object') {\n\t\tisCDN = true;\n\t\t\t\n\t\t/* IS THE SOURCE GOOGLE SPREADSHEET WITH JUST THE KEY?\n\t\t================================================== */\n\t\tif (storyjs_e_config.source.match(\"docs.google.com\") || storyjs_e_config.source.match(\"json\") || storyjs_e_config.source.match(\"storify\") ) {\n\t\t\t\t\n\t\t} else {\n\t\t\tstoryjs_e_config.source = \"https://docs.google.com/spreadsheet/pub?key=\" + storyjs_e_config.source + \"&output=html\";\n\t\t}\n\t\t\t\n\t}\n\t\t\n\t/* DETERMINE TYPE\n\t================================================== */\n\t// Check for old installs still using the old method of language\n\tif (storyjs_e_config.js.match(\"locale\")) {\n\t\t// TODO Issue #618 better splitting\n\t\tstoryjs_e_config.lang = storyjs_e_config.js.split(\"locale/\")[1].replace(\".js\", \"\");\n\t\tstoryjs_e_config.js\t\t= path.js + 'timeline-min.js?' + js_version;\n\t}\n\t\n\tif (storyjs_e_config.js.match(\"/\")) {\n\t\t\n\t} else {\n\t\tstoryjs_e_config.css\t= path.css + storyjs_e_config.type + \".css?\" + js_version;\n\t\t\n\t\t// Use unminified js file if in debug mode\n\t\tstoryjs_e_config.js\t\t= path.js  + storyjs_e_config.type;\n\t\tif (storyjs_e_config.debug) {\n\t\t\tstoryjs_e_config.js\t+= \".js?\"  + js_version;\n\t\t} else {\n\t\t\tstoryjs_e_config.js\t+= \"-min.js?\"  + js_version;\n\t\t}\n\t\t\n\t\tstoryjs_e_config.id\t\t= \"storyjs-\" + storyjs_e_config.type;\n\t}\n\t\n\t/* PREPARE LANGUAGE\n\t================================================== */\n\tif (storyjs_e_config.lang.match(\"/\")) {\n\t\tpath.locale = storyjs_e_config.lang;\n\t} else {\n\t\tpath.locale = path.locale + storyjs_e_config.lang + \".js?\" + js_version;\n\t}\n\t\n\t\t\n\t/* PREPARE\n\t================================================== */\n\tcreateEmbedDiv();\n\t\n\t/* Load CSS\n\t================================================== */\n\tLoadLib.css(storyjs_e_config.css, onloaded_css);\n\t\n\t/* Load FONT\n\t================================================== */\n\tif (storyjs_e_config.font == \"default\") {\n\t\tready.font.js\t\t= true;\n\t\tready.font.css\t\t= true;\n\t} else {\n\t\t// FONT CSS\n\t\tvar fn;\n\t\tif (storyjs_e_config.font.match(\"/\")) {\n\t\t\t// TODO Issue #618 better splitting\n\t\t\tfn\t\t\t\t= storyjs_e_config.font.split(\".css\")[0].split(\"/\");\n\t\t\tpath.font.name\t= fn[fn.length -1];\n\t\t\tpath.font.css\t= storyjs_e_config.font;\n\t\t} else {\n\t\t\tpath.font.name\t= storyjs_e_config.font;\n\t\t\tpath.font.css\t= path.font.css + storyjs_e_config.font + \".css?\" + js_version;\n\t\t}\n\t\tLoadLib.css(path.font.css, onloaded_font_css);\n\t\t\n\t\t// FONT GOOGLE JS\n\t\tfor(var i = 0; i < font_presets.length; i++) {\n\t\t\tif (path.font.name == font_presets[i].name) {\n\t\t\t\tpath.font.google = true;\n\t\t\t\tWebFontConfig = {google: { families: font_presets[i].google }};\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (path.font.google) {\n\t\t\tLoadLib.js(path.font.js, onloaded_font_js);\n\t\t} else {\n\t\t\tready.font.js\t\t= true;\n\t\t}\n\t\t\n\t}\n\t\n\t/* Load jQuery\n\t================================================== */\n\ttry {\n\t    ready.has_jquery = jQuery;\n\t    ready.has_jquery = true;\n\t\tif (ready.has_jquery) {\n\t\t\tvar jquery_version_array = jQuery.fn.jquery.split(\".\");\n\t\t\tvar jquery_version_required_array = jquery_version_required.split(\".\");\n\t\t\tready.jquery = true;\n\t\t\tfor (i = 0; i < 2; i++) {\n\t\t\t\tvar have = jquery_version_array[i], need = parseFloat(jquery_version_required_array[i]);\n\t\t\t\tif (have != need) {\n\t\t\t\t\tready.jquery = have > need;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch(err) {\n\t    ready.jquery = false;\n\t}\n\tif (!ready.jquery) {\n\t\tLoadLib.js(path.jquery, onloaded_jquery);\n\t} else {\n\t\tonloaded_jquery();\n\t}\n\t\n\t/* On Loaded\n\t================================================== */\n\t\n\tfunction onloaded_jquery() {\n\t\tLoadLib.js(storyjs_e_config.js, onloaded_js);\n\t}\n\tfunction onloaded_js() {\n\t\tready.js = true;\n\t\tif (storyjs_e_config.lang != \"en\") {\n\t\t\tLazyLoad.js(path.locale, onloaded_language);\n\t\t} else {\n\t\t\tready.language = true;\n\t\t}\n\t\tonloaded_check();\n\t}\n\tfunction onloaded_language() {\n\t\tready.language = true;\n\t\tonloaded_check();\n\t}\n\tfunction onloaded_css() {\n\t\tready.css = true;\n\t\tonloaded_check();\n\t}\n\tfunction onloaded_font_css() {\n\t\tready.font.css = true;\n\t\tonloaded_check();\n\t}\n\tfunction onloaded_font_js() {\n\t\tready.font.js = true;\n\t\tonloaded_check();\n\t}\n\tfunction onloaded_check() {\n\t\tif (ready.checks > 40) {\n\t\t\treturn;\n\t\t\talert(\"Error Loading Files\");\n\t\t} else {\n\t\t\tready.checks++;\n\t\t\tif (ready.js && ready.css && ready.font.css && ready.font.js && ready.language) {\n\t\t\t\tif (!ready.finished) {\n\t\t\t\t\tready.finished = true;\n\t\t\t\t\tbuildEmbed();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tready.timeout = setTimeout('onloaded_check_again();', 250);\n\t\t\t}\n\t\t}\n\t};\n\tthis.onloaded_check_again = function() {\n\t\tonloaded_check();\n\t};\n\t\n\t/* Build Timeline\n\t================================================== */\n\tfunction createEmbedDiv() {\n\t\tvar embed_classname\t= \"storyjs-embed\";\n\t\t\n\t\tt = document.createElement('div');\n\t\t\n\t\tif (storyjs_e_config.embed_id != \"\") {\n\t\t\tte = document.getElementById(storyjs_e_config.embed_id);\n\t\t} else {\n\t\t\tte = document.getElementById(\"timeline-embed\");\n\t\t}\n\t\t\n\t\tte.appendChild(t);\n\t\tt.setAttribute(\"id\", storyjs_e_config.id);\n\t\t\n\t\tif (storyjs_e_config.width.toString().match(\"%\") ) {\n\t\t\tte.style.width = storyjs_e_config.width.split(\"%\")[0] + \"%\";\n\t\t} else {\n\t\t\tstoryjs_e_config.width = storyjs_e_config.width - 2;\n\t\t\tte.style.width = (storyjs_e_config.width) + 'px';\n\t\t}\n\t\t\n\t\tif (storyjs_e_config.height.toString().match(\"%\")) {\n\t\t\tte.style.height = storyjs_e_config.height;\n\t\t\tembed_classname\t+= \" full-embed\";\n\t\t\tte.style.height = storyjs_e_config.height.split(\"%\")[0] + \"%\";\n\t\t\t\n\t\t} else if (storyjs_e_config.width.toString().match(\"%\")) {\n\t\t\tembed_classname\t+= \" full-embed\";\n\t\t\tstoryjs_e_config.height = storyjs_e_config.height - 16;\n\t\t\tte.style.height = (storyjs_e_config.height) + 'px';\n\t\t}else {\n\t\t\tembed_classname\t+= \" sized-embed\";\n\t\t\tstoryjs_e_config.height = storyjs_e_config.height - 16;\n\t\t\tte.style.height = (storyjs_e_config.height) + 'px';\n\t\t}\n\t\t\n\t\tte.setAttribute(\"class\", embed_classname);\n\t\tte.setAttribute(\"className\", embed_classname); \n\t\tt.style.position = 'relative';\n\t}\n\t\n\tfunction buildEmbed() {\n\t\tVMM.debug = storyjs_e_config.debug;\n\t\tstoryjs_embedjs = new VMM.Timeline(storyjs_e_config.id);\n\t\tstoryjs_embedjs.init(storyjs_e_config);\n\t\tif (isCDN) {\n\t\t\tVMM.bindEvent(global, onHeadline, \"HEADLINE\");\n\t\t}\n\t}\n\t\t\n}\n"
  },
  {
    "path": "source/js/Core/LICENSE",
    "content": "This Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nMozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\"\n    means each individual or legal entity that creates, contributes to\n    the creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n    means the combination of the Contributions of others (if any) used\n    by a Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n    means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n    means Source Code Form to which the initial Contributor has attached\n    the notice in Exhibit A, the Executable Form of such Source Code\n    Form, and Modifications of such Source Code Form, in each case\n    including portions thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n    means\n\n    (a) that the initial Contributor has attached the notice described\n        in Exhibit B to the Covered Software; or\n\n    (b) that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the\n        terms of a Secondary License.\n\n1.6. \"Executable Form\"\n    means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n    means a work that combines Covered Software with other material, in \n    a separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n    means this document.\n\n1.9. \"Licensable\"\n    means having the right to grant, to the maximum extent possible,\n    whether at the time of the initial grant or subsequently, any and\n    all of the rights conveyed by this License.\n\n1.10. \"Modifications\"\n    means any of the following:\n\n    (a) any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered\n        Software; or\n\n    (b) any new file in Source Code Form that contains any Covered\n        Software.\n\n1.11. \"Patent Claims\" of a Contributor\n    means any patent claim(s), including without limitation, method,\n    process, and apparatus claims, in any patent Licensable by such\n    Contributor that would be infringed, but for the grant of the\n    License, by the making, using, selling, offering for sale, having\n    made, import, or transfer of either its Contributions or its\n    Contributor Version.\n\n1.12. \"Secondary License\"\n    means either the GNU General Public License, Version 2.0, the GNU\n    Lesser General Public License, Version 2.1, the GNU Affero General\n    Public License, Version 3.0, or any later versions of those\n    licenses.\n\n1.13. \"Source Code Form\"\n    means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n    means an individual or a legal entity exercising rights under this\n    License. For legal entities, \"You\" includes any entity that\n    controls, is controlled by, or is under common control with You. For\n    purposes of this definition, \"control\" means (a) the power, direct\n    or indirect, to cause the direction or management of such entity,\n    whether by contract or otherwise, or (b) ownership of more than\n    fifty percent (50%) of the outstanding shares or beneficial\n    ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive license:\n\n(a) under intellectual property rights (other than patent or trademark)\n    Licensable by such Contributor to use, reproduce, make available,\n    modify, display, perform, distribute, and otherwise exploit its\n    Contributions, either on an unmodified basis, with Modifications, or\n    as part of a Larger Work; and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n    for sale, have made, import, and otherwise transfer either its\n    Contributions or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in Section 2.1 with respect to any Contribution\nbecome effective for each Contribution on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted under\nthis License. No additional rights or licenses will be implied from the\ndistribution or licensing of Covered Software under this License.\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code that a Contributor has removed from Covered Software;\n    or\n\n(b) for infringements caused by: (i) Your and any other third party's\n    modifications of Covered Software, or (ii) the combination of its\n    Contributions with other software (except as part of its Contributor\n    Version); or\n\n(c) under Patent Claims infringed by Covered Software in the absence of\n    its Contributions.\n\nThis License does not grant any rights in the trademarks, service marks,\nor logos of any Contributor (except as may be necessary to comply with\nthe notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional grants as a result of Your choice to\ndistribute the Covered Software under a subsequent version of this\nLicense (see Section 10.2) or under the terms of a Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach Contributor represents that the Contributor believes its\nContributions are its original creation(s) or it has sufficient rights\nto grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to limit any rights You have under\napplicable copyright doctrines of fair use, fair dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. Distribution of Source Form\n\nAll distribution of Covered Software in Source Code Form, including any\nModifications that You create or to which You contribute, must be under\nthe terms of this License. You must inform recipients that the Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, and how they can obtain a copy of this License. You may not\nattempt to alter or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) such Covered Software must also be made available in Source Code\n    Form, as described in Section 3.1, and You must inform recipients of\n    the Executable Form how they can obtain a copy of such Source Code\n    Form by reasonable means in a timely manner, at a charge no more\n    than the cost of distribution to the recipient; and\n\n(b) You may distribute such Executable Form under the terms of this\n    License, or sublicense it under different terms, provided that the\n    license for the Executable Form does not attempt to limit or alter\n    the recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\nYou may create and distribute a Larger Work under terms of Your choice,\nprovided that You also comply with the requirements of this License for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware with a work governed by one or more Secondary Licenses, and the\nCovered Software is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally distribute such Covered Software\nunder the terms of such Secondary License(s), so that the recipient of\nthe Larger Work may, at their option, further distribute the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. Notices\n\nYou may not remove or alter the substance of any license notices\n(including copyright notices, patent notices, disclaimers of warranty,\nor limitations of liability) contained within the Source Code Form of\nthe Covered Software, except that You may alter any license notices to\nthe extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose to offer, and to charge a fee for, warranty, support,\nindemnity or liability obligations to one or more recipients of Covered\nSoftware. However, You may do so only on Your own behalf, and not on\nbehalf of any Contributor. You must make it absolutely clear that any\nsuch warranty, support, indemnity, or liability obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity or liability terms You offer. You may include additional\ndisclaimers of warranty and limitations of liability specific to any\njurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this\nLicense with respect to some or all of the Covered Software due to\nstatute, judicial order, or regulation then You must: (a) comply with\nthe terms of this License to the maximum extent possible; and (b)\ndescribe the limitations and the code they affect. Such description must\nbe placed in a text file included with all distributions of the Covered\nSoftware under this License. Except to the extent prohibited by statute\nor regulation, such description must be sufficiently detailed for a\nrecipient of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. The rights granted under this License will terminate automatically\nif You fail to comply with any of its terms. However, if You become\ncompliant, then the rights granted under this License from a particular\nContributor are reinstated (a) provisionally, unless and until such\nContributor explicitly and finally terminates Your grants, and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance by some reasonable means prior to 60 days after You have\ncome back into compliance. Moreover, Your grants from a particular\nContributor are reinstated on an ongoing basis if such Contributor\nnotifies You of the non-compliance by some reasonable means, this is the\nfirst time You have received notice of non-compliance with this License\nfrom such Contributor, and You become compliant prior to 30 days after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\ninfringement claim (excluding declaratory judgment actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly or indirectly infringes any patent, then the rights granted to\nYou by any and all Contributors for the Covered Software under Section\n2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\nend user license agreements (excluding distributors and resellers) which\nhave been validly granted by You or Your distributors under this License\nprior to termination shall survive termination.\n\n************************************************************************\n*                                                                      *\n*  6. Disclaimer of Warranty                                           *\n*  -------------------------                                           *\n*                                                                      *\n*  Covered Software is provided under this License on an \"as is\"       *\n*  basis, without warranty of any kind, either expressed, implied, or  *\n*  statutory, including, without limitation, warranties that the       *\n*  Covered Software is free of defects, merchantable, fit for a        *\n*  particular purpose or non-infringing. The entire risk as to the     *\n*  quality and performance of the Covered Software is with You.        *\n*  Should any Covered Software prove defective in any respect, You     *\n*  (not any Contributor) assume the cost of any necessary servicing,   *\n*  repair, or correction. This disclaimer of warranty constitutes an   *\n*  essential part of this License. No use of any Covered Software is   *\n*  authorized under this License except under this disclaimer.         *\n*                                                                      *\n************************************************************************\n\n************************************************************************\n*                                                                      *\n*  7. Limitation of Liability                                          *\n*  --------------------------                                          *\n*                                                                      *\n*  Under no circumstances and under no legal theory, whether tort      *\n*  (including negligence), contract, or otherwise, shall any           *\n*  Contributor, or anyone who distributes Covered Software as          *\n*  permitted above, be liable to You for any direct, indirect,         *\n*  special, incidental, or consequential damages of any character      *\n*  including, without limitation, damages for lost profits, loss of    *\n*  goodwill, work stoppage, computer failure or malfunction, or any    *\n*  and all other commercial damages or losses, even if such party      *\n*  shall have been informed of the possibility of such damages. This   *\n*  limitation of liability shall not apply to liability for death or   *\n*  personal injury resulting from such party's negligence to the       *\n*  extent applicable law prohibits such limitation. Some               *\n*  jurisdictions do not allow the exclusion or limitation of           *\n*  incidental or consequential damages, so this exclusion and          *\n*  limitation may not apply to You.                                    *\n*                                                                      *\n************************************************************************\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace of business and such litigation shall be governed by laws of that\njurisdiction, without reference to its conflict-of-law provisions.\nNothing in this Section shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject\nmatter hereof. If any provision of this License is held to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary to make it enforceable. Any law or regulation which provides\nthat the language of a contract shall be construed against the drafter\nshall not be used to construe this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. New Versions\n\nMozilla Foundation is the license steward. Except as provided in Section\n10.3, no one other than the license steward has the right to modify or\npublish new versions of this License. Each version will be given a\ndistinguishing version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered Software under the terms of the version\nof the License under which You originally received the Covered Software,\nor under the terms of any subsequent version published by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software not governed by this License, and you want to\ncreate a new license for such software, you may create and use a\nmodified version of this License if you rename the license and remove\nany references to the name of the license steward (except to note that\nsuch modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose to distribute Source Code Form that is Incompatible With\nSecondary Licenses under the terms of this version of the License, the\nnotice described in Exhibit B of this License must be attached.\n\n\n-------------------------------------------\n\n"
  },
  {
    "path": "source/js/Core/Language/VMM.Language.js",
    "content": "/* DEFAULT LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.Language == 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"en\",\n\t\tapi: {\n\t\t\twikipedia: \"en\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"March\", \"April\", \"May\", \"June\", \"July\", \"Aug.\", \"Sept.\", \"Oct.\", \"Nov.\", \"Dec.\"],\n\t\t\tday: [\"Sunday\",\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tday_abbr: [\"Sun.\",\"Mon.\", \"Tues.\", \"Wed.\", \"Thurs.\", \"Fri.\", \"Sat.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' h:MM TT\",\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Loading Timeline... \",\n\t\t\treturn_to_title: \"Return to Title\",\n\t\t\texpand_timeline: \"Expand Timeline\",\n\t\t\tcontract_timeline: \"Contract Timeline\",\n\t\t\twikipedia: \"From Wikipedia, the free encyclopedia\",\n\t\t\tloading_content: \"Loading Content\",\n\t\t\tloading: \"Loading\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\n\t\t}\n\t}\n};"
  },
  {
    "path": "source/js/Core/Language/locale/af.js",
    "content": "/* Afrikaans LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"af\",\n\t\tapi: {\n\t\t\twikipedia: \"af\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Januarie\", \"Februarie\", \"Maart\", \"April\", \"Mei\", \"Junie\", \"Julie\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"Desember\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"Maart\", \"April\", \"Mei\", \"Junei\", \"Julie\", \"Aug.\", \"Sept.\", \"Okt.\", \"Nov.\", \"Des.\"],\n\t\t\tday: [\"Sondag\",\"Maandag\", \"Dinsdag\", \"Woensdag\", \"Donderdag\", \"Vrydag\", \"Saterdag\"],\n\t\t\tday_abbr: [\"Son.\",\"Maan.\", \"Dins.\", \"Woen.\", \"Don.\", \"Vry.\", \"Sat.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"d mmm',' yyyy 'om' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Die tydlyn laai... \",\n\t\t\treturn_to_title: \"Begin voor\",\n\t\t\texpand_timeline: \"Rek die tydlyn\",\n\t\t\tcontract_timeline: \"Krimp die tydlyn\",\n\t\t\twikipedia: \"Van Wikipedia, die gratis ensiklopedie\",\n\t\t\tloading_content: \"Die inhoud laai\",\n\t\t\tloading: \"Aan't laai\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "source/js/Core/Language/locale/ar.js",
    "content": "﻿/* Arabic LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n\tVMM.Language = {\r\n\t\tlang: \"ar\",\r\n\t\tright_to_left: true,\r\n\t\tapi: {\r\n\t\t\twikipedia: \"ar\"\r\n\t\t},\r\n\t\tdate: {\r\n\t\t\tmonth: [\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"أيار\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"],\r\n\t\t\tmonth_abbr: [\"كانون الثاني\", \"شباط\", \"آذار\", \"نيسان\", \"أيار\", \"حزيران\", \"تموز\", \"آب\", \"أيلول\", \"تشرين الأول\", \"تشرين الثاني\", \"كانون الأول\"],\r\n\t\t\tday: [\"الأحد\",\"الإثنين\", \"الثلاثاء\", \"الأربعاء\", \"الخميس\", \"الجمعة\", \"السبت\"],\r\n\t\t\tday_abbr: [\"الأحد\",\"الإثنين\", \"الثلاثاء\", \"الأربعاء\", \"الخميس\", \"الجمعة\", \"السبت\"]\r\n\t\t}, \r\n\t\tdateformats: {\r\n\t\t\tyear: \"yyyy\",\r\n\t\t\tmonth_short: \"mmm\",\r\n\t\t\tmonth: \"mmmm yyyy\",\r\n\t\t\tfull_short: \"mmm d\",\r\n\t\t\tfull: \"mmmm d',' yyyy\",\r\n\t\t\ttime_short: \"h:MM:ss TT\",\r\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\r\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\r\n\t\t\tfull_long: \"mmm d',' yyyy 'at' hh:MM TT\",\r\n\t\t\tfull_long_small_date: \"hh:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\r\n\t\t},\r\n\t\tmessages: {\r\n\t\t\tloading_timeline: \"جاري التحميل... \",\r\n\t\t\treturn_to_title: \"العودة\",\r\n\t\t\texpand_timeline: \"تكبير العرض\",\r\n\t\t\tcontract_timeline: \"الاتفاقية\",\r\n\t\t\twikipedia: \"من ويكيبيديا, الموسوعة الحرة\",\r\n\t\t\tloading_content: \"تحميل المحتوى\",\r\n\t\t\tloading: \"تحميل\",\r\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "source/js/Core/Language/locale/be.js",
    "content": "﻿/* Belarusian LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n\tVMM.Language = {\r\n\t\tlang: \"be\",\r\n\t\tapi: {\r\n\t\t\twikipedia: \"be\"\r\n\t\t},\r\n\t\tdate: {\r\n\t\t\tmonth: [\"студзень\", \"люты\", \"сакавік\", \"красавік\", \"май\", \"чэрвень\", \"ліпень\", \"жнівень\", \"верасень\", \"кастрычнік\", \"лістапад\", \"снежань\"],\r\n\t\t\tmonth_abbr: [\"стд\", \"лют\", \"скв\", \"крс\", \"май\", \"чрв\", \"лпн\", \"жнв\", \"врс\", \"кст\", \"лст\", \"снж\"],\r\n\t\t\tday: [\"нядзеля\",\"панядзелак\", \"аўторак\", \"серада\", \"чацвер\", \"пятніца\", \"субота\"],\r\n\t\t\tday_abbr: [\"Нд.\",\"Пн.\", \"Аўт.\", \"Ср.\", \"Чц.\", \"Пт.\", \"Сб.\"]\r\n\t\t}, \r\n\t\tdateformats: {\r\n\t\t\tyear: \"yyyy\",\r\n\t\t\tmonth_short: \"mmm\",\r\n\t\t\tmonth: \"mmmm yyyy\",\r\n\t\t\tfull_short: \"d mmm\",\r\n\t\t\tfull: \"d mmmm yyyy\",\r\n\t\t\ttime_short: \"h:MM:ss TT\",\r\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\r\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'d mmmm yyyy'</small>'\",\r\n\t\t\tfull_long: \"d mmm yyyy 'at' h:MM TT\",\r\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>d mmm yyyy'</small>'\"\r\n\t\t},\r\n\t\tmessages: {\r\n\t\t\tloading_timeline: \"Загрузка лініі часу... \",\r\n\t\t\treturn_to_title: \"Вярнуцца ў пачатак\",\r\n\t\t\texpand_timeline: \"Наблізіць лінію часу\",\r\n\t\t\tcontract_timeline: \"Аддаліць лінію часу\",\r\n\t\t\twikipedia: \"З Вікіпедыі, свабоднай энцыклапедыі\",\r\n\t\t\tloading_content: \"Загрузка зместу\",\r\n\t\t\tloading: \"Загрузка\"\r\n\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "source/js/Core/Language/locale/bg.js",
    "content": "/* Bulgarian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"bg\",\n\t\tapi: {\n\t\t\twikipedia: \"bg\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Януари\", \"Февруари\", \"Март\", \"Април\", \"Май\", \"Юни\", \"Юли\", \"Август\", \"Септември\", \"Октомври\", \"Ноември\", \"Декември\"],\n\t\t\tmonth_abbr: [\"Ян.\", \"Фев.\", \"Март\", \"Апр.\", \"Май\", \"Юни\", \"Юли\", \"Авг.\", \"Септ.\", \"Окт.\", \"Ноем.\", \"Дек.\"],\n\t\t\tday: [\"Неделя\", \"Понеделник\", \"Вторник\", \"Сряда\", \"Четвъртък\", \"Петък\", \"Събота\"],\n\t\t\tday_abbr: [\"Нед.\", \"Пон.\", \"Вт.\", \"Ср.\", \"Четв.\", \"Пет.\", \"Съб.\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"d mmm yyyy 'at' h:MM TT\",\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Зареждане... \",\n\t\t\treturn_to_title: \"В началото\",\n\t\t\texpand_timeline: \"Разширяване\",\n\t\t\tcontract_timeline: \"Свиване\",\n\t\t\twikipedia: \"От Уикипедия, свободната енциклопедия\",\n\t\t\tloading_content: \"Съдържанието се зарежда\",\n\t\t\tloading: \"Зарежда се\",\n\t\t\tswipe_nav: \"Сменяйте с плъзгане настрани\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/ca.js",
    "content": "/* Catalan LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"ca\",\n\t\tapi: {\n\t\t\twikipedia: \"ca\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: ['Gener','Febrer','Març','Abril','Maig','Juny','Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],\n\t\t\tmonth_abbr: ['Gen','Feb','Mar','Abr','Mai','Jun','Jul','Ago','Set','Oct','Nov','Des'],\n\t\t\tday: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],\n\t\t\tday_abbr: ['Dg.','Dl.','Dt.','Dc.','Dj.','Dv.','Ds.']\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"'<small>'d mmmm yyyy'</small>' HH:MM\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Carregant cronologia...\",\n\t\t\treturn_to_title: \"Tornar al títol\",\n\t\t\texpand_timeline: \"Ampliar la cronologia\",\n\t\t\tcontract_timeline: \"Reduir la cronologia\",\n\t\t\twikipedia: \"Des de Wikipedia, l'enciclopèdia lliure\",\n\t\t\tloading_content: \"Carregant contingut\",\n\t\t\tloading: \"Carregant\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/cz.js",
    "content": "/* Czech LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"cz\",\n\t\tapi: {\n\t\t\twikipedia: \"cs\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"ledna\", \"února\", \"března\", \"dubna\", \"května\", \"června\", \"července\", \"srpna\", \"září\", \"října\", \"listopadu\", \"prosince\"],\n\t\t\tmonth_abbr: [\"Led\", \"Úno\", \"Bře\", \"Dub\", \"Kvě\", \"Čen\", \"Čec\", \"Srp\", \"Zář\", \"Říj\", \"Lis\", \"Pro\"],\n\t\t\tday: [\"neděle\",\"pondělí\", \"úterý\", \"středa\", \"čtvrtek\", \"pátek\", \"sobota\"],\n\t\t\tday_abbr: [\"Ne\",\"Po\", \"Út\", \"St\", \"Čt\", \"Pá\", \"So\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d. mmm \",\n\t\t\tfull: \"d. mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d. mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"dddd d. mmm yyyy 'v' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>dddd d. mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Načítám časovou osu... \",\n\t\t\treturn_to_title: \"Zpět na začátek\",\n\t\t\texpand_timeline: \"Rozbalit časovou osu\",\n\t\t\tcontract_timeline: \"Sbalit časovou osu\",\n\t\t\twikipedia: \"Zdroj: otevřená encyklopedie Wikipedia\",\n\t\t\tloading_content: \"Nahrávám obsah\",\n\t\t\tloading: \"Nahrávám\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/da.js",
    "content": "/* Danish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"da\",\n\t\tapi: {\n\t\t\twikipedia: \"da\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"januar\", \"februar\", \"marts\", \"april\", \"maj\", \"juni\", \"juli\", \"august\", \"september\", \"oktober\", \"november\", \"december\"],\n\t\t\tmonth_abbr: [\"jan.\", \"feb.\", \"mar.\", \"apr.\", \"maj.\", \"jun.\", \"jul.\", \"aug.\", \"sep.\", \"okt.\", \"nov.\", \"dec.\"],\n\t\t\tday: [\"søndag\", \"mandag\", \"tirsdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lørdag\"],\n\t\t\tday_abbr: [\"sø.\", \"ma.\", \"ti.\", \"on.\", \"to.\", \"fr.\", \"lø.\"],\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d. mmm\",\n\t\t\tfull: \"d. mmmm',' yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d. mmmm',' yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d. mmm',' yyyy 'um' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' d. mmm yyyy'</small>'\",\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Henter tidslinie...\",\n\t\t\treturn_to_title: \"Tilbage til titel\",\n\t\t\texpand_timeline: \"Udvid tidslinien\",\n\t\t\tcontract_timeline: \"Træk tidslinien sammen\",\n\t\t\twikipedia: \"Fra Wikipedia\",\n\t\t\tloading_content: \"Henter indhold\",\n\t\t\tloading: \"Henter\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/de.js",
    "content": "/* German / Deutsch LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"de\",\n\t\tapi: {\n\t\t\twikipedia: \"de\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"März\", \"Apr.\", \"Mai\", \"Juni\", \"Juli\", \"Aug.\", \"Sept.\", \"Okt.\", \"Nov.\", \"Dez.\"],\n\t\t\tday: [\"Sonntag\",\"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"],\n\t\t\tday_abbr: [\"So.\",\"Mo.\", \"Di.\", \"Mi.\", \"Do.\", \"Fr.\", \"Sa.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d. mmm\",\n\t\t\tfull: \"d. mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d. mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d. mmm yyyy 'um' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' d. mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Chronologie wird geladen...\",\n\t\t\treturn_to_title: \"Zurück zum Anfang\",\n\t\t\texpand_timeline: \"Chronologie vergrößern\",\n\t\t\tcontract_timeline: \"Chronologie verkleinern\",\n\t\t\twikipedia: \"aus Wikipedia, der freien Enzyklopädie\",\n\t\t\tloading_content: \"Inhalte werden geladen...\",\n\t\t\tloading: \"Lädt...\",\n\t\t\tswipe_nav: \"Wischen zum navigieren\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/el.js",
    "content": "/* Greek LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"en\",\n\t\tapi: {\n\t\t\twikipedia: \"en\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Ιανουάριος\", \"Φεβρουάριος\", \"Μάρτιος\", \"Απρίλιος\", \"Μάιος\", \"Ιούνιος\", \"Ιούλιος\", \"Αύγουστος\", \"Σεπτέμβριος\", \"Οκτώβριος\", \"Νοέμβριος\", \"Δεκέμβριος\"],\n\t\t\tmonth_abbr: [\"Ιαν.\", \"Φεβ.\", \"Μαρ.\", \"Απρ.\", \"Μαη\", \"Ιουν.\", \"Ιουλ.\", \"Αύγ.\", \"Σεπτ.\", \"Οκτ.\", \"Νοεμ.\", \"Δεκ.\"],\n\t\t\tday: [\"Κυριακή\",\"Δευτέρα\", \"Τρίτη\", \"Τετάρτη\", \"Πέμπτη\", \"Παρασκευή\", \"Σάββατο\"],\n\t\t\tday_abbr: [\"Κυρ.\",\"Δευ.\", \"Τρίτη.\", \"Τετ.\", \"Πεμπ.\", \"Παρ.\", \"Σαβ.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' h:MM TT\",\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Φόρτωση Timeline... \",\n\t\t\treturn_to_title: \"Επιστροφή στον Τίτλο\",\n\t\t\texpand_timeline: \"Μεγέθυνση\",\n\t\t\tcontract_timeline: \"Contract Timeline\",\n\t\t\twikipedia: \"From Wikipedia, the free encyclopedia\",\n\t\t\tloading_content: \"Φόρτωση Περιεχομένου\",\n\t\t\tloading: \"Γίνεται Φόρτωση\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/en-24hr.js",
    "content": "/* English LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"en\",\n\t\tapi: {\n\t\t\twikipedia: \"en\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"March\", \"April\", \"May\", \"June\", \"July\", \"Aug.\", \"Sept.\", \"Oct.\", \"Nov.\", \"Dec.\"],\n\t\t\tday: [\"Sunday\",\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tday_abbr: [\"Sun.\",\"Mon.\", \"Tues.\", \"Wed.\", \"Thurs.\", \"Fri.\", \"Sat.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' HH:MM TT\",\n\t\t\tfull_long_small_date: \"HH:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Loading Timeline... \",\n\t\t\treturn_to_title: \"Return to Title\",\n\t\t\texpand_timeline: \"Expand Timeline\",\n\t\t\tcontract_timeline: \"Contract Timeline\",\n\t\t\twikipedia: \"From Wikipedia, the free encyclopedia\",\n\t\t\tloading_content: \"Loading Content\",\n\t\t\tloading: \"Loading\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/en-week.js",
    "content": "/* English LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"en\",\n\t\tapi: {\n\t\t\twikipedia: \"en\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"March\", \"April\", \"May\", \"June\", \"July\", \"Aug.\", \"Sept.\", \"Oct.\", \"Nov.\", \"Dec.\"],\n\t\t\tday: [\"Sunday\",\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tday_abbr: [\"Sun.\",\"Mon.\", \"Tues.\", \"Wed.\", \"Thurs.\", \"Fri.\", \"Sat.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"'Week' W\",\n\t\t\tfull: \"'Week' W\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' HH:MM TT\",\n\t\t\tfull_long_small_date: \"HH:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Loading Timeline... \",\n\t\t\treturn_to_title: \"Return to Title\",\n\t\t\texpand_timeline: \"Expand Timeline\",\n\t\t\tcontract_timeline: \"Contract Timeline\",\n\t\t\twikipedia: \"From Wikipedia, the free encyclopedia\",\n\t\t\tloading_content: \"Loading Content\",\n\t\t\tloading: \"Loading\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/en.js",
    "content": "/* English LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"en\",\n\t\tapi: {\n\t\t\twikipedia: \"en\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"March\", \"April\", \"May\", \"June\", \"July\", \"Aug.\", \"Sept.\", \"Oct.\", \"Nov.\", \"Dec.\"],\n\t\t\tday: [\"Sunday\",\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tday_abbr: [\"Sun.\",\"Mon.\", \"Tues.\", \"Wed.\", \"Thurs.\", \"Fri.\", \"Sat.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' h:MM TT\",\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Loading Timeline... \",\n\t\t\treturn_to_title: \"Return to Title\",\n\t\t\texpand_timeline: \"Expand Timeline\",\n\t\t\tcontract_timeline: \"Contract Timeline\",\n\t\t\twikipedia: \"From Wikipedia, the free encyclopedia\",\n\t\t\tloading_content: \"Loading Content\",\n\t\t\tloading: \"Loading\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/eo.js",
    "content": "/* Esperanto LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"eo\",\n\t\tapi: {\n\t\t\twikipedia: \"eo\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"januaro\", \"februaro\", \"marto\", \"aprilo\", \"majo\", \"junio\", \"julio\", \"aŭgusto\", \"septembro\", \"oktobro\", \"novembro\", \"decembro\"],\n\n\t\t\tmonth_abbr: [\"jan.\", \"feb.\", \"mar.\", \"apr.\", \"maj.\", \"jun.\", \"jul.\", \"aŭg.\", \"sep.\", \"okt.\", \"nov.\", \"dec.\"],\n\n\t\t\tday: [\"dimanĉo\",\"lundo\", \"mardo\", \"merkredo\", \"ĵaŭdo\", \"vendredo\", \"sabato\"],\n\n\t\t\tday_abbr: [\"dim.\",\"lun.\", \"mar.\", \"mer.\", \"ĵaŭ.\", \"ven.\", \"sab.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t    month_short: \"mmm\",\n\t\t    month: \"mmmm yyyy\",\n\t\t    full_short: \"d mmm\",\n\t\t    full: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t    time_no_seconds_short: \"HH:MM\",\n\t\t    time_no_seconds_small_date: \"HH:MM'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t    full_long: \"dddd',' d mmm yyyy 'ĉe' HH:MM\",\n\t\t    full_long_small_date: \"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Ŝarĝante Kronologio... \",\n\t\t\treturn_to_title: \"Reveno al Titolo\",\n\t\t\texpand_timeline: \"Pliampleksigu Kronologio\",\n\t\t\tcontract_timeline: \"Malpliampleksigu Kronologio\",\n\t\t\twikipedia: \"El Vikipedio, la libera enciklopedio\",\n\t\t\tloading_content: \"Ŝarĝante enhavo\",\n\t\t\tloading: \"Ŝarĝante\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/es.js",
    "content": "/* Spanish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"es\",\n\t\tapi: {\n\t\t\twikipedia: \"es\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"],\n\t\t\tmonth_abbr: [\"Ene.\", \"Feb.\", \"Mar.\", \"Abr.\", \"May.\", \"Jun.\", \"Jul.\", \"Ago.\", \"Sep.\", \"Oct.\", \"Nov.\", \"Dic.\"],\n\t\t\tday: [\"Domingo\", \"Lunes\", \"Martes\", \"Miércoles\", \"Jueves\", \"Viernes\", \"Sábado\"],\n\t\t\tday_abbr: [\"Dom.\", \"Lun.\", \"Mar.\", \"Mié.\", \"Jue.\", \"Vie.\", \"Sáb.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"'<small>'d mmmm yyyy'</small>' HH:MM\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"La cronología esta cargando\",\n\t\t\treturn_to_title: \"Volver al título\",\n\t\t\texpand_timeline: \"Expandir la cronología\",\n\t\t\tcontract_timeline: \"Reducir la cronología\",\n\t\t\twikipedia: \"Desde Wikipedia, la enciclopedia libre\",\n\t\t\tloading_content: \"cargando\",\n\t\t\tloading: \"cargando\",\n\t\t\tswipe_nav: \"Desliza para ver\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/et.js",
    "content": "/* Estonian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"et\",\n\t\tapi: {\n\t\t\twikipedia: \"et\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"jaanuar\", \"veebruar\", \"märts\", \"aprill\", \"mai\", \"juuni\", \"juuli\", \"august\", \"september\", \"oktoober\", \"november\", \"detsember\"],\n\t\t\tmonth_abbr: [\"jaan.\", \"veebr.\", \"märts\", \"apr.\", \"mai\", \"juuni\", \"juuli\", \"aug.\", \"sept.\", \"okt.\", \"nov.\", \"dets.\"],\n\t\t\tday: [\"pühapäev\",\"esmaspäev\", \"teisipäev\", \"kolmapäev\", \"neljapäev\", \"reede\", \"laupäev\"],\n\t\t\tday_abbr: [\"P\",\"E\", \"T\", \"K\", \"N\", \"R\", \"L\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' h:MM TT\",\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Laadib ajajoont… \",\n\t\t\treturn_to_title: \"Tagasi algusse\",\n\t\t\texpand_timeline: \"Vaata lähemalt\",\n\t\t\tcontract_timeline: \"Vaata kaugemalt\",\n\t\t\twikipedia: \"Wikipedia, vaba entsüklopeedia\",\n\t\t\tloading_content: \"Laadib sisu\",\n\t\t\tloading: \"Laadib\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/eu.js",
    "content": "/* Basque/ Euskara LANGUAGE\n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"eu\",\n\t\tapi: {\n\t\t\twikipedia: \"eu\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Urtarrila\", \"Otsaila\", \"Martxoa\", \"Apirila\", \"Maiatza\", \"Ekaina\", \"Uztaila\", \"Abuztua\", \"Iraila\", \"Urria\", \"Azaroa\", \"Abendua\"],\n\t\t\tmonth_abbr: [\"Urt.\", \"Ots.\", \"Mar.\", \"Api.\", \"Mai.\", \"Eka.\", \"Uzt.\", \"Abu.\", \"Ira.\", \"Urr.\", \"Aza.\", \"Abe.\"],\n\t\t\tday: [\"Igandea\", \"Astelehena\", \"Asteartea\", \"Asteazkena\", \"Osteguna\", \"Ostirala\", \"Larunbata\"],\n\t\t\tday_abbr: [\"Iga.\", \"Asl.\", \"Asr.\", \"Asz.\", \"Osg.\", \"Osr.\", \"Lar.\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"yyyy'(e)ko' mmmm\",\n\t\t\tfull_short: \"mmm'-'d\",\n\t\t\tfull: \"yyyy'(e)ko' mmmm'k' d\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br /><small>'yyyy'-'mmm'-'d'</small>\",\n\t\t\tfull_long: \"yyyy'(e)ko' mmmm'ren' d'(e)an,' hh:MM TT'(r)etan'\",\n\t\t\tfull_long_small_date: \"hh:MM TT'<br /><small>'yyyy'-'mmm'-'d'</small>\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Kronologia kargatzen...\",\n\t\t\treturn_to_title: \"Titulura itzuli\",\n\t\t\texpand_timeline: \"Handiago ikusi\",\n\t\t\tcontract_timeline: \"Txikiago ikusi\",\n\t\t\twikipedia: \"Wikipedia entziklopedia libretik\",\n\t\t\tloading_content: \"Edukia kargatzen\",\n\t\t\tloading: \"Kargatzen\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "source/js/Core/Language/locale/fa.js",
    "content": "﻿if(typeof VMM != 'undefined') {\r\n\tVMM.Language = {\r\n\t\tlang: \"fa\",\r\n\t\tright_to_left:!0,\r\n\t\tapi: {\r\n\t\t\twikipedia: \"fa\"\r\n\t\t},\r\n\t\tdate: {\r\n\t\t\tmonth: [\"فروردین\", \"اردیبهشت\", \"خرداد\", \"تیر\", \"مرداد\", \"شهریور\", \"مهر\", \"آبان\", \"آذر\", \"دی\", \"بهمن\", \"اسفند\"],\r\n\t\t\tmonth_abbr: [\"فروردین\", \"اردیبهشت\", \"خرداد\", \"تیر\", \"مرداد\", \"شهریور\", \"مهر\", \"آبان\", \"آذر\", \"دی\", \"بهمن\", \"اسفند\"],\r\n\t\t\tday: [\"یکشنبه\",\"دوشنبه\", \"سه شنبه\", \"چهارشنبه\", \"پنجشنبه\", \"جمعه\", \"شنبه\"],\r\n\t\t\tday_abbr: [\"یکشنبه\",\"دوشنبه\", \"سه شنبه\", \"چهارشنبه\", \"پنجشنبه\", \"جمعه\", \"شنبه\"]\r\n\t\t}, \r\n\t\tdateformats: {\r\n\t\t\tyear: \"yyyy\",\r\n\t\t\tmonth_short: \"mmm\",\r\n\t\t\tmonth: \"mmmm yyyy\",\r\n\t\t\tfull_short: \"mmm d\",\r\n\t\t\tfull: \"mmmm d',' yyyy\",\r\n\t\t\tfull: \"mmmm d',' yyyy\",\r\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\r\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\r\n\t\t\tfull_long: \"mmm d',' yyyy 'at' h:MM TT\",\r\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\r\n\t\t},\r\n\t\tmessages: {\r\n\t\t\tloading_timeline: \"بارگذاری، شکیبا باشید...\",\r\n\t\t\treturn_to_title: \"ابتدای زمانبندی\",\r\n\t\t\texpand_timeline: \"بزرگنمایی\",\r\n\t\t\tcontract_timeline: \"کوچکنمایی\",\r\n\t\t\twikipedia: \"از ویکی پدیا، دانشنامه آزاد\",\r\n\t\t\tloading_content: \"بارگذاری\",\r\n\t\t\tloading: \"بارگذاری\",\r\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\r\n\t}\r\n}\r\n"
  },
  {
    "path": "source/js/Core/Language/locale/fi.js",
    "content": "/* Finnish LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"fi\",\n\t\tapi: {\n\t\t\twikipedia: \"fi\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"tammikuuta\", \"helmikuuta\", \"maaliskuuta\", \"huhtikuuta\", \"toukokuuta\", \"kesäkuuta\", \"heinäkuuta\", \"elokuuta\", \"syyskuuta\", \"lokakuuta\", \"marraskuuta\", \"joulukuuta\"],\n\t\t\tmonth_abbr: [\"tammi\", \"helmi\", \"maalis\", \"huhti\", \"touko\", \"kesä\", \"heinä\", \"elo\", \"syys\", \"loka\", \"marras\", \"joulu\"],\n\t\t\tday: [\"sunnuntai\",\"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauauntai\"],\n\t\t\tday_abbr: [\"su\",\"ma\", \"ti\", \"ke\", \"to\", \"pe\", \"la\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d. mmm\",\n\t\t\tfull: \"d. mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d. mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d yyyy 'klo' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>d. mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Ladataan aikajanaa… \",\n\t\t\treturn_to_title: \"Takaisin etusivulle\",\n\t\t\texpand_timeline: \"Laajenna aikajanaa\",\n\t\t\tcontract_timeline: \"Tiivistä aikajanaa\",\n\t\t\twikipedia: \"Wikipediasta\",\n\t\t\tloading_content: \"Ladataan sisältöä\",\n\t\t\tloading: \"Ladataan\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/fo.js",
    "content": "/* Faroese LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"fo\",\n\t\tapi: {\n\t\t\twikipedia: \"fo\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"januar\", \"februar\", \"mars\", \"aprÌl\", \"mai\", \"juni\", \"juli\", \"august\", \"september\", \"oktober\", \"november\", \"desember\"],\n\t\t\tmonth_abbr: [\"jan.\", \"febr.\", \"mars\", \"aprÌl\", \"mai\", \"juni\", \"juli\", \"aug.\", \"sept.\", \"okt.\", \"nov.\", \"des.\"],\n\t\t\tday: [\"sunnudagur\",\"m·nadagur\", \"t˝sdagur\", \"mikudagur\", \"hÛsdagur\", \"frÌggjadagur\", \"leygardagur\"],\n\t\t\tday_abbr: [\"sun.\",\"m·n.\", \"t˝s.\", \"mik.\", \"hÛs.\", \"frÌ.\", \"ley.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d'.' mmm\",\n\t\t\tfull: \"d'.' mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d'.' mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"d'.' mmmm yyyy 'klokkan' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'d'.' mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Lesur inn t&iacute;&eth;arr&aacute;s...\",\n\t\t\treturn_to_title: \"V&iacute;&eth;ka t&iacute;&eth;arr&aacute;s...\",\n\t\t\texpand_timeline: \"Minka t&iacute;&eth;arr&aacute;s...\",\n\t\t\tcontract_timeline: \"Minka t&iacute;&eth;arr&aacute;s\",\n\t\t\twikipedia: \"Fr· Wikipedia\",\n\t\t\tloading_content: \"Lesur inn tilfar\",\n\t\t\tloading: \"Lesur inn\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/fr.js",
    "content": "/* French LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"fr\",\n\t\tapi: {\n\t\t\twikipedia: \"fr\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n\t\t\tmonth_abbr: [\"janv.\", \"févr.\", \"mars\", \"avril\", \"mai\", \"juin\", \"juil.\", \"août\", \"sept.\", \"oct.\", \"nov.\", \"dec.\"],\n\t\t\tday: [\"Dimanche\",\"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\"],\n\t\t\tday_abbr: [\"Dim.\",\"Lu.\", \"Ma.\", \"Me.\", \"Jeu.\", \"Vend.\", \"Sam.\"],\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t    month_short: \"mmm\",\n\t\t    month: \"mmmm yyyy\",\n\t\t    full_short: \"d mmm\",\n\t\t    full: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t    time_no_seconds_short: \"HH:MM\",\n\t\t    time_no_seconds_small_date: \"HH:MM'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t    full_long: \"dddd',' d mmm yyyy 'à' HH:MM\",\n\t\t    full_long_small_date: \"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Chargement de la frise en cours... \",\n\t\t    return_to_title: \"Retour à la page d'accueil\",\n\t\t    expand_timeline: \"Elargir la frise\",\n\t\t    contract_timeline: \"Réduire la frise\",\n\t\t\twikipedia: \"Extrait de Wikipedia, l'encyclopédie libre\",\n\t\t\tloading_content: \"Chargement\",\n\t\t\tloading: \"Chargement\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t\t\n\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/fy.js",
    "content": "/* Frisian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"fy\",\n\t\tapi: {\n\t\t\twikipedia: \"fy\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Jannewaris\", \"Febrewaris\", \"Maart\", \"April\", \"Maaie\", \"Juny\", \"July\", \"Augustus\", \"Septimber\", \"Oktober\", \"Novimber\", \"Desimber\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"Mar\", \"Apr\", \"Maaie\", \"July\", \"July\", \"Aug.\", \"Sept.\", \"Okt.\", \"Nov.\", \"Des.\"],\n\t\t\tday: [\"Snein\",\"Moandei\", \"Tiisdei\", \"Woansdei\", \"Tongersdei\", \"Freed\", \"Sneon\"],\n\t\t\tday_abbr: [\"Snein\",\"Moandei\", \"Tiisdei\", \"Woansdei\", \"Tongersdei\", \"Freed\", \"Sneon\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy 'om' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Tiidline ynlade ... \",\n\t\t\treturn_to_title: \"Wer werom nei it begjin\",\n\t\t\texpand_timeline: \"Tiidline útzoomen\",\n\t\t\tcontract_timeline: \"Tiidline ynzoomen\",\n\t\t\twikipedia: \"Fan Wikipedia, de frije ensyklopedy\",\n\t\t\tloading_content: \"Ynhâld ynlade\",\n\t\t\tloading: \"Ynlade\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/ga.js",
    "content": "/* English LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"ga\",\n\t\tapi: {\n\t\t\twikipedia: \"ga\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Eanair\", \"Feabhra\", \"Márta\", \"Aibhreán\", \"Bealtaine\", \"Meitheamh\", \"Iúil\", \"Lúnasa\", \"Meán Fómhair\", \"Deireadh Fómhair\", \"Samhain\", \"Mí Na Nollag\"],\n\t\t\tmonth_abbr: [\"Ean.\", \"Fea.\", \"Már.\", \"Aibh.\", \"Beal.\", \"Meith.\", \"Iúil\", \"Lún.\", \"MF.\", \"DF.\", \"Samh.\", \"Noll.\"],\n\t\t\tday: [\"Dé Domhnaigh\",\"Dé Luain\", \"Dé Máirt\", \"Dé Céadaoin\", \"Déardaoin\", \"Dé hAoine\", \"Dé Sathairn\"],\n\t\t\tday_abbr: [\"DéDom.\",\"DéL.\", \"DéM.\", \"DéC.\", \"DéarD.\", \"DéhA.\", \"DéSat.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"'<small>'d mmmm yyyy'</small>' HH:MM\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Tá an Amlíne ag Lódáil... \",\n\t\t\treturn_to_title: \"Ar Ais go dtí an tideal\",\n\t\t\texpand_timeline: \"Leathnaigh An Amlíne\",\n\t\t\tcontract_timeline: \"Coimrigh An Amlíne\",\n\t\t\twikipedia: \"As Wikipedia, an ciclipéid saor\",\n\t\t\tloading_content: \"Ag Lódáil an\",\n\t\t\tloading: \"Ag Lódáil an Inneachar\",\n\t\t\tswipe_nav: \"Svaidhpeáil Chun Nascleanúint\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/gl.js",
    "content": "/* Galician LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"gl\",\n\t\tapi: {\n\t\t\twikipedia: \"gl\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Xaneiro\", \"Febreiro\", \"Marzo\", \"Abril\", \"Maio\", \"Xuño\", \"Xullo\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Decembro\"],\n\t\t\tmonth_abbr: [\"Xan.\", \"Feb.\", \"Mar.\", \"Abr.\", \"Mai.\", \"Xuñ.\", \"Xul.\", \"Ago.\", \"Set.\", \"Out.\", \"Nov.\", \"Dec.\"],\n\t\t\tday: [\"Domingo\", \"Luns\", \"Martes\", \"Mércores\", \"Xoves\", \"Venres\", \"Sábado\"],\n\t\t\tday_abbr: [\"Dom.\", \"Lun.\", \"Mar.\", \"Mér.\", \"Xov.\", \"Ven.\", \"Sáb.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy 'um' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Cronoloxía esta cargando\",\n\t\t\treturn_to_title: \"Volver ao título\",\n\t\t\texpand_timeline: \"Alongar a cronoloxía\",\n\t\t\tcontract_timeline: \"Acurtar a cronoloxía\",\n\t\t\twikipedia: \"Dende Wikipedia, a enciclopedia libre\",\n\t\t\tloading_content: \"cargando\",\n\t\t\tloading: \"cargando\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/he.js",
    "content": "﻿/* Hebrew (beta) LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n\tVMM.Language = {\r\n\t\tlang: \"he\",\r\n\t\tright_to_left: true,\r\n\t\tapi: {\r\n\t\t\twikipedia: \"he\"\r\n\t\t},\r\n\t\tdate: {\r\n\t\t\tmonth: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\r\n\t\t\tmonth_abbr: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\r\n\t\t\tday: [\"ראשון\",\"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"],\r\n\t\t\tday_abbr: [\"יום א'\",\"יום ב'\", \"יום ג'\", \"יום ד'\", \"יום ה'\", \"יום ו'\", \"שבת\"]\r\n\t\t}, \r\n\t\tdateformats: {\r\n\t\t\tyear: \"yyyy\",\r\n\t\t\tmonth_short: \"mmm\",\r\n\t\t\tmonth: \"mmmm yyyy\",\r\n\t\t\tfull_short: \"d mmm\",\r\n\t\t\tfull: \"d mmmm,' yyyy\",\r\n\t\t\ttime_short: \"h:MM:ss TT\",\r\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\r\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\r\n\t\t\tfull_long: \"d' mmm,' yyyy 'at' h:MM TT\",\r\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\r\n\t\t},\r\n\t\tmessages: {\r\n\t\t\tloading_timeline: \"טוען את ציר הזמן... \",\r\n\t\t\treturn_to_title: \"חזור לכותרת\",\r\n\t\t\texpand_timeline: \"הרחב את ציר הזמן\",\r\n\t\t\tcontract_timeline: \"צמצם את ציר הזמן\",\r\n\t\t\twikipedia: \"מויקיפדיה, האינציקלופדיה החופשית\",\r\n\t\t\tloading_content: \"התוכן בטעינה...\",\r\n\t\t\tloading: \"טוען...\",\r\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "source/js/Core/Language/locale/hi.js",
    "content": "/*\n    TimelineJS - ver. 2014-12-09-18-51-25 - 2014-12-09\n    Copyright (c) 2012-2013 Northwestern University\n    a project of the Northwestern University Knight Lab, originally created by Zach Wise\n    https://github.com/NUKnightLab/TimelineJS\n    This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.\n    If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.\n*/\nif(typeof VMM!=\"undefined\"){VMM.Language={lang:\"hi\",api:{wikipedia:\"hi\"},date:{month:[\"जनवरी\",\"फ़रवरी\",\"मार्च\",\"अप्रैल\",\"मई\",\"जून\",\"जुलाई\",\"अगस्त\",\"सितम्बर\",\"अक्टूबर\",\"नवंबर\",\"दिसंबर\"],month_abbr:[\"जनवरी\",\"फ़रवरी\",\"मार्च\",\"अप्रैल\",\"मई\",\"जून\",\"जुलाई\",\"अगस्त\",\"सितम्बर\",\"अक्टूबर\",\"नवंबर\",\"दिसंबर\"],day:[\"रविवार\",\"सोमवार\",\"मंगलवार\",\"बुधवार\",\"गुरुवार\",\"शुक्रवार\",\"शनिवार\"],day_abbr:[\"रवि\",\"सोम\",\"मंगल\",\"बुध\",\"गुरु\",\"शुक्र\",\"शनि\"]},dateformats:{year:\"yyyy\",month_short:\"mmm\",month:\"mmmm yyyy\",full_short:\"mmm d\",full:\"mmmm d',' yyyy\",time_no_seconds_short:\"h:MM TT\",time_no_seconds_small_date:\"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",full_long:\"mmm d',' yyyy 'at' h:MM TT\",full_long_small_date:\"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"},messages:{loading_timeline:\"टाइमलाइन लोड हो रहा है\",return_to_title:\"शीर्षक पर लौटें\",expand_timeline:\"टाइमलाइन का विस्तार करें\",contract_timeline:\"टाइमलाइन का अनुबंध करें\",wikipedia:\"विकिपीडिया, मुक्त विश्वकोश से\",loading_content:\"लोड हो रहा है सामग्री\",loading:\"लोड हो रहा है\",swipe_nav:\"Swipe to Navigate\",read_more:\"और पढ़ें\"}}}\n"
  },
  {
    "path": "source/js/Core/Language/locale/hr.js",
    "content": "/* Croatian (Latin) LANGUAGE\n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"hr\",\n\t\tapi: {\n\t\t\twikipedia: \"hr\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"siječnja\", \"veljače\", \"ožujka\", \"travnja\", \"svibnja\", \"lipnja\", \"srpnja\", \"kolovoza\", \"rujna\", \"listopada\", \"studenog\", \"prosinca\"],\n\t\t\tmonth_abbr: [\"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\", \"X\", \"XI\", \"XII\"],\n\t\t\tday: [\"nedjelja\", \"ponedjeljak\", \"utorak\", \"srijeda\", \"četvrtak\", \"petak\", \"subota\"],\n\t\t\tday_abbr: [\"ned\", \"pon\", \"uto\", \"sri\", \"čet\", \"pet\", \"sub\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy.\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy.\",\n\t\t\tfull_short: \"dd. mmm\",\n\t\t\tfull: \"dd. mmmm yyyy.\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'dd. mmmm yyyy.'</small>'\",\n\t\t\tfull_long: \"dd. mmmm yyyy. 'u' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>dd. mmm yyyy.'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Učitavanje... \",\n\t\t\treturn_to_title: \"Početak\",\n\t\t\texpand_timeline: \"Povećaj\",\n\t\t\tcontract_timeline: \"Smanji\",\n\t\t\twikipedia: \"Iz Vikipedije, slobodne enciklopedije\",\n\t\t\tloading_content: \"Sadržaj se učitava\",\n\t\t\tloading: \"Učitava se\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "source/js/Core/Language/locale/hu.js",
    "content": "/* Hungarian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"hu\",\n\t\tapi: {\n\t\t\twikipedia: \"hu\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"január\", \"február\", \"március\", \"április\", \"május\", \"június\", \"július\", \"augusztus\", \"szeptember\", \"október\", \"november\", \"december\"],\n\t\t\tmonth_abbr: [\"jan.\", \"febr.\", \"márc.\", \"ápr.\", \"máj.\", \"jún.\", \"júl.\", \"aug.\", \"szept.\", \"okt.\", \"nov.\", \"dec.\"],\n\t\t\tday: [\"vasárnap\",\"hétfő\", \"kedd\", \"szerda\", \"csütörtök\", \"péntek\", \"szombat\"],\n\t\t\tday_abbr: [\"vas.\",\"hétfő\", \"kedd\", \"szer.\", \"csüt.\", \"pén.\", \"szom.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"yyyy. mmmm\",\n\t\t\tfull_short: \"mmm d.\",\n\t\t\tfull: \"yyyy. mmmm d.\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM '<br/><small>'yyyy. mmmm d.'</small>'\",\n\t\t\tfull_long: \"yyyy. mmm d.',' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM '<br/><small>yyyy. mmm d.'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Az idővonal betöltése... \",\n\t\t\treturn_to_title: \"Vissza a címhez\",\n\t\t\texpand_timeline: \"Nagyítás\",\n\t\t\tcontract_timeline: \"Kicsinyítés\",\n\t\t\twikipedia: \"A Wikipédiából, a szabad enciklopédiából\",\n\t\t\tloading_content: \"Tartalom betöltése\",\n\t\t\tloading: \"Betöltés\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/hy.js",
    "content": "/* Armenian LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"hy\",\n\t\tapi: {\n\t\t\twikipedia: \"hy\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Հունվար\", \"Փետրվար\", \"Մարտ\", \"Ապրիլ\", \"Մայիս\", \"Հունիս\", \"Հուլիս\", \"Օգոստոս\", \"Սեպտեմբեր\", \"Հոկտեմբեր\", \"Նոյեմբեր\", \"Դեկտեմբեր\"],\n\t\t\tmonth_abbr: [\"Հնվ.\", \"Փետ.\", \"Մար\", \"Ապր\", \"Մայ\", \"Հուն\", \"Հուլ\", \"Օգս.\", \"Սեպ.\", \"Հոկ.\", \"Նոյ.\", \"Դեկ.\"],\n\t\t\tday: [\"Կիրակի\",\"Երկուշաբթի\", \"Երեքշաբթի\", \"Չորեքշաբթի\", \"Հինգշաբթի\", \"Ուրբաթ\", \"Շաբաթ\"],\n\t\t\tday_abbr: [\"Կի.\",\"Եկ.\", \"Եք.\", \"Չո.\", \"Հի.\", \"Ու.\", \"Շա.\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm',' yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"H:MM\",\n\t\t\ttime_no_seconds_small_date: \"H:MM'<br/><small>'d mmmm',' yyyy'</small>'\",\n\t\t\tfull_long: \"d mmm',' yyyy 'at' H:MM\",\n\t\t\tfull_long_small_date: \"H:MM '<br/><small>d mmm',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Ժամանակագրությունը բեռնվում է... \",\n\t\t\treturn_to_title: \"Վերադառնալ վերնագրին\",\n\t\t\texpand_timeline: \"Լայնացնել ժամանակագրությունը\",\n\t\t\tcontract_timeline: \"Նեղացնել ժամանակագրությունը\",\n\t\t\twikipedia: \"Ըստ Վիքիպեդիա ազատ հանրագիտարանի\",\n\t\t\tloading_content: \"Բովանդակությունը բեռնվում է\",\n\t\t\tloading: \"Բեռնում\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/id.js",
    "content": "/* Indonesian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"id\",\n\t\tapi: {\n\t\t\twikipedia: \"id\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Januari\", \"Februari\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Agustus\", \"September\", \"Oktober\", \"November\", \"Desember\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"Maret\", \"April\", \"Mei\", \"Juni\", \"July\", \"Agus.\", \"Sept.\", \"Okt.\", \"Nov.\", \"Des.\"],\n\t\t\tday: [\"Ahad\",\"Senin\", \"Selasa\", \"Rabu\", \"Kamis\", \"Jum'at\", \"Sabtu\"],\n\t\t\tday_abbr: [\"Ahad\",\"Sen.\", \"Sel.\", \"Rabu\", \"Kamis\", \"Jum.\", \"Sab.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy 'pukul' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Memuat Timeline... \",\n\t\t\treturn_to_title: \"Kembali ke Judul\",\n\t\t\texpand_timeline: \"Kembangkan Timeline\",\n\t\t\tcontract_timeline: \"Ciutkan Timeline\",\n\t\t\twikipedia: \"dari Wikipedia, ensiklopedia bebas\",\n\t\t\tloading_content: \"Memuat Isi\",\n\t\t\tloading: \"Memuat\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/is.js",
    "content": "/* Icelandic LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"is\",\n\t\tapi: {\n\t\t\twikipedia: \"is\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"janúar\", \"febrúar\", \"mars\", \"apríl\", \"maí\", \"júní\", \"júlí\", \"ágúst\", \"september\", \"október\", \"nóvember\", \"desember\"],\n\t\t\tmonth_abbr: [\"jan.\", \"feb.\", \"mars\", \"apríl\", \"maí\", \"júní\", \"júlí\", \"ágúst\", \"sept.\", \"okt.\", \"nóv.\", \"des.\"],\n\t\t\tday: [\"sunnudagur\", \"mánudagur\", \"þriðjudagur\", \"miðvikudagur\", \"fimmtudagur\", \"föstudagur\", \"laugardagur\"],\n\t\t\tday_abbr: [\"sun.\",\"mán.\", \"þri.\", \"mið.\", \"fim.\", \"fös.\", \"lau.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d'.' mmm\",\n\t\t\tfull: \"d'.' mmmm yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"hh:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"hh:MM TT'<br/><small>'d'.' mmmm  yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d'.' mmm  yyyy 'kl.' hh:MM TT\",\n\t\t\tfull_long_small_date: \"hh:MM TT'<br/><small>'dddd',' d'.' mmm  yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Raða upp tímalínu... \",\n\t\t\treturn_to_title: \"Til baka á forsíðu\",\n\t\t\texpand_timeline: \"Stækka tímalínu\",\n\t\t\tcontract_timeline: \"Minnka tímalínu\",\n\t\t\twikipedia: \"From Wikipedia, the free encyclopedia\",\n\t\t\tloading_content: \"Raða\",\n\t\t\tloading: \"Raða\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/it.js",
    "content": "/* Italian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"it\",\n\t\tapi: {\n\t\t\twikipedia: \"it\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Gennaio\",\"Febbraio\",\"Marzo\",\"Aprile\",\"Maggio\",\"Giugno\",\"Luglio\",\"Agosto\",\"Settembre\",\"Ottobre\",\"Novembre\",\"Dicembre\"],\n\t\t\tmonth_abbr: [\"Gen\",\"Feb\",\"Mar\",\"Apr\",\"Mag\",\"Giu\",\"Lug\",\"Ago\",\"Set\",\"Ott\",\"Nov\",\"Dic\"],\n\t\t\tday: [\"Domenica\",\"Lunedí\",\"Martedí\",\"Mercoledí\",\"Giovedí\",\"Venerdí\",\"Sabato\"],\n\t\t\tday_abbr: [\"Dom.\",\"Lun.\",\"Mar.\",\"Mer.\",\"Gio.\",\"Ven.\",\"Sab.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy 'alle' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Caricamento Timeline... \",\n\t\t\treturn_to_title: \"Ritorna all'inizio\",\n\t\t\texpand_timeline: \"Espandi la Timeline\",\n\t\t\tcontract_timeline: \"Contrai la Timeline\",\n\t\t\twikipedia: \"Wikipedia, L’enciclopedia libera\",\n\t\t\tloading_content: \"Caricamento contenuti\",\n\t\t\tloading: \"Caricamento\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t\t\n\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/iw.js",
    "content": "﻿/* Hebrew (beta) LANGUAGE \r\n================================================== */\r\ntrace(\"Language code 'iw' for Hebrew is deprecated. Use 'he' instead.\")\r\nif(typeof VMM != 'undefined') {\r\n\tVMM.Language = {\r\n\t\tlang: \"iw\",\r\n\t\tright_to_left: true,\r\n\t\tapi: {\r\n\t\t\twikipedia: \"he\"\r\n\t\t},\r\n\t\tdate: {\r\n\t\t\tmonth: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\r\n\t\t\tmonth_abbr: [\"ינואר\", \"פברואר\", \"מרץ\", \"אפריל\", \"מאי\", \"יוני\", \"יולי\", \"אוגוסט\", \"ספטמבר\", \"אוקטובר\", \"נובמבר\", \"דצמבר\"],\r\n\t\t\tday: [\"ראשון\",\"שני\", \"שלישי\", \"רביעי\", \"חמישי\", \"שישי\", \"שבת\"],\r\n\t\t\tday_abbr: [\"יום א'\",\"יום ב'\", \"יום ג'\", \"יום ד'\", \"יום ה'\", \"יום ו'\", \"שבת\"]\r\n\t\t}, \r\n\t\tdateformats: {\r\n\t\t\tyear: \"yyyy\",\r\n\t\t\tmonth_short: \"mmm\",\r\n\t\t\tmonth: \"mmmm yyyy\",\r\n\t\t\tfull_short: \"d mmm\",\r\n\t\t\tfull: \"d mmmm,' yyyy\",\r\n\t\t\ttime_short: \"h:MM:ss TT\",\r\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\r\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\r\n\t\t\tfull_long: \"d' mmm,' yyyy 'at' h:MM TT\",\r\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\r\n\t\t},\r\n\t\tmessages: {\r\n\t\t\tloading_timeline: \"טוען את ציר הזמן... \",\r\n\t\t\treturn_to_title: \"חזור לכותרת\",\r\n\t\t\texpand_timeline: \"הרחב את ציר הזמן\",\r\n\t\t\tcontract_timeline: \"צמצם את ציר הזמן\",\r\n\t\t\twikipedia: \"מויקיפדיה, האינציקלופדיה החופשית\",\r\n\t\t\tloading_content: \"התוכן בטעינה...\",\r\n\t\t\tloading: \"טוען...\",\r\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\r\n\t}\r\n}"
  },
  {
    "path": "source/js/Core/Language/locale/ja.js",
    "content": "/* Japanese LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"ja\",\n\t\tapi: {\n\t\t\twikipedia: \"ja\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\t\tmonth_abbr: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\t\tday: [\"日曜日\", \"月曜日\", \"火曜日\", \"水曜日\", \"木曜日\", \"金曜日\", \"土曜日\"],\n\t\t\tday_abbr: [\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy年\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"yyyy年 m月d日 (ddd)\",\n\t\t\tfull_short: \"yyyy年m月d日\",\n\t\t\tfull: \"yyyy年 m月d日 (ddd)\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'yyyy年m月d日'</small>'\",\n\t\t\tfull_long: \"yyyy年m月d日 H時M分s秒\",\n\t\t\tfull_long_small_date: \"HH:MM:ss'<br/><small>'yyyy年m月d日'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"タイムラインをロードしています…\",\n\t\t\treturn_to_title: \"タイトルへ戻ります\",\n\t\t\texpand_timeline: \"タイムラインを展開します\",\n\t\t\tcontract_timeline: \"タイムラインを縮めます\",\n\t\t\twikipedia: \"出典：フリー百科事典『ウィキペディア（Wikipedia）』\",\n\t\t\tloading_content: \"コンテンツをロードしています\",\n\t\t\tloading: \"ローディング\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/ka.js",
    "content": "/* Georgian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"ka\",\n\t\tapi: {\n\t\t\twikipedia: \"ka\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"იანვარი\", \"თებერვალი\", \"მარტი\", \"აპრილი\", \"მაისი\", \"ივნისი\", \"ივლისი\", \"აგვისტო\", \"სექტემბერი\", \"ოქტომბერი\", \"ნოემბერი\", \"დეკემბერი\"],\n\t\t\tmonth_abbr: [\"იან.\", \"თებ.\", \"მარტი\", \"აპრ\", \"მაი.\", \"ივნ.\", \"ივლ.\", \"აგვ.\", \"სექ.\", \"ოქტ.\", \"ნოე.\", \"დეკ.\"],\n\t\t\tday: [\"კვირა\",\"ორშაბათი\", \"სამშაბათი\", \"ოთხშაბათი\", \"ხუთშაბათი\", \"პარასკევი\", \"შაბათი\"],\n\t\t\tday_abbr: [\"კვ.\",\"ორ.\", \"სამ.\", \"ოთხ.\", \"ხუთ.\", \"პარ.\", \"შაბ.\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' h:MM TT\",\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"იტვირთება თაიმლაინი... \",\n\t\t\treturn_to_title: \"დაბრუნდი თავში\",\n\t\t\texpand_timeline: \"გაშალე თაიმლაინი\",\n\t\t\tcontract_timeline: \"Contract Timeline\",\n\t\t\twikipedia: \"თავისუფალი ენციკლოპედია Wikipedia-დან\",\n\t\t\tloading_content: \"შინაარსის ჩამოტვირთვა\",\n\t\t\tloading: \"ჩამოტვირთვა\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/ko.js",
    "content": "/* Korean LANGUAGE \n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"ko\",\n\t\tapi: {\n\t\t\twikipedia: \"ko\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\n\t\t\tmonth_abbr: [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"],\n\t\t\tday: [\"일요일\", \"월요일\", \"화요일\", \"수요일\", \"목요일\", \"금요일\", \"토요일\"],\n\t\t\tday_abbr: [\"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mm\",\n\t\t\tmonth: \"yyyy년 m월\",\n\t\t\tfull_short: \"mm-dd\",\n\t\t\tfull: \"yyyy년 m월 d일 \",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'yyyy mmm d'</small>'\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy 'um' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd','yyyy mmm d'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"타임라인을 불러오고 있습니다.... \",\n\t\t\treturn_to_title: \"첫화면으로\",\n\t\t\texpand_timeline: \"타임라인 확대\",\n\t\t\tcontract_timeline: \"타임라인 축소\",\n\t\t\twikipedia: \"출처: 위키피디아, 우리 모두의 백과사전\",\n\t\t\tloading_content: \"내용을 불러오고 있습니다.\",\n\t\t\tloading: \"불러오는중\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/lb.js",
    "content": "/* Luxembourgish LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\nVMM.Language = {\nlang: \"lb\",\napi: {\nwikipedia: \"lb\"\n},\ndate: {\nmonth: [\"Januar\", \"Februar\", \"Mäerz\", \"Abrëll\", \"Mee\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\nmonth_abbr: [\"Jan.\", \"Feb.\", \"Mäe.\", \"Abr.\", \"Mee\", \"Jun.\", \"Jul\", \"Aug.\", \"Sept.\", \"Okt.\", \"Nov.\", \"Dez.\"],\nday: [\"Sonndeg\",\"Méindeg\", \"Dënschdeg\", \"Mëttwoch\", \"Donneschden\", \"Freiden\", \"Samschden\"],\nday_abbr: [\"Son.\",\"Méi.\", \"Dë.\", \"Më.\", \"Do.\", \"Fr.\", \"Sa.\"]\n},\ndateformats: {\nyear: \"yyyy\",\nmonth_short: \"mmm\",\nmonth: \"mmmm yyyy\",\nfull_short: \"mmm d\",\nfull: \"d'.' mmmm yyyy\",\ntime_short: \"hh:MM:ss\",\ntime_no_seconds_short: \"hh:MM\",\ntime_no_seconds_small_date: \"h:MM TT'<br/><small>'d'.' mmmm yyyy'</small>'\",\nfull_long: \"d'.' mmm yyyy 'um' hh:MM TT\",\nfull_long_small_date: \"hh:MM'<br/><small>d'.' mmm yyyy'</small>'\"\n},\nmessages: {\nloading_timeline: \"Timeline gëtt gelueden... \",\nreturn_to_title: \"Zeréck zum Titel\",\nexpand_timeline: \"Timeline vergréisseren\",\ncontract_timeline: \"Timeline verklengeren\",\nwikipedia: \"Vu Wikipedia, der fräier Enzyklopedie\",\nloading_content: \"Inhalt lued\",\nloading: \"Lued\"\n}\n}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/lt.js",
    "content": "/* Lithuanian LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n        VMM.Language = {\r\n                lang: \"lt\",\r\n                api: {\r\n                        wikipedia: \"lt\"\r\n                },\r\n                date: {\r\n                        month: [\"Sausio\", \"Vasario\", \"Kovo\", \"Balandžio\", \"Gegužės\", \"Birželio\", \"Liepos\", \"Rugpjūčio\", \"Rugsėjo\", \"Spalio\", \"Lapkričio\", \"Gruodžio\"],\r\n                        month_abbr: [\"Saus.\", \"Vas.\", \"Kov.\", \"Bal.\", \"Geg.\", \"Birž.\", \"Liep.\", \"Rugpj.\", \"Rug.\", \"Spal.\", \"Lapkr.\", \"Gruod.\"],\r\n                        day: [\"Sekmadienis\", \"Pirmadienis\", \"Antradienis\", \"Trečiadienis\", \"Ketvirtadienis\", \"Penktadienis\", \"Šeštadienis\"],\r\n                        day_abbr: [\"Sek.\",\"Pirm.\", \"Antr.\", \"Treč.\", \"Ketv.\", \"Penkt.\", \"Šešt.\"]\r\n                }, \r\n                dateformats: {\r\n                        year: \"yyyy\",\r\n                        month_short: \"mmm\",\r\n                        month: \"mmmm yyyy\",\r\n                        full_short: \"mmm d\",\r\n                        full: \"mmmm d',' yyyy\",\r\n                        time_short: \"h:MM:ss TT\",\r\n                        time_no_seconds_short: \"h:MM TT\",\r\n                        time_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\r\n                        full_long: \"mmm d',' yyyy 'at' h:MM TT\",\r\n                        full_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\r\n                },\r\n                messages: {\r\n                        loading_timeline: \"Kraunama laiko juosta... \",\r\n                        return_to_title: \"Grįžti į titulinį\",\r\n                        expand_timeline: \"Išplėsti laiko juostą\",\r\n                        contract_timeline: \"Sutraukti laiko juostą\",\r\n                        wikipedia: \"Iš Vikipedijos, laisvosios enciklopedijos\",\r\n                        loading_content: \"Kraunamas turinys... \",\r\n                        loading: \"Kraunama\"\r\n                }\r\n        }\r\n}"
  },
  {
    "path": "source/js/Core/Language/locale/lv.js",
    "content": "/* Latvian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"lv\",\n\t\tapi: {\n\t\t\twikipedia: \"lv\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Janvāris\", \"Februāris\", \"Marts\", \"Aprīlis\", \"Maijs\", \"Jūnijs\", \"Jūlijs\", \"Augusts\", \"Septembris\", \"Oktobris\", \"Novembris\", \"Decembris\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"Mar.\", \"Apr.\", \"Mai.\", \"Jūn.\", \"Jūl.\", \"Aug.\", \"Sep.\", \"Okt.\", \"Nov.\", \"Dec.\"],\n\t\t\tday: [\"Svētdiena\", \"Pirmdiena\", \"Otrdiena\", \"Trešdiena\", \"Ceturtdiena\", \"Piektdiena\", \"Sestdiena\"],\n\t\t\tday_abbr: [\"Sun.\", \"Mon.\", \"Tues.\", \"Wed.\", \"Thurs.\", \"Fri.\", \"Sat.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"d. mmmm',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"HH:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' hh:MM TT\",\n\t\t\tfull_long_small_date: \"hh:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Ielādējas grafiks... \",\n\t\t\treturn_to_title: \"Atgriezties uz sākumu\",\n\t\t\texpand_timeline: \"Izvērst grafiku\",\n\t\t\tcontract_timeline: \"Sašaurināt grafiku\",\n\t\t\twikipedia: \"No Wikipedia, brīvās enciklopēdijas\",\n\t\t\tloading_content: \"Ielādējas saturs\",\n\t\t\tloading: \"Ielādējas\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/ms.js",
    "content": "/* Malay LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"ms\",\n\t\tapi: {\n\t\t\twikipedia: \"ms\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Januari\", \"Februari\", \"Mac\", \"April\", \"Mei\", \"Jun\", \"Julai\", \"Ogos\", \"September\", \"Oktober\", \"November\", \"Disember\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"Mac\", \"Apr\", \"Mei\", \"Jun\", \"Jul\", \"Ogos.\", \"Sept.\", \"Okt.\", \"Nov.\", \"Dis.\"],\n\t\t\tday: [\"Ahad\",\"Isnin\", \"Selasa\", \"Rabu\", \"Khamis\", \"Jumaat\", \"Sabtu\"],\n\t\t\tday_abbr: [\"Ahd.\",\"Isn.\", \"Sel.\", \"Rab.\", \"Kha.\", \"Jum.\", \"Sab.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"d mmm yyyy 'jam' h:MM TT\",\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Memuat Garis Masa... \",\n\t\t\treturn_to_title: \"Kembali ke Tajuk\",\n\t\t\texpand_timeline: \"Besarkan Garis Masa\",\n\t\t\tcontract_timeline: \"Kecilkan Garis Masa\",\n\t\t\twikipedia: \"Daripada Wikipedia, ensiklopedia bebas.\",\n\t\t\tloading_content: \"Memuat Kandungan\",\n\t\t\tloading: \"Memuat\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/ne.js",
    "content": "﻿/* Nepali LANGUAGE \r\n================================================== */\r\nif(typeof VMM != 'undefined') {\r\n        VMM.Language = {\r\n                lang: \"ne\",\r\n                api: {\r\n                        wikipedia: \"ne\"\r\n                },\r\n                date: {\r\n                        month: [\"जनवरी\", \"फेब्रुवरी\", \"मार्च\", \"अप्रिल\", \"मे\", \"जून\", \"जुलाई\", \"अगस्ट\", \"सेप्टेम्बर\", \"अक्टोबर\", \"नोभेम्बर\", \"डिसेम्बर\"],\r\n                        month_abbr: [\"जनवरी\", \"फेब्रुवरी\", \"मार्च\", \"अप्रिल\", \"मे\", \"जून\", \"जुलाई\", \"अगस्ट\", \"सेप्टेम्बर\", \"अक्टोबर\", \"नोभेम्बर\", \"डिसेम्बर\"],\r\n                        day: [\"आइतबार\",\"सोमबार\", \"मंगलबार\", \"बुधबार\", \"बिहिबार\", \"शुक्रबार\", \"शनिबार\"],\r\n                        day_abbr: [\"आइतबार\",\"सोमबार\", \"मंगलबार\", \"बुधबार\", \"बिहिबार\", \"शुक्रबार\", \"शनिबार\"]\r\n                }, \r\n                dateformats: {\r\n                        year: \"yyyy\",\r\n                        month_short: \"mmm\",\r\n                        month: \"mmmm yyyy\",\r\n                        full_short: \"mmm d\",\r\n                        full: \"mmmm d',' yyyy\",\r\n                        time_short: \"h:MM:ss TT\",\r\n                        time_no_seconds_short: \"h:MM TT\",\r\n                        time_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\r\n                        full_long: \"mmm d',' yyyy 'at' h:MM TT\",\r\n                        full_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\r\n                },\r\n                messages: {\r\n                        loading_timeline: \"टाइमलाइन लोड हुदैछ... \",\r\n                        return_to_title: \"शीर्षकमा फर्कनुहोस्\",\r\n                        expand_timeline: \"टाइमलाइन लामो बनाउनुहोस्\",\r\n                        contract_timeline: \"टाइमलाइन छोटो बनाउनुहोस्\",\r\n                        wikipedia: \"विकिपिडियाबाट\",\r\n                        loading_content: \"सामग्री लोड हुदैछ\",\r\n                        loading: \"लोड हुदैछ\"\r\n                }\r\n        }\r\n}"
  },
  {
    "path": "source/js/Core/Language/locale/nl.js",
    "content": "/* Dutch LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"nl\",\n\t\tapi: {\n\t\t\twikipedia: \"nl\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"],\n\t\t\tmonth_abbr: [\"jan\", \"febr\", \"maa\", \"apr\", \"mei\", \"juni\", \"juli\", \"aug\", \"sept\", \"okt\", \"nov\", \"dec\"],\n\t\t\tday: [\"zondag\",\"maandag\", \"dinsdag\", \"woensdag\", \"donderdag\", \"vrijdag\", \"zaterdag\"],\n\t\t\tday_abbr: [\"zo\",\"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy 'om' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Tijdlijn laden ... \",\n\t\t\treturn_to_title: \"Terug naar het begin\",\n\t\t\texpand_timeline: \"Tijdlijn uitzoomen\",\n\t\t\tcontract_timeline: \"Tijdlijn inzoomen\",\n\t\t\twikipedia: \"From Wikipedia, the free encyclopedia\",\n\t\t\tloading_content: \"Inhoud laden\",\n\t\t\tloading: \"Laden\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/no.js",
    "content": "/* Norwegian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"no\",\n\t\tapi: {\n\t\t\twikipedia: \"no\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Januar\", \"Februar\", \"Mars\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Desember\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"Mars\", \"Apr.\", \"Mai\", \"Juni\", \"Juli\", \"Aug.\", \"Sep.\", \"Okt.\", \"Nov.\", \"Des.\"],\n\t\t\tday: [\"Søndag\", \"Mandag\", \"Tirsdag\", \"Onsdag\", \"Torsdag\", \"Fredag\", \"Lørdag\"],\n\t\t\tday_abbr: [\"Søn.\", \"Man.\", \"Tir.\", \"Ons.\", \"Tor.\", \"Fre.\", \"Lør.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d. mmm\",\n\t\t\tfull: \"d. mmmm',' yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d. mmmm',' yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d. mmm',' yyyy 'kl.' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' d. mmm',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Laster tidslinje... \",\n\t\t\treturn_to_title: \"Tilbake til tittel\",\n\t\t\texpand_timeline: \"Utvid tidslinje\",\n\t\t\tcontract_timeline: \"Krymp tidslinje\",\n\t\t\twikipedia: \"Fra Wikipedia, den frie encyklopedi\",\n\t\t\tloading_content: \"Laster innhold\",\n\t\t\tloading: \"Laster\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/pl.js",
    "content": "/* Polish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"pl\",\n\t\tapi: {\n\t\t\twikipedia: \"pl\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Stycznia\", \"Lutego\", \"Marca\", \"Kwietnia\", \"Maja\", \"Czerwca\", \"Lipca\", \"Sierpnia\", \"Września\", \"Października\", \"Listopada\", \"Grudnia\"],\n\t\t\tmonth_abbr: [\"Sty.\", \"Lut.\", \"Mar.\", \"Kwi.\", \"Maj.\", \"Cze.\", \"Lip.\", \"Sie.\", \"Wrz.\", \"Paź.\", \"Lis.\", \"Gru.\"],\n\t\t\tday: [\"Niedziela\", \"Poniedziałek\", \"Wtorek\", \"Środa\", \"Czwartek\", \"Piątek\", \"Sobota\"],\n\t\t\tday_abbr: [\"Nie.\", \"Pon.\", \"Wto.\", \"Śro.\", \"Czw.\", \"Pią.\", \"Sob.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d mmmm yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d mmm yyyy 'um' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' d mmm yyyy'</small>'\"\n\t\t},\n\t\tmessages:{\n\t\t\tloading_timeline: \"Ładowanie osi czasu... \",\n\t\t\treturn_to_title: \"Wróć do tytułu\",\n\t\t\texpand_timeline: \"Powiększ oś czasu\",\n\t\t\tcontract_timeline: \"Pomniejsz oś czasu\",\n\t\t\twikipedia: \"Z Wikipedii, wolnej encyklopedii\",\n\t\t\tloading_content: \"Ładowanie zawartości\",\n\t\t\tloading: \"Ładowanie\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/pt-br.js",
    "content": "/* Brazilian Portuguese LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"pt-br\",\n\t\tapi: {\n\t\t\twikipedia: \"pt\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Fev.\", \"Mar.\", \"Abr.\", \"Mai.\", \"Jun.\", \"Jul.\", \"Ago.\", \"Set.\", \"Out.\", \"Nov.\", \"Dez.\"],\n\t\t\tday: [\"Domingo\",\"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sábado\"],\n\t\t\tday_abbr: [\"Dom.\",\"Seg.\", \"Ter.\", \"Qua.\", \"Qui.\", \"Sex.\", \"Sáb.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm 'de' yyyy\",\n\t\t\tfull_short: \"d 'de' mmm\",\n\t\t\tfull: \"d 'de' mmmm',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"hh:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"hh:MM TT'<br/><small>'d 'de' mmmm',' yyyy'</small>'\",\n\t\t\tfull_long: \"dddd',' d 'de' mmm',' yyyy 'às' hh:MM TT\",\n\t\t\tfull_long_small_date: \"hh:MM TT'<br/><small>'dddd',' d 'de' mmm',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Carregando Timeline... \",\n\t\t\treturn_to_title: \"Voltar para o título\",\n\t\t\texpand_timeline: \"Expandir Timeline\",\n\t\t\tcontract_timeline: \"Contrair Timeline\",\n\t\t\twikipedia: \"Wikipédia, A enciclopédia livre\",\n\t\t\tloading_content: \"Carregando Conteúdo\",\n\t\t\tloading: \"Carregando\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/pt.js",
    "content": "/* Portuguese LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"pt\",\n\t\tapi: {\n\t\t\twikipedia: \"pt\"\n\t\t},\n\t\tdate: {\n\t\t    month: [\"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"],\n\t\t\tmonth_abbr: [\"Jan\", \"Fev\", \"Mar\", \"Abr\", \"Maio\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Out\", \"Nov\", \"Dez\"],\n\t\t\tday: [\"Domingo\",\"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\", \"Sabado\"],\n\t\t\tday_abbr: [\"Dom\",\"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' hh:MM TT\",\n\t\t\tfull_long_small_date: \"hh:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"A carregar a timeline... \",\n\t\t\treturn_to_title: \"Voltar ao Título\",\n\t\t\texpand_timeline: \"Expandir Timeline\",\n\t\t\tcontract_timeline: \"Colapsar Timeline\",\n\t\t\twikipedia: \"Wikipedia, A enciclopedia Livre.\",\n\t\t\tloading_content: \"A carregar o conteúdo\",\n\t\t\tloading: \"A carregar\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/rm.js",
    "content": "/* Romansh / Rumantsch LANGUAGE\n================================================== */\nif(typeof VMM != 'undefined') {\n    VMM.Language = {\n        lang: \"rm\",\n        api: {\n            wikipedia: \"rm\"\n        },\n        date: {\n            month: [\"Schaner\", \"Favrer\", \"Mars\", \"Avrigl\", \"Matg\", \"Zercladur\", \"Fanadur\", \"Avust\", \"Settember\", \"October\", \"November\", \"December\"],\n            month_abbr: [\"Schan.\", \"Favr.\", \"Mars\", \"Avr.\", \"Matg\", \"Zercl.\", \"Fan.\", \"Avust\", \"Sett.\", \"Oct.\", \"Nov.\", \"Dec.\"],\n            day: [\"Dumengia\",\"Glindesdi\", \"Mardi\", \"Mesemna\", \"Gievgia\", \"Venderdi\", \"Sonda\"],\n            day_abbr: [\"Du\",\"Gli\", \"Ma\", \"Me\", \"Gie\", \"Ve\", \"So\"]\n        },\n        dateformats: {\n            year: \"yyyy\",\n            month_short: \"mmm\",\n            month: \"mmmm yyyy\",\n            full_short: \"d 'da' mmm\",\n            full: \"d 'da' mmmm yyyy\",\n            time_short: \"HH:M:s\",\n            time_no_seconds_short: \"HH:M\",\n            time_no_seconds_small_date: \"HH:M'<br/><small>'d 'da' mmmm yyyy'</small>'\",\n            full_long: \"d 'da' mmm yyyy', las' HH:M\",\n            full_long_small_date: \"HH:M'<br/><small>d 'da' mmm yyyy'</small>'\"\n        },\n        messages: {\n            loading_timeline: \"Chargiar la cronologia... \",\n            return_to_title: \"Turnar al titel\",\n            expand_timeline: \"Expander la cronologia\",\n            contract_timeline: \"Contract Timeline\",\n            wikipedia: \"Da Vichipedia, l'enciclopedia libra\",\n            loading_content: \"Chargiar il cuntegn\",\n            loading: \"Chargiar\"\n        }\n    }\n}"
  },
  {
    "path": "source/js/Core/Language/locale/ro.js",
    "content": "/* Romanian LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n    VMM.Language = {\n        lang: \"ro\",\n        api: {\n            wikipedia: \"ro\"\n        },\n        date: {\n            month: [\"Ianuarie\", \"Februarie\", \"Martie\", \"Aprilie\", \"Mai\", \"Iunie\", \"Iulie\", \"August\", \"Septembrie\", \"Octombrie\", \"Noiembrie\", \"Decembrie\"],\n            month_abbr: [\"Ian.\", \"Feb.\", \"Mar.\", \"Apr.\", \"Mai\", \"Iun.\", \"Iul.\", \"Aug.\", \"Sep.\", \"Oct.\", \"Noi.\", \"Dec.\"],\n            day: [\"Duminică\",\"Luni\", \"Marți\", \"Miercuri\", \"Joi\", \"Vineri\", \"Sâmbătă\"],\n            day_abbr: [\"Dum.\",\"Luni\", \"Mar.\", \"Mie.\", \"Joi\", \"Vin.\", \"Sâm.\"]\n        }, \n        dateformats: {\n            year: \"yyyy\",\n            month_short: \"mmm\",\n            month: \"mmmm yyyy\",\n            full_short: \"d mmm\",\n            full: \"d mmmm',' yyyy\",\n            time_short: \"h:MM:ss TT\",\n            time_no_seconds_short: \"h:MM TT\",\n            time_no_seconds_small_date: \"h:MM TT'<br/><small>'d mmmm',' yyyy'</small>'\",\n            full_long: \"d mmm',' yyyy 'at' h:MM TT\",\n            full_long_small_date: \"h:MM TT'<br/><small>d mmm',' yyyy'</small>'\"\n        },\n        messages: {\n            loading_timeline: \"Se încarcă cronologia... \",\n            return_to_title: \"Înapoi la titlu\",\n            expand_timeline: \"Extinde cronologia\",\n            contract_timeline: \"Restrânge cronologia\",\n            wikipedia: \"De pe Wikipedia, enciclopedia gratuită\",\n            loading_content: \"Se încarcă conținutul\",\n            loading: \"Se încarcă\"\n        }\n    }\n}"
  },
  {
    "path": "source/js/Core/Language/locale/ru.js",
    "content": "/*\n    TimelineJS - ver. 2.30.0 - 2014-02-20\n    Copyright (c) 2012-2013 Northwestern University\n    a project of the Northwestern University Knight Lab, originally created by Zach Wise\n    https://github.com/NUKnightLab/TimelineJS\n    This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.\n    If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.\n*/\n/* Russian LANGUAGE \n ================================================== */\ntypeof VMM != \"undefined\" && (VMM.Language = {\n\tlang: \"ru\",\n\tapi: {\n\t\twikipedia: \"ru\"\n\t},\n\tdate: {\n\t\tmonth: [\"января\", \"февраля\", \"марта\", \"апреля\", \"мая\", \"июня\", \"июля\", \"августа\", \"сентября\", \"октября\", \"ноября\", \"декабря\"],\n\t\tmonth_abbr: [\"янв.\", \"фев.\", \"март\", \"апр.\", \"май\", \"июнь\", \"июль\", \"авг.\", \"сент.\", \"окт.\", \"нояб.\", \"дек.\"],\n\t\tday: [\"воскресенье\", \"понедельник\", \"вторник\", \"среда\", \"четверг\", \"пятница\", \"суббота\"],\n\t\tday_abbr: [\"вск.\", \"пн.\", \"вт.\", \"ср.\", \"чт.\", \"пт.\", \"сб.\"]\n\t},\n\tdateformats: {\n\t\tyear: \"yyyy\",\n\t\tmonth_short: \"mmm\",\n\t\tmonth: \"mmmm yyyy\",\n\t\tfull_short: \"d mmm\",\n\t\tfull: \"d mmmm',' yyyy\",\n\t\ttime_short: \"H:MM:ss\",\n\t\ttime_no_seconds_short: \"H:MM\",\n\t\ttime_no_seconds_small_date: \"H:MM'<br/><small>'d mmmm',' yyyy'</small>'\",\n\t\tfull_long: \"d mmm',' yyyy 'в' HH:MM\",\n\t\tfull_long_small_date: \"HH:MM'<br/><small>d mmm',' yyyy'</small>'\"\n\t},\n\tmessages: {\n\t\tloading_timeline: \"Загрузка... \",\n\t\treturn_to_title: \"Вернуться к заголовку\",\n\t\texpand_timeline: \"Увеличить\",\n\t\tcontract_timeline: \"Уменьшить\",\n\t\twikipedia: \"Из Wikipedia\",\n\t\tloading_content: \"Загрузка контента\",\n\t\tloading: \"Загрузка\"\n\t}\n});"
  },
  {
    "path": "source/js/Core/Language/locale/si.js",
    "content": "/* Sinhalese LANGUAGE \n================================================== */\ntypeof VMM != \"undefined\" && (VMM.Language = {\n    lang: \"si\",\n    api: {\n        wikipedia: \"si\"\n    },\n    date: {\n        month: [\"ජනවාරි\", \"පෙබරවාරි\", \"මාර්තු\", \"අප්‍රේල්\", \"මැයි\", \"ජූනි\", \"ජූලි\", \"අගෝස්තු\", \"සැප්තැම්බර්\", \"ඔක්තෝම්බර්\", \"නොවැම්බර්\", \"දෙසැම්බර්\"],\n        month_abbr: [\"ජන.\", \"පෙබ.\", \"මාර්තු\", \"අප්‍රේල්\", \"මැයි\", \"ජුනි\", \"ජුලි\", \"අගෝ.\", \"සැප්.\", \"ඔක්.\", \"නොවැ.\", \"දෙසැ.\"],\n        day: [\"ඉරිදා\", \"සදුදා\", \"අගහරුවදා\", \"බදාදා\", \"බ්‍රහස්පතින්දා\", \"සිකුරාදා\", \"සෙනසුරාදා\"],\n        day_abbr: [\"ඉරි.\", \"සදු.\", \"අග.\", \"බදා.\", \"බ්‍රහස්.\", \"සිකු.\", \"සෙන.\"]\n    },\n    dateformats: {\n        year: \"yyyy\",\n        month_short: \"mmm\",\n        month: \"mmmm yyyy\",\n        full_short: \"mmm d\",\n        full: \"mmmm d',' yyyy\",\n        time_no_seconds_short: \"h:MM TT\",\n        time_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n        full_long: \"mmm d',' yyyy 'at' h:MM TT\",\n        full_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n    },\n    messages: {\n        loading_timeline: \"කාල රේඛාව ලෝඩ් වෙමින්... \",\n        return_to_title: \"නැවත මාතෘකාවට\",\n        expand_timeline: \"කාල රේඛාව විහිදන්න\",\n        contract_timeline: \"කාල රේඛාව අකුලන්න\",\n        wikipedia: \"විකිපීඩියා, නිදහස් විශ්වකෝෂය වෙතින්\",\n        loading_content: \"අන්තර්ගතය ලෝඩ් වෙමින්\",\n        loading: \"ලෝඩ් වෙමින්\"\n    }\n});\n"
  },
  {
    "path": "source/js/Core/Language/locale/sk.js",
    "content": "/* Slovak LANGUAGE \r\n================================================== */\r\ntypeof VMM != \"undefined\" && (VMM.Language = {\r\n    lang: \"sk\",\r\n    api: {\r\n        wikipedia: \"sk\"\r\n    },\r\n    date: {\r\n        month: [\"Janu&#225;r\", \"Febru&#225;r\", \"Marec\", \"Apr&#237;l\", \"M&#225;j\", \"J&#250;n\", \"J&#250;l\", \"August\", \"September\", \"Okt&#243;ber\", \"November\", \"December\"],\r\n        month_abbr: [\"Jan.\", \"Feb.\", \"Marec\", \"Apr&#237;l\", \"M&#225;j\", \"J&#250;n\", \"J&#250;l\", \"Aug.\", \"Sept.\", \"Okt.\", \"Nov.\", \"Dec.\"],\r\n        day: [\"Nede&#318;a\", \"Pondelok\", \"Utorok\", \"Streda\", \"&#352;tvrtok\", \"Piatok\", \"Sobota\"],\r\n        day_abbr: [\"Ned.\", \"Pon.\", \"Uto.\", \"Str.\", \"&#352;tv.\", \"Pia.\", \"Sob.\"]\r\n    },\r\n    dateformats: {\r\n        year: \"yyyy\",\r\n        month_short: \"mmm\",\r\n        month: \"mmmm yyyy\",\r\n        full_short: \"mmm d\",\r\n        full: \"d. mmmm',' yyyy\",\r\n\t\ttime_short: \"h:MM:ss TT\",\r\n        time_no_seconds_short: \"h:MM TT\",\r\n        time_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\r\n        full_long: \"mmm d',' yyyy 'at' hh:MM TT\",\r\n        full_long_small_date: \"hh:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\r\n    },\r\n    messages: {\r\n        loading_timeline: \"Na&#269;&#237;tam &#269;asov&#250; os... \",\r\n        return_to_title: \"Sp&#228;&#357; na &#250;vod\",\r\n        expand_timeline: \"Zv&#228;&#269;&#353;i&#357; &#269;asov&#250; os\",\r\n        contract_timeline: \"Zmen&#353;i&#357; &#269;asov&#250; os\",\r\n        wikipedia: \"Z Wikipedie, encyklop&#233;die zadarmo\",\r\n        loading_content: \"Na&#269;&#237;tam obsah\",\r\n        loading: \"Na&#269;&#237;tanie\"\r\n    }\r\n});"
  },
  {
    "path": "source/js/Core/Language/locale/sl.js",
    "content": "/* Slovenian LANGUAGE SLOVENIAN\n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"sl\",\n\t\tapi: {\n\t\t\twikipedia: \"sl\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"januar\", \"februar\", \"marec\", \"april\", \"maj\", \"junij\", \"julij\", \"avgust\", \"september\", \"oktober\", \"november\", \"december\"],\n\t\t\tmonth_abbr: [\"jan.\", \"feb.\", \"marec\", \"april\", \"maj\", \"junij\", \"july\", \"avg.\", \"sept.\", \"okt.\", \"nov.\", \"dec.\"],\n\t\t\tday: [\"nedelja\", \"ponedeljek\", \"torek\", \"sreda\", \"čertek\", \"petek\", \"sobota\"],\n\t\t\tday_abbr: [\"ned.\", \"pon.\", \"tor.\", \"sre.\", \"čet.\", \"pet.\", \"sob.\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM\",\n\t\t\ttime_no_seconds_small_date: \"h:MM' 'd mmmm' 'yyyy\",\n\t\t\tfull_long: \"d mmm yyyy 'ob' hh:MM\",\n\t\t\tfull_long_small_date: \"hh:MM' d mmm yyyy\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Nalagam časovni trak... \",\n\t\t\treturn_to_title: \"Nazaj na naslov\",\n\t\t\texpand_timeline: \"Razširi časovni trak\",\n\t\t\tcontract_timeline: \"Pokrči časovni trak\",\n\t\t\twikipedia: \"Vir Wikipedija\",\n\t\t\tloading_content: \"Nalaganje vsebine\",\n\t\t\tloading: \"Nalaganje\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/sr-cy.js",
    "content": "/* Serbian (Cyrillic) LANGUAGE\n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"рп\",\n\t\tapi: {\n\t\t\twikipedia: \"рп\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Јануар\", \"Фебруар\", \"Март\", \"Април\", \"Мај\", \"Јун\", \"Јул\", \"Август\", \"Септембар\", \"Октобар\", \"Новембар\", \"Децембар\"],\n\t\t\tmonth_abbr: [\"Јан.\", \"Феб.\", \"Март\", \"Апр.\", \"Мај\", \"Јун\", \"Јул\", \"Авг.\", \"Сеп.\", \"Окт.\", \"Нов.\", \"Дец.\"],\n\t\t\tday: [\"Недеља\", \"Понедељак\", \"Уторак\", \"Среда\", \"Четвртак\", \"Петак\", \"Субота\"],\n\t\t\tday_abbr: [\"Нед.\", \"Пон.\", \"Уто.\", \"Сре.\", \"Чет.\", \"Пет.\", \"Суб.\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy.\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy.\",\n\t\t\tfull_short: \"d. mmm\",\n\t\t\tfull: \"d. mmmm yyyy.\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d. mmmm yyyy.'</small>'\",\n\t\t\tfull_long: \"d. mmm yyyy. 'u' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>d. mmm yyyy.'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Учитавање... \",\n\t\t\treturn_to_title: \"Почетак\",\n\t\t\texpand_timeline: \"Увећај\",\n\t\t\tcontract_timeline: \"Умањи\",\n\t\t\twikipedia: \"Из Википедије, слободне енциклопедије\",\n\t\t\tloading_content: \"Садржај се учитава\",\n\t\t\tloading: \"Учитава се\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "source/js/Core/Language/locale/sr.js",
    "content": "/* Serbian (Latin) LANGUAGE\n================================================== */\nif (typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"sr\",\n\t\tapi: {\n\t\t\twikipedia: \"sr\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"januar\", \"Februar\", \"Mart\", \"April\", \"Maj\", \"Jun\", \"Jul\", \"Avgust\", \"Septembar\", \"Oktobar\", \"Novembar\", \"Decembar\"],\n\t\t\tmonth_abbr: [\"Jan.\", \"Feb.\", \"Mart\", \"Apr.\", \"Maj\", \"Jun\", \"Jul\", \"Avg.\", \"Sep.\", \"Okt.\", \"Nov.\", \"Dec.\"],\n\t\t\tday: [\"Nedelja\", \"Ponedeljak\", \"Utorak\", \"Sreda\", \"Četvratk\", \"Petak\", \"Subota\"],\n\t\t\tday_abbr: [\"Ned.\", \"Pon.\", \"Uto.\", \"Sre.\", \"Čet.\", \"Pet.\", \"Sub.\"]\n\t\t},\n\t\tdateformats: {\n\t\t\tyear: \"yyyy.\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy.\",\n\t\t\tfull_short: \"d. mmm\",\n\t\t\tfull: \"d. mmmm yyyy.\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'d. mmmm yyyy.'</small>'\",\n\t\t\tfull_long: \"d. mmm yyyy. 'u' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>d. mmm yyyy.'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Učitavanje... \",\n\t\t\treturn_to_title: \"Početak\",\n\t\t\texpand_timeline: \"Uvećaj\",\n\t\t\tcontract_timeline: \"Umanji\",\n\t\t\twikipedia: \"Iz Vikipedije, slobodne enciklopedije\",\n\t\t\tloading_content: \"Sadržaj se učitava\",\n\t\t\tloading: \"Učitava se\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "source/js/Core/Language/locale/sv.js",
    "content": "/* Swedish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"sv\",\n\t\tapi: {\n\t\t\twikipedia: \"sv\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"januari\", \"februari\", \"mars\", \"april\", \"maj\", \"juni\", \"juli\", \"augusti\", \"september\", \"oktober\", \"november\", \"december\"],\n\t\t\tmonth_abbr: [\"jan\", \"febr\", \"mars\", \"april\", \"maj\", \"juni\", \"juli\", \"aug\", \"sept\", \"okt\", \"nov\", \"dec\"],\n\t\t\tday: [\"söndag\",\"måndag\", \"tisdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lördag\"],\n\t\t\tday_abbr: [\"sön\",\"mån\", \"tis\", \"ons\", \"tors\", \"fre\", \"lör\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm',' yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"H:MM\",\n\t\t\ttime_no_seconds_small_date: \"H:MM'<br/><small>'d mmmm',' yyyy'</small>'\",\n\t\t\tfull_long: \"d mmm',' yyyy 'vid' H:MM\",\n\t\t\tfull_long_small_date: \"H:MM'<br/><small>d mmm',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Laddar tidslinje... \",\n\t\t\treturn_to_title: \"Tillbaka till start\",\n\t\t\texpand_timeline: \"Förstora tidslinje\",\n\t\t\tcontract_timeline: \"Förminska tidslinje\",\n\t\t\twikipedia: \"Från Wikipedia, den fria encyklopedin\",\n\t\t\tloading_content: \"Laddar innehåll\",\n\t\t\tloading: \"Laddar\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/ta.js",
    "content": "﻿/* Tamil LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"ta\",\n\t\tapi: {\n\t\t\twikipedia: \"ta\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"ஜனவரி\", \"பெப்ரவரி\", \"மார்ச்\", \"ஏப்ரல்\", \"மே\", \"ஜுன்\", \"ஜுலை\", \"ஆகஸ்ட்\", \"செப்டம்பர்\", \"ஒக்டோபர்\", \"நவம்பர்\", \"டிசம்பர்\"],\n\t\t\tmonth_abbr: [\"ஜன.\", \"பெப்.\", \"மார்ச்\", \"ஏப்ரல்\", \"மே\", \"ஜுன்\", \"ஜுலை\", \"ஆகஸ்ட்\", \"செப்ட்.\", \"ஒக்டோ.\", \"நவம்பர்\", \"டிசம்பர்\"],\n\t\t\tday: [\"ஞாயிறு\",\"திங்கள்\", \"செவ்வாய்\", \"புதன்\", \"வியாழன்\", \"வெள்ளி\", \"சனி\"],\n\t\t\tday_abbr: [\"ஞா\",\"தி\", \"செ\", \"பு\", \"வி\", \"வெ\", \"சனி\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' hh:MM TT\",\n\t\t\tfull_long_small_date: \"hh:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"நேரக்கோடு தரவேறுகிறது.... \",\n\t\t\treturn_to_title: \"தலைப்பிற்குச் செல்ல\",\n\t\t\texpand_timeline: \"நேரக்கோட்டை விரிக்க\",\n\t\t\tcontract_timeline: \"நேரக்கோட்டை சுருக்க\",\n\t\t\twikipedia: \"கட்டற்ற கலைக்களஞ்சியம், விக்கிப்பீடியாவிலிருந்து\",\n\t\t\tloading_content: \"உள்ளடக்கம் தரவேறுகிறது...\",\n\t\t\tloading: \"தரவேறுகிறது\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/te.js",
    "content": "/* Telugu LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"te\",\n\t\tapi: {\n\t\t\twikipedia: \"te\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"జనవరి\", \"ఫిబ్రవరి\", \"మార్చి\", \"ఏప్రిల్\", \"మే\", \"జూన్\", \"జూలై\", \"ఆగస్ట్\", \"సెప్టెంబర్\", \"అక్టోబర్\", \"నవంబర్\", \"డిసెంబర్\"],\n\t\t\tmonth_abbr: [\"జన.\", \"ఫిబ్ర.\", \"మార్చి\", \"ఏప్రి.\", \"మే\", \"జూన్\", \"జూలై\", \"ఆగ.\", \"సెప్టెం.\", \"అక్టో.\", \"నవం.\", \"డిసెం.\"],\n\t\t\tday: [\"ఆదివారం\",\"సోమవారం\", \"మంగళవారం\", \"బుధవారం\", \"గురువారం\", \"శుక్రవారం\", \"శనివారం\"],\n\t\t\tday_abbr: [\"ఆది.\",\"సోమ.\", \"మంగళ.\", \"బుధ.\", \"గురు.\", \"శుక్ర.\", \"శని.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' h:MM TT\",\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"టైమ్‌లైన్ లోడవుతూంది... \",\n\t\t\treturn_to_title: \"తిరిగి మొదటి స్లైడుకి\",\n\t\t\texpand_timeline: \"టైమ్‌లైన్‌ను విస్తరించండి\",\n\t\t\tcontract_timeline: \"టైమ్‌లైన్‌ను కుదించండి\",\n\t\t\twikipedia: \"స్వేచ్ఛా విజ్ఞాన సర్వస్వమైన వికీపీడియా నుండి\",\n\t\t\tloading_content: \"విషయం లోడవుతూంది\",\n\t\t\tloading: \"లోడవుతూంది\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/th.js",
    "content": "/* Thai LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n    VMM.Language = {\n        lang: \"th\",\n        api: {\n            wikipedia: \"th\"\n        },\n        date: {\n            month: [\"มกราคม\", \"กุมภาพันธ์\", \"มีนาคม\", \"เมษายน\", \"พฤษภาคม\", \"มิถุนายน\", \"กรกฎาคม\", \"สิงหาคม\", \"กันยายน\", \"ตุลาคม\", \"พฤศจิกายน\", \"ธันวาคม\"],\n            month_abbr: [\"ม.ค.\", \"ก.พ\", \"มี.ค.\", \"เม.ย.\", \"พ.ค.\", \"มิ.ย.\", \"ก.ค.\", \"ส.ค.\", \"ก.ย.\", \"ต.ค.\", \"พ.ย.\", \"ธ.ค.\"],\n            day: [\"อาทิตย์\",\"จันทร์\", \"อังคาร\", \"พุธ\", \"พฤหัสบดี\", \"ศุกร์\", \"เสาร์\"],\n            day_abbr: [\"อา.\",\"จ.\", \"อ.\", \"พ.\", \"พฤ.\", \"ศ.\", \"ส.\"]\n        },\n        dateformats: {\n            year: \"yyyy\",\n            month_short: \"mmm\",\n            month: \"mmmm yyyy\",\n            full_short: \"d mmm\",\n            full: \"d mmmm yyyy\",\n            time_short: \"h:MM:ss TT\",\n            time_no_seconds_short: \"h:MM TT\",\n            time_no_seconds_small_date: \"h:MM TT'<br/><small>'d mmmm yyyy'</small>'\",\n            full_long: \"d mmmm yyyy 'เวลา' h:MM TT\",\n            full_long_small_date: \"h:MM TT'<br/><small>d mmm yyyy'</small>'\"\n        },\n        messages: {\n            loading_timeline: \"กำลังสร้างไทม์ไลน์... \",\n            return_to_title: \"กลับสู้หน้าหลัก\",\n            expand_timeline: \"ขยายไทม์ไลน์\",\n            contract_timeline: \"ย่อไทม์ไลน์\",\n            wikipedia: \"จากวิกิพีเดีย สารานุกรมเสรี\",\n            loading_content: \"กำลังโหลดข้อมูล\",\n            loading: \"กำลังโหลด\"\n        }\n    }\n}"
  },
  {
    "path": "source/js/Core/Language/locale/tl.js",
    "content": "/* Tagalog LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"tl\",\n\t\tapi: {\n\t\t\twikipedia: \"tl\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Enemo\", \"Pebrero\", \"Marso\", \"Abril\", \"Mayo\", \"Hunyo\", \"Hulyo\", \"Agosto\", \"Setyembre\", \"Oktubre\", \"Nobyembre\", \"Disyembre\"],\n\t\t\tmonth_abbr: [\"Ene.\", \"Peb.\", \"Mar.\", \"Abr.\", \"Mayo\", \"Hun.\", \"Hul.\", \"Ago.\", \"Set.\", \"Okt.\", \"Nob.\", \"Dis.\"],\n\t\t\tday: [\"Linggo\", \"Lunes\", \"Martes\", \"Miyerkules\", \"Huwebes\", \"Biyernes\", \"Sabado\"],\n\t\t\tday_abbr: [\"Li.\",\"L.\", \"M.\", \"Mi.\", \"H.\", \"B.\", \"S.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"mmmm d',' yyyy\",\n\t\t\ttime_short: \"h:MM:ss TT\",\n\t\t\ttime_no_seconds_short: \"h:MM TT\",\n\t\t\ttime_no_seconds_small_date: \"h:MM TT'<br/><small>'mmmm d',' yyyy'</small>'\",\n\t\t\tfull_long: \"mmm d',' yyyy 'at' h:MM TT\",\n\t\t\tfull_long_small_date: \"h:MM TT'<br/><small>mmm d',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Loading Timeline... \",\n\t\t\treturn_to_title: \"Return to Title\",\n\t\t\texpand_timeline: \"Expand Timeline\",\n\t\t\tcontract_timeline: \"Contract Timeline\",\n\t\t\twikipedia: \"Mula sa Wikipedia, ang malayang ensiklopedya\",\n\t\t\tloading_content: \"Loading Content\",\n\t\t\tloading: \"Loading\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Language/locale/tr.js",
    "content": "/* Turkish LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"tr\",\n\t\tapi: {\n\t\t\twikipedia: \"tr\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"],\n\t\t\tmonth_abbr: [\"Oca.\", \"Şub.\", \"Mar.\", \"Nis.\", \"May.\", \"Haz.\", \"Tem.\", \"Ağu.\", \"Eyl.\", \"Eki.\", \"Kas.\", \"Ara.\"],\n\t\t\tday: [\"Pazar\",\"Pazartesi\", \"Salı\", \"Çarşamba\", \"Perşembe\", \"Cuma\", \"Cumartesi\"],\n\t\t\tday_abbr: [\"Paz.\",\"Pzt.\", \"Sal.\", \"Çar.\", \"Per.\", \"Cum.\", \"Cts.\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"mmmm yyyy\",\n\t\t\tfull_short: \"d mmm\",\n\t\t\tfull: \"d mmmm',' yyyy\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"H:MM\",\n\t\t\ttime_no_seconds_small_date: \"H:MM'<br/><small>'d mmmm',' yyyy'</small>'\",\n\t\t\tfull_long: \"d mmm',' yyyy 'at' H:MM\",\n\t\t\tfull_long_small_date: \"H:MM '<br/><small>d mmm',' yyyy'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"Zaman Çizelgesi Yükleniyor... \",\n\t\t\treturn_to_title: \"Başlığa Dön\",\n\t\t\texpand_timeline: \"Zaman Çizelgesini Genişlet\",\n\t\t\tcontract_timeline: \"Zaman Çizelgesini Daralt\",\n\t\t\twikipedia: \"Wikipedia'dan, özgür ansiklopedi\",\n\t\t\tloading_content: \"İçerik Yükleniyor\",\n\t\t\tloading: \"Yükleniyor\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t}\n\t}\n}"
  },
  {
    "path": "source/js/Core/Language/locale/uk.js",
    "content": "/*\n    TimelineJS - ver. 2.30.0 - 2014-02-20\n    Copyright (c) 2012-2013 Northwestern University\n    a project of the Northwestern University Knight Lab, originally created by Zach Wise\n    https://github.com/NUKnightLab/TimelineJS\n    This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.\n    If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.\n*/\n/* Ukrainian LANGUAGE \n================================================== */\ntypeof VMM != \"undefined\" && (VMM.Language = {\n    lang: \"uk\",\n    api: {\n        wikipedia: \"uk\"\n    },\n    date: {\n        month: [\"січня\", \"лютого\", \"березня\", \"квітня\", \"травня\", \"червня\", \"липня\", \"серпня\", \"вересня\", \"жовтня\", \"листопада\", \"грудня\"],\n        month_abbr: [\"січ.\", \"лют.\", \"берез.\", \"квіт.\", \"трав.\", \"черв.\", \"лип.\", \"серп.\", \"вер.\", \"жовт.\", \"листоп.\", \"груд.\"],\n        day: [\"неділя\", \"понеділок\", \"вівторок\", \"середа\", \"четвер\", \"п'ятниця‎\", \"субота\"],\n        day_abbr: [\"нд.\", \"пн.\", \"вт.\", \"ср.\", \"чт.\", \"пт.\", \"сб.\"]\n    },\n    dateformats: {\n        year: \"yyyy\",\n        month_short: \"mmm\",\n        month: \"mmmm yyyy\",\n        full_short: \"d mmm\",\n        full: \"d mmmm',' yyyy\",\n        time_short: \"H:MM:ss\",\n        time_no_seconds_short: \"H:MM\",\n        time_no_seconds_small_date: \"H:MM'<br/><small>'d mmmm',' yyyy'</small>'\",\n        full_long: \"d mmm yyyy 'у' H:MM\",\n        full_long_small_date: \"H:MM'<br/><small>d mmm',' yyyy'</small>'\"\n    },\n    messages: {\n        loading_timeline: \"Завантаження...\",\n        return_to_title: \"Повернутися до початку\",\n        expand_timeline: \"Збільшити\",\n        contract_timeline: \"Зменьшити\",\n        wikipedia: \"З Wikipedia, вільної енциклопедії\",\n        loading_content: \"Завантаження вмісту\",\n        loading: \"Завантаження\"\n    }\n});"
  },
  {
    "path": "source/js/Core/Language/locale/zh-cn.js",
    "content": "if (typeof VMM != \"undefined\") {\n    VMM.Language = {\n        lang: \"zh-cn\",\n        api: {\n            wikipedia: \"zh\"\n        },\n        date: {\n            month: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n            month_abbr: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n            day: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n            day_abbr: [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\"]\n        },\n        dateformats: {\n            year: \"yyyy年\",\n            month_short: \"mmm\",\n            month: \"yyyy年 mmmm\",\n            full_short: \"mmm d日\",\n            full: \"yyyy年mmmmd日\",\n            time_short: \"HH:MM:ss\",\n            time_no_seconds_short: \"HH:MM\",\n            time_no_seconds_small_date: \"HH:MM'<br/><small>'yyyy年mmmmd日'</small>'\",\n            full_long: \"dddd',' yyyy年mmmd日'um' HH:MM\",\n            full_long_small_date: \"HH:MM'<br/><small>'dddd',' yyyy年mmmd日'</small>'\"\n        },\n        messages: {\n            loading_timeline: \"加载时间线... \",\n            return_to_title: \"回到开头\",\n            expand_timeline: \"伸展时间\",\n            contract_timeline: \"缩短时间\",\n            wikipedia: \"来自维基百科，自由的百科全书\",\n            loading_content: \"正在加载内容\",\n            loading: \"加载中\",\n            swipe_nav: \"Swipe to Navigate\"\n        }\n    }\n}"
  },
  {
    "path": "source/js/Core/Language/locale/zh-tw.js",
    "content": "/* Taiwanese LANGUAGE \n================================================== */\nif(typeof VMM != 'undefined') {\n\tVMM.Language = {\n\t\tlang: \"zh-tw\",\n\t\tapi: {\n\t\t\twikipedia: \"zh\"\n\t\t},\n\t\tdate: {\n\t\t\tmonth: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\t\tmonth_abbr: [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\t\tday: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\"],\n\t\t\tday_abbr: [\"週日\", \"週一\", \"週二\", \"週三\", \"週四\", \"週五\", \"週六\"]\n\t\t}, \n\t\tdateformats: {\n\t\t\tyear: \"yyyy年\",\n\t\t\tmonth_short: \"mmm\",\n\t\t\tmonth: \"yyyy年 mmmm\",\n\t\t\tfull_short: \"mmm d\",\n\t\t\tfull: \"yyyy年mmmm d日\",\n\t\t\ttime_short: \"HH:MM:ss\",\n\t\t\ttime_no_seconds_short: \"HH:MM\",\n\t\t\ttime_no_seconds_small_date: \"HH:MM'<br/><small>'yyyy年mmmm d日'</small>'\",\n\t\t\tfull_long: \"dddd',' yyyy年mmmm d日 'um' HH:MM\",\n\t\t\tfull_long_small_date: \"HH:MM'<br/><small>'dddd',' yyyy年mmmm d日'</small>'\"\n\t\t},\n\t\tmessages: {\n\t\t\tloading_timeline: \"載入時間線... \",\n\t\t\treturn_to_title: \"回到開頭\",\n\t\t\texpand_timeline: \"展開時間\",\n\t\t\tcontract_timeline: \"縮短時間\",\n\t\t\twikipedia: \"擷取自維基百科, 自由之百科全書\",\n\t\t\tloading_content: \"載入內容\",\n\t\t\tloading: \"載入中\",\n\t\t\tswipe_nav: \"Swipe to Navigate\"\t\t\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Library/AES.js",
    "content": "/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\n/*  AES implementation in JavaScript (c) Chris Veness 2005-2011                                   */\n/*   - see http://csrc.nist.gov/publications/PubsFIPS.html#197                                    */\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\n\nvar Aes = {};  // Aes namespace\n\n/**\n * AES Cipher function: encrypt 'input' state with Rijndael algorithm\n *   applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage\n *\n * @param {Number[]} input 16-byte (128-bit) input state array\n * @param {Number[][]} w   Key schedule as 2D byte-array (Nr+1 x Nb bytes)\n * @returns {Number[]}     Encrypted output state array\n */\nAes.cipher = function(input, w) {    // main Cipher function [§5.1]\n  var Nb = 4;               // block size (in words): no of columns in state (fixed at 4 for AES)\n  var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys\n\n  var state = [[],[],[],[]];  // initialise 4xNb byte-array 'state' with input [§3.4]\n  for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i];\n\n  state = Aes.addRoundKey(state, w, 0, Nb);\n\n  for (var round=1; round<Nr; round++) {\n    state = Aes.subBytes(state, Nb);\n    state = Aes.shiftRows(state, Nb);\n    state = Aes.mixColumns(state, Nb);\n    state = Aes.addRoundKey(state, w, round, Nb);\n  }\n\n  state = Aes.subBytes(state, Nb);\n  state = Aes.shiftRows(state, Nb);\n  state = Aes.addRoundKey(state, w, Nr, Nb);\n\n  var output = new Array(4*Nb);  // convert state to 1-d array before returning [§3.4]\n  for (var i=0; i<4*Nb; i++) output[i] = state[i%4][Math.floor(i/4)];\n  return output;\n}\n\n/**\n * Perform Key Expansion to generate a Key Schedule\n *\n * @param {Number[]} key Key as 16/24/32-byte array\n * @returns {Number[][]} Expanded key schedule as 2D byte-array (Nr+1 x Nb bytes)\n */\nAes.keyExpansion = function(key) {  // generate Key Schedule (byte-array Nr+1 x Nb) from Key [§5.2]\n  var Nb = 4;            // block size (in words): no of columns in state (fixed at 4 for AES)\n  var Nk = key.length/4  // key length (in words): 4/6/8 for 128/192/256-bit keys\n  var Nr = Nk + 6;       // no of rounds: 10/12/14 for 128/192/256-bit keys\n\n  var w = new Array(Nb*(Nr+1));\n  var temp = new Array(4);\n\n  for (var i=0; i<Nk; i++) {\n    var r = [key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]];\n    w[i] = r;\n  }\n\n  for (var i=Nk; i<(Nb*(Nr+1)); i++) {\n    w[i] = new Array(4);\n    for (var t=0; t<4; t++) temp[t] = w[i-1][t];\n    if (i % Nk == 0) {\n      temp = Aes.subWord(Aes.rotWord(temp));\n      for (var t=0; t<4; t++) temp[t] ^= Aes.rCon[i/Nk][t];\n    } else if (Nk > 6 && i%Nk == 4) {\n      temp = Aes.subWord(temp);\n    }\n    for (var t=0; t<4; t++) w[i][t] = w[i-Nk][t] ^ temp[t];\n  }\n\n  return w;\n}\n\n/*\n * ---- remaining routines are private, not called externally ----\n */\n \nAes.subBytes = function(s, Nb) {    // apply SBox to state S [§5.1.1]\n  for (var r=0; r<4; r++) {\n    for (var c=0; c<Nb; c++) s[r][c] = Aes.sBox[s[r][c]];\n  }\n  return s;\n}\n\nAes.shiftRows = function(s, Nb) {    // shift row r of state S left by r bytes [§5.1.2]\n  var t = new Array(4);\n  for (var r=1; r<4; r++) {\n    for (var c=0; c<4; c++) t[c] = s[r][(c+r)%Nb];  // shift into temp copy\n    for (var c=0; c<4; c++) s[r][c] = t[c];         // and copy back\n  }          // note that this will work for Nb=4,5,6, but not 7,8 (always 4 for AES):\n  return s;  // see asmaes.sourceforge.net/rijndael/rijndaelImplementation.pdf\n}\n\nAes.mixColumns = function(s, Nb) {   // combine bytes of each col of state S [§5.1.3]\n  for (var c=0; c<4; c++) {\n    var a = new Array(4);  // 'a' is a copy of the current column from 's'\n    var b = new Array(4);  // 'b' is a•{02} in GF(2^8)\n    for (var i=0; i<4; i++) {\n      a[i] = s[i][c];\n      b[i] = s[i][c]&0x80 ? s[i][c]<<1 ^ 0x011b : s[i][c]<<1;\n\n    }\n    // a[n] ^ b[n] is a•{03} in GF(2^8)\n    s[0][c] = b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3]; // 2*a0 + 3*a1 + a2 + a3\n    s[1][c] = a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3]; // a0 * 2*a1 + 3*a2 + a3\n    s[2][c] = a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3]; // a0 + a1 + 2*a2 + 3*a3\n    s[3][c] = a[0] ^ b[0] ^ a[1] ^ a[2] ^ b[3]; // 3*a0 + a1 + a2 + 2*a3\n  }\n  return s;\n}\n\nAes.addRoundKey = function(state, w, rnd, Nb) {  // xor Round Key into state S [§5.1.4]\n  for (var r=0; r<4; r++) {\n    for (var c=0; c<Nb; c++) state[r][c] ^= w[rnd*4+c][r];\n  }\n  return state;\n}\n\nAes.subWord = function(w) {    // apply SBox to 4-byte word w\n  for (var i=0; i<4; i++) w[i] = Aes.sBox[w[i]];\n  return w;\n}\n\nAes.rotWord = function(w) {    // rotate 4-byte word w left by one byte\n  var tmp = w[0];\n  for (var i=0; i<3; i++) w[i] = w[i+1];\n  w[3] = tmp;\n  return w;\n}\n\n// sBox is pre-computed multiplicative inverse in GF(2^8) used in subBytes and keyExpansion [§5.1.1]\nAes.sBox =  [0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,\n             0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,\n             0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,\n             0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,\n             0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,\n             0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,\n             0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,\n             0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,\n             0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,\n             0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,\n             0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,\n             0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,\n             0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,\n             0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,\n             0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,\n             0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16];\n\n// rCon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [§5.2]\nAes.rCon = [ [0x00, 0x00, 0x00, 0x00],\n             [0x01, 0x00, 0x00, 0x00],\n             [0x02, 0x00, 0x00, 0x00],\n             [0x04, 0x00, 0x00, 0x00],\n             [0x08, 0x00, 0x00, 0x00],\n             [0x10, 0x00, 0x00, 0x00],\n             [0x20, 0x00, 0x00, 0x00],\n             [0x40, 0x00, 0x00, 0x00],\n             [0x80, 0x00, 0x00, 0x00],\n             [0x1b, 0x00, 0x00, 0x00],\n             [0x36, 0x00, 0x00, 0x00] ]; \n\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\n/*  AES Counter-mode implementation in JavaScript (c) Chris Veness 2005-2011                      */\n/*   - see http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf                       */\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\n\nAes.Ctr = {};  // Aes.Ctr namespace: a subclass or extension of Aes\n\n/** \n * Encrypt a text using AES encryption in Counter mode of operation\n *\n * Unicode multi-byte character safe\n *\n * @param {String} plaintext Source text to be encrypted\n * @param {String} password  The password to use to generate a key\n * @param {Number} nBits     Number of bits to be used in the key (128, 192, or 256)\n * @returns {string}         Encrypted text\n */\nAes.Ctr.encrypt = function(plaintext, password, nBits) {\n  var blockSize = 16;  // block size fixed at 16 bytes / 128 bits (Nb=4) for AES\n  if (!(nBits==128 || nBits==192 || nBits==256)) return '';  // standard allows 128/192/256 bit keys\n  plaintext = Utf8.encode(plaintext);\n  password = Utf8.encode(password);\n  //var t = new Date();  // timer\n\t\n  // use AES itself to encrypt password to get cipher key (using plain password as source for key \n  // expansion) - gives us well encrypted key (though hashed key might be preferred for prod'n use)\n  var nBytes = nBits/8;  // no bytes in key (16/24/32)\n  var pwBytes = new Array(nBytes);\n  for (var i=0; i<nBytes; i++) {  // use 1st 16/24/32 chars of password for key\n    pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 : password.charCodeAt(i);\n  }\n  var key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes));  // gives us 16-byte key\n  key = key.concat(key.slice(0, nBytes-16));  // expand key to 16/24/32 bytes long\n\n  // initialise 1st 8 bytes of counter block with nonce (NIST SP800-38A §B.2): [0-1] = millisec, \n  // [2-3] = random, [4-7] = seconds, together giving full sub-millisec uniqueness up to Feb 2106\n  var counterBlock = new Array(blockSize);\n  \n  var nonce = (new Date()).getTime();  // timestamp: milliseconds since 1-Jan-1970\n  var nonceMs = nonce%1000;\n  var nonceSec = Math.floor(nonce/1000);\n  var nonceRnd = Math.floor(Math.random()*0xffff);\n  \n  for (var i=0; i<2; i++) counterBlock[i]   = (nonceMs  >>> i*8) & 0xff;\n  for (var i=0; i<2; i++) counterBlock[i+2] = (nonceRnd >>> i*8) & 0xff;\n  for (var i=0; i<4; i++) counterBlock[i+4] = (nonceSec >>> i*8) & 0xff;\n  \n  // and convert it to a string to go on the front of the ciphertext\n  var ctrTxt = '';\n  for (var i=0; i<8; i++) ctrTxt += String.fromCharCode(counterBlock[i]);\n\n  // generate key schedule - an expansion of the key into distinct Key Rounds for each round\n  var keySchedule = Aes.keyExpansion(key);\n  \n  var blockCount = Math.ceil(plaintext.length/blockSize);\n  var ciphertxt = new Array(blockCount);  // ciphertext as array of strings\n  \n  for (var b=0; b<blockCount; b++) {\n    // set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)\n    // done in two stages for 32-bit ops: using two words allows us to go past 2^32 blocks (68GB)\n    for (var c=0; c<4; c++) counterBlock[15-c] = (b >>> c*8) & 0xff;\n    for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8)\n\n    var cipherCntr = Aes.cipher(counterBlock, keySchedule);  // -- encrypt counter block --\n    \n    // block size is reduced on final block\n    var blockLength = b<blockCount-1 ? blockSize : (plaintext.length-1)%blockSize+1;\n    var cipherChar = new Array(blockLength);\n    \n    for (var i=0; i<blockLength; i++) {  // -- xor plaintext with ciphered counter char-by-char --\n      cipherChar[i] = cipherCntr[i] ^ plaintext.charCodeAt(b*blockSize+i);\n      cipherChar[i] = String.fromCharCode(cipherChar[i]);\n    }\n    ciphertxt[b] = cipherChar.join(''); \n  }\n\n  // Array.join is more efficient than repeated string concatenation in IE\n  var ciphertext = ctrTxt + ciphertxt.join('');\n  ciphertext = Base64.encode(ciphertext);  // encode in base64\n  \n  //alert((new Date()) - t);\n  return ciphertext;\n}\n\n/** \n * Decrypt a text encrypted by AES in counter mode of operation\n *\n * @param {String} ciphertext Source text to be encrypted\n * @param {String} password   The password to use to generate a key\n * @param {Number} nBits      Number of bits to be used in the key (128, 192, or 256)\n * @returns {String}          Decrypted text\n */\nAes.Ctr.decrypt = function(ciphertext, password, nBits) {\n  var blockSize = 16;  // block size fixed at 16 bytes / 128 bits (Nb=4) for AES\n  if (!(nBits==128 || nBits==192 || nBits==256)) return '';  // standard allows 128/192/256 bit keys\n  ciphertext = Base64.decode(ciphertext);\n  password = Utf8.encode(password);\n  //var t = new Date();  // timer\n  \n  // use AES to encrypt password (mirroring encrypt routine)\n  var nBytes = nBits/8;  // no bytes in key\n  var pwBytes = new Array(nBytes);\n  for (var i=0; i<nBytes; i++) {\n    pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 : password.charCodeAt(i);\n  }\n  var key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes));\n  key = key.concat(key.slice(0, nBytes-16));  // expand key to 16/24/32 bytes long\n\n  // recover nonce from 1st 8 bytes of ciphertext\n  var counterBlock = new Array(8);\n  ctrTxt = ciphertext.slice(0, 8);\n  for (var i=0; i<8; i++) counterBlock[i] = ctrTxt.charCodeAt(i);\n  \n  // generate key schedule\n  var keySchedule = Aes.keyExpansion(key);\n\n  // separate ciphertext into blocks (skipping past initial 8 bytes)\n  var nBlocks = Math.ceil((ciphertext.length-8) / blockSize);\n  var ct = new Array(nBlocks);\n  for (var b=0; b<nBlocks; b++) ct[b] = ciphertext.slice(8+b*blockSize, 8+b*blockSize+blockSize);\n  ciphertext = ct;  // ciphertext is now array of block-length strings\n\n  // plaintext will get generated block-by-block into array of block-length strings\n  var plaintxt = new Array(ciphertext.length);\n\n  for (var b=0; b<nBlocks; b++) {\n    // set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)\n    for (var c=0; c<4; c++) counterBlock[15-c] = ((b) >>> c*8) & 0xff;\n    for (var c=0; c<4; c++) counterBlock[15-c-4] = (((b+1)/0x100000000-1) >>> c*8) & 0xff;\n\n    var cipherCntr = Aes.cipher(counterBlock, keySchedule);  // encrypt counter block\n\n    var plaintxtByte = new Array(ciphertext[b].length);\n    for (var i=0; i<ciphertext[b].length; i++) {\n      // -- xor plaintxt with ciphered counter byte-by-byte --\n      plaintxtByte[i] = cipherCntr[i] ^ ciphertext[b].charCodeAt(i);\n      plaintxtByte[i] = String.fromCharCode(plaintxtByte[i]);\n    }\n    plaintxt[b] = plaintxtByte.join('');\n  }\n\n  // join array of blocks into single plaintext string\n  var plaintext = plaintxt.join('');\n  plaintext = Utf8.decode(plaintext);  // decode from UTF8 back to Unicode multi-byte chars\n  \n  //alert((new Date()) - t);\n  return plaintext;\n}\n\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\n/*  Base64 class: Base 64 encoding / decoding (c) Chris Veness 2002-2011                          */\n/*    note: depends on Utf8 class                                                                 */\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\n\nvar Base64 = {};  // Base64 namespace\n\nBase64.code = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n/**\n * Encode string into Base64, as defined by RFC 4648 [http://tools.ietf.org/html/rfc4648]\n * (instance method extending String object). As per RFC 4648, no newlines are added.\n *\n * @param {String} str The string to be encoded as base-64\n * @param {Boolean} [utf8encode=false] Flag to indicate whether str is Unicode string to be encoded \n *   to UTF8 before conversion to base64; otherwise string is assumed to be 8-bit characters\n * @returns {String} Base64-encoded string\n */ \nBase64.encode = function(str, utf8encode) {  // http://tools.ietf.org/html/rfc4648\n  utf8encode =  (typeof utf8encode == 'undefined') ? false : utf8encode;\n  var o1, o2, o3, bits, h1, h2, h3, h4, e=[], pad = '', c, plain, coded;\n  var b64 = Base64.code;\n   \n  plain = utf8encode ? str.encodeUTF8() : str;\n  \n  c = plain.length % 3;  // pad string to length of multiple of 3\n  if (c > 0) { while (c++ < 3) { pad += '='; plain += '\\0'; } }\n  // note: doing padding here saves us doing special-case packing for trailing 1 or 2 chars\n   \n  for (c=0; c<plain.length; c+=3) {  // pack three octets into four hexets\n    o1 = plain.charCodeAt(c);\n    o2 = plain.charCodeAt(c+1);\n    o3 = plain.charCodeAt(c+2);\n      \n    bits = o1<<16 | o2<<8 | o3;\n      \n    h1 = bits>>18 & 0x3f;\n    h2 = bits>>12 & 0x3f;\n    h3 = bits>>6 & 0x3f;\n    h4 = bits & 0x3f;\n\n    // use hextets to index into code string\n    e[c/3] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);\n  }\n  coded = e.join('');  // join() is far faster than repeated string concatenation in IE\n  \n  // replace 'A's from padded nulls with '='s\n  coded = coded.slice(0, coded.length-pad.length) + pad;\n   \n  return coded;\n}\n\n/**\n * Decode string from Base64, as defined by RFC 4648 [http://tools.ietf.org/html/rfc4648]\n * (instance method extending String object). As per RFC 4648, newlines are not catered for.\n *\n * @param {String} str The string to be decoded from base-64\n * @param {Boolean} [utf8decode=false] Flag to indicate whether str is Unicode string to be decoded \n *   from UTF8 after conversion from base64\n * @returns {String} decoded string\n */ \nBase64.decode = function(str, utf8decode) {\n  utf8decode =  (typeof utf8decode == 'undefined') ? false : utf8decode;\n  var o1, o2, o3, h1, h2, h3, h4, bits, d=[], plain, coded;\n  var b64 = Base64.code;\n\n  coded = utf8decode ? str.decodeUTF8() : str;\n  \n  \n  for (var c=0; c<coded.length; c+=4) {  // unpack four hexets into three octets\n    h1 = b64.indexOf(coded.charAt(c));\n    h2 = b64.indexOf(coded.charAt(c+1));\n    h3 = b64.indexOf(coded.charAt(c+2));\n    h4 = b64.indexOf(coded.charAt(c+3));\n      \n    bits = h1<<18 | h2<<12 | h3<<6 | h4;\n      \n    o1 = bits>>>16 & 0xff;\n    o2 = bits>>>8 & 0xff;\n    o3 = bits & 0xff;\n    \n    d[c/4] = String.fromCharCode(o1, o2, o3);\n    // check for padding\n    if (h4 == 0x40) d[c/4] = String.fromCharCode(o1, o2);\n    if (h3 == 0x40) d[c/4] = String.fromCharCode(o1);\n  }\n  plain = d.join('');  // join() is far faster than repeated string concatenation in IE\n   \n  return utf8decode ? plain.decodeUTF8() : plain; \n}\n\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\n/*  Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple          */\n/*              single-byte character encoding (c) Chris Veness 2002-2011                         */\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\n\nvar Utf8 = {};  // Utf8 namespace\n\n/**\n * Encode multi-byte Unicode string into utf-8 multiple single-byte characters \n * (BMP / basic multilingual plane only)\n *\n * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars\n *\n * @param {String} strUni Unicode string to be encoded as UTF-8\n * @returns {String} encoded string\n */\nUtf8.encode = function(strUni) {\n  // use regular expressions & String.replace callback function for better efficiency \n  // than procedural approaches\n  var strUtf = strUni.replace(\n      /[\\u0080-\\u07ff]/g,  // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz\n      function(c) { \n        var cc = c.charCodeAt(0);\n        return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); }\n    );\n  strUtf = strUtf.replace(\n      /[\\u0800-\\uffff]/g,  // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz\n      function(c) { \n        var cc = c.charCodeAt(0); \n        return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); }\n    );\n  return strUtf;\n}\n\n/**\n * Decode utf-8 encoded string back into multi-byte Unicode characters\n *\n * @param {String} strUtf UTF-8 string to be decoded back to Unicode\n * @returns {String} decoded string\n */\nUtf8.decode = function(strUtf) {\n  // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!\n  var strUni = strUtf.replace(\n      /[\\u00e0-\\u00ef][\\u0080-\\u00bf][\\u0080-\\u00bf]/g,  // 3-byte chars\n      function(c) {  // (note parentheses for precence)\n        var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f); \n        return String.fromCharCode(cc); }\n    );\n  strUni = strUni.replace(\n      /[\\u00c0-\\u00df][\\u0080-\\u00bf]/g,                 // 2-byte chars\n      function(c) {  // (note parentheses for precence)\n        var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f;\n        return String.fromCharCode(cc); }\n    );\n  return strUni;\n}\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */"
  },
  {
    "path": "source/js/Core/Library/LazyLoad.js",
    "content": "/*jslint browser: true, eqeqeq: true, bitwise: true, newcap: true, immed: true, regexp: false */\n\n/*\nLazyLoad makes it easy and painless to lazily load one or more external\nJavaScript or CSS files on demand either during or after the rendering of a web\npage.\n\nSupported browsers include Firefox 2+, IE6+, Safari 3+ (including Mobile\nSafari), Google Chrome, and Opera 9+. Other browsers may or may not work and\nare not officially supported.\n\nVisit https://github.com/rgrove/lazyload/ for more info.\n\nCopyright (c) 2011 Ryan Grove <ryan@wonko.com>\nAll rights reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the 'Software'), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n@module lazyload\n@class LazyLoad\n@static\n@version 2.0.3 (git)\n*/\n\nLazyLoad = (function (doc) {\n  // -- Private Variables ------------------------------------------------------\n\n  // User agent and feature test information.\n  var env,\n\n  // Reference to the <head> element (populated lazily).\n  head,\n\n  // Requests currently in progress, if any.\n  pending = {},\n\n  // Number of times we've polled to check whether a pending stylesheet has\n  // finished loading. If this gets too high, we're probably stalled.\n  pollCount = 0,\n\n  // Queued requests.\n  queue = {css: [], js: []},\n\n  // Reference to the browser's list of stylesheets.\n  styleSheets = doc.styleSheets;\n\n  // -- Private Methods --------------------------------------------------------\n\n  /**\n  Creates and returns an HTML element with the specified name and attributes.\n\n  @method createNode\n  @param {String} name element name\n  @param {Object} attrs name/value mapping of element attributes\n  @return {HTMLElement}\n  @private\n  */\n  function createNode(name, attrs) {\n    var node = doc.createElement(name), attr;\n\n    for (attr in attrs) {\n      if (attrs.hasOwnProperty(attr)) {\n        node.setAttribute(attr, attrs[attr]);\n      }\n    }\n\n    return node;\n  }\n\n  /**\n  Called when the current pending resource of the specified type has finished\n  loading. Executes the associated callback (if any) and loads the next\n  resource in the queue.\n\n  @method finish\n  @param {String} type resource type ('css' or 'js')\n  @private\n  */\n  function finish(type) {\n    var p = pending[type],\n        callback,\n        urls;\n\n    if (p) {\n      callback = p.callback;\n      urls     = p.urls;\n\n      urls.shift();\n      pollCount = 0;\n\n      // If this is the last of the pending URLs, execute the callback and\n      // start the next request in the queue (if any).\n      if (!urls.length) {\n        callback && callback.call(p.context, p.obj);\n        pending[type] = null;\n        queue[type].length && load(type);\n      }\n    }\n  }\n\n  /**\n  Populates the <code>env</code> variable with user agent and feature test\n  information.\n\n  @method getEnv\n  @private\n  */\n  function getEnv() {\n    var ua = navigator.userAgent;\n\n    env = {\n      // True if this browser supports disabling async mode on dynamically\n      // created script nodes. See\n      // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order\n      async: doc.createElement('script').async === true\n    };\n\n    (env.webkit = /AppleWebKit\\//.test(ua))\n      || (env.ie = /MSIE/.test(ua))\n      || (env.opera = /Opera/.test(ua))\n      || (env.gecko = /Gecko\\//.test(ua))\n      || (env.unknown = true);\n  }\n\n  /**\n  Loads the specified resources, or the next resource of the specified type\n  in the queue if no resources are specified. If a resource of the specified\n  type is already being loaded, the new request will be queued until the\n  first request has been finished.\n\n  When an array of resource URLs is specified, those URLs will be loaded in\n  parallel if it is possible to do so while preserving execution order. All\n  browsers support parallel loading of CSS, but only Firefox and Opera\n  support parallel loading of scripts. In other browsers, scripts will be\n  queued and loaded one at a time to ensure correct execution order.\n\n  @method load\n  @param {String} type resource type ('css' or 'js')\n  @param {String|Array} urls (optional) URL or array of URLs to load\n  @param {Function} callback (optional) callback function to execute when the\n    resource is loaded\n  @param {Object} obj (optional) object to pass to the callback function\n  @param {Object} context (optional) if provided, the callback function will\n    be executed in this object's context\n  @private\n  */\n  function load(type, urls, callback, obj, context) {\n    var _finish = function () { finish(type); },\n        isCSS   = type === 'css',\n        nodes   = [],\n        i, len, node, p, pendingUrls, url;\n\n    env || getEnv();\n\n    if (urls) {\n      // If urls is a string, wrap it in an array. Otherwise assume it's an\n      // array and create a copy of it so modifications won't be made to the\n      // original.\n      urls = typeof urls === 'string' ? [urls] : urls.concat();\n\n      // Create a request object for each URL. If multiple URLs are specified,\n      // the callback will only be executed after all URLs have been loaded.\n      //\n      // Sadly, Firefox and Opera are the only browsers capable of loading\n      // scripts in parallel while preserving execution order. In all other\n      // browsers, scripts must be loaded sequentially.\n      //\n      // All browsers respect CSS specificity based on the order of the link\n      // elements in the DOM, regardless of the order in which the stylesheets\n      // are actually downloaded.\n      if (isCSS || env.async || env.gecko || env.opera) {\n        // Load in parallel.\n        queue[type].push({\n          urls    : urls,\n          callback: callback,\n          obj     : obj,\n          context : context\n        });\n      } else {\n        // Load sequentially.\n        for (i = 0, len = urls.length; i < len; ++i) {\n          queue[type].push({\n            urls    : [urls[i]],\n            callback: i === len - 1 ? callback : null, // callback is only added to the last URL\n            obj     : obj,\n            context : context\n          });\n        }\n      }\n    }\n\n    // If a previous load request of this type is currently in progress, we'll\n    // wait our turn. Otherwise, grab the next item in the queue.\n    if (pending[type] || !(p = pending[type] = queue[type].shift())) {\n      return;\n    }\n\n    head || (head = doc.head || doc.getElementsByTagName('head')[0]);\n    pendingUrls = p.urls;\n\n    for (i = 0, len = pendingUrls.length; i < len; ++i) {\n      url = pendingUrls[i];\n\n      if (isCSS) {\n          node = env.gecko ? createNode('style') : createNode('link', {\n            href: url,\n            rel : 'stylesheet'\n          });\n      } else {\n        node = createNode('script', {src: url});\n        node.async = false;\n      }\n\n      node.className = 'lazyload';\n      node.setAttribute('charset', 'utf-8');\n\n      if (env.ie && !isCSS) {\n        node.onreadystatechange = function () {\n          if (/loaded|complete/.test(node.readyState)) {\n            node.onreadystatechange = null;\n            _finish();\n          }\n        };\n      } else if (isCSS && (env.gecko || env.webkit)) {\n        // Gecko and WebKit don't support the onload event on link nodes.\n        if (env.webkit) {\n          // In WebKit, we can poll for changes to document.styleSheets to\n          // figure out when stylesheets have loaded.\n          p.urls[i] = node.href; // resolve relative URLs (or polling won't work)\n          pollWebKit();\n        } else {\n          // In Gecko, we can import the requested URL into a <style> node and\n          // poll for the existence of node.sheet.cssRules. Props to Zach\n          // Leatherman for calling my attention to this technique.\n          node.innerHTML = '@import \"' + url + '\";';\n          pollGecko(node);\n        }\n      } else {\n        node.onload = node.onerror = _finish;\n      }\n\n      nodes.push(node);\n    }\n\n    for (i = 0, len = nodes.length; i < len; ++i) {\n      head.appendChild(nodes[i]);\n    }\n  }\n\n  /**\n  Begins polling to determine when the specified stylesheet has finished loading\n  in Gecko. Polling stops when all pending stylesheets have loaded or after 10\n  seconds (to prevent stalls).\n\n  Thanks to Zach Leatherman for calling my attention to the @import-based\n  cross-domain technique used here, and to Oleg Slobodskoi for an earlier\n  same-domain implementation. See Zach's blog for more details:\n  http://www.zachleat.com/web/2010/07/29/load-css-dynamically/\n\n  @method pollGecko\n  @param {HTMLElement} node Style node to poll.\n  @private\n  */\n  function pollGecko(node) {\n    var hasRules;\n\n    try {\n      // We don't really need to store this value or ever refer to it again, but\n      // if we don't store it, Closure Compiler assumes the code is useless and\n      // removes it.\n      hasRules = !!node.sheet.cssRules;\n    } catch (ex) {\n      // An exception means the stylesheet is still loading.\n      pollCount += 1;\n\n      if (pollCount < 200) {\n        setTimeout(function () { pollGecko(node); }, 50);\n      } else {\n        // We've been polling for 10 seconds and nothing's happened. Stop\n        // polling and finish the pending requests to avoid blocking further\n        // requests.\n        hasRules && finish('css');\n      }\n\n      return;\n    }\n\n    // If we get here, the stylesheet has loaded.\n    finish('css');\n  }\n\n  /**\n  Begins polling to determine when pending stylesheets have finished loading\n  in WebKit. Polling stops when all pending stylesheets have loaded or after 10\n  seconds (to prevent stalls).\n\n  @method pollWebKit\n  @private\n  */\n  function pollWebKit() {\n    var css = pending.css, i;\n\n    if (css) {\n      i = styleSheets.length;\n\n      // Look for a stylesheet matching the pending URL.\n      while (--i >= 0) {\n        if (styleSheets[i].href === css.urls[0]) {\n          finish('css');\n          break;\n        }\n      }\n\n      pollCount += 1;\n\n      if (css) {\n        if (pollCount < 200) {\n          setTimeout(pollWebKit, 50);\n        } else {\n          // We've been polling for 10 seconds and nothing's happened, which may\n          // indicate that the stylesheet has been removed from the document\n          // before it had a chance to load. Stop polling and finish the pending\n          // request to prevent blocking further requests.\n          finish('css');\n        }\n      }\n    }\n  }\n\n  return {\n\n    /**\n    Requests the specified CSS URL or URLs and executes the specified\n    callback (if any) when they have finished loading. If an array of URLs is\n    specified, the stylesheets will be loaded in parallel and the callback\n    will be executed after all stylesheets have finished loading.\n\n    @method css\n    @param {String|Array} urls CSS URL or array of CSS URLs to load\n    @param {Function} callback (optional) callback function to execute when\n      the specified stylesheets are loaded\n    @param {Object} obj (optional) object to pass to the callback function\n    @param {Object} context (optional) if provided, the callback function\n      will be executed in this object's context\n    @static\n    */\n    css: function (urls, callback, obj, context) {\n      load('css', urls, callback, obj, context);\n    },\n\n    /**\n    Requests the specified JavaScript URL or URLs and executes the specified\n    callback (if any) when they have finished loading. If an array of URLs is\n    specified and the browser supports it, the scripts will be loaded in\n    parallel and the callback will be executed after all scripts have\n    finished loading.\n\n    Currently, only Firefox and Opera support parallel loading of scripts while\n    preserving execution order. In other browsers, scripts will be\n    queued and loaded one at a time to ensure correct execution order.\n\n    @method js\n    @param {String|Array} urls JS URL or array of JS URLs to load\n    @param {Function} callback (optional) callback function to execute when\n      the specified scripts are loaded\n    @param {Object} obj (optional) object to pass to the callback function\n    @param {Object} context (optional) if provided, the callback function\n      will be executed in this object's context\n    @static\n    */\n    js: function (urls, callback, obj, context) {\n      load('js', urls, callback, obj, context);\n    }\n\n  };\n})(this.document);\n"
  },
  {
    "path": "source/js/Core/Library/Leaflet.js",
    "content": "/*\n Copyright (c) 2010-2011, CloudMade, Vladimir Agafonkin\n Leaflet is a modern open-source JavaScript library for interactive maps.\n http://leaflet.cloudmade.com\n*/\n\n(function (root) {\n\troot.L = {\n\t\tVERSION: '0.3',\n\n\t\tROOT_URL: root.L_ROOT_URL || (function () {\n\t\t\tvar scripts = document.getElementsByTagName('script'),\n\t\t\t\tleafletRe = /\\/?leaflet[\\-\\._]?([\\w\\-\\._]*)\\.js\\??/;\n\n\t\t\tvar i, len, src, matches;\n\n\t\t\tfor (i = 0, len = scripts.length; i < len; i++) {\n\t\t\t\tsrc = scripts[i].src;\n\t\t\t\tmatches = src.match(leafletRe);\n\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[1] === 'include') {\n\t\t\t\t\t\treturn '../../dist/';\n\t\t\t\t\t}\n\t\t\t\t\treturn src.split(leafletRe)[0] + '/';\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn '';\n\t\t}()),\n\n\t\tnoConflict: function () {\n\t\t\troot.L = this._originalL;\n\t\t\treturn this;\n\t\t},\n\n\t\t_originalL: root.L\n\t};\n}(this));\n\n\n/*\n * L.Util is a namespace for various utility functions.\n */\n\nL.Util = {\n\textend: function (/*Object*/ dest) /*-> Object*/ {\t// merge src properties into dest\n\t\tvar sources = Array.prototype.slice.call(arguments, 1);\n\t\tfor (var j = 0, len = sources.length, src; j < len; j++) {\n\t\t\tsrc = sources[j] || {};\n\t\t\tfor (var i in src) {\n\t\t\t\tif (src.hasOwnProperty(i)) {\n\t\t\t\t\tdest[i] = src[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn dest;\n\t},\n\n\tbind: function (/*Function*/ fn, /*Object*/ obj) /*-> Object*/ {\n\t\treturn function () {\n\t\t\treturn fn.apply(obj, arguments);\n\t\t};\n\t},\n\n\tstamp: (function () {\n\t\tvar lastId = 0, key = '_leaflet_id';\n\t\treturn function (/*Object*/ obj) {\n\t\t\tobj[key] = obj[key] || ++lastId;\n\t\t\treturn obj[key];\n\t\t};\n\t}()),\n\n\trequestAnimFrame: (function () {\n\t\tfunction timeoutDefer(callback) {\n\t\t\twindow.setTimeout(callback, 1000 / 60);\n\t\t}\n\n\t\tvar requestFn = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\twindow.oRequestAnimationFrame ||\n\t\t\twindow.msRequestAnimationFrame ||\n\t\t\ttimeoutDefer;\n\n\t\treturn function (callback, context, immediate, contextEl) {\n\t\t\tcallback = context ? L.Util.bind(callback, context) : callback;\n\t\t\tif (immediate && requestFn === timeoutDefer) {\n\t\t\t\tcallback();\n\t\t\t} else {\n\t\t\t\trequestFn(callback, contextEl);\n\t\t\t}\n\t\t};\n\t}()),\n\n\tlimitExecByInterval: function (fn, time, context) {\n\t\tvar lock, execOnUnlock, args;\n\t\tfunction exec() {\n\t\t\tlock = false;\n\t\t\tif (execOnUnlock) {\n\t\t\t\targs.callee.apply(context, args);\n\t\t\t\texecOnUnlock = false;\n\t\t\t}\n\t\t}\n\t\treturn function () {\n\t\t\targs = arguments;\n\t\t\tif (!lock) {\n\t\t\t\tlock = true;\n\t\t\t\tsetTimeout(exec, time);\n\t\t\t\tfn.apply(context, args);\n\t\t\t} else {\n\t\t\t\texecOnUnlock = true;\n\t\t\t}\n\t\t};\n\t},\n\n\tfalseFn: function () {\n\t\treturn false;\n\t},\n\n\tformatNum: function (num, digits) {\n\t\tvar pow = Math.pow(10, digits || 5);\n\t\treturn Math.round(num * pow) / pow;\n\t},\n\n\tsetOptions: function (obj, options) {\n\t\tobj.options = L.Util.extend({}, obj.options, options);\n\t},\n\n\tgetParamString: function (obj) {\n\t\tvar params = [];\n\t\tfor (var i in obj) {\n\t\t\tif (obj.hasOwnProperty(i)) {\n\t\t\t\tparams.push(i + '=' + obj[i]);\n\t\t\t}\n\t\t}\n\t\treturn '?' + params.join('&');\n\t},\n\n\ttemplate: function (str, data) {\n\t\treturn str.replace(/\\{ *([\\w_]+) *\\}/g, function (str, key) {\n\t\t\tvar value = data[key];\n\t\t\tif (!data.hasOwnProperty(key)) {\n\t\t\t\tthrow new Error('No value provided for variable ' + str);\n\t\t\t}\n\t\t\treturn value;\n\t\t});\n\t}\n};\n\n\n/*\n * Class powers the OOP facilities of the library. Thanks to John Resig and Dean Edwards for inspiration!\n */\n\nL.Class = function () {};\n\nL.Class.extend = function (/*Object*/ props) /*-> Class*/ {\n\n\t// extended class with the new prototype\n\tvar NewClass = function () {\n\t\tif (this.initialize) {\n\t\t\tthis.initialize.apply(this, arguments);\n\t\t}\n\t};\n\n\t// instantiate class without calling constructor\n\tvar F = function () {};\n\tF.prototype = this.prototype;\n\tvar proto = new F();\n\n\tproto.constructor = NewClass;\n\tNewClass.prototype = proto;\n\n\t// add superclass access\n\tNewClass.superclass = this.prototype;\n\n\t// add class name\n\t//proto.className = props;\n\n\t//inherit parent's statics\n\tfor (var i in this) {\n\t\tif (this.hasOwnProperty(i) && i !== 'prototype' && i !== 'superclass') {\n\t\t\tNewClass[i] = this[i];\n\t\t}\n\t}\n\n\t// mix static properties into the class\n\tif (props.statics) {\n\t\tL.Util.extend(NewClass, props.statics);\n\t\tdelete props.statics;\n\t}\n\n\t// mix includes into the prototype\n\tif (props.includes) {\n\t\tL.Util.extend.apply(null, [proto].concat(props.includes));\n\t\tdelete props.includes;\n\t}\n\n\t// merge options\n\tif (props.options && proto.options) {\n\t\tprops.options = L.Util.extend({}, proto.options, props.options);\n\t}\n\n\t// mix given properties into the prototype\n\tL.Util.extend(proto, props);\n\n\t// allow inheriting further\n\tNewClass.extend = L.Class.extend;\n\n\t// method for adding properties to prototype\n\tNewClass.include = function (props) {\n\t\tL.Util.extend(this.prototype, props);\n\t};\n\n\treturn NewClass;\n};\n\n\n/*\n * L.Mixin.Events adds custom events functionality to Leaflet classes\n */\n\nL.Mixin = {};\n\nL.Mixin.Events = {\n\taddEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {\n\t\tvar events = this._leaflet_events = this._leaflet_events || {};\n\t\tevents[type] = events[type] || [];\n\t\tevents[type].push({\n\t\t\taction: fn,\n\t\t\tcontext: context || this\n\t\t});\n\t\treturn this;\n\t},\n\n\thasEventListeners: function (/*String*/ type) /*-> Boolean*/ {\n\t\tvar k = '_leaflet_events';\n\t\treturn (k in this) && (type in this[k]) && (this[k][type].length > 0);\n\t},\n\n\tremoveEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {\n\t\tif (!this.hasEventListeners(type)) {\n\t\t\treturn this;\n\t\t}\n\n\t\tfor (var i = 0, events = this._leaflet_events, len = events[type].length; i < len; i++) {\n\t\t\tif (\n\t\t\t\t(events[type][i].action === fn) &&\n\t\t\t\t(!context || (events[type][i].context === context))\n\t\t\t) {\n\t\t\t\tevents[type].splice(i, 1);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tfireEvent: function (/*String*/ type, /*(optional) Object*/ data) {\n\t\tif (!this.hasEventListeners(type)) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar event = L.Util.extend({\n\t\t\ttype: type,\n\t\t\ttarget: this\n\t\t}, data);\n\n\t\tvar listeners = this._leaflet_events[type].slice();\n\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\n\t\t\tlisteners[i].action.call(listeners[i].context || this, event);\n\t\t}\n\n\t\treturn this;\n\t}\n};\n\nL.Mixin.Events.on = L.Mixin.Events.addEventListener;\nL.Mixin.Events.off = L.Mixin.Events.removeEventListener;\nL.Mixin.Events.fire = L.Mixin.Events.fireEvent;\n\n\n(function () {\n\tvar ua = navigator.userAgent.toLowerCase(),\n\t\tie = !!window.ActiveXObject,\n\t\twebkit = ua.indexOf(\"webkit\") !== -1,\n\t\tmobile = typeof orientation !== 'undefined' ? true : false,\n\t\tandroid = ua.indexOf(\"android\") !== -1,\n\t\topera = window.opera;\n\n\tL.Browser = {\n\t\tie: ie,\n\t\tie6: ie && !window.XMLHttpRequest,\n\n\t\twebkit: webkit,\n\t\twebkit3d: webkit && ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()),\n\n\t\tgecko: ua.indexOf(\"gecko\") !== -1,\n\n\t\topera: opera,\n\n\t\tandroid: android,\n\t\tmobileWebkit: mobile && webkit,\n\t\tmobileOpera: mobile && opera,\n\n\t\tmobile: mobile,\n\t\ttouch: (function () {\n\t\t\tvar touchSupported = false,\n\t\t\t\tstartName = 'ontouchstart';\n\n\t\t\t// WebKit, etc\n\t\t\tif (startName in document.documentElement) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Firefox/Gecko\n\t\t\tvar e = document.createElement('div');\n\n\t\t\t// If no support for basic event stuff, unlikely to have touch support\n\t\t\tif (!e.setAttribute || !e.removeAttribute) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\te.setAttribute(startName, 'return;');\n\t\t\tif (typeof e[startName] === 'function') {\n\t\t\t\ttouchSupported = true;\n\t\t\t}\n\n\t\t\te.removeAttribute(startName);\n\t\t\te = null;\n\n\t\t\treturn touchSupported;\n\t\t}())\n\t};\n}());\n\n\n/*\n * L.Point represents a point with x and y coordinates.\n */\n\nL.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {\n\tthis.x = (round ? Math.round(x) : x);\n\tthis.y = (round ? Math.round(y) : y);\n};\n\nL.Point.prototype = {\n\tadd: function (point) {\n\t\treturn this.clone()._add(point);\n\t},\n\n\t_add: function (point) {\n\t\tthis.x += point.x;\n\t\tthis.y += point.y;\n\t\treturn this;\n\t},\n\n\tsubtract: function (point) {\n\t\treturn this.clone()._subtract(point);\n\t},\n\n\t// destructive subtract (faster)\n\t_subtract: function (point) {\n\t\tthis.x -= point.x;\n\t\tthis.y -= point.y;\n\t\treturn this;\n\t},\n\n\tdivideBy: function (num, round) {\n\t\treturn new L.Point(this.x / num, this.y / num, round);\n\t},\n\n\tmultiplyBy: function (num) {\n\t\treturn new L.Point(this.x * num, this.y * num);\n\t},\n\n\tdistanceTo: function (point) {\n\t\tvar x = point.x - this.x,\n\t\t\ty = point.y - this.y;\n\t\treturn Math.sqrt(x * x + y * y);\n\t},\n\n\tround: function () {\n\t\treturn this.clone()._round();\n\t},\n\n\t// destructive round\n\t_round: function () {\n\t\tthis.x = Math.round(this.x);\n\t\tthis.y = Math.round(this.y);\n\t\treturn this;\n\t},\n\n\tclone: function () {\n\t\treturn new L.Point(this.x, this.y);\n\t},\n\n\ttoString: function () {\n\t\treturn 'Point(' +\n\t\t\t\tL.Util.formatNum(this.x) + ', ' +\n\t\t\t\tL.Util.formatNum(this.y) + ')';\n\t}\n};\n\n\n/*\n * L.Bounds represents a rectangular area on the screen in pixel coordinates.\n */\n\nL.Bounds = L.Class.extend({\n\tinitialize: function (min, max) {\t//(Point, Point) or Point[]\n\t\tif (!min) {\n\t\t\treturn;\n\t\t}\n\t\tvar points = (min instanceof Array ? min : [min, max]);\n\t\tfor (var i = 0, len = points.length; i < len; i++) {\n\t\t\tthis.extend(points[i]);\n\t\t}\n\t},\n\n\t// extend the bounds to contain the given point\n\textend: function (/*Point*/ point) {\n\t\tif (!this.min && !this.max) {\n\t\t\tthis.min = new L.Point(point.x, point.y);\n\t\t\tthis.max = new L.Point(point.x, point.y);\n\t\t} else {\n\t\t\tthis.min.x = Math.min(point.x, this.min.x);\n\t\t\tthis.max.x = Math.max(point.x, this.max.x);\n\t\t\tthis.min.y = Math.min(point.y, this.min.y);\n\t\t\tthis.max.y = Math.max(point.y, this.max.y);\n\t\t}\n\t},\n\n\tgetCenter: function (round)/*->Point*/ {\n\t\treturn new L.Point(\n\t\t\t\t(this.min.x + this.max.x) / 2,\n\t\t\t\t(this.min.y + this.max.y) / 2, round);\n\t},\n\n\tcontains: function (/*Bounds or Point*/ obj)/*->Boolean*/ {\n\t\tvar min, max;\n\n\t\tif (obj instanceof L.Bounds) {\n\t\t\tmin = obj.min;\n\t\t\tmax = obj.max;\n\t\t} else {\n\t\t\tmin = max = obj;\n\t\t}\n\n\t\treturn (min.x >= this.min.x) &&\n\t\t\t\t(max.x <= this.max.x) &&\n\t\t\t\t(min.y >= this.min.y) &&\n\t\t\t\t(max.y <= this.max.y);\n\t},\n\n\tintersects: function (/*Bounds*/ bounds) {\n\t\tvar min = this.min,\n\t\t\tmax = this.max,\n\t\t\tmin2 = bounds.min,\n\t\t\tmax2 = bounds.max;\n\n\t\tvar xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\n\t\t\tyIntersects = (max2.y >= min.y) && (min2.y <= max.y);\n\n\t\treturn xIntersects && yIntersects;\n\t}\n\n});\n\n\n/*\n * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.\n */\n\nL.Transformation = L.Class.extend({\n\tinitialize: function (/*Number*/ a, /*Number*/ b, /*Number*/ c, /*Number*/ d) {\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._c = c;\n\t\tthis._d = d;\n\t},\n\n\ttransform: function (point, scale) {\n\t\treturn this._transform(point.clone(), scale);\n\t},\n\n\t// destructive transform (faster)\n\t_transform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {\n\t\tscale = scale || 1;\n\t\tpoint.x = scale * (this._a * point.x + this._b);\n\t\tpoint.y = scale * (this._c * point.y + this._d);\n\t\treturn point;\n\t},\n\n\tuntransform: function (/*Point*/ point, /*Number*/ scale) /*-> Point*/ {\n\t\tscale = scale || 1;\n\t\treturn new L.Point(\n\t\t\t(point.x / scale - this._b) / this._a,\n\t\t\t(point.y / scale - this._d) / this._c);\n\t}\n});\n\n\n/*\n * L.DomUtil contains various utility functions for working with DOM\n */\n\nL.DomUtil = {\n\tget: function (id) {\n\t\treturn (typeof id === 'string' ? document.getElementById(id) : id);\n\t},\n\n\tgetStyle: function (el, style) {\n\t\tvar value = el.style[style];\n\t\tif (!value && el.currentStyle) {\n\t\t\tvalue = el.currentStyle[style];\n\t\t}\n\t\tif (!value || value === 'auto') {\n\t\t\tvar css = document.defaultView.getComputedStyle(el, null);\n\t\t\tvalue = css ? css[style] : null;\n\t\t}\n\t\treturn (value === 'auto' ? null : value);\n\t},\n\n\tgetViewportOffset: function (element) {\n\t\tvar top = 0,\n\t\t\tleft = 0,\n\t\t\tel = element,\n\t\t\tdocBody = document.body;\n\n\t\tdo {\n\t\t\ttop += el.offsetTop || 0;\n\t\t\tleft += el.offsetLeft || 0;\n\n\t\t\tif (el.offsetParent === docBody &&\n\t\t\t\t\tL.DomUtil.getStyle(el, 'position') === 'absolute') {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tel = el.offsetParent;\n\t\t} while (el);\n\n\t\tel = element;\n\n\t\tdo {\n\t\t\tif (el === docBody) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\ttop -= el.scrollTop || 0;\n\t\t\tleft -= el.scrollLeft || 0;\n\n\t\t\tel = el.parentNode;\n\t\t} while (el);\n\n\t\treturn new L.Point(left, top);\n\t},\n\n\tcreate: function (tagName, className, container) {\n\t\tvar el = document.createElement(tagName);\n\t\tel.className = className;\n\t\tif (container) {\n\t\t\tcontainer.appendChild(el);\n\t\t}\n\t\treturn el;\n\t},\n\n\tdisableTextSelection: function () {\n\t\tif (document.selection && document.selection.empty) {\n\t\t\tdocument.selection.empty();\n\t\t}\n\t\tif (!this._onselectstart) {\n\t\t\tthis._onselectstart = document.onselectstart;\n\t\t\tdocument.onselectstart = L.Util.falseFn;\n\t\t}\n\t},\n\n\tenableTextSelection: function () {\n\t\tdocument.onselectstart = this._onselectstart;\n\t\tthis._onselectstart = null;\n\t},\n\n\thasClass: function (el, name) {\n\t\treturn (el.className.length > 0) &&\n\t\t\t\tnew RegExp(\"(^|\\\\s)\" + name + \"(\\\\s|$)\").test(el.className);\n\t},\n\n\taddClass: function (el, name) {\n\t\tif (!L.DomUtil.hasClass(el, name)) {\n\t\t\tel.className += (el.className ? ' ' : '') + name;\n\t\t}\n\t},\n\n\tremoveClass: function (el, name) {\n\t\tel.className = el.className.replace(/(\\S+)\\s*/g, function (w, match) {\n\t\t\tif (match === name) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn w;\n\t\t}).replace(/^\\s+/, '');\n\t},\n\n\tsetOpacity: function (el, value) {\n\t\tif (L.Browser.ie) {\n\t\t\tel.style.filter = 'alpha(opacity=' + Math.round(value * 100) + ')';\n\t\t} else {\n\t\t\tel.style.opacity = value;\n\t\t}\n\t},\n\n\t//TODO refactor away this ugly translate/position mess\n\n\ttestProp: function (props) {\n\t\tvar style = document.documentElement.style;\n\n\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\tif (props[i] in style) {\n\t\t\t\treturn props[i];\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\tgetTranslateString: function (point) {\n\t\treturn L.DomUtil.TRANSLATE_OPEN +\n\t\t\t\tpoint.x + 'px,' + point.y + 'px' +\n\t\t\t\tL.DomUtil.TRANSLATE_CLOSE;\n\t},\n\n\tgetScaleString: function (scale, origin) {\n\t\tvar preTranslateStr = L.DomUtil.getTranslateString(origin),\n\t\t\tscaleStr = ' scale(' + scale + ') ',\n\t\t\tpostTranslateStr = L.DomUtil.getTranslateString(origin.multiplyBy(-1));\n\n\t\treturn preTranslateStr + scaleStr + postTranslateStr;\n\t},\n\n\tsetPosition: function (el, point) {\n\t\tel._leaflet_pos = point;\n\t\tif (L.Browser.webkit3d) {\n\t\t\tel.style[L.DomUtil.TRANSFORM] =  L.DomUtil.getTranslateString(point);\n\n\t\t\tif (L.Browser.android) {\n\t\t\t\tel.style['-webkit-perspective'] = '1000';\n\t\t\t\tel.style['-webkit-backface-visibility'] = 'hidden';\n\t\t\t}\n\t\t} else {\n\t\t\tel.style.left = point.x + 'px';\n\t\t\tel.style.top = point.y + 'px';\n\t\t}\n\t},\n\n\tgetPosition: function (el) {\n\t\treturn el._leaflet_pos;\n\t}\n};\n\nL.Util.extend(L.DomUtil, {\n\tTRANSITION: L.DomUtil.testProp(['transition', 'webkitTransition', 'OTransition', 'MozTransition', 'msTransition']),\n\tTRANSFORM: L.DomUtil.testProp(['transformProperty', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']),\n\n\tTRANSLATE_OPEN: 'translate' + (L.Browser.webkit3d ? '3d(' : '('),\n\tTRANSLATE_CLOSE: L.Browser.webkit3d ? ',0)' : ')'\n});\n\n\n/*\n\tCM.LatLng represents a geographical point with latitude and longtitude coordinates.\n*/\n\nL.LatLng = function (/*Number*/ rawLat, /*Number*/ rawLng, /*Boolean*/ noWrap) {\n\tvar lat = parseFloat(rawLat),\n\t\tlng = parseFloat(rawLng);\n\n\tif (isNaN(lat) || isNaN(lng)) {\n\t\tthrow new Error('Invalid LatLng object: (' + rawLat + ', ' + rawLng + ')');\n\t}\n\n\tif (noWrap !== true) {\n\t\tlat = Math.max(Math.min(lat, 90), -90);\t\t\t\t\t// clamp latitude into -90..90\n\t\tlng = (lng + 180) % 360 + ((lng < -180 || lng === 180) ? 180 : -180);\t// wrap longtitude into -180..180\n\t}\n\n\t//TODO change to lat() & lng()\n\tthis.lat = lat;\n\tthis.lng = lng;\n};\n\nL.Util.extend(L.LatLng, {\n\tDEG_TO_RAD: Math.PI / 180,\n\tRAD_TO_DEG: 180 / Math.PI,\n\tMAX_MARGIN: 1.0E-9 // max margin of error for the \"equals\" check\n});\n\nL.LatLng.prototype = {\n\tequals: function (/*LatLng*/ obj) {\n\t\tif (!(obj instanceof L.LatLng)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar margin = Math.max(Math.abs(this.lat - obj.lat), Math.abs(this.lng - obj.lng));\n\t\treturn margin <= L.LatLng.MAX_MARGIN;\n\t},\n\n\ttoString: function () {\n\t\treturn 'LatLng(' +\n\t\t\t\tL.Util.formatNum(this.lat) + ', ' +\n\t\t\t\tL.Util.formatNum(this.lng) + ')';\n\t},\n\n\t// Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula\n\tdistanceTo: function (/*LatLng*/ other)/*->Double*/ {\n\t\tvar R = 6378137, // earth radius in meters\n\t\t\td2r = L.LatLng.DEG_TO_RAD,\n\t\t\tdLat = (other.lat - this.lat) * d2r,\n\t\t\tdLon = (other.lng - this.lng) * d2r,\n\t\t\tlat1 = this.lat * d2r,\n\t\t\tlat2 = other.lat * d2r,\n\t\t\tsin1 = Math.sin(dLat / 2),\n\t\t\tsin2 = Math.sin(dLon / 2);\n\n\t\tvar a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);\n\n\t\treturn R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t}\n};\n\n\n/*\n * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.\n */\n\nL.LatLngBounds = L.Class.extend({\n\tinitialize: function (southWest, northEast) {\t// (LatLng, LatLng) or (LatLng[])\n\t\tif (!southWest) {\n\t\t\treturn;\n\t\t}\n\t\tvar latlngs = (southWest instanceof Array ? southWest : [southWest, northEast]);\n\t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n\t\t\tthis.extend(latlngs[i]);\n\t\t}\n\t},\n\n\t// extend the bounds to contain the given point\n\textend: function (/*LatLng*/ latlng) {\n\t\tif (!this._southWest && !this._northEast) {\n\t\t\tthis._southWest = new L.LatLng(latlng.lat, latlng.lng, true);\n\t\t\tthis._northEast = new L.LatLng(latlng.lat, latlng.lng, true);\n\t\t} else {\n\t\t\tthis._southWest.lat = Math.min(latlng.lat, this._southWest.lat);\n\t\t\tthis._southWest.lng = Math.min(latlng.lng, this._southWest.lng);\n\t\t\tthis._northEast.lat = Math.max(latlng.lat, this._northEast.lat);\n\t\t\tthis._northEast.lng = Math.max(latlng.lng, this._northEast.lng);\n\t\t}\n\t},\n\n\tgetCenter: function () /*-> LatLng*/ {\n\t\treturn new L.LatLng(\n\t\t\t\t(this._southWest.lat + this._northEast.lat) / 2,\n\t\t\t\t(this._southWest.lng + this._northEast.lng) / 2);\n\t},\n\n\tgetSouthWest: function () {\n\t\treturn this._southWest;\n\t},\n\n\tgetNorthEast: function () {\n\t\treturn this._northEast;\n\t},\n\n\tgetNorthWest: function () {\n\t\treturn new L.LatLng(this._northEast.lat, this._southWest.lng, true);\n\t},\n\n\tgetSouthEast: function () {\n\t\treturn new L.LatLng(this._southWest.lat, this._northEast.lng, true);\n\t},\n\n\tcontains: function (/*LatLngBounds or LatLng*/ obj) /*-> Boolean*/ {\n\t\tvar sw = this._southWest,\n\t\t\tne = this._northEast,\n\t\t\tsw2, ne2;\n\n\t\tif (obj instanceof L.LatLngBounds) {\n\t\t\tsw2 = obj.getSouthWest();\n\t\t\tne2 = obj.getNorthEast();\n\t\t} else {\n\t\t\tsw2 = ne2 = obj;\n\t\t}\n\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\n\t\t\t\t(sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\n\t},\n\n\tintersects: function (/*LatLngBounds*/ bounds) {\n\t\tvar sw = this._southWest,\n\t\t\tne = this._northEast,\n\t\t\tsw2 = bounds.getSouthWest(),\n\t\t\tne2 = bounds.getNorthEast();\n\n\t\tvar latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\n\t\t\tlngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\n\n\t\treturn latIntersects && lngIntersects;\n\t},\n\n\ttoBBoxString: function () {\n\t\tvar sw = this._southWest,\n\t\t\tne = this._northEast;\n\t\treturn [sw.lng, sw.lat, ne.lng, ne.lat].join(',');\n\t}\n});\n\n//TODO International date line?\n\n\n/*\n * L.Projection contains various geographical projections used by CRS classes.\n */\n\nL.Projection = {};\n\n\n\nL.Projection.SphericalMercator = {\n\tMAX_LATITUDE: 85.0511287798,\n\n\tproject: function (/*LatLng*/ latlng) /*-> Point*/ {\n\t\tvar d = L.LatLng.DEG_TO_RAD,\n\t\t\tmax = this.MAX_LATITUDE,\n\t\t\tlat = Math.max(Math.min(max, latlng.lat), -max),\n\t\t\tx = latlng.lng * d,\n\t\t\ty = lat * d;\n\t\ty = Math.log(Math.tan((Math.PI / 4) + (y / 2)));\n\n\t\treturn new L.Point(x, y);\n\t},\n\n\tunproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {\n\t\tvar d = L.LatLng.RAD_TO_DEG,\n\t\t\tlng = point.x * d,\n\t\t\tlat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d;\n\n\t\treturn new L.LatLng(lat, lng, unbounded);\n\t}\n};\n\n\n\nL.Projection.LonLat = {\n\tproject: function (latlng) {\n\t\treturn new L.Point(latlng.lng, latlng.lat);\n\t},\n\n\tunproject: function (point, unbounded) {\n\t\treturn new L.LatLng(point.y, point.x, unbounded);\n\t}\n};\n\n\n\nL.CRS = {\n\tlatLngToPoint: function (/*LatLng*/ latlng, /*Number*/ scale)/*-> Point*/ {\n\t\tvar projectedPoint = this.projection.project(latlng);\n\t\treturn this.transformation._transform(projectedPoint, scale);\n\t},\n\n\tpointToLatLng: function (/*Point*/ point, /*Number*/ scale, /*(optional) Boolean*/ unbounded)/*-> LatLng*/ {\n\t\tvar untransformedPoint = this.transformation.untransform(point, scale);\n\t\treturn this.projection.unproject(untransformedPoint, unbounded);\n\t\t//TODO get rid of 'unbounded' everywhere\n\t},\n\n\tproject: function (latlng) {\n\t\treturn this.projection.project(latlng);\n\t}\n};\n\n\n\nL.CRS.EPSG3857 = L.Util.extend({}, L.CRS, {\n\tcode: 'EPSG:3857',\n\n\tprojection: L.Projection.SphericalMercator,\n\ttransformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),\n\n\tproject: function (/*LatLng*/ latlng)/*-> Point*/ {\n\t\tvar projectedPoint = this.projection.project(latlng),\n\t\t\tearthRadius = 6378137;\n\t\treturn projectedPoint.multiplyBy(earthRadius);\n\t}\n});\n\nL.CRS.EPSG900913 = L.Util.extend({}, L.CRS.EPSG3857, {\n\tcode: 'EPSG:900913'\n});\n\n\n\nL.CRS.EPSG4326 = L.Util.extend({}, L.CRS, {\n\tcode: 'EPSG:4326',\n\n\tprojection: L.Projection.LonLat,\n\ttransformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)\n});\n\n\n/*\n * L.Map is the central class of the API - it is used to create a map.\n */\n\nL.Map = L.Class.extend({\n\tincludes: L.Mixin.Events,\n\n\toptions: {\n\t\t// projection\n\t\tcrs: L.CRS.EPSG3857 || L.CRS.EPSG4326,\n\t\tscale: function (zoom) {\n\t\t\treturn 256 * Math.pow(2, zoom);\n\t\t},\n\n\t\t// state\n\t\tcenter: null,\n\t\tzoom: null,\n\t\tlayers: [],\n\n\t\t// interaction\n\t\tdragging: true,\n\t\ttouchZoom: L.Browser.touch && !L.Browser.android,\n\t\tscrollWheelZoom: !L.Browser.touch,\n\t\tdoubleClickZoom: true,\n\t\tboxZoom: true,\n\n\t\t// controls\n\t\tzoomControl: true,\n\t\tattributionControl: true,\n\n\t\t// animation\n\t\tfadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android,\n\t\tzoomAnimation: L.DomUtil.TRANSITION && !L.Browser.android && !L.Browser.mobileOpera,\n\n\t\t// misc\n\t\ttrackResize: true,\n\t\tclosePopupOnClick: true,\n\t\tworldCopyJump: true\n\t},\n\n\n\t// constructor\n\n\tinitialize: function (id, options) { // (HTMLElement or String, Object)\n\t\tL.Util.setOptions(this, options);\n\n\t\tthis._container = L.DomUtil.get(id);\n\n\t\tif (this._container._leaflet) {\n\t\t\tthrow new Error(\"Map container is already initialized.\");\n\t\t}\n\t\tthis._container._leaflet = true;\n\n\t\tthis._initLayout();\n\n\t\tif (L.DomEvent) {\n\t\t\tthis._initEvents();\n\t\t\tif (L.Handler) {\n\t\t\t\tthis._initInteraction();\n\t\t\t}\n\t\t\tif (L.Control) {\n\t\t\t\tthis._initControls();\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.maxBounds) {\n\t\t\tthis.setMaxBounds(this.options.maxBounds);\n\t\t}\n\n\t\tvar center = this.options.center,\n\t\t\tzoom = this.options.zoom;\n\n\t\tif (center !== null && zoom !== null) {\n\t\t\tthis.setView(center, zoom, true);\n\t\t}\n\n\t\tvar layers = this.options.layers;\n\t\tlayers = (layers instanceof Array ? layers : [layers]);\n\t\tthis._tileLayersNum = 0;\n\t\tthis._initLayers(layers);\n\t},\n\n\n\t// public methods that modify map state\n\n\t// replaced by animation-powered implementation in Map.PanAnimation.js\n\tsetView: function (center, zoom) {\n\t\t// reset the map view\n\t\tthis._resetView(center, this._limitZoom(zoom));\n\t\treturn this;\n\t},\n\n\tsetZoom: function (zoom) { // (Number)\n\t\treturn this.setView(this.getCenter(), zoom);\n\t},\n\n\tzoomIn: function () {\n\t\treturn this.setZoom(this._zoom + 1);\n\t},\n\n\tzoomOut: function () {\n\t\treturn this.setZoom(this._zoom - 1);\n\t},\n\n\tfitBounds: function (bounds) { // (LatLngBounds)\n\t\tvar zoom = this.getBoundsZoom(bounds);\n\t\treturn this.setView(bounds.getCenter(), zoom);\n\t},\n\n\tfitWorld: function () {\n\t\tvar sw = new L.LatLng(-60, -170),\n\t\t\tne = new L.LatLng(85, 179);\n\t\treturn this.fitBounds(new L.LatLngBounds(sw, ne));\n\t},\n\n\tpanTo: function (center) { // (LatLng)\n\t\treturn this.setView(center, this._zoom);\n\t},\n\n\tpanBy: function (offset) { // (Point)\n\t\t// replaced with animated panBy in Map.Animation.js\n\t\tthis.fire('movestart');\n\n\t\tthis._rawPanBy(offset);\n\n\t\tthis.fire('move');\n\t\tthis.fire('moveend');\n\n\t\treturn this;\n\t},\n\n\tsetMaxBounds: function (bounds) {\n\t\tthis.options.maxBounds = bounds;\n\n\t\tif (!bounds) {\n\t\t\tthis._boundsMinZoom = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvar minZoom = this.getBoundsZoom(bounds, true);\n\n\t\tthis._boundsMinZoom = minZoom;\n\n\t\tif (this._loaded) {\n\t\t\tif (this._zoom < minZoom) {\n\t\t\t\tthis.setView(bounds.getCenter(), minZoom);\n\t\t\t} else {\n\t\t\t\tthis.panInsideBounds(bounds);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tpanInsideBounds: function (bounds) {\n\t\tvar viewBounds = this.getBounds(),\n\t\t\tviewSw = this.project(viewBounds.getSouthWest()),\n\t\t\tviewNe = this.project(viewBounds.getNorthEast()),\n\t\t\tsw = this.project(bounds.getSouthWest()),\n\t\t\tne = this.project(bounds.getNorthEast()),\n\t\t\tdx = 0,\n\t\t\tdy = 0;\n\n\t\tif (viewNe.y < ne.y) { // north\n\t\t\tdy = ne.y - viewNe.y;\n\t\t}\n\t\tif (viewNe.x > ne.x) { // east\n\t\t\tdx = ne.x - viewNe.x;\n\t\t}\n\t\tif (viewSw.y > sw.y) { // south\n\t\t\tdy = sw.y - viewSw.y;\n\t\t}\n\t\tif (viewSw.x < sw.x) { // west\n\t\t\tdx = sw.x - viewSw.x;\n\t\t}\n\n\t\treturn this.panBy(new L.Point(dx, dy, true));\n\t},\n\n\taddLayer: function (layer, insertAtTheTop) {\n\t\tvar id = L.Util.stamp(layer);\n\n\t\tif (this._layers[id]) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._layers[id] = layer;\n\n\t\tif (layer.options && !isNaN(layer.options.maxZoom)) {\n\t\t\tthis._layersMaxZoom = Math.max(this._layersMaxZoom || 0, layer.options.maxZoom);\n\t\t}\n\t\tif (layer.options && !isNaN(layer.options.minZoom)) {\n\t\t\tthis._layersMinZoom = Math.min(this._layersMinZoom || Infinity, layer.options.minZoom);\n\t\t}\n\t\t//TODO getMaxZoom, getMinZoom in ILayer (instead of options)\n\n\t\tif (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {\n\t\t\tthis._tileLayersNum++;\n\t\t\tlayer.on('load', this._onTileLayerLoad, this);\n\t\t}\n\t\tif (this.attributionControl && layer.getAttribution) {\n\t\t\tthis.attributionControl.addAttribution(layer.getAttribution());\n\t\t}\n\n\t\tvar onMapLoad = function () {\n\t\t\tlayer.onAdd(this, insertAtTheTop);\n\t\t\tthis.fire('layeradd', {layer: layer});\n\t\t};\n\n\t\tif (this._loaded) {\n\t\t\tonMapLoad.call(this);\n\t\t} else {\n\t\t\tthis.on('load', onMapLoad, this);\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveLayer: function (layer) {\n\t\tvar id = L.Util.stamp(layer);\n\n\t\tif (this._layers[id]) {\n\t\t\tlayer.onRemove(this);\n\t\t\tdelete this._layers[id];\n\n\t\t\tif (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {\n\t\t\t\tthis._tileLayersNum--;\n\t\t\t\tlayer.off('load', this._onTileLayerLoad, this);\n\t\t\t}\n\t\t\tif (this.attributionControl && layer.getAttribution) {\n\t\t\t\tthis.attributionControl.removeAttribution(layer.getAttribution());\n\t\t\t}\n\n\t\t\tthis.fire('layerremove', {layer: layer});\n\t\t}\n\t\treturn this;\n\t},\n\n\thasLayer: function (layer) {\n\t\tvar id = L.Util.stamp(layer);\n\t\treturn this._layers.hasOwnProperty(id);\n\t},\n\n\tinvalidateSize: function () {\n\t\tvar oldSize = this.getSize();\n\n\t\tthis._sizeChanged = true;\n\n\t\tif (this.options.maxBounds) {\n\t\t\tthis.setMaxBounds(this.options.maxBounds);\n\t\t}\n\n\t\tif (!this._loaded) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._rawPanBy(oldSize.subtract(this.getSize()).divideBy(2, true));\n\n\t\tthis.fire('move');\n\n\t\tclearTimeout(this._sizeTimer);\n\t\tthis._sizeTimer = setTimeout(L.Util.bind(function () {\n\t\t\tthis.fire('moveend');\n\t\t}, this), 200);\n\n\t\treturn this;\n\t},\n\n\n\t// public methods for getting map state\n\n\tgetCenter: function (unbounded) { // (Boolean)\n\t\tvar viewHalf = this.getSize().divideBy(2),\n\t\t\tcenterPoint = this._getTopLeftPoint().add(viewHalf);\n\t\treturn this.unproject(centerPoint, this._zoom, unbounded);\n\t},\n\n\tgetZoom: function () {\n\t\treturn this._zoom;\n\t},\n\n\tgetBounds: function () {\n\t\tvar bounds = this.getPixelBounds(),\n\t\t\tsw = this.unproject(new L.Point(bounds.min.x, bounds.max.y), this._zoom, true),\n\t\t\tne = this.unproject(new L.Point(bounds.max.x, bounds.min.y), this._zoom, true);\n\t\treturn new L.LatLngBounds(sw, ne);\n\t},\n\n\tgetMinZoom: function () {\n\t\tvar z1 = this.options.minZoom || 0,\n\t\t\tz2 = this._layersMinZoom || 0,\n\t\t\tz3 = this._boundsMinZoom || 0;\n\n\t\treturn Math.max(z1, z2, z3);\n\t},\n\n\tgetMaxZoom: function () {\n\t\tvar z1 = isNaN(this.options.maxZoom) ? Infinity : this.options.maxZoom,\n\t\t\tz2 = this._layersMaxZoom || Infinity;\n\n\t\treturn Math.min(z1, z2);\n\t},\n\n\tgetBoundsZoom: function (bounds, inside) { // (LatLngBounds)\n\t\tvar size = this.getSize(),\n\t\t\tzoom = this.options.minZoom || 0,\n\t\t\tmaxZoom = this.getMaxZoom(),\n\t\t\tne = bounds.getNorthEast(),\n\t\t\tsw = bounds.getSouthWest(),\n\t\t\tboundsSize,\n\t\t\tnePoint,\n\t\t\tswPoint,\n\t\t\tzoomNotFound = true;\n\n\t\tif (inside) {\n\t\t\tzoom--;\n\t\t}\n\n\t\tdo {\n\t\t\tzoom++;\n\t\t\tnePoint = this.project(ne, zoom);\n\t\t\tswPoint = this.project(sw, zoom);\n\t\t\tboundsSize = new L.Point(nePoint.x - swPoint.x, swPoint.y - nePoint.y);\n\n\t\t\tif (!inside) {\n\t\t\t\tzoomNotFound = (boundsSize.x <= size.x) && (boundsSize.y <= size.y);\n\t\t\t} else {\n\t\t\t\tzoomNotFound = (boundsSize.x < size.x) || (boundsSize.y < size.y);\n\t\t\t}\n\t\t} while (zoomNotFound && (zoom <= maxZoom));\n\n\t\tif (zoomNotFound && inside) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn inside ? zoom : zoom - 1;\n\t},\n\n\tgetSize: function () {\n\t\tif (!this._size || this._sizeChanged) {\n\t\t\tthis._size = new L.Point(this._container.clientWidth, this._container.clientHeight);\n\t\t\tthis._sizeChanged = false;\n\t\t}\n\t\treturn this._size;\n\t},\n\n\tgetPixelBounds: function () {\n\t\tvar topLeftPoint = this._getTopLeftPoint(),\n\t\t\tsize = this.getSize();\n\t\treturn new L.Bounds(topLeftPoint, topLeftPoint.add(size));\n\t},\n\n\tgetPixelOrigin: function () {\n\t\treturn this._initialTopLeftPoint;\n\t},\n\n\tgetPanes: function () {\n\t\treturn this._panes;\n\t},\n\n\n\t// conversion methods\n\n\tmouseEventToContainerPoint: function (e) { // (MouseEvent)\n\t\treturn L.DomEvent.getMousePosition(e, this._container);\n\t},\n\n\tmouseEventToLayerPoint: function (e) { // (MouseEvent)\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\n\t},\n\n\tmouseEventToLatLng: function (e) { // (MouseEvent)\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\n\t},\n\n\tcontainerPointToLayerPoint: function (point) { // (Point)\n\t\treturn point.subtract(L.DomUtil.getPosition(this._mapPane));\n\t},\n\n\tlayerPointToContainerPoint: function (point) { // (Point)\n\t\treturn point.add(L.DomUtil.getPosition(this._mapPane));\n\t},\n\n\tlayerPointToLatLng: function (point) { // (Point)\n\t\treturn this.unproject(point.add(this._initialTopLeftPoint));\n\t},\n\n\tlatLngToLayerPoint: function (latlng) { // (LatLng)\n\t\treturn this.project(latlng)._round()._subtract(this._initialTopLeftPoint);\n\t},\n\n\tproject: function (latlng, zoom) { // (LatLng[, Number]) -> Point\n\t\tzoom = (typeof zoom === 'undefined' ? this._zoom : zoom);\n\t\treturn this.options.crs.latLngToPoint(latlng, this.options.scale(zoom));\n\t},\n\n\tunproject: function (point, zoom, unbounded) { // (Point[, Number, Boolean]) -> LatLng\n\t\tzoom = (typeof zoom === 'undefined' ? this._zoom : zoom);\n\t\treturn this.options.crs.pointToLatLng(point, this.options.scale(zoom), unbounded);\n\t},\n\n\n\t// private methods that modify map state\n\n\t_initLayout: function () {\n\t\tvar container = this._container;\n\n\t\tcontainer.innerHTML = '';\n\n\t\tcontainer.className += ' leaflet-container';\n\n\t\tif (this.options.fadeAnimation) {\n\t\t\tcontainer.className += ' leaflet-fade-anim';\n\t\t}\n\n\t\tvar position = L.DomUtil.getStyle(container, 'position');\n\t\tif (position !== 'absolute' && position !== 'relative') {\n\t\t\tcontainer.style.position = 'relative';\n\t\t}\n\n\t\tthis._initPanes();\n\n\t\tif (this._initControlPos) {\n\t\t\tthis._initControlPos();\n\t\t}\n\t},\n\n\t_initPanes: function () {\n\t\tvar panes = this._panes = {};\n\n\t\tthis._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container);\n\n\t\tthis._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane);\n\t\tthis._objectsPane = panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane);\n\n\t\tpanes.shadowPane = this._createPane('leaflet-shadow-pane');\n\t\tpanes.overlayPane = this._createPane('leaflet-overlay-pane');\n\t\tpanes.markerPane = this._createPane('leaflet-marker-pane');\n\t\tpanes.popupPane = this._createPane('leaflet-popup-pane');\n\t},\n\n\t_createPane: function (className, container) {\n\t\treturn L.DomUtil.create('div', className, container || this._objectsPane);\n\t},\n\n\t_resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) {\n\t\tvar zoomChanged = (this._zoom !== zoom);\n\n\t\tif (!afterZoomAnim) {\n\t\t\tthis.fire('movestart');\n\n\t\t\tif (zoomChanged) {\n\t\t\t\tthis.fire('zoomstart');\n\t\t\t}\n\t\t}\n\n\t\tthis._zoom = zoom;\n\n\t\tthis._initialTopLeftPoint = this._getNewTopLeftPoint(center);\n\n\t\tif (!preserveMapOffset) {\n\t\t\tL.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));\n\t\t} else {\n\t\t\tvar offset = L.DomUtil.getPosition(this._mapPane);\n\t\t\tthis._initialTopLeftPoint._add(offset);\n\t\t}\n\n\t\tthis._tileLayersToLoad = this._tileLayersNum;\n\t\tthis.fire('viewreset', {hard: !preserveMapOffset});\n\n\t\tthis.fire('move');\n\t\tif (zoomChanged || afterZoomAnim) {\n\t\t\tthis.fire('zoomend');\n\t\t}\n\t\tthis.fire('moveend');\n\n\t\tif (!this._loaded) {\n\t\t\tthis._loaded = true;\n\t\t\tthis.fire('load');\n\t\t}\n\t},\n\n\t_initLayers: function (layers) {\n\t\tthis._layers = {};\n\n\t\tvar i, len;\n\n\t\tfor (i = 0, len = layers.length; i < len; i++) {\n\t\t\tthis.addLayer(layers[i]);\n\t\t}\n\t},\n\n\t_initControls: function () {\n\t\tif (this.options.zoomControl) {\n\t\t\tthis.addControl(new L.Control.Zoom());\n\t\t}\n\t\tif (this.options.attributionControl) {\n\t\t\tthis.attributionControl = new L.Control.Attribution();\n\t\t\tthis.addControl(this.attributionControl);\n\t\t}\n\t},\n\n\t_rawPanBy: function (offset) {\n\t\tvar mapPaneOffset = L.DomUtil.getPosition(this._mapPane);\n\t\tL.DomUtil.setPosition(this._mapPane, mapPaneOffset.subtract(offset));\n\t},\n\n\n\t// map events\n\n\t_initEvents: function () {\n\t\tL.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);\n\n\t\tvar events = ['dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'contextmenu'];\n\n\t\tvar i, len;\n\n\t\tfor (i = 0, len = events.length; i < len; i++) {\n\t\t\tL.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);\n\t\t}\n\n\t\tif (this.options.trackResize) {\n\t\t\tL.DomEvent.addListener(window, 'resize', this._onResize, this);\n\t\t}\n\t},\n\n\t_onResize: function () {\n\t\tL.Util.requestAnimFrame(this.invalidateSize, this, false, this._container);\n\t},\n\n\t_onMouseClick: function (e) {\n\t\tif (!this._loaded || (this.dragging && this.dragging.moved())) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.fire('pre' + e.type);\n\t\tthis._fireMouseEvent(e);\n\t},\n\n\t_fireMouseEvent: function (e) {\n\t\tif (!this._loaded) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar type = e.type;\n\t\ttype = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));\n\n\t\tif (!this.hasEventListeners(type)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (type === 'contextmenu') {\n\t\t\tL.DomEvent.preventDefault(e);\n\t\t}\n\t\t\n\t\tthis.fire(type, {\n\t\t\tlatlng: this.mouseEventToLatLng(e),\n\t\t\tlayerPoint: this.mouseEventToLayerPoint(e)\n\t\t});\n\t},\n\n\t_initInteraction: function () {\n\t\tvar handlers = {\n\t\t\tdragging: L.Map.Drag,\n\t\t\ttouchZoom: L.Map.TouchZoom,\n\t\t\tdoubleClickZoom: L.Map.DoubleClickZoom,\n\t\t\tscrollWheelZoom: L.Map.ScrollWheelZoom,\n\t\t\tboxZoom: L.Map.BoxZoom\n\t\t};\n\n\t\tvar i;\n\t\tfor (i in handlers) {\n\t\t\tif (handlers.hasOwnProperty(i) && handlers[i]) {\n\t\t\t\tthis[i] = new handlers[i](this);\n\t\t\t\tif (this.options[i]) {\n\t\t\t\t\tthis[i].enable();\n\t\t\t\t}\n\t\t\t\t// TODO move enabling to handler contructor\n\t\t\t}\n\t\t}\n\t},\n\n\t_onTileLayerLoad: function () {\n\t\t// clear scaled tiles after all new tiles are loaded (for performance)\n\t\tthis._tileLayersToLoad--;\n\t\tif (this._tileLayersNum && !this._tileLayersToLoad && this._tileBg) {\n\t\t\tclearTimeout(this._clearTileBgTimer);\n\t\t\tthis._clearTileBgTimer = setTimeout(L.Util.bind(this._clearTileBg, this), 500);\n\t\t}\n\t},\n\n\n\t// private methods for getting map state\n\n\t_getTopLeftPoint: function () {\n\t\tif (!this._loaded) {\n\t\t\tthrow new Error('Set map center and zoom first.');\n\t\t}\n\n\t\tvar offset = L.DomUtil.getPosition(this._mapPane);\n\t\treturn this._initialTopLeftPoint.subtract(offset);\n\t},\n\n\t_getNewTopLeftPoint: function (center) {\n\t\tvar viewHalf = this.getSize().divideBy(2);\n\t\treturn this.project(center).subtract(viewHalf).round();\n\t},\n\n\t_limitZoom: function (zoom) {\n\t\tvar min = this.getMinZoom();\n\t\tvar max = this.getMaxZoom();\n\t\treturn Math.max(min, Math.min(max, zoom));\n\t}\n});\n\n\n\nL.Projection.Mercator = {\n\tMAX_LATITUDE: 85.0840591556,\n\n\tR_MINOR: 6356752.3142,\n\tR_MAJOR: 6378137,\n\n\tproject: function (/*LatLng*/ latlng) /*-> Point*/ {\n\t\tvar d = L.LatLng.DEG_TO_RAD,\n\t\t\tmax = this.MAX_LATITUDE,\n\t\t\tlat = Math.max(Math.min(max, latlng.lat), -max),\n\t\t\tr = this.R_MAJOR,\n\t\t\tr2 = this.R_MINOR,\n\t\t\tx = latlng.lng * d * r,\n\t\t\ty = lat * d,\n\t\t\ttmp = r2 / r,\n\t\t\teccent = Math.sqrt(1.0 - tmp * tmp),\n\t\t\tcon = eccent * Math.sin(y);\n\n\t\tcon = Math.pow((1 - con) / (1 + con), eccent * 0.5);\n\n\t\tvar ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;\n\t\ty = -r2 * Math.log(ts);\n\n\t\treturn new L.Point(x, y);\n\t},\n\n\tunproject: function (/*Point*/ point, /*Boolean*/ unbounded) /*-> LatLng*/ {\n\t\tvar d = L.LatLng.RAD_TO_DEG,\n\t\t\tr = this.R_MAJOR,\n\t\t\tr2 = this.R_MINOR,\n\t\t\tlng = point.x * d / r,\n\t\t\ttmp = r2 / r,\n\t\t\teccent = Math.sqrt(1 - (tmp * tmp)),\n\t\t\tts = Math.exp(- point.y / r2),\n\t\t\tphi = (Math.PI / 2) - 2 * Math.atan(ts),\n\t\t\tnumIter = 15,\n\t\t\ttol = 1e-7,\n\t\t\ti = numIter,\n\t\t\tdphi = 0.1,\n\t\t\tcon;\n\n\t\twhile ((Math.abs(dphi) > tol) && (--i > 0)) {\n\t\t\tcon = eccent * Math.sin(phi);\n\t\t\tdphi = (Math.PI / 2) - 2 * Math.atan(ts * Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;\n\t\t\tphi += dphi;\n\t\t}\n\n\t\treturn new L.LatLng(phi * d, lng, unbounded);\n\t}\n};\n\n\n\nL.CRS.EPSG3395 = L.Util.extend({}, L.CRS, {\n\tcode: 'EPSG:3395',\n\n\tprojection: L.Projection.Mercator,\n\ttransformation: (function () {\n\t\tvar m = L.Projection.Mercator,\n\t\t\tr = m.R_MAJOR,\n\t\t\tr2 = m.R_MINOR;\n\n\t\treturn new L.Transformation(0.5 / (Math.PI * r), 0.5, -0.5 / (Math.PI * r2), 0.5);\n\t}())\n});\n\n\n/*\n * L.TileLayer is used for standard xyz-numbered tile layers.\n */\n\nL.TileLayer = L.Class.extend({\n\tincludes: L.Mixin.Events,\n\n\toptions: {\n\t\tminZoom: 0,\n\t\tmaxZoom: 18,\n\t\ttileSize: 256,\n\t\tsubdomains: 'abc',\n\t\terrorTileUrl: '',\n\t\tattribution: '',\n\t\topacity: 1,\n\t\tscheme: 'xyz',\n\t\tcontinuousWorld: false,\n\t\tnoWrap: false,\n\t\tzoomOffset: 0,\n\t\tzoomReverse: false,\n\n\t\tunloadInvisibleTiles: L.Browser.mobile,\n\t\tupdateWhenIdle: L.Browser.mobile,\n\t\treuseTiles: false\n\t},\n\n\tinitialize: function (url, options, urlParams) {\n\t\tL.Util.setOptions(this, options);\n\n\t\tthis._url = url;\n\t\tthis._urlParams = urlParams;\n\n\t\tif (typeof this.options.subdomains === 'string') {\n\t\t\tthis.options.subdomains = this.options.subdomains.split('');\n\t\t}\n\t},\n\n\tonAdd: function (map, insertAtTheBottom) {\n\t\tthis._map = map;\n\t\tthis._insertAtTheBottom = insertAtTheBottom;\n\n\t\t// create a container div for tiles\n\t\tthis._initContainer();\n\n\t\t// create an image to clone for tiles\n\t\tthis._createTileProto();\n\n\t\t// set up events\n\t\tmap.on('viewreset', this._resetCallback, this);\n\n\t\tif (this.options.updateWhenIdle) {\n\t\t\tmap.on('moveend', this._update, this);\n\t\t} else {\n\t\t\tthis._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);\n\t\t\tmap.on('move', this._limitedUpdate, this);\n\t\t}\n\n\t\tthis._reset();\n\t\tthis._update();\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._map.getPanes().tilePane.removeChild(this._container);\n\t\tthis._container = null;\n\n\t\tthis._map.off('viewreset', this._resetCallback, this);\n\n\t\tif (this.options.updateWhenIdle) {\n\t\t\tthis._map.off('moveend', this._update, this);\n\t\t} else {\n\t\t\tthis._map.off('move', this._limitedUpdate, this);\n\t\t}\n\t},\n\n\tgetAttribution: function () {\n\t\treturn this.options.attribution;\n\t},\n\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\n\t\tthis._setOpacity(opacity);\n\n\t\t// stupid webkit hack to force redrawing of tiles\n\t\tif (L.Browser.webkit) {\n\t\t\tfor (var i in this._tiles) {\n\t\t\t\tif (this._tiles.hasOwnProperty(i)) {\n\t\t\t\t\tthis._tiles[i].style.webkitTransform += ' translate(0,0)';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_setOpacity: function (opacity) {\n\t\tif (opacity < 1) {\n\t\t\tL.DomUtil.setOpacity(this._container, opacity);\n\t\t}\n\t},\n\n\t_initContainer: function () {\n\t\tvar tilePane = this._map.getPanes().tilePane,\n\t\t\tfirst = tilePane.firstChild;\n\n\t\tif (!this._container || tilePane.empty) {\n\t\t\tthis._container = L.DomUtil.create('div', 'leaflet-layer');\n\n\t\t\tif (this._insertAtTheBottom && first) {\n\t\t\t\ttilePane.insertBefore(this._container, first);\n\t\t\t} else {\n\t\t\t\ttilePane.appendChild(this._container);\n\t\t\t}\n\n\t\t\tthis._setOpacity(this.options.opacity);\n\t\t}\n\t},\n\n\t_resetCallback: function (e) {\n\t\tthis._reset(e.hard);\n\t},\n\n\t_reset: function (clearOldContainer) {\n\t\tvar key;\n\t\tfor (key in this._tiles) {\n\t\t\tif (this._tiles.hasOwnProperty(key)) {\n\t\t\t\tthis.fire(\"tileunload\", {tile: this._tiles[key]});\n\t\t\t}\n\t\t}\n\t\tthis._tiles = {};\n\n\t\tif (this.options.reuseTiles) {\n\t\t\tthis._unusedTiles = [];\n\t\t}\n\n\t\tif (clearOldContainer && this._container) {\n\t\t\tthis._container.innerHTML = \"\";\n\t\t}\n\t\tthis._initContainer();\n\t},\n\n\t_update: function () {\n\t\tvar bounds = this._map.getPixelBounds(),\n\t\t\tzoom = this._map.getZoom(),\n\t\t\ttileSize = this.options.tileSize;\n\n\t\tif (zoom > this.options.maxZoom || zoom < this.options.minZoom) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar nwTilePoint = new L.Point(\n\t\t\t\tMath.floor(bounds.min.x / tileSize),\n\t\t\t\tMath.floor(bounds.min.y / tileSize)),\n\t\t\tseTilePoint = new L.Point(\n\t\t\t\tMath.floor(bounds.max.x / tileSize),\n\t\t\t\tMath.floor(bounds.max.y / tileSize)),\n\t\t\ttileBounds = new L.Bounds(nwTilePoint, seTilePoint);\n\n\t\tthis._addTilesFromCenterOut(tileBounds);\n\n\t\tif (this.options.unloadInvisibleTiles || this.options.reuseTiles) {\n\t\t\tthis._removeOtherTiles(tileBounds);\n\t\t}\n\t},\n\n\t_addTilesFromCenterOut: function (bounds) {\n\t\tvar queue = [],\n\t\t\tcenter = bounds.getCenter();\n\n\t\tfor (var j = bounds.min.y; j <= bounds.max.y; j++) {\n\t\t\tfor (var i = bounds.min.x; i <= bounds.max.x; i++) {\n\t\t\t\tif ((i + ':' + j) in this._tiles) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tqueue.push(new L.Point(i, j));\n\t\t\t}\n\t\t}\n\n\t\t// load tiles in order of their distance to center\n\t\tqueue.sort(function (a, b) {\n\t\t\treturn a.distanceTo(center) - b.distanceTo(center);\n\t\t});\n\n\t\tvar fragment = document.createDocumentFragment();\n\n\t\tthis._tilesToLoad = queue.length;\n\t\tfor (var k = 0, len = this._tilesToLoad; k < len; k++) {\n\t\t\tthis._addTile(queue[k], fragment);\n\t\t}\n\n\t\tthis._container.appendChild(fragment);\n\t},\n\n\t_removeOtherTiles: function (bounds) {\n\t\tvar kArr, x, y, key, tile;\n\n\t\tfor (key in this._tiles) {\n\t\t\tif (this._tiles.hasOwnProperty(key)) {\n\t\t\t\tkArr = key.split(':');\n\t\t\t\tx = parseInt(kArr[0], 10);\n\t\t\t\ty = parseInt(kArr[1], 10);\n\n\t\t\t\t// remove tile if it's out of bounds\n\t\t\t\tif (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {\n\n\t\t\t\t\ttile = this._tiles[key];\n\t\t\t\t\tthis.fire(\"tileunload\", {tile: tile, url: tile.src});\n\n\t\t\t\t\tif (tile.parentNode === this._container) {\n\t\t\t\t\t\tthis._container.removeChild(tile);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.options.reuseTiles) {\n\t\t\t\t\t\tthis._unusedTiles.push(this._tiles[key]);\n\t\t\t\t\t}\n\t\t\t\t\ttile.src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\n\t\t\t\t\tdelete this._tiles[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_addTile: function (tilePoint, container) {\n\t\tvar tilePos = this._getTilePos(tilePoint),\n\t\t\tzoom = this._map.getZoom(),\n\t\t\tkey = tilePoint.x + ':' + tilePoint.y,\n\t\t\ttileLimit = Math.pow(2, this._getOffsetZoom(zoom));\n\n\t\t// wrap tile coordinates\n\t\tif (!this.options.continuousWorld) {\n\t\t\tif (!this.options.noWrap) {\n\t\t\t\ttilePoint.x = ((tilePoint.x % tileLimit) + tileLimit) % tileLimit;\n\t\t\t} else if (tilePoint.x < 0 || tilePoint.x >= tileLimit) {\n\t\t\t\tthis._tilesToLoad--;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (tilePoint.y < 0 || tilePoint.y >= tileLimit) {\n\t\t\t\tthis._tilesToLoad--;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// get unused tile - or create a new tile\n\t\tvar tile = this._getTile();\n\t\tL.DomUtil.setPosition(tile, tilePos);\n\n\t\tthis._tiles[key] = tile;\n\n\t\tif (this.options.scheme === 'tms') {\n\t\t\ttilePoint.y = tileLimit - tilePoint.y - 1;\n\t\t}\n\n\t\tthis._loadTile(tile, tilePoint, zoom);\n\n\t\tcontainer.appendChild(tile);\n\t},\n\n\t_getOffsetZoom: function (zoom) {\n\t\tzoom = this.options.zoomReverse ? this.options.maxZoom - zoom : zoom;\n\t\treturn zoom + this.options.zoomOffset;\n\t},\n\n\t_getTilePos: function (tilePoint) {\n\t\tvar origin = this._map.getPixelOrigin(),\n\t\t\ttileSize = this.options.tileSize;\n\n\t\treturn tilePoint.multiplyBy(tileSize).subtract(origin);\n\t},\n\n\t// image-specific code (override to implement e.g. Canvas or SVG tile layer)\n\n\tgetTileUrl: function (tilePoint, zoom) {\n\t\tvar subdomains = this.options.subdomains,\n\t\t\ts = this.options.subdomains[(tilePoint.x + tilePoint.y) % subdomains.length];\n\n\t\treturn L.Util.template(this._url, L.Util.extend({\n\t\t\ts: s,\n\t\t\tz: this._getOffsetZoom(zoom),\n\t\t\tx: tilePoint.x,\n\t\t\ty: tilePoint.y\n\t\t}, this._urlParams));\n\t},\n\n\t_createTileProto: function () {\n\t\tthis._tileImg = L.DomUtil.create('img', 'leaflet-tile');\n\t\tthis._tileImg.galleryimg = 'no';\n\n\t\tvar tileSize = this.options.tileSize;\n\t\tthis._tileImg.style.width = tileSize + 'px';\n\t\tthis._tileImg.style.height = tileSize + 'px';\n\t},\n\n\t_getTile: function () {\n\t\tif (this.options.reuseTiles && this._unusedTiles.length > 0) {\n\t\t\tvar tile = this._unusedTiles.pop();\n\t\t\tthis._resetTile(tile);\n\t\t\treturn tile;\n\t\t}\n\t\treturn this._createTile();\n\t},\n\n\t_resetTile: function (tile) {\n\t\t// Override if data stored on a tile needs to be cleaned up before reuse\n\t},\n\n\t_createTile: function () {\n\t\tvar tile = this._tileImg.cloneNode(false);\n\t\ttile.onselectstart = tile.onmousemove = L.Util.falseFn;\n\t\treturn tile;\n\t},\n\n\t_loadTile: function (tile, tilePoint, zoom) {\n\t\ttile._layer = this;\n\t\ttile.onload = this._tileOnLoad;\n\t\ttile.onerror = this._tileOnError;\n\t\ttile.src = this.getTileUrl(tilePoint, zoom);\n\t},\n\n\t_tileOnLoad: function (e) {\n\t\tvar layer = this._layer;\n\n\t\tthis.className += ' leaflet-tile-loaded';\n\n\t\tlayer.fire('tileload', {tile: this, url: this.src});\n\n\t\tlayer._tilesToLoad--;\n\t\tif (!layer._tilesToLoad) {\n\t\t\tlayer.fire('load');\n\t\t}\n\t},\n\n\t_tileOnError: function (e) {\n\t\tvar layer = this._layer;\n\n\t\tlayer.fire('tileerror', {tile: this, url: this.src});\n\n\t\tvar newUrl = layer.options.errorTileUrl;\n\t\tif (newUrl) {\n\t\t\tthis.src = newUrl;\n\t\t}\n\t}\n});\n\n\nL.TileLayer.WMS = L.TileLayer.extend({\n\tdefaultWmsParams: {\n\t\tservice: 'WMS',\n\t\trequest: 'GetMap',\n\t\tversion: '1.1.1',\n\t\tlayers: '',\n\t\tstyles: '',\n\t\tformat: 'image/jpeg',\n\t\ttransparent: false\n\t},\n\n\tinitialize: function (/*String*/ url, /*Object*/ options) {\n\t\tthis._url = url;\n\n\t\tthis.wmsParams = L.Util.extend({}, this.defaultWmsParams);\n\t\tthis.wmsParams.width = this.wmsParams.height = this.options.tileSize;\n\n\t\tfor (var i in options) {\n\t\t\t// all keys that are not TileLayer options go to WMS params\n\t\t\tif (!this.options.hasOwnProperty(i)) {\n\t\t\t\tthis.wmsParams[i] = options[i];\n\t\t\t}\n\t\t}\n\n\t\tL.Util.setOptions(this, options);\n\t},\n\n\tonAdd: function (map) {\n\t\tvar projectionKey = (parseFloat(this.wmsParams.version) >= 1.3 ? 'crs' : 'srs');\n\t\tthis.wmsParams[projectionKey] = map.options.crs.code;\n\n\t\tL.TileLayer.prototype.onAdd.call(this, map);\n\t},\n\n\tgetTileUrl: function (/*Point*/ tilePoint, /*Number*/ zoom)/*-> String*/ {\n\t\tvar tileSize = this.options.tileSize,\n\t\t\tnwPoint = tilePoint.multiplyBy(tileSize),\n\t\t\tsePoint = nwPoint.add(new L.Point(tileSize, tileSize)),\n\t\t\tnwMap = this._map.unproject(nwPoint, this._zoom, true),\n\t\t\tseMap = this._map.unproject(sePoint, this._zoom, true),\n\t\t\tnw = this._map.options.crs.project(nwMap),\n\t\t\tse = this._map.options.crs.project(seMap),\n\t\t\tbbox = [nw.x, se.y, se.x, nw.y].join(',');\n\n\t\treturn this._url + L.Util.getParamString(this.wmsParams) + \"&bbox=\" + bbox;\n\t}\n});\n\n\nL.TileLayer.Canvas = L.TileLayer.extend({\n\toptions: {\n\t\tasync: false\n\t},\n\n\tinitialize: function (options) {\n\t\tL.Util.setOptions(this, options);\n\t},\n\n\tredraw: function () {\n\t\tfor (var i in this._tiles) {\n\t\t\tvar tile = this._tiles[i];\n\t\t\tthis._redrawTile(tile);\n\t\t}\n\t},\n\n\t_redrawTile: function (tile) {\n\t\tthis.drawTile(tile, tile._tilePoint, tile._zoom);\n\t},\n\n\t_createTileProto: function () {\n\t\tthis._canvasProto = L.DomUtil.create('canvas', 'leaflet-tile');\n\n\t\tvar tileSize = this.options.tileSize;\n\t\tthis._canvasProto.width = tileSize;\n\t\tthis._canvasProto.height = tileSize;\n\t},\n\n\t_createTile: function () {\n\t\tvar tile = this._canvasProto.cloneNode(false);\n\t\ttile.onselectstart = tile.onmousemove = L.Util.falseFn;\n\t\treturn tile;\n\t},\n\n\t_loadTile: function (tile, tilePoint, zoom) {\n\t\ttile._layer = this;\n\t\ttile._tilePoint = tilePoint;\n\t\ttile._zoom = zoom;\n\n\t\tthis.drawTile(tile, tilePoint, zoom);\n\n\t\tif (!this.options.async) {\n\t\t\tthis.tileDrawn(tile);\n\t\t}\n\t},\n\n\tdrawTile: function (tile, tilePoint, zoom) {\n\t\t// override with rendering code\n\t},\n\n\ttileDrawn: function (tile) {\n\t\tthis._tileOnLoad.call(tile);\n\t}\n});\n\n\nL.ImageOverlay = L.Class.extend({\n\tincludes: L.Mixin.Events,\n\n\tinitialize: function (/*String*/ url, /*LatLngBounds*/ bounds) {\n\t\tthis._url = url;\n\t\tthis._bounds = bounds;\n\t},\n\n\tonAdd: function (map) {\n\t\tthis._map = map;\n\n\t\tif (!this._image) {\n\t\t\tthis._initImage();\n\t\t}\n\n\t\tmap.getPanes().overlayPane.appendChild(this._image);\n\n\t\tmap.on('viewreset', this._reset, this);\n\t\tthis._reset();\n\t},\n\n\tonRemove: function (map) {\n\t\tmap.getPanes().overlayPane.removeChild(this._image);\n\t\tmap.off('viewreset', this._reset, this);\n\t},\n\n\t_initImage: function () {\n\t\tthis._image = L.DomUtil.create('img', 'leaflet-image-layer');\n\n\t\tthis._image.style.visibility = 'hidden';\n\t\t//TODO opacity option\n\n\t\t//TODO createImage util method to remove duplication\n\t\tL.Util.extend(this._image, {\n\t\t\tgalleryimg: 'no',\n\t\t\tonselectstart: L.Util.falseFn,\n\t\t\tonmousemove: L.Util.falseFn,\n\t\t\tonload: L.Util.bind(this._onImageLoad, this),\n\t\t\tsrc: this._url\n\t\t});\n\t},\n\n\t_reset: function () {\n\t\tvar topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\n\t\t\tbottomRight = this._map.latLngToLayerPoint(this._bounds.getSouthEast()),\n\t\t\tsize = bottomRight.subtract(topLeft);\n\n\t\tL.DomUtil.setPosition(this._image, topLeft);\n\n\t\tthis._image.style.width = size.x + 'px';\n\t\tthis._image.style.height = size.y + 'px';\n\t},\n\n\t_onImageLoad: function () {\n\t\tthis._image.style.visibility = '';\n\t\tthis.fire('load');\n\t}\n});\n\n\nL.Icon = L.Class.extend({\n\ticonUrl: L.ROOT_URL + 'images/marker.png',\n\tshadowUrl: L.ROOT_URL + 'images/marker-shadow.png',\n\n\ticonSize: new L.Point(25, 41),\n\tshadowSize: new L.Point(41, 41),\n\n\ticonAnchor: new L.Point(13, 41),\n\tpopupAnchor: new L.Point(0, -33),\n\n\tinitialize: function (iconUrl) {\n\t\tif (iconUrl) {\n\t\t\tthis.iconUrl = iconUrl;\n\t\t}\n\t},\n\n\tcreateIcon: function () {\n\t\treturn this._createIcon('icon');\n\t},\n\n\tcreateShadow: function () {\n\t\treturn this._createIcon('shadow');\n\t},\n\n\t_createIcon: function (name) {\n\t\tvar size = this[name + 'Size'],\n\t\t\tsrc = this[name + 'Url'];\n\t\tif (!src && name === 'shadow') {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar img;\n\t\tif (!src) {\n\t\t\timg = this._createDiv();\n\t\t}\n\t\telse {\n\t\t\timg = this._createImg(src);\n\t\t}\n\n\t\timg.className = 'leaflet-marker-' + name;\n\n\t\timg.style.marginLeft = (-this.iconAnchor.x) + 'px';\n\t\timg.style.marginTop = (-this.iconAnchor.y) + 'px';\n\n\t\tif (size) {\n\t\t\timg.style.width = size.x + 'px';\n\t\t\timg.style.height = size.y + 'px';\n\t\t}\n\n\t\treturn img;\n\t},\n\n\t_createImg: function (src) {\n\t\tvar el;\n\t\tif (!L.Browser.ie6) {\n\t\t\tel = document.createElement('img');\n\t\t\tel.src = src;\n\t\t} else {\n\t\t\tel = document.createElement('div');\n\t\t\tel.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\"' + src + '\")';\n\t\t}\n\t\treturn el;\n\t},\n\n\t_createDiv: function () {\n\t\treturn document.createElement('div');\n\t}\n});\n\n\n/*\n * L.Marker is used to display clickable/draggable icons on the map.\n */\n\nL.Marker = L.Class.extend({\n\n\tincludes: L.Mixin.Events,\n\n\toptions: {\n\t\ticon: new L.Icon(),\n\t\ttitle: '',\n\t\tclickable: true,\n\t\tdraggable: false,\n\t\tzIndexOffset: 0\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tL.Util.setOptions(this, options);\n\t\tthis._latlng = latlng;\n\t},\n\n\tonAdd: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._initIcon();\n\n\t\tmap.on('viewreset', this._reset, this);\n\t\tthis._reset();\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._removeIcon();\n\n\t\t// TODO move to Marker.Popup.js\n\t\tif (this.closePopup) {\n\t\t\tthis.closePopup();\n\t\t}\n\n\t\tthis._map = null;\n\n\t\tmap.off('viewreset', this._reset, this);\n\t},\n\n\tgetLatLng: function () {\n\t\treturn this._latlng;\n\t},\n\n\tsetLatLng: function (latlng) {\n\t\tthis._latlng = latlng;\n\t\tif (this._icon) {\n\t\t\tthis._reset();\n\n\t\t\tif (this._popup) {\n\t\t\t\tthis._popup.setLatLng(this._latlng);\n\t\t\t}\n\t\t}\n\t},\n\n\tsetZIndexOffset: function (offset) {\n\t\tthis.options.zIndexOffset = offset;\n\t\tif (this._icon) {\n\t\t\tthis._reset();\n\t\t}\n\t},\n\n\tsetIcon: function (icon) {\n\t\tif (this._map) {\n\t\t\tthis._removeIcon();\n\t\t}\n\n\t\tthis.options.icon = icon;\n\n\t\tif (this._map) {\n\t\t\tthis._initIcon();\n\t\t\tthis._reset();\n\t\t}\n\t},\n\n\t_initIcon: function () {\n\t\tif (!this._icon) {\n\t\t\tthis._icon = this.options.icon.createIcon();\n\n\t\t\tif (this.options.title) {\n\t\t\t\tthis._icon.title = this.options.title;\n\t\t\t}\n\n\t\t\tthis._initInteraction();\n\t\t}\n\t\tif (!this._shadow) {\n\t\t\tthis._shadow = this.options.icon.createShadow();\n\t\t}\n\n\t\tthis._map._panes.markerPane.appendChild(this._icon);\n\t\tif (this._shadow) {\n\t\t\tthis._map._panes.shadowPane.appendChild(this._shadow);\n\t\t}\n\t},\n\n\t_removeIcon: function () {\n\t\tthis._map._panes.markerPane.removeChild(this._icon);\n\t\tif (this._shadow) {\n\t\t\tthis._map._panes.shadowPane.removeChild(this._shadow);\n\t\t}\n\t\tthis._icon = this._shadow = null;\n\t},\n\n\t_reset: function () {\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\n\n\t\tL.DomUtil.setPosition(this._icon, pos);\n\t\tif (this._shadow) {\n\t\t\tL.DomUtil.setPosition(this._shadow, pos);\n\t\t}\n\n\t\tthis._icon.style.zIndex = pos.y + this.options.zIndexOffset;\n\t},\n\n\t_initInteraction: function () {\n\t\tif (this.options.clickable) {\n\t\t\tthis._icon.className += ' leaflet-clickable';\n\n\t\t\tL.DomEvent.addListener(this._icon, 'click', this._onMouseClick, this);\n\n\t\t\tvar events = ['dblclick', 'mousedown', 'mouseover', 'mouseout'];\n\t\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\t\tL.DomEvent.addListener(this._icon, events[i], this._fireMouseEvent, this);\n\t\t\t}\n\t\t}\n\n\t\tif (L.Handler.MarkerDrag) {\n\t\t\tthis.dragging = new L.Handler.MarkerDrag(this);\n\n\t\t\tif (this.options.draggable) {\n\t\t\t\tthis.dragging.enable();\n\t\t\t}\n\t\t}\n\t},\n\n\t_onMouseClick: function (e) {\n\t\tL.DomEvent.stopPropagation(e);\n\t\tif (this.dragging && this.dragging.moved()) { return; }\n\t\tthis.fire(e.type);\n\t},\n\n\t_fireMouseEvent: function (e) {\n\t\tthis.fire(e.type);\n\t\tL.DomEvent.stopPropagation(e);\n\t}\n});\n\n\n\nL.Popup = L.Class.extend({\n\tincludes: L.Mixin.Events,\n\n\toptions: {\n\t\tminWidth: 50,\n\t\tmaxWidth: 300,\n\t\tautoPan: true,\n\t\tcloseButton: true,\n\t\toffset: new L.Point(0, 2),\n\t\tautoPanPadding: new L.Point(5, 5),\n\t\tclassName: ''\n\t},\n\n\tinitialize: function (options, source) {\n\t\tL.Util.setOptions(this, options);\n\n\t\tthis._source = source;\n\t},\n\n\tonAdd: function (map) {\n\t\tthis._map = map;\n\t\tif (!this._container) {\n\t\t\tthis._initLayout();\n\t\t}\n\t\tthis._updateContent();\n\n\t\tthis._container.style.opacity = '0';\n\n\t\tthis._map._panes.popupPane.appendChild(this._container);\n\t\tthis._map.on('viewreset', this._updatePosition, this);\n\n\t\tif (this._map.options.closePopupOnClick) {\n\t\t\tthis._map.on('preclick', this._close, this);\n\t\t}\n\n\t\tthis._update();\n\n\t\tthis._container.style.opacity = '1'; //TODO fix ugly opacity hack\n\n\t\tthis._opened = true;\n\t},\n\n\tonRemove: function (map) {\n\t\tmap._panes.popupPane.removeChild(this._container);\n\t\tL.Util.falseFn(this._container.offsetWidth);\n\n\t\tmap.off('viewreset', this._updatePosition, this);\n\t\tmap.off('click', this._close, this);\n\n\t\tthis._container.style.opacity = '0';\n\n\t\tthis._opened = false;\n\t},\n\n\tsetLatLng: function (latlng) {\n\t\tthis._latlng = latlng;\n\t\tif (this._opened) {\n\t\t\tthis._update();\n\t\t}\n\t\treturn this;\n\t},\n\n\tsetContent: function (content) {\n\t\tthis._content = content;\n\t\tif (this._opened) {\n\t\t\tthis._update();\n\t\t}\n\t\treturn this;\n\t},\n\n\t_close: function () {\n\t\tif (this._opened) {\n\t\t\tthis._map.closePopup();\n\t\t}\n\t},\n\n\t_initLayout: function () {\n\t\tthis._container = L.DomUtil.create('div', 'leaflet-popup ' + this.options.className);\n\n\t\tif (this.options.closeButton) {\n\t\t\tthis._closeButton = L.DomUtil.create('a', 'leaflet-popup-close-button', this._container);\n\t\t\tthis._closeButton.href = '#close';\n\t\t\tL.DomEvent.addListener(this._closeButton, 'click', this._onCloseButtonClick, this);\n\t\t}\n\n\t\tthis._wrapper = L.DomUtil.create('div', 'leaflet-popup-content-wrapper', this._container);\n\t\tL.DomEvent.disableClickPropagation(this._wrapper);\n\t\tthis._contentNode = L.DomUtil.create('div', 'leaflet-popup-content', this._wrapper);\n\n\t\tthis._tipContainer = L.DomUtil.create('div', 'leaflet-popup-tip-container', this._container);\n\t\tthis._tip = L.DomUtil.create('div', 'leaflet-popup-tip', this._tipContainer);\n\t},\n\n\t_update: function () {\n\t\tthis._container.style.visibility = 'hidden';\n\n\t\tthis._updateContent();\n\t\tthis._updateLayout();\n\t\tthis._updatePosition();\n\n\t\tthis._container.style.visibility = '';\n\n\t\tthis._adjustPan();\n\t},\n\n\t_updateContent: function () {\n\t\tif (!this._content) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof this._content === 'string') {\n\t\t\tthis._contentNode.innerHTML = this._content;\n\t\t} else {\n\t\t\tthis._contentNode.innerHTML = '';\n\t\t\tthis._contentNode.appendChild(this._content);\n\t\t}\n\t},\n\n\t_updateLayout: function () {\n\t\tthis._container.style.width = '';\n\t\tthis._container.style.whiteSpace = 'nowrap';\n\n\t\tvar width = this._container.offsetWidth;\n\n\t\tthis._container.style.width = (width > this.options.maxWidth ?\n\t\t\t\tthis.options.maxWidth : (width < this.options.minWidth ? this.options.minWidth : width)) + 'px';\n\t\tthis._container.style.whiteSpace = '';\n\n\t\tthis._containerWidth = this._container.offsetWidth;\n\t},\n\n\t_updatePosition: function () {\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng);\n\n\t\tthis._containerBottom = -pos.y - this.options.offset.y;\n\t\tthis._containerLeft = pos.x - Math.round(this._containerWidth / 2) + this.options.offset.x;\n\n\t\tthis._container.style.bottom = this._containerBottom + 'px';\n\t\tthis._container.style.left = this._containerLeft + 'px';\n\t},\n\n\t_adjustPan: function () {\n\t\tif (!this.options.autoPan) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar containerHeight = this._container.offsetHeight,\n\t\t\tlayerPos = new L.Point(\n\t\t\t\tthis._containerLeft,\n\t\t\t\t-containerHeight - this._containerBottom),\n\t\t\tcontainerPos = this._map.layerPointToContainerPoint(layerPos),\n\t\t\tadjustOffset = new L.Point(0, 0),\n\t\t\tpadding = this.options.autoPanPadding,\n\t\t\tsize = this._map.getSize();\n\n\t\tif (containerPos.x < 0) {\n\t\t\tadjustOffset.x = containerPos.x - padding.x;\n\t\t}\n\t\tif (containerPos.x + this._containerWidth > size.x) {\n\t\t\tadjustOffset.x = containerPos.x + this._containerWidth - size.x + padding.x;\n\t\t}\n\t\tif (containerPos.y < 0) {\n\t\t\tadjustOffset.y = containerPos.y - padding.y;\n\t\t}\n\t\tif (containerPos.y + containerHeight > size.y) {\n\t\t\tadjustOffset.y = containerPos.y + containerHeight - size.y + padding.y;\n\t\t}\n\n\t\tif (adjustOffset.x || adjustOffset.y) {\n\t\t\tthis._map.panBy(adjustOffset);\n\t\t}\n\t},\n\n\t_onCloseButtonClick: function (e) {\n\t\tthis._close();\n\t\tL.DomEvent.stop(e);\n\t}\n});\n\n\n/*\n * Popup extension to L.Marker, adding openPopup & bindPopup methods.\n */\n\nL.Marker.include({\n\topenPopup: function () {\n\t\tthis._popup.setLatLng(this._latlng);\n\t\tif (this._map) {\n\t\t\tthis._map.openPopup(this._popup);\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclosePopup: function () {\n\t\tif (this._popup) {\n\t\t\tthis._popup._close();\n\t\t}\n\t\treturn this;\n\t},\n\n\tbindPopup: function (content, options) {\n\t\toptions = L.Util.extend({offset: this.options.icon.popupAnchor}, options);\n\n\t\tif (!this._popup) {\n\t\t\tthis.on('click', this.openPopup, this);\n\t\t}\n\n\t\tthis._popup = new L.Popup(options, this);\n\t\tthis._popup.setContent(content);\n\n\t\treturn this;\n\t},\n\n\tunbindPopup: function () {\n\t\tif (this._popup) {\n\t\t\tthis._popup = null;\n\t\t\tthis.off('click', this.openPopup);\n\t\t}\n\t\treturn this;\n\t}\n});\n\n\n\nL.Map.include({\n\topenPopup: function (popup) {\n\t\tthis.closePopup();\n\t\tthis._popup = popup;\n\t\tthis.addLayer(popup);\n\t\tthis.fire('popupopen', { popup: this._popup });\n\t\n\t\treturn this;\n\t},\n\n\tclosePopup: function () {\n\t\tif (this._popup) {\n\t\t\tthis.removeLayer(this._popup);\n\t\t\tthis.fire('popupclose', { popup: this._popup });\n\t\t\tthis._popup = null;\n\t\t}\n\t\treturn this;\n\t}\n});\n\n\n/*\n * L.LayerGroup is a class to combine several layers so you can manipulate the group (e.g. add/remove it) as one layer.\n */\n\nL.LayerGroup = L.Class.extend({\n\tinitialize: function (layers) {\n\t\tthis._layers = {};\n\n\t\tif (layers) {\n\t\t\tfor (var i = 0, len = layers.length; i < len; i++) {\n\t\t\t\tthis.addLayer(layers[i]);\n\t\t\t}\n\t\t}\n\t},\n\n\taddLayer: function (layer) {\n\t\tvar id = L.Util.stamp(layer);\n\t\tthis._layers[id] = layer;\n\n\t\tif (this._map) {\n\t\t\tthis._map.addLayer(layer);\n\t\t}\n\t\treturn this;\n\t},\n\n\tremoveLayer: function (layer) {\n\t\tvar id = L.Util.stamp(layer);\n\t\tdelete this._layers[id];\n\n\t\tif (this._map) {\n\t\t\tthis._map.removeLayer(layer);\n\t\t}\n\t\treturn this;\n\t},\n\n\tclearLayers: function () {\n\t\tthis._iterateLayers(this.removeLayer, this);\n\t\treturn this;\n\t},\n\n\tinvoke: function (methodName) {\n\t\tvar args = Array.prototype.slice.call(arguments, 1),\n\t\t\ti, layer;\n\n\t\tfor (i in this._layers) {\n\t\t\tif (this._layers.hasOwnProperty(i)) {\n\t\t\t\tlayer = this._layers[i];\n\n\t\t\t\tif (layer[methodName]) {\n\t\t\t\t\tlayer[methodName].apply(layer, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tonAdd: function (map) {\n\t\tthis._map = map;\n\t\tthis._iterateLayers(map.addLayer, map);\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._iterateLayers(map.removeLayer, map);\n\t\tdelete this._map;\n\t},\n\n\t_iterateLayers: function (method, context) {\n\t\tfor (var i in this._layers) {\n\t\t\tif (this._layers.hasOwnProperty(i)) {\n\t\t\t\tmethod.call(context, this._layers[i]);\n\t\t\t}\n\t\t}\n\t}\n});\n\n\n/*\n * L.FeatureGroup extends L.LayerGroup by introducing mouse events and bindPopup method shared between a group of layers.\n */\n\nL.FeatureGroup = L.LayerGroup.extend({\n\tincludes: L.Mixin.Events,\n\n\taddLayer: function (layer) {\n\t\tthis._initEvents(layer);\n\t\tL.LayerGroup.prototype.addLayer.call(this, layer);\n\n\t\tif (this._popupContent && layer.bindPopup) {\n\t\t\tlayer.bindPopup(this._popupContent);\n\t\t}\n\t},\n\n\tbindPopup: function (content) {\n\t\tthis._popupContent = content;\n\n\t\treturn this.invoke('bindPopup', content);\n\t},\n\n\tsetStyle: function (style) {\n\t\treturn this.invoke('setStyle', style);\n\t},\n\n\t_events: ['click', 'dblclick', 'mouseover', 'mouseout'],\n\n\t_initEvents: function (layer) {\n\t\tfor (var i = 0, len = this._events.length; i < len; i++) {\n\t\t\tlayer.on(this._events[i], this._propagateEvent, this);\n\t\t}\n\t},\n\n\t_propagateEvent: function (e) {\n\t\te.layer = e.target;\n\t\te.target = this;\n\t\tthis.fire(e.type, e);\n\t}\n});\n\n\n/*\n * L.Path is a base class for rendering vector paths on a map. It's inherited by Polyline, Circle, etc.\n */\n\nL.Path = L.Class.extend({\n\tincludes: [L.Mixin.Events],\n\n\tstatics: {\n\t\t// how much to extend the clip area around the map view\n\t\t// (relative to its size, e.g. 0.5 is half the screen in each direction)\n\t\tCLIP_PADDING: 0.5\n\t},\n\n\toptions: {\n\t\tstroke: true,\n\t\tcolor: '#0033ff',\n\t\tweight: 5,\n\t\topacity: 0.5,\n\n\t\tfill: false,\n\t\tfillColor: null, //same as color by default\n\t\tfillOpacity: 0.2,\n\n\t\tclickable: true,\n\n\t\t// TODO remove this, as all paths now update on moveend\n\t\tupdateOnMoveEnd: true\n\t},\n\n\tinitialize: function (options) {\n\t\tL.Util.setOptions(this, options);\n\t},\n\n\tonAdd: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._initElements();\n\t\tthis._initEvents();\n\t\tthis.projectLatlngs();\n\t\tthis._updatePath();\n\n\t\tmap.on('viewreset', this.projectLatlngs, this);\n\n\t\tthis._updateTrigger = this.options.updateOnMoveEnd ? 'moveend' : 'viewreset';\n\t\tmap.on(this._updateTrigger, this._updatePath, this);\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._map = null;\n\n\t\tmap._pathRoot.removeChild(this._container);\n\n\t\tmap.off('viewreset', this.projectLatlngs, this);\n\t\tmap.off(this._updateTrigger, this._updatePath, this);\n\t},\n\n\tprojectLatlngs: function () {\n\t\t// do all projection stuff here\n\t},\n\n\tsetStyle: function (style) {\n\t\tL.Util.setOptions(this, style);\n\t\tif (this._container) {\n\t\t\tthis._updateStyle();\n\t\t}\n\t\treturn this;\n\t},\n\n\t_redraw: function () {\n\t\tif (this._map) {\n\t\t\tthis.projectLatlngs();\n\t\t\tthis._updatePath();\n\t\t}\n\t}\n});\n\nL.Map.include({\n\t_updatePathViewport: function () {\n\t\tvar p = L.Path.CLIP_PADDING,\n\t\t\tsize = this.getSize(),\n\t\t\t//TODO this._map._getMapPanePos()\n\t\t\tpanePos = L.DomUtil.getPosition(this._mapPane),\n\t\t\tmin = panePos.multiplyBy(-1).subtract(size.multiplyBy(p)),\n\t\t\tmax = min.add(size.multiplyBy(1 + p * 2));\n\n\t\tthis._pathViewport = new L.Bounds(min, max);\n\t}\n});\n\n\nL.Path.SVG_NS = 'http://www.w3.org/2000/svg';\n\nL.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect);\n\nL.Path = L.Path.extend({\n\tstatics: {\n\t\tSVG: L.Browser.svg,\n\t\t_createElement: function (name) {\n\t\t\treturn document.createElementNS(L.Path.SVG_NS, name);\n\t\t}\n\t},\n\n\tgetPathString: function () {\n\t\t// form path string here\n\t},\n\n\t_initElements: function () {\n\t\tthis._map._initPathRoot();\n\t\tthis._initPath();\n\t\tthis._initStyle();\n\t},\n\n\t_initPath: function () {\n\t\tthis._container = L.Path._createElement('g');\n\n\t\tthis._path = L.Path._createElement('path');\n\t\tthis._container.appendChild(this._path);\n\n\t\tthis._map._pathRoot.appendChild(this._container);\n\t},\n\n\t_initStyle: function () {\n\t\tif (this.options.stroke) {\n\t\t\tthis._path.setAttribute('stroke-linejoin', 'round');\n\t\t\tthis._path.setAttribute('stroke-linecap', 'round');\n\t\t}\n\t\tif (this.options.fill) {\n\t\t\tthis._path.setAttribute('fill-rule', 'evenodd');\n\t\t} else {\n\t\t\tthis._path.setAttribute('fill', 'none');\n\t\t}\n\t\tthis._updateStyle();\n\t},\n\n\t_updateStyle: function () {\n\t\tif (this.options.stroke) {\n\t\t\tthis._path.setAttribute('stroke', this.options.color);\n\t\t\tthis._path.setAttribute('stroke-opacity', this.options.opacity);\n\t\t\tthis._path.setAttribute('stroke-width', this.options.weight);\n\t\t}\n\t\tif (this.options.fill) {\n\t\t\tthis._path.setAttribute('fill', this.options.fillColor || this.options.color);\n\t\t\tthis._path.setAttribute('fill-opacity', this.options.fillOpacity);\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tvar str = this.getPathString();\n\t\tif (!str) {\n\t\t\t// fix webkit empty string parsing bug\n\t\t\tstr = 'M0 0';\n\t\t}\n\t\tthis._path.setAttribute('d', str);\n\t},\n\n\t// TODO remove duplication with L.Map\n\t_initEvents: function () {\n\t\tif (this.options.clickable) {\n\t\t\tif (!L.Browser.vml) {\n\t\t\t\tthis._path.setAttribute('class', 'leaflet-clickable');\n\t\t\t}\n\n\t\t\tL.DomEvent.addListener(this._container, 'click', this._onMouseClick, this);\n\n\t\t\tvar events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'mousemove'];\n\t\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\t\tL.DomEvent.addListener(this._container, events[i], this._fireMouseEvent, this);\n\t\t\t}\n\t\t}\n\t},\n\n\t_onMouseClick: function (e) {\n\t\tif (this._map.dragging && this._map.dragging.moved()) {\n\t\t\treturn;\n\t\t}\n\t\tthis._fireMouseEvent(e);\n\t},\n\n\t_fireMouseEvent: function (e) {\n\t\tif (!this.hasEventListeners(e.type)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.fire(e.type, {\n\t\t\tlatlng: this._map.mouseEventToLatLng(e),\n\t\t\tlayerPoint: this._map.mouseEventToLayerPoint(e)\n\t\t});\n\t\tL.DomEvent.stopPropagation(e);\n\t}\n});\n\nL.Map.include({\n\t_initPathRoot: function () {\n\t\tif (!this._pathRoot) {\n\t\t\tthis._pathRoot = L.Path._createElement('svg');\n\t\t\tthis._panes.overlayPane.appendChild(this._pathRoot);\n\n\t\t\tthis.on('moveend', this._updateSvgViewport);\n\t\t\tthis._updateSvgViewport();\n\t\t}\n\t},\n\n\t_updateSvgViewport: function () {\n\t\tthis._updatePathViewport();\n\n\t\tvar vp = this._pathViewport,\n\t\t\tmin = vp.min,\n\t\t\tmax = vp.max,\n\t\t\twidth = max.x - min.x,\n\t\t\theight = max.y - min.y,\n\t\t\troot = this._pathRoot,\n\t\t\tpane = this._panes.overlayPane;\n\n\t\t// Hack to make flicker on drag end on mobile webkit less irritating\n\t\t// Unfortunately I haven't found a good workaround for this yet\n\t\tif (L.Browser.webkit) {\n\t\t\tpane.removeChild(root);\n\t\t}\n\n\t\tL.DomUtil.setPosition(root, min);\n\t\troot.setAttribute('width', width);\n\t\troot.setAttribute('height', height);\n\t\troot.setAttribute('viewBox', [min.x, min.y, width, height].join(' '));\n\n\t\tif (L.Browser.webkit) {\n\t\t\tpane.appendChild(root);\n\t\t}\n\t}\n});\n\n\n/*\n * Popup extension to L.Path (polylines, polygons, circles), adding bindPopup method.\n */\n\nL.Path.include({\n\tbindPopup: function (content, options) {\n\t\tif (!this._popup || this._popup.options !== options) {\n\t\t\tthis._popup = new L.Popup(options, this);\n\t\t}\n\t\tthis._popup.setContent(content);\n\n\t\tif (!this._openPopupAdded) {\n\t\t\tthis.on('click', this._openPopup, this);\n\t\t\tthis._openPopupAdded = true;\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_openPopup: function (e) {\n\t\tthis._popup.setLatLng(e.latlng);\n\t\tthis._map.openPopup(this._popup);\n\t}\n});\n\n\n/*\n * Vector rendering for IE6-8 through VML.\n * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n */\n\nL.Browser.vml = (function () {\n\tvar d = document.createElement('div'), s;\n\td.innerHTML = '<v:shape adj=\"1\"/>';\n\ts = d.firstChild;\n\ts.style.behavior = 'url(#default#VML)';\n\n\treturn (s && (typeof s.adj === 'object'));\n}());\n\nL.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({\n\tstatics: {\n\t\tVML: true,\n\t\tCLIP_PADDING: 0.02,\n\t\t_createElement: (function () {\n\t\t\ttry {\n\t\t\t\tdocument.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n\t\t\t\treturn function (name) {\n\t\t\t\t\treturn document.createElement('<lvml:' + name + ' class=\"lvml\">');\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\treturn function (name) {\n\t\t\t\t\treturn document.createElement('<' + name + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">');\n\t\t\t\t};\n\t\t\t}\n\t\t}())\n\t},\n\n\t_initPath: function () {\n\t\tthis._container = L.Path._createElement('shape');\n\t\tthis._container.className += ' leaflet-vml-shape' +\n\t\t\t\t(this.options.clickable ? ' leaflet-clickable' : '');\n\t\tthis._container.coordsize = '1 1';\n\n\t\tthis._path = L.Path._createElement('path');\n\t\tthis._container.appendChild(this._path);\n\n\t\tthis._map._pathRoot.appendChild(this._container);\n\t},\n\n\t_initStyle: function () {\n\t\tif (this.options.stroke) {\n\t\t\tthis._stroke = L.Path._createElement('stroke');\n\t\t\tthis._stroke.endcap = 'round';\n\t\t\tthis._container.appendChild(this._stroke);\n\t\t} else {\n\t\t\tthis._container.stroked = false;\n\t\t}\n\t\tif (this.options.fill) {\n\t\t\tthis._container.filled = true;\n\t\t\tthis._fill = L.Path._createElement('fill');\n\t\t\tthis._container.appendChild(this._fill);\n\t\t} else {\n\t\t\tthis._container.filled = false;\n\t\t}\n\t\tthis._updateStyle();\n\t},\n\n\t_updateStyle: function () {\n\t\tif (this.options.stroke) {\n\t\t\tthis._stroke.weight = this.options.weight + 'px';\n\t\t\tthis._stroke.color = this.options.color;\n\t\t\tthis._stroke.opacity = this.options.opacity;\n\t\t}\n\t\tif (this.options.fill) {\n\t\t\tthis._fill.color = this.options.fillColor || this.options.color;\n\t\t\tthis._fill.opacity = this.options.fillOpacity;\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._container.style.display = 'none';\n\t\tthis._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug\n\t\tthis._container.style.display = '';\n\t}\n});\n\nL.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {\n\t_initPathRoot: function () {\n\t\tif (!this._pathRoot) {\n\t\t\tthis._pathRoot = document.createElement('div');\n\t\t\tthis._pathRoot.className = 'leaflet-vml-container';\n\t\t\tthis._panes.overlayPane.appendChild(this._pathRoot);\n\n\t\t\tthis.on('moveend', this._updatePathViewport);\n\t\t\tthis._updatePathViewport();\n\t\t}\n\t}\n});\n\n\n/*\n * Vector rendering for all browsers that support canvas.\n */\n\nL.Browser.canvas = (function () {\n\treturn !!document.createElement('canvas').getContext;\n}());\n\nL.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({\n\tstatics: {\n\t\t//CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value\n\t\tCANVAS: true,\n\t\tSVG: false\n\t},\n\n\toptions: {\n\t\tupdateOnMoveEnd: true\n\t},\n\n\t_initElements: function () {\n\t\tthis._map._initPathRoot();\n\t\tthis._ctx = this._map._canvasCtx;\n\t},\n\n\t_updateStyle: function () {\n\t\tif (this.options.stroke) {\n\t\t\tthis._ctx.lineWidth = this.options.weight;\n\t\t\tthis._ctx.strokeStyle = this.options.color;\n\t\t}\n\t\tif (this.options.fill) {\n\t\t\tthis._ctx.fillStyle = this.options.fillColor || this.options.color;\n\t\t}\n\t},\n\n\t_drawPath: function () {\n\t\tvar i, j, len, len2, point, drawMethod;\n\n\t\tthis._ctx.beginPath();\n\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tfor (j = 0, len2 = this._parts[i].length; j < len2; j++) {\n\t\t\t\tpoint = this._parts[i][j];\n\t\t\t\tdrawMethod = (j === 0 ? 'move' : 'line') + 'To';\n\n\t\t\t\tthis._ctx[drawMethod](point.x, point.y);\n\t\t\t}\n\t\t\t// TODO refactor ugly hack\n\t\t\tif (this instanceof L.Polygon) {\n\t\t\t\tthis._ctx.closePath();\n\t\t\t}\n\t\t}\n\t},\n\n\t_checkIfEmpty: function () {\n\t\treturn !this._parts.length;\n\t},\n\n\t_updatePath: function () {\n\t\tif (this._checkIfEmpty()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._drawPath();\n\n\t\tthis._ctx.save();\n\n\t\tthis._updateStyle();\n\n\t\tvar opacity = this.options.opacity,\n\t\t\tfillOpacity = this.options.fillOpacity;\n\n\t\tif (this.options.fill) {\n\t\t\tif (fillOpacity < 1) {\n\t\t\t\tthis._ctx.globalAlpha = fillOpacity;\n\t\t\t}\n\t\t\tthis._ctx.fill();\n\t\t}\n\n\t\tif (this.options.stroke) {\n\t\t\tif (opacity < 1) {\n\t\t\t\tthis._ctx.globalAlpha = opacity;\n\t\t\t}\n\t\t\tthis._ctx.stroke();\n\t\t}\n\n\t\tthis._ctx.restore();\n\n\t\t// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n\t},\n\n\t_initEvents: function () {\n\t\tif (this.options.clickable) {\n\t\t\t// TODO hand cursor\n\t\t\t// TODO mouseover, mouseout, dblclick\n\t\t\tthis._map.on('click', this._onClick, this);\n\t\t}\n\t},\n\n\t_onClick: function (e) {\n\t\tif (this._containsPoint(e.layerPoint)) {\n\t\t\tthis.fire('click', e);\n\t\t}\n\t},\n\n    onRemove: function (map) {\n        map.off('viewreset', this._projectLatlngs, this);\n        map.off(this._updateTrigger, this._updatePath, this);\n        map.fire(this._updateTrigger);\n    }\n});\n\nL.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : {\n\t_initPathRoot: function () {\n\t\tvar root = this._pathRoot,\n\t\t\tctx;\n\n\t\tif (!root) {\n\t\t\troot = this._pathRoot = document.createElement(\"canvas\");\n\t\t\troot.style.position = 'absolute';\n\t\t\tctx = this._canvasCtx = root.getContext('2d');\n\n\t\t\tctx.lineCap = \"round\";\n\t\t\tctx.lineJoin = \"round\";\n\n\t\t\tthis._panes.overlayPane.appendChild(root);\n\n\t\t\tthis.on('moveend', this._updateCanvasViewport);\n\t\t\tthis._updateCanvasViewport();\n\t\t}\n\t},\n\n\t_updateCanvasViewport: function () {\n\t\tthis._updatePathViewport();\n\n\t\tvar vp = this._pathViewport,\n\t\t\tmin = vp.min,\n\t\t\tsize = vp.max.subtract(min),\n\t\t\troot = this._pathRoot;\n\n\t\t//TODO check if it's works properly on mobile webkit\n\t\tL.DomUtil.setPosition(root, min);\n\t\troot.width = size.x;\n\t\troot.height = size.y;\n\t\troot.getContext('2d').translate(-min.x, -min.y);\n\t}\n});\n\n\n/*\n * L.LineUtil contains different utility functions for line segments\n * and polylines (clipping, simplification, distances, etc.)\n */\n\nL.LineUtil = {\n\n\t// Simplify polyline with vertex reduction and Douglas-Peucker simplification.\n\t// Improves rendering performance dramatically by lessening the number of points to draw.\n\n\tsimplify: function (/*Point[]*/ points, /*Number*/ tolerance) {\n\t\tif (!tolerance || !points.length) {\n\t\t\treturn points.slice();\n\t\t}\n\n\t\tvar sqTolerance = tolerance * tolerance;\n\n\t\t// stage 1: vertex reduction\n\t\tpoints = this._reducePoints(points, sqTolerance);\n\n\t\t// stage 2: Douglas-Peucker simplification\n\t\tpoints = this._simplifyDP(points, sqTolerance);\n\n\t\treturn points;\n\t},\n\n\t// distance from a point to a segment between two points\n\tpointToSegmentDistance:  function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {\n\t\treturn Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true));\n\t},\n\n\tclosestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {\n\t\treturn this._sqClosestPointOnSegment(p, p1, p2);\n\t},\n\n\t// Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm\n\t_simplifyDP: function (points, sqTolerance) {\n\n\t\tvar len = points.length,\n\t\t\tArrayConstructor = typeof Uint8Array !== 'undefined' ? Uint8Array : Array,\n\t\t\tmarkers = new ArrayConstructor(len);\n\n\t\tmarkers[0] = markers[len - 1] = 1;\n\n\t\tthis._simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\n\n\t\tvar i,\n\t\t\tnewPoints = [];\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (markers[i]) {\n\t\t\t\tnewPoints.push(points[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn newPoints;\n\t},\n\n\t_simplifyDPStep: function (points, markers, sqTolerance, first, last) {\n\n\t\tvar maxSqDist = 0,\n\t\t\tindex, i, sqDist;\n\n\t\tfor (i = first + 1; i <= last - 1; i++) {\n\t\t\tsqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true);\n\n\t\t\tif (sqDist > maxSqDist) {\n\t\t\t\tindex = i;\n\t\t\t\tmaxSqDist = sqDist;\n\t\t\t}\n\t\t}\n\n\t\tif (maxSqDist > sqTolerance) {\n\t\t\tmarkers[index] = 1;\n\n\t\t\tthis._simplifyDPStep(points, markers, sqTolerance, first, index);\n\t\t\tthis._simplifyDPStep(points, markers, sqTolerance, index, last);\n\t\t}\n\t},\n\n\t// reduce points that are too close to each other to a single point\n\t_reducePoints: function (points, sqTolerance) {\n\t\tvar reducedPoints = [points[0]];\n\n\t\tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\n\t\t\tif (this._sqDist(points[i], points[prev]) > sqTolerance) {\n\t\t\t\treducedPoints.push(points[i]);\n\t\t\t\tprev = i;\n\t\t\t}\n\t\t}\n\t\tif (prev < len - 1) {\n\t\t\treducedPoints.push(points[len - 1]);\n\t\t}\n\t\treturn reducedPoints;\n\t},\n\n\t/*jshint bitwise:false */ // temporarily allow bitwise oprations\n\n\t// Cohen-Sutherland line clipping algorithm.\n\t// Used to avoid rendering parts of a polyline that are not currently visible.\n\n\tclipSegment: function (a, b, bounds, useLastCode) {\n\t\tvar min = bounds.min,\n\t\t\tmax = bounds.max;\n\n\t\tvar codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds),\n\t\t\tcodeB = this._getBitCode(b, bounds);\n\n\t\t// save 2nd code to avoid calculating it on the next segment\n\t\tthis._lastCode = codeB;\n\n\t\twhile (true) {\n\t\t\t// if a,b is inside the clip window (trivial accept)\n\t\t\tif (!(codeA | codeB)) {\n\t\t\t\treturn [a, b];\n\t\t\t// if a,b is outside the clip window (trivial reject)\n\t\t\t} else if (codeA & codeB) {\n\t\t\t\treturn false;\n\t\t\t// other cases\n\t\t\t} else {\n\t\t\t\tvar codeOut = codeA || codeB,\n\t\t\t\t\tp = this._getEdgeIntersection(a, b, codeOut, bounds),\n\t\t\t\t\tnewCode = this._getBitCode(p, bounds);\n\n\t\t\t\tif (codeOut === codeA) {\n\t\t\t\t\ta = p;\n\t\t\t\t\tcodeA = newCode;\n\t\t\t\t} else {\n\t\t\t\t\tb = p;\n\t\t\t\t\tcodeB = newCode;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_getEdgeIntersection: function (a, b, code, bounds) {\n\t\tvar dx = b.x - a.x,\n\t\t\tdy = b.y - a.y,\n\t\t\tmin = bounds.min,\n\t\t\tmax = bounds.max;\n\n\t\tif (code & 8) { // top\n\t\t\treturn new L.Point(a.x + dx * (max.y - a.y) / dy, max.y);\n\t\t} else if (code & 4) { // bottom\n\t\t\treturn new L.Point(a.x + dx * (min.y - a.y) / dy, min.y);\n\t\t} else if (code & 2) { // right\n\t\t\treturn new L.Point(max.x, a.y + dy * (max.x - a.x) / dx);\n\t\t} else if (code & 1) { // left\n\t\t\treturn new L.Point(min.x, a.y + dy * (min.x - a.x) / dx);\n\t\t}\n\t},\n\n\t_getBitCode: function (/*Point*/ p, bounds) {\n\t\tvar code = 0;\n\n\t\tif (p.x < bounds.min.x) { // left\n\t\t\tcode |= 1;\n\t\t} else if (p.x > bounds.max.x) { // right\n\t\t\tcode |= 2;\n\t\t}\n\t\tif (p.y < bounds.min.y) { // bottom\n\t\t\tcode |= 4;\n\t\t} else if (p.y > bounds.max.y) { // top\n\t\t\tcode |= 8;\n\t\t}\n\n\t\treturn code;\n\t},\n\n\t/*jshint bitwise:true */\n\n\t// square distance (to avoid unnecessary Math.sqrt calls)\n\t_sqDist: function (p1, p2) {\n\t\tvar dx = p2.x - p1.x,\n\t\t\tdy = p2.y - p1.y;\n\t\treturn dx * dx + dy * dy;\n\t},\n\n\t// return closest point on segment or distance to that point\n\t_sqClosestPointOnSegment: function (p, p1, p2, sqDist) {\n\t\tvar x = p1.x,\n\t\t\ty = p1.y,\n\t\t\tdx = p2.x - x,\n\t\t\tdy = p2.y - y,\n\t\t\tdot = dx * dx + dy * dy,\n\t\t\tt;\n\n\t\tif (dot > 0) {\n\t\t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\n\n\t\t\tif (t > 1) {\n\t\t\t\tx = p2.x;\n\t\t\t\ty = p2.y;\n\t\t\t} else if (t > 0) {\n\t\t\t\tx += dx * t;\n\t\t\t\ty += dy * t;\n\t\t\t}\n\t\t}\n\n\t\tdx = p.x - x;\n\t\tdy = p.y - y;\n\n\t\treturn sqDist ? dx * dx + dy * dy : new L.Point(x, y);\n\t}\n};\n\n\n\nL.Polyline = L.Path.extend({\n\tinitialize: function (latlngs, options) {\n\t\tL.Path.prototype.initialize.call(this, options);\n\t\tthis._latlngs = latlngs;\n\t},\n\n\toptions: {\n\t\t// how much to simplify the polyline on each zoom level\n\t\t// more = better performance and smoother look, less = more accurate\n\t\tsmoothFactor: 1.0,\n\t\tnoClip: false,\n\n\t\tupdateOnMoveEnd: true\n\t},\n\n\tprojectLatlngs: function () {\n\t\tthis._originalPoints = [];\n\n\t\tfor (var i = 0, len = this._latlngs.length; i < len; i++) {\n\t\t\tthis._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);\n\t\t}\n\t},\n\n\tgetPathString: function () {\n\t\tfor (var i = 0, len = this._parts.length, str = ''; i < len; i++) {\n\t\t\tstr += this._getPathPartStr(this._parts[i]);\n\t\t}\n\t\treturn str;\n\t},\n\n\tgetLatLngs: function () {\n\t\treturn this._latlngs;\n\t},\n\n\tsetLatLngs: function (latlngs) {\n\t\tthis._latlngs = latlngs;\n\t\tthis._redraw();\n\t\treturn this;\n\t},\n\n\taddLatLng: function (latlng) {\n\t\tthis._latlngs.push(latlng);\n\t\tthis._redraw();\n\t\treturn this;\n\t},\n\n\tspliceLatLngs: function (index, howMany) {\n\t\tvar removed = [].splice.apply(this._latlngs, arguments);\n\t\tthis._redraw();\n\t\treturn removed;\n\t},\n\n\tclosestLayerPoint: function (p) {\n\t\tvar minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;\n\n\t\tfor (var j = 0, jLen = parts.length; j < jLen; j++) {\n\t\t\tvar points = parts[j];\n\t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n\t\t\t\tp1 = points[i - 1];\n\t\t\t\tp2 = points[i];\n\t\t\t\tvar point = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);\n\t\t\t\tif (point._sqDist < minDistance) {\n\t\t\t\t\tminDistance = point._sqDist;\n\t\t\t\t\tminPoint = point;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minPoint) {\n\t\t\tminPoint.distance = Math.sqrt(minDistance);\n\t\t}\n\t\treturn minPoint;\n\t},\n\n\tgetBounds: function () {\n\t\tvar b = new L.LatLngBounds();\n\t\tvar latLngs = this.getLatLngs();\n\t\tfor (var i = 0, len = latLngs.length; i < len; i++) {\n\t\t\tb.extend(latLngs[i]);\n\t\t}\n\t\treturn b;\n\t},\n\n\t_getPathPartStr: function (points) {\n\t\tvar round = L.Path.VML;\n\n\t\tfor (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {\n\t\t\tp = points[j];\n\t\t\tif (round) {\n\t\t\t\tp._round();\n\t\t\t}\n\t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n\t\t}\n\t\treturn str;\n\t},\n\n\t_clipPoints: function () {\n\t\tvar points = this._originalPoints,\n\t\t\tlen = points.length,\n\t\t\ti, k, segment;\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = [points];\n\t\t\treturn;\n\t\t}\n\n\t\tthis._parts = [];\n\n\t\tvar parts = this._parts,\n\t\t\tvp = this._map._pathViewport,\n\t\t\tlu = L.LineUtil;\n\n\t\tfor (i = 0, k = 0; i < len - 1; i++) {\n\t\t\tsegment = lu.clipSegment(points[i], points[i + 1], vp, i);\n\t\t\tif (!segment) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tparts[k] = parts[k] || [];\n\t\t\tparts[k].push(segment[0]);\n\n\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n\t\t\tif ((segment[1] !== points[i + 1]) || (i === len - 2)) {\n\t\t\t\tparts[k].push(segment[1]);\n\t\t\t\tk++;\n\t\t\t}\n\t\t}\n\t},\n\n\t// simplify each clipped part of the polyline\n\t_simplifyPoints: function () {\n\t\tvar parts = this._parts,\n\t\t\tlu = L.LineUtil;\n\n\t\tfor (var i = 0, len = parts.length; i < len; i++) {\n\t\t\tparts[i] = lu.simplify(parts[i], this.options.smoothFactor);\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\n\t\tL.Path.prototype._updatePath.call(this);\n\t}\n});\n\n\n/*\n * L.PolyUtil contains utilify functions for polygons (clipping, etc.).\n */\n\n/*jshint bitwise:false */ // allow bitwise oprations here\n\nL.PolyUtil = {};\n\n/*\n * Sutherland-Hodgeman polygon clipping algorithm.\n * Used to avoid rendering parts of a polygon that are not currently visible.\n */\nL.PolyUtil.clipPolygon = function (points, bounds) {\n\tvar min = bounds.min,\n\t\tmax = bounds.max,\n\t\tclippedPoints,\n\t\tedges = [1, 4, 2, 8],\n\t\ti, j, k,\n\t\ta, b,\n\t\tlen, edge, p,\n\t\tlu = L.LineUtil;\n\n\tfor (i = 0, len = points.length; i < len; i++) {\n\t\tpoints[i]._code = lu._getBitCode(points[i], bounds);\n\t}\n\n\t// for each edge (left, bottom, right, top)\n\tfor (k = 0; k < 4; k++) {\n\t\tedge = edges[k];\n\t\tclippedPoints = [];\n\n\t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\n\t\t\ta = points[i];\n\t\t\tb = points[j];\n\n\t\t\t// if a is inside the clip window\n\t\t\tif (!(a._code & edge)) {\n\t\t\t\t// if b is outside the clip window (a->b goes out of screen)\n\t\t\t\tif (b._code & edge) {\n\t\t\t\t\tp = lu._getEdgeIntersection(b, a, edge, bounds);\n\t\t\t\t\tp._code = lu._getBitCode(p, bounds);\n\t\t\t\t\tclippedPoints.push(p);\n\t\t\t\t}\n\t\t\t\tclippedPoints.push(a);\n\n\t\t\t// else if b is inside the clip window (a->b enters the screen)\n\t\t\t} else if (!(b._code & edge)) {\n\t\t\t\tp = lu._getEdgeIntersection(b, a, edge, bounds);\n\t\t\t\tp._code = lu._getBitCode(p, bounds);\n\t\t\t\tclippedPoints.push(p);\n\t\t\t}\n\t\t}\n\t\tpoints = clippedPoints;\n\t}\n\n\treturn points;\n};\n\n/*jshint bitwise:true */\n\n\n/*\n * L.Polygon is used to display polygons on a map.\n */\n\nL.Polygon = L.Polyline.extend({\n\toptions: {\n\t\tfill: true\n\t},\n\n\tinitialize: function (latlngs, options) {\n\t\tL.Polyline.prototype.initialize.call(this, latlngs, options);\n\n\t\tif (latlngs && (latlngs[0] instanceof Array)) {\n\t\t\tthis._latlngs = latlngs[0];\n\t\t\tthis._holes = latlngs.slice(1);\n\t\t}\n\t},\n\n\tprojectLatlngs: function () {\n\t\tL.Polyline.prototype.projectLatlngs.call(this);\n\n\t\t// project polygon holes points\n\t\t// TODO move this logic to Polyline to get rid of duplication\n\t\tthis._holePoints = [];\n\n\t\tif (!this._holes) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._holes.length, hole; i < len; i++) {\n\t\t\tthis._holePoints[i] = [];\n\n\t\t\tfor (var j = 0, len2 = this._holes[i].length; j < len2; j++) {\n\t\t\t\tthis._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);\n\t\t\t}\n\t\t}\n\t},\n\n\t_clipPoints: function () {\n\t\tvar points = this._originalPoints,\n\t\t\tnewParts = [];\n\n\t\tthis._parts = [points].concat(this._holePoints);\n\n\t\tif (this.options.noClip) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tvar clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);\n\t\t\tif (!clipped.length) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnewParts.push(clipped);\n\t\t}\n\n\t\tthis._parts = newParts;\n\t},\n\n\t_getPathPartStr: function (points) {\n\t\tvar str = L.Polyline.prototype._getPathPartStr.call(this, points);\n\t\treturn str + (L.Browser.svg ? 'z' : 'x');\n\t}\n});\n\n\n/*\n * Contains L.MultiPolyline and L.MultiPolygon layers.\n */\n\n(function () {\n\tfunction createMulti(Klass) {\n\t\treturn L.FeatureGroup.extend({\n\t\t\tinitialize: function (latlngs, options) {\n\t\t\t\tthis._layers = {};\n\t\t\t\tthis._options = options;\n\t\t\t\tthis.setLatLngs(latlngs);\n\t\t\t},\n\n\t\t\tsetLatLngs: function (latlngs) {\n\t\t\t\tvar i = 0, len = latlngs.length;\n\n\t\t\t\tthis._iterateLayers(function (layer) {\n\t\t\t\t\tif (i < len) {\n\t\t\t\t\t\tlayer.setLatLngs(latlngs[i++]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.removeLayer(layer);\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\n\t\t\t\twhile (i < len) {\n\t\t\t\t\tthis.addLayer(new Klass(latlngs[i++], this._options));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tL.MultiPolyline = createMulti(L.Polyline);\n\tL.MultiPolygon = createMulti(L.Polygon);\n}());\n\n\n/*\n * L.Circle is a circle overlay (with a certain radius in meters).\n */\n\nL.Circle = L.Path.extend({\n\tinitialize: function (latlng, radius, options) {\n\t\tL.Path.prototype.initialize.call(this, options);\n\n\t\tthis._latlng = latlng;\n\t\tthis._mRadius = radius;\n\t},\n\n\toptions: {\n\t\tfill: true\n\t},\n\n\tsetLatLng: function (latlng) {\n\t\tthis._latlng = latlng;\n\t\tthis._redraw();\n\t\treturn this;\n\t},\n\n\tsetRadius: function (radius) {\n\t\tthis._mRadius = radius;\n\t\tthis._redraw();\n\t\treturn this;\n\t},\n\n\tprojectLatlngs: function () {\n\t\tvar equatorLength = 40075017,\n\t\t\thLength = equatorLength * Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);\n\n\t\tvar lngSpan = (this._mRadius / hLength) * 360,\n\t\t\tlatlng2 = new L.LatLng(this._latlng.lat, this._latlng.lng - lngSpan, true),\n\t\t\tpoint2 = this._map.latLngToLayerPoint(latlng2);\n\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._radius = Math.round(this._point.x - point2.x);\n\t},\n\n\tgetPathString: function () {\n\t\tvar p = this._point,\n\t\t\tr = this._radius;\n\n\t\tif (this._checkIfEmpty()) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (L.Browser.svg) {\n\t\t\treturn \"M\" + p.x + \",\" + (p.y - r) +\n\t\t\t\t\t\"A\" + r + \",\" + r + \",0,1,1,\" +\n\t\t\t\t\t(p.x - 0.1) + \",\" + (p.y - r) + \" z\";\n\t\t} else {\n\t\t\tp._round();\n\t\t\tr = Math.round(r);\n\t\t\treturn \"AL \" + p.x + \",\" + p.y + \" \" + r + \",\" + r + \" 0,\" + (65535 * 360);\n\t\t}\n\t},\n\n\t_checkIfEmpty: function () {\n\t\tvar vp = this._map._pathViewport,\n\t\t\tr = this._radius,\n\t\t\tp = this._point;\n\n\t\treturn p.x - r > vp.max.x || p.y - r > vp.max.y ||\n\t\t\tp.x + r < vp.min.x || p.y + r < vp.min.y;\n\t}\n});\n\n\n/*\n * L.CircleMarker is a circle overlay with a permanent pixel radius.\n */\n\nL.CircleMarker = L.Circle.extend({\n\toptions: {\n\t\tradius: 10,\n\t\tweight: 2\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tL.Circle.prototype.initialize.call(this, latlng, null, options);\n\t\tthis._radius = this.options.radius;\n\t},\n\n\tprojectLatlngs: function () {\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t},\n\n\tsetRadius: function (radius) {\n\t\tthis._radius = radius;\n\t\tthis._redraw();\n\t\treturn this;\n\t}\n});\n\n\n\nL.Polyline.include(!L.Path.CANVAS ? {} : {\n\t_containsPoint: function (p, closed) {\n\t\tvar i, j, k, len, len2, dist, part,\n\t\t\tw = this.options.weight / 2;\n\n\t\tif (L.Browser.touch) {\n\t\t\tw += 10; // polyline click tolerance on touch devices\n\t\t}\n\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tif (!closed && (j === 0)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tdist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]);\n\n\t\t\t\tif (dist <= w) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\n\n\nL.Polygon.include(!L.Path.CANVAS ? {} : {\n\t_containsPoint: function (p) {\n\t\tvar inside = false,\n\t\t\tpart, p1, p2,\n\t\t\ti, j, k,\n\t\t\tlen, len2;\n\n\t\t// TODO optimization: check if within bounds first\n\n\t\tif (L.Polyline.prototype._containsPoint.call(this, p, true)) {\n\t\t\t// click on polygon border\n\t\t\treturn true;\n\t\t}\n\n\t\t// ray casting algorithm for detecting if point is in polygon\n\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tp1 = part[j];\n\t\t\t\tp2 = part[k];\n\n\t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) &&\n\t\t\t\t\t\t(p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn inside;\n\t}\n});\n\n\n/*\n * Circle canvas specific drawing parts.\n */\n\nL.Circle.include(!L.Path.CANVAS ? {} : {\n\t_drawPath: function () {\n\t\tvar p = this._point;\n\t\tthis._ctx.beginPath();\n\t\tthis._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2);\n\t},\n\n\t_containsPoint: function (p) {\n\t\tvar center = this._point,\n\t\t\tw2 = this.options.stroke ? this.options.weight / 2 : 0;\n\n\t\treturn (p.distanceTo(center) <= this._radius + w2);\n\t}\n});\n\n\n\nL.GeoJSON = L.FeatureGroup.extend({\n\tinitialize: function (geojson, options) {\n\t\tL.Util.setOptions(this, options);\n\t\tthis._geojson = geojson;\n\t\tthis._layers = {};\n\n\t\tif (geojson) {\n\t\t\tthis.addGeoJSON(geojson);\n\t\t}\n\t},\n\n\taddGeoJSON: function (geojson) {\n\t\tif (geojson.features) {\n\t\t\tfor (var i = 0, len = geojson.features.length; i < len; i++) {\n\t\t\t\tthis.addGeoJSON(geojson.features[i]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tvar isFeature = (geojson.type === 'Feature'),\n\t\t\tgeometry = (isFeature ? geojson.geometry : geojson),\n\t\t\tlayer = L.GeoJSON.geometryToLayer(geometry, this.options.pointToLayer);\n\n\t\tthis.fire('featureparse', {\n\t\t\tlayer: layer,\n\t\t\tproperties: geojson.properties,\n\t\t\tgeometryType: geometry.type,\n\t\t\tbbox: geojson.bbox,\n\t\t\tid: geojson.id\n\t\t});\n\n\t\tthis.addLayer(layer);\n\t}\n});\n\nL.Util.extend(L.GeoJSON, {\n\tgeometryToLayer: function (geometry, pointToLayer) {\n\t\tvar coords = geometry.coordinates,\n\t\t\tlatlng, latlngs,\n\t\t\ti, len,\n\t\t\tlayer,\n\t\t\tlayers = [];\n\n\t\tswitch (geometry.type) {\n\t\tcase 'Point':\n\t\t\tlatlng = this.coordsToLatLng(coords);\n\t\t\treturn pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);\n\n\t\tcase 'MultiPoint':\n\t\t\tfor (i = 0, len = coords.length; i < len; i++) {\n\t\t\t\tlatlng = this.coordsToLatLng(coords[i]);\n\t\t\t\tlayer = pointToLayer ? pointToLayer(latlng) : new L.Marker(latlng);\n\t\t\t\tlayers.push(layer);\n\t\t\t}\n\t\t\treturn new L.FeatureGroup(layers);\n\n\t\tcase 'LineString':\n\t\t\tlatlngs = this.coordsToLatLngs(coords);\n\t\t\treturn new L.Polyline(latlngs);\n\n\t\tcase 'Polygon':\n\t\t\tlatlngs = this.coordsToLatLngs(coords, 1);\n\t\t\treturn new L.Polygon(latlngs);\n\n\t\tcase 'MultiLineString':\n\t\t\tlatlngs = this.coordsToLatLngs(coords, 1);\n\t\t\treturn new L.MultiPolyline(latlngs);\n\n\t\tcase \"MultiPolygon\":\n\t\t\tlatlngs = this.coordsToLatLngs(coords, 2);\n\t\t\treturn new L.MultiPolygon(latlngs);\n\n\t\tcase \"GeometryCollection\":\n\t\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\n\t\t\t\tlayer = this.geometryToLayer(geometry.geometries[i], pointToLayer);\n\t\t\t\tlayers.push(layer);\n\t\t\t}\n\t\t\treturn new L.FeatureGroup(layers);\n\n\t\tdefault:\n\t\t\tthrow new Error('Invalid GeoJSON object.');\n\t\t}\n\t},\n\n\tcoordsToLatLng: function (/*Array*/ coords, /*Boolean*/ reverse)/*: LatLng*/ {\n\t\tvar lat = parseFloat(coords[reverse ? 0 : 1]),\n\t\t\tlng = parseFloat(coords[reverse ? 1 : 0]);\n\t\treturn new L.LatLng(lat, lng, true);\n\t},\n\n\tcoordsToLatLngs: function (/*Array*/ coords, /*Number*/ levelsDeep, /*Boolean*/ reverse)/*: Array*/ {\n\t\tvar latlng, latlngs = [],\n\t\t\ti, len = coords.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tlatlng = levelsDeep ?\n\t\t\t\t\tthis.coordsToLatLngs(coords[i], levelsDeep - 1, reverse) :\n\t\t\t\t\tthis.coordsToLatLng(coords[i], reverse);\n\t\t\tlatlngs.push(latlng);\n\t\t}\n\t\treturn latlngs;\n\t}\n});\n\n\n/*\n * L.DomEvent contains functions for working with DOM events.\n */\n\nL.DomEvent = {\n\t/* inpired by John Resig, Dean Edwards and YUI addEvent implementations */\n\taddListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn, /*Object*/ context) {\n\t\tvar id = L.Util.stamp(fn),\n\t\t\tkey = '_leaflet_' + type + id;\n\n\t\tif (obj[key]) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar handler = function (e) {\n\t\t\treturn fn.call(context || obj, e || L.DomEvent._getEvent());\n\t\t};\n\n\t\tif (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {\n\t\t\tthis.addDoubleTapListener(obj, handler, id);\n\t\t} else if ('addEventListener' in obj) {\n\t\t\tif (type === 'mousewheel') {\n\t\t\t\tobj.addEventListener('DOMMouseScroll', handler, false);\n\t\t\t\tobj.addEventListener(type, handler, false);\n\t\t\t} else if ((type === 'mouseenter') || (type === 'mouseleave')) {\n\t\t\t\tvar originalHandler = handler,\n\t\t\t\t\tnewType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');\n\t\t\t\thandler = function (e) {\n\t\t\t\t\tif (!L.DomEvent._checkMouse(obj, e)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn originalHandler(e);\n\t\t\t\t};\n\t\t\t\tobj.addEventListener(newType, handler, false);\n\t\t\t} else {\n\t\t\t\tobj.addEventListener(type, handler, false);\n\t\t\t}\n\t\t} else if ('attachEvent' in obj) {\n\t\t\tobj.attachEvent(\"on\" + type, handler);\n\t\t}\n\n\t\tobj[key] = handler;\n\t},\n\n\tremoveListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn) {\n\t\tvar id = L.Util.stamp(fn),\n\t\t\tkey = '_leaflet_' + type + id,\n\t\t\thandler = obj[key];\n\n\t\tif (!handler) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {\n\t\t\tthis.removeDoubleTapListener(obj, id);\n\t\t} else if ('removeEventListener' in obj) {\n\t\t\tif (type === 'mousewheel') {\n\t\t\t\tobj.removeEventListener('DOMMouseScroll', handler, false);\n\t\t\t\tobj.removeEventListener(type, handler, false);\n\t\t\t} else if ((type === 'mouseenter') || (type === 'mouseleave')) {\n\t\t\t\tobj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);\n\t\t\t} else {\n\t\t\t\tobj.removeEventListener(type, handler, false);\n\t\t\t}\n\t\t} else if ('detachEvent' in obj) {\n\t\t\tobj.detachEvent(\"on\" + type, handler);\n\t\t}\n\t\tobj[key] = null;\n\t},\n\n\t_checkMouse: function (el, e) {\n\t\tvar related = e.relatedTarget;\n\n\t\tif (!related) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttry {\n\t\t\twhile (related && (related !== el)) {\n\t\t\t\trelated = related.parentNode;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn (related !== el);\n\t},\n\n\t/*jshint noarg:false */ // evil magic for IE\n\t_getEvent: function () {\n\t\tvar e = window.event;\n\t\tif (!e) {\n\t\t\tvar caller = arguments.callee.caller;\n\t\t\twhile (caller) {\n\t\t\t\te = caller['arguments'][0];\n\t\t\t\tif (e && window.Event === e.constructor) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcaller = caller.caller;\n\t\t\t}\n\t\t}\n\t\treturn e;\n\t},\n\t/*jshint noarg:false */\n\n\tstopPropagation: function (/*Event*/ e) {\n\t\tif (e.stopPropagation) {\n\t\t\te.stopPropagation();\n\t\t} else {\n\t\t\te.cancelBubble = true;\n\t\t}\n\t},\n\n\tdisableClickPropagation: function (/*HTMLElement*/ el) {\n\t\tL.DomEvent.addListener(el, L.Draggable.START, L.DomEvent.stopPropagation);\n\t\tL.DomEvent.addListener(el, 'click', L.DomEvent.stopPropagation);\n\t\tL.DomEvent.addListener(el, 'dblclick', L.DomEvent.stopPropagation);\n\t},\n\n\tpreventDefault: function (/*Event*/ e) {\n\t\tif (e.preventDefault) {\n\t\t\te.preventDefault();\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\n\tstop: function (e) {\n\t\tL.DomEvent.preventDefault(e);\n\t\tL.DomEvent.stopPropagation(e);\n\t},\n\n\tgetMousePosition: function (e, container) {\n\t\tvar x = e.pageX ? e.pageX : e.clientX +\n\t\t\t\tdocument.body.scrollLeft + document.documentElement.scrollLeft,\n\t\t\ty = e.pageY ? e.pageY : e.clientY +\n\t\t\t\t\tdocument.body.scrollTop + document.documentElement.scrollTop,\n\t\t\tpos = new L.Point(x, y);\n\t\treturn (container ?\n\t\t\t\t\tpos.subtract(L.DomUtil.getViewportOffset(container)) : pos);\n\t},\n\n\tgetWheelDelta: function (e) {\n\t\tvar delta = 0;\n\t\tif (e.wheelDelta) {\n\t\t\tdelta = e.wheelDelta / 120;\n\t\t}\n\t\tif (e.detail) {\n\t\t\tdelta = -e.detail / 3;\n\t\t}\n\t\treturn delta;\n\t}\n};\n\n\n\n/*\n * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.\n */\n\nL.Draggable = L.Class.extend({\n\tincludes: L.Mixin.Events,\n\n\tstatics: {\n\t\tSTART: L.Browser.touch ? 'touchstart' : 'mousedown',\n\t\tEND: L.Browser.touch ? 'touchend' : 'mouseup',\n\t\tMOVE: L.Browser.touch ? 'touchmove' : 'mousemove',\n\t\tTAP_TOLERANCE: 15\n\t},\n\n\tinitialize: function (element, dragStartTarget) {\n\t\tthis._element = element;\n\t\tthis._dragStartTarget = dragStartTarget || element;\n\t},\n\n\tenable: function () {\n\t\tif (this._enabled) {\n\t\t\treturn;\n\t\t}\n\t\tL.DomEvent.addListener(this._dragStartTarget, L.Draggable.START, this._onDown, this);\n\t\tthis._enabled = true;\n\t},\n\n\tdisable: function () {\n\t\tif (!this._enabled) {\n\t\t\treturn;\n\t\t}\n\t\tL.DomEvent.removeListener(this._dragStartTarget, L.Draggable.START, this._onDown);\n\t\tthis._enabled = false;\n\t},\n\n\t_onDown: function (e) {\n\t\tif ((!L.Browser.touch && e.shiftKey) || ((e.which !== 1) && (e.button !== 1) && !e.touches)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (e.touches && e.touches.length > 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\n\t\t\tel = first.target;\n\n\t\tL.DomEvent.preventDefault(e);\n\n\t\tif (L.Browser.touch && el.tagName.toLowerCase() === 'a') {\n\t\t\tel.className += ' leaflet-active';\n\t\t}\n\n\t\tthis._moved = false;\n\t\tif (this._moving) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!L.Browser.touch) {\n\t\t\tL.DomUtil.disableTextSelection();\n\t\t\tthis._setMovingCursor();\n\t\t}\n\n\t\tthis._startPos = this._newPos = L.DomUtil.getPosition(this._element);\n\t\tthis._startPoint = new L.Point(first.clientX, first.clientY);\n\n\t\tL.DomEvent.addListener(document, L.Draggable.MOVE, this._onMove, this);\n\t\tL.DomEvent.addListener(document, L.Draggable.END, this._onUp, this);\n\t},\n\n\t_onMove: function (e) {\n\t\tif (e.touches && e.touches.length > 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tL.DomEvent.preventDefault(e);\n\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e);\n\n\t\tif (!this._moved) {\n\t\t\tthis.fire('dragstart');\n\t\t\tthis._moved = true;\n\t\t}\n\t\tthis._moving = true;\n\n\t\tvar newPoint = new L.Point(first.clientX, first.clientY);\n\t\tthis._newPos = this._startPos.add(newPoint).subtract(this._startPoint);\n\n\t\tL.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget);\n\t},\n\n\t_updatePosition: function () {\n\t\tthis.fire('predrag');\n\t\tL.DomUtil.setPosition(this._element, this._newPos);\n\t\tthis.fire('drag');\n\t},\n\n\t_onUp: function (e) {\n\t\tif (e.changedTouches) {\n\t\t\tvar first = e.changedTouches[0],\n\t\t\t\tel = first.target,\n\t\t\t\tdist = (this._newPos && this._newPos.distanceTo(this._startPos)) || 0;\n\n\t\t\tif (el.tagName.toLowerCase() === 'a') {\n\t\t\t\tel.className = el.className.replace(' leaflet-active', '');\n\t\t\t}\n\n\t\t\tif (dist < L.Draggable.TAP_TOLERANCE) {\n\t\t\t\tthis._simulateEvent('click', first);\n\t\t\t}\n\t\t}\n\n\t\tif (!L.Browser.touch) {\n\t\t\tL.DomUtil.enableTextSelection();\n\t\t\tthis._restoreCursor();\n\t\t}\n\n\t\tL.DomEvent.removeListener(document, L.Draggable.MOVE, this._onMove);\n\t\tL.DomEvent.removeListener(document, L.Draggable.END, this._onUp);\n\n\t\tif (this._moved) {\n\t\t\tthis.fire('dragend');\n\t\t}\n\t\tthis._moving = false;\n\t},\n\n\t_setMovingCursor: function () {\n\t\tthis._bodyCursor = document.body.style.cursor;\n\t\tdocument.body.style.cursor = 'move';\n\t},\n\n\t_restoreCursor: function () {\n\t\tdocument.body.style.cursor = this._bodyCursor;\n\t},\n\n\t_simulateEvent: function (type, e) {\n\t\tvar simulatedEvent = document.createEvent('MouseEvents');\n\n\t\tsimulatedEvent.initMouseEvent(\n\t\t\t\ttype, true, true, window, 1,\n\t\t\t\te.screenX, e.screenY,\n\t\t\t\te.clientX, e.clientY,\n\t\t\t\tfalse, false, false, false, 0, null);\n\n\t\te.target.dispatchEvent(simulatedEvent);\n\t}\n});\n\n\n/*\n * L.Handler classes are used internally to inject interaction features to classes like Map and Marker.\n */\n\nL.Handler = L.Class.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t},\n\n\tenable: function () {\n\t\tif (this._enabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t},\n\n\tdisable: function () {\n\t\tif (!this._enabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t},\n\n\tenabled: function () {\n\t\treturn !!this._enabled;\n\t}\n});\n\n\n/*\n * L.Handler.MapDrag is used internally by L.Map to make the map draggable.\n */\n\nL.Map.Drag = L.Handler.extend({\n\taddHooks: function () {\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new L.Draggable(this._map._mapPane, this._map._container);\n\n\t\t\tthis._draggable\n\t\t\t\t.on('dragstart', this._onDragStart, this)\n\t\t\t\t.on('drag', this._onDrag, this)\n\t\t\t\t.on('dragend', this._onDragEnd, this);\n\n\t\t\tvar options = this._map.options;\n\n\t\t\tif (options.worldCopyJump && !options.continuousWorld) {\n\t\t\t\tthis._draggable.on('predrag', this._onPreDrag, this);\n\t\t\t\tthis._map.on('viewreset', this._onViewReset, this);\n\t\t\t}\n\t\t}\n\t\tthis._draggable.enable();\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.disable();\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_onDragStart: function () {\n\t\tthis._map\n\t\t\t.fire('movestart')\n\t\t\t.fire('dragstart');\n\t},\n\n\t_onDrag: function () {\n\t\tthis._map\n\t\t\t.fire('move')\n\t\t\t.fire('drag');\n\t},\n\n\t_onViewReset: function () {\n\t\tvar pxCenter = this._map.getSize().divideBy(2),\n\t\t\tpxWorldCenter = this._map.latLngToLayerPoint(new L.LatLng(0, 0));\n\n\t\tthis._initialWorldOffset = pxWorldCenter.subtract(pxCenter);\n\t},\n\n\t_onPreDrag: function () {\n\t\tvar map = this._map,\n\t\t\tworldWidth = map.options.scale(map.getZoom()),\n\t\t\thalfWidth = Math.round(worldWidth / 2),\n\t\t\tdx = this._initialWorldOffset.x,\n\t\t\tx = this._draggable._newPos.x,\n\t\t\tnewX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n\t\t\tnewX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n\t\t\tnewX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n\n\t\tthis._draggable._newPos.x = newX;\n\t},\n\n\t_onDragEnd: function () {\n\t\tvar map = this._map;\n\n\t\tmap\n\t\t\t.fire('moveend')\n\t\t\t.fire('dragend');\n\n\t\tif (map.options.maxBounds) {\n\t\t\t// TODO predrag validation instead of animation\n\t\t\tL.Util.requestAnimFrame(this._panInsideMaxBounds, map, true, map._container);\n\t\t}\n\t},\n\n\t_panInsideMaxBounds: function () {\n\t\tthis.panInsideBounds(this.options.maxBounds);\n\t}\n});\n\n\n/*\n * L.Handler.DoubleClickZoom is used internally by L.Map to add double-click zooming.\n */\n\nL.Map.DoubleClickZoom = L.Handler.extend({\n\taddHooks: function () {\n\t\tthis._map.on('dblclick', this._onDoubleClick);\n\t\t// TODO remove 3d argument?\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._map.off('dblclick', this._onDoubleClick);\n\t},\n\n\t_onDoubleClick: function (e) {\n\t\tthis.setView(e.latlng, this._zoom + 1);\n\t}\n});\n\n\n/*\n * L.Handler.ScrollWheelZoom is used internally by L.Map to enable mouse scroll wheel zooming on the map.\n */\n\nL.Map.ScrollWheelZoom = L.Handler.extend({\n\taddHooks: function () {\n\t\tL.DomEvent.addListener(this._map._container, 'mousewheel', this._onWheelScroll, this);\n\t\tthis._delta = 0;\n\t},\n\n\tremoveHooks: function () {\n\t\tL.DomEvent.removeListener(this._map._container, 'mousewheel', this._onWheelScroll);\n\t},\n\n\t_onWheelScroll: function (e) {\n\t\tvar delta = L.DomEvent.getWheelDelta(e);\n\t\tthis._delta += delta;\n\t\tthis._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n\t\tclearTimeout(this._timer);\n\t\tthis._timer = setTimeout(L.Util.bind(this._performZoom, this), 50);\n\n\t\tL.DomEvent.preventDefault(e);\n\t},\n\n\t_performZoom: function () {\n\t\tvar map = this._map,\n\t\t\tdelta = Math.round(this._delta),\n\t\t\tzoom = map.getZoom();\n\n\t\tdelta = Math.max(Math.min(delta, 4), -4);\n\t\tdelta = map._limitZoom(zoom + delta) - zoom;\n\n\t\tthis._delta = 0;\n\n\t\tif (!delta) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar newCenter = this._getCenterForScrollWheelZoom(this._lastMousePos, delta),\n\t\t\tnewZoom = zoom + delta;\n\n\t\tmap.setView(newCenter, newZoom);\n\t},\n\n\t_getCenterForScrollWheelZoom: function (mousePos, delta) {\n\t\tvar map = this._map,\n\t\t\tcenterPoint = map.getPixelBounds().getCenter(),\n\t\t\tviewHalf = map.getSize().divideBy(2),\n\t\t\tcenterOffset = mousePos.subtract(viewHalf).multiplyBy(1 - Math.pow(2, -delta)),\n\t\t\tnewCenterPoint = centerPoint.add(centerOffset);\n\n\t\treturn map.unproject(newCenterPoint, map._zoom, true);\n\t}\n});\n\n\nL.Util.extend(L.DomEvent, {\n\t// inspired by Zepto touch code by Thomas Fuchs\n\taddDoubleTapListener: function (obj, handler, id) {\n\t\tvar last,\n\t\t\tdoubleTap = false,\n\t\t\tdelay = 250,\n\t\t\ttouch,\n\t\t\tpre = '_leaflet_',\n\t\t\ttouchstart = 'touchstart',\n\t\t\ttouchend = 'touchend';\n\n\t\tfunction onTouchStart(e) {\n\t\t\tif (e.touches.length !== 1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar now = Date.now(),\n\t\t\t\tdelta = now - (last || now);\n\n\t\t\ttouch = e.touches[0];\n\t\t\tdoubleTap = (delta > 0 && delta <= delay);\n\t\t\tlast = now;\n\t\t}\n\t\tfunction onTouchEnd(e) {\n\t\t\tif (doubleTap) {\n\t\t\t\ttouch.type = 'dblclick';\n\t\t\t\thandler(touch);\n\t\t\t\tlast = null;\n\t\t\t}\n\t\t}\n\t\tobj[pre + touchstart + id] = onTouchStart;\n\t\tobj[pre + touchend + id] = onTouchEnd;\n\n\t\tobj.addEventListener(touchstart, onTouchStart, false);\n\t\tobj.addEventListener(touchend, onTouchEnd, false);\n\t},\n\n\tremoveDoubleTapListener: function (obj, id) {\n\t\tvar pre = '_leaflet_';\n\t\tobj.removeEventListener(obj, obj[pre + 'touchstart' + id], false);\n\t\tobj.removeEventListener(obj, obj[pre + 'touchend' + id], false);\n\t}\n});\n\n\n/*\n * L.Handler.TouchZoom is used internally by L.Map to add touch-zooming on Webkit-powered mobile browsers.\n */\n\nL.Map.TouchZoom = L.Handler.extend({\n\taddHooks: function () {\n\t\tL.DomEvent.addListener(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tL.DomEvent.removeListener(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\t_onTouchStart: function (e) {\n\t\tif (!e.touches || e.touches.length !== 2 || this._map._animatingZoom) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar p1 = this._map.mouseEventToLayerPoint(e.touches[0]),\n\t\t\tp2 = this._map.mouseEventToLayerPoint(e.touches[1]),\n\t\t\tviewCenter = this._map.containerPointToLayerPoint(this._map.getSize().divideBy(2));\n\n\t\tthis._startCenter = p1.add(p2).divideBy(2, true);\n\t\tthis._startDist = p1.distanceTo(p2);\n\t\t//this._startTransform = this._map._mapPane.style.webkitTransform;\n\n\t\tthis._moved = false;\n\t\tthis._zooming = true;\n\n\t\tthis._centerOffset = viewCenter.subtract(this._startCenter);\n\n\t\tL.DomEvent.addListener(document, 'touchmove', this._onTouchMove, this);\n\t\tL.DomEvent.addListener(document, 'touchend', this._onTouchEnd, this);\n\n\t\tL.DomEvent.preventDefault(e);\n\t},\n\n\t_onTouchMove: function (e) {\n\t\tif (!e.touches || e.touches.length !== 2) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._moved) {\n\t\t\tthis._map._mapPane.className += ' leaflet-zoom-anim';\n\n\t\t\tthis._map\n\t\t\t\t.fire('zoomstart')\n\t\t\t\t.fire('movestart')\n\t\t\t\t._prepareTileBg();\n\n\t\t\tthis._moved = true;\n\t\t}\n\n\t\tvar p1 = this._map.mouseEventToLayerPoint(e.touches[0]),\n\t\t\tp2 = this._map.mouseEventToLayerPoint(e.touches[1]);\n\n\t\tthis._scale = p1.distanceTo(p2) / this._startDist;\n\t\tthis._delta = p1.add(p2).divideBy(2, true).subtract(this._startCenter);\n\n\t\t// Used 2 translates instead of transform-origin because of a very strange bug -\n\t\t// it didn't count the origin on the first touch-zoom but worked correctly afterwards\n\n\t\tthis._map._tileBg.style.webkitTransform = [\n            L.DomUtil.getTranslateString(this._delta),\n            L.DomUtil.getScaleString(this._scale, this._startCenter)\n        ].join(\" \");\n\n\t\tL.DomEvent.preventDefault(e);\n\t},\n\n\t_onTouchEnd: function (e) {\n\t\tif (!this._moved || !this._zooming) {\n\t\t\treturn;\n\t\t}\n\t\tthis._zooming = false;\n\n\t\tvar oldZoom = this._map.getZoom(),\n\t\t\tfloatZoomDelta = Math.log(this._scale) / Math.LN2,\n\t\t\troundZoomDelta = (floatZoomDelta > 0 ? Math.ceil(floatZoomDelta) : Math.floor(floatZoomDelta)),\n\t\t\tzoom = this._map._limitZoom(oldZoom + roundZoomDelta),\n\t\t\tzoomDelta = zoom - oldZoom,\n\t\t\tcenterOffset = this._centerOffset.subtract(this._delta).divideBy(this._scale),\n\t\t\tcenterPoint = this._map.getPixelOrigin().add(this._startCenter).add(centerOffset),\n\t\t\tcenter = this._map.unproject(centerPoint);\n\n\t\tL.DomEvent.removeListener(document, 'touchmove', this._onTouchMove);\n\t\tL.DomEvent.removeListener(document, 'touchend', this._onTouchEnd);\n\n\t\tvar finalScale = Math.pow(2, zoomDelta);\n\n\t\tthis._map._runAnimation(center, zoom, finalScale / this._scale, this._startCenter.add(centerOffset));\n\t}\n});\n\n\n/*\n * L.Handler.ShiftDragZoom is used internally by L.Map to add shift-drag zoom (zoom to a selected bounding box).\n */\n\nL.Map.BoxZoom = L.Handler.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t\tthis._container = map._container;\n\t\tthis._pane = map._panes.overlayPane;\n\t},\n\n\taddHooks: function () {\n\t\tL.DomEvent.addListener(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tL.DomEvent.removeListener(this._container, 'mousedown', this._onMouseDown);\n\t},\n\n\t_onMouseDown: function (e) {\n\t\tif (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) {\n\t\t\treturn false;\n\t\t}\n\n\t\tL.DomUtil.disableTextSelection();\n\n\t\tthis._startLayerPoint = this._map.mouseEventToLayerPoint(e);\n\n\t\tthis._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._pane);\n\t\tL.DomUtil.setPosition(this._box, this._startLayerPoint);\n\n\t\t//TODO move cursor to styles\n\t\tthis._container.style.cursor = 'crosshair';\n\n\t\tL.DomEvent.addListener(document, 'mousemove', this._onMouseMove, this);\n\t\tL.DomEvent.addListener(document, 'mouseup', this._onMouseUp, this);\n\n\t\tL.DomEvent.preventDefault(e);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tvar layerPoint = this._map.mouseEventToLayerPoint(e),\n\t\t\tdx = layerPoint.x - this._startLayerPoint.x,\n\t\t\tdy = layerPoint.y - this._startLayerPoint.y;\n\n\t\tvar newX = Math.min(layerPoint.x, this._startLayerPoint.x),\n\t\t\tnewY = Math.min(layerPoint.y, this._startLayerPoint.y),\n\t\t\tnewPos = new L.Point(newX, newY);\n\n\t\tL.DomUtil.setPosition(this._box, newPos);\n\n\t\tthis._box.style.width = (Math.abs(dx) - 4) + 'px';\n\t\tthis._box.style.height = (Math.abs(dy) - 4) + 'px';\n\t},\n\n\t_onMouseUp: function (e) {\n\t\tthis._pane.removeChild(this._box);\n\t\tthis._container.style.cursor = '';\n\n\t\tL.DomUtil.enableTextSelection();\n\n\t\tL.DomEvent.removeListener(document, 'mousemove', this._onMouseMove);\n\t\tL.DomEvent.removeListener(document, 'mouseup', this._onMouseUp);\n\n\t\tvar layerPoint = this._map.mouseEventToLayerPoint(e);\n\n\t\tvar bounds = new L.LatLngBounds(\n\t\t\t\tthis._map.layerPointToLatLng(this._startLayerPoint),\n\t\t\t\tthis._map.layerPointToLatLng(layerPoint));\n\n\t\tthis._map.fitBounds(bounds);\n\t}\n});\n\n\n/*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\nL.Handler.MarkerDrag = L.Handler.extend({\n\tinitialize: function (marker) {\n\t\tthis._marker = marker;\n\t},\n\n\taddHooks: function () {\n\t\tvar icon = this._marker._icon;\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new L.Draggable(icon, icon);\n\n\t\t\tthis._draggable\n\t\t\t\t.on('dragstart', this._onDragStart, this)\n\t\t\t\t.on('drag', this._onDrag, this)\n\t\t\t\t.on('dragend', this._onDragEnd, this);\n\t\t}\n\t\tthis._draggable.enable();\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.disable();\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_onDragStart: function (e) {\n\t\tthis._marker\n\t\t\t.closePopup()\n\t\t\t.fire('movestart')\n\t\t\t.fire('dragstart');\n\t},\n\n\t_onDrag: function (e) {\n\t\t// update shadow position\n\t\tvar iconPos = L.DomUtil.getPosition(this._marker._icon);\n\t\tif (this._marker._shadow) {\n\t\t\tL.DomUtil.setPosition(this._marker._shadow, iconPos);\n\t\t}\n\n\t\tthis._marker._latlng = this._marker._map.layerPointToLatLng(iconPos);\n\n\t\tthis._marker\n\t\t\t.fire('move')\n\t\t\t.fire('drag');\n\t},\n\n\t_onDragEnd: function () {\n\t\tthis._marker\n\t\t\t.fire('moveend')\n\t\t\t.fire('dragend');\n\t}\n});\n\n\n\nL.Control = {};\n\nL.Control.Position = {\n\tTOP_LEFT: 'topLeft',\n\tTOP_RIGHT: 'topRight',\n\tBOTTOM_LEFT: 'bottomLeft',\n\tBOTTOM_RIGHT: 'bottomRight'\n};\n\n\nL.Map.include({\n\taddControl: function (control) {\n\t\tcontrol.onAdd(this);\n\n\t\tvar pos = control.getPosition(),\n\t\t\tcorner = this._controlCorners[pos],\n\t\t\tcontainer = control.getContainer();\n\n\t\tL.DomUtil.addClass(container, 'leaflet-control');\n\n\t\tif (pos.indexOf('bottom') !== -1) {\n\t\t\tcorner.insertBefore(container, corner.firstChild);\n\t\t} else {\n\t\t\tcorner.appendChild(container);\n\t\t}\n\t\treturn this;\n\t},\n\n\tremoveControl: function (control) {\n\t\tvar pos = control.getPosition(),\n\t\t\tcorner = this._controlCorners[pos],\n\t\t\tcontainer = control.getContainer();\n\n\t\tcorner.removeChild(container);\n\n\t\tif (control.onRemove) {\n\t\t\tcontrol.onRemove(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_initControlPos: function () {\n\t\tvar corners = this._controlCorners = {},\n\t\t\tclassPart = 'leaflet-',\n\t\t\ttop = classPart + 'top',\n\t\t\tbottom = classPart + 'bottom',\n\t\t\tleft = classPart + 'left',\n\t\t\tright = classPart + 'right',\n\t\t\tcontrolContainer = L.DomUtil.create('div', classPart + 'control-container', this._container);\n\n\t\tif (L.Browser.touch) {\n\t\t\tcontrolContainer.className += ' ' + classPart + 'big-buttons';\n\t\t}\n\n\t\tcorners.topLeft = L.DomUtil.create('div', top + ' ' + left, controlContainer);\n\t\tcorners.topRight = L.DomUtil.create('div', top + ' ' + right, controlContainer);\n\t\tcorners.bottomLeft = L.DomUtil.create('div', bottom + ' ' + left, controlContainer);\n\t\tcorners.bottomRight = L.DomUtil.create('div', bottom + ' ' + right, controlContainer);\n\t}\n});\n\n\n\nL.Control.Zoom = L.Class.extend({\n\tonAdd: function (map) {\n\t\tthis._map = map;\n\t\tthis._container = L.DomUtil.create('div', 'leaflet-control-zoom');\n\n\t\tthis._zoomInButton = this._createButton(\n\t\t\t\t'Zoom in', 'leaflet-control-zoom-in', this._map.zoomIn, this._map);\n\t\tthis._zoomOutButton = this._createButton(\n\t\t\t\t'Zoom out', 'leaflet-control-zoom-out', this._map.zoomOut, this._map);\n\n\t\tthis._container.appendChild(this._zoomInButton);\n\t\tthis._container.appendChild(this._zoomOutButton);\n\t},\n\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\tgetPosition: function () {\n\t\treturn L.Control.Position.TOP_LEFT;\n\t},\n\n\t_createButton: function (title, className, fn, context) {\n\t\tvar link = document.createElement('a');\n\t\tlink.href = '#';\n\t\tlink.title = title;\n\t\tlink.className = className;\n\n\t\tif (!L.Browser.touch) {\n\t\t\tL.DomEvent.disableClickPropagation(link);\n\t\t}\n\t\tL.DomEvent.addListener(link, 'click', L.DomEvent.preventDefault);\n\t\tL.DomEvent.addListener(link, 'click', fn, context);\n\n\t\treturn link;\n\t}\n});\n\n\nL.Control.Attribution = L.Class.extend({\n\tinitialize: function (prefix) {\n\t\tthis._prefix = prefix || 'Powered by <a href=\"http://leaflet.cloudmade.com\">Leaflet</a>';\n\t\tthis._attributions = {};\n\t},\n\n\tonAdd: function (map) {\n\t\tthis._container = L.DomUtil.create('div', 'leaflet-control-attribution');\n\t\tL.DomEvent.disableClickPropagation(this._container);\n\t\tthis._map = map;\n\t\tthis._update();\n\t},\n\n\tgetPosition: function () {\n\t\treturn L.Control.Position.BOTTOM_RIGHT;\n\t},\n\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\tsetPrefix: function (prefix) {\n\t\tthis._prefix = prefix;\n\t\tthis._update();\n\t},\n\n\taddAttribution: function (text) {\n\t\tif (!text) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this._attributions[text]) {\n\t\t\tthis._attributions[text] = 0;\n\t\t}\n\t\tthis._attributions[text]++;\n\t\tthis._update();\n\t},\n\n\tremoveAttribution: function (text) {\n\t\tif (!text) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attributions[text]--;\n\t\tthis._update();\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar attribs = [];\n\n\t\tfor (var i in this._attributions) {\n\t\t\tif (this._attributions.hasOwnProperty(i)) {\n\t\t\t\tattribs.push(i);\n\t\t\t}\n\t\t}\n\n\t\tvar prefixAndAttribs = [];\n\t\tif (this._prefix) {\n\t\t\tprefixAndAttribs.push(this._prefix);\n\t\t}\n\t\tif (attribs.length) {\n\t\t\tprefixAndAttribs.push(attribs.join(', '));\n\t\t}\n\n\t\tthis._container.innerHTML = prefixAndAttribs.join(' &mdash; ');\n\t}\n});\n\n\n\nL.Control.Layers = L.Class.extend({\n\toptions: {\n\t\tcollapsed: true\n\t},\n\n\tinitialize: function (baseLayers, overlays, options) {\n\t\tL.Util.setOptions(this, options);\n\n\t\tthis._layers = {};\n\n\t\tfor (var i in baseLayers) {\n\t\t\tif (baseLayers.hasOwnProperty(i)) {\n\t\t\t\tthis._addLayer(baseLayers[i], i);\n\t\t\t}\n\t\t}\n\n\t\tfor (i in overlays) {\n\t\t\tif (overlays.hasOwnProperty(i)) {\n\t\t\t\tthis._addLayer(overlays[i], i, true);\n\t\t\t}\n\t\t}\n\t},\n\n\tonAdd: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._initLayout();\n\t\tthis._update();\n\t},\n\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\tgetPosition: function () {\n\t\treturn L.Control.Position.TOP_RIGHT;\n\t},\n\n\taddBaseLayer: function (layer, name) {\n\t\tthis._addLayer(layer, name);\n\t\tthis._update();\n\t\treturn this;\n\t},\n\n\taddOverlay: function (layer, name) {\n\t\tthis._addLayer(layer, name, true);\n\t\tthis._update();\n\t\treturn this;\n\t},\n\n\tremoveLayer: function (layer) {\n\t\tvar id = L.Util.stamp(layer);\n\t\tdelete this._layers[id];\n\t\tthis._update();\n\t\treturn this;\n\t},\n\n\t_initLayout: function () {\n\t\tthis._container = L.DomUtil.create('div', 'leaflet-control-layers');\n\t\tif (!L.Browser.touch) {\n\t\t\tL.DomEvent.disableClickPropagation(this._container);\n\t\t}\n\n\t\tthis._form = L.DomUtil.create('form', 'leaflet-control-layers-list');\n\n\t\tif (this.options.collapsed) {\n\t\t\tL.DomEvent.addListener(this._container, 'mouseover', this._expand, this);\n\t\t\tL.DomEvent.addListener(this._container, 'mouseout', this._collapse, this);\n\n\t\t\tvar link = this._layersLink = L.DomUtil.create('a', 'leaflet-control-layers-toggle');\n\t\t\tlink.href = '#';\n\t\t\tlink.title = 'Layers';\n\n\t\t\tif (L.Browser.touch) {\n\t\t\t\tL.DomEvent.addListener(link, 'click', this._expand, this);\n\t\t\t\t//L.DomEvent.disableClickPropagation(link);\n\t\t\t} else {\n\t\t\t\tL.DomEvent.addListener(link, 'focus', this._expand, this);\n\t\t\t}\n\t\t\tthis._map.on('movestart', this._collapse, this);\n\t\t\t// TODO keyboard accessibility\n\n\t\t\tthis._container.appendChild(link);\n\t\t} else {\n\t\t\tthis._expand();\n\t\t}\n\n\t\tthis._baseLayersList = L.DomUtil.create('div', 'leaflet-control-layers-base', this._form);\n\t\tthis._separator = L.DomUtil.create('div', 'leaflet-control-layers-separator', this._form);\n\t\tthis._overlaysList = L.DomUtil.create('div', 'leaflet-control-layers-overlays', this._form);\n\n\t\tthis._container.appendChild(this._form);\n\t},\n\n\t_addLayer: function (layer, name, overlay) {\n\t\tvar id = L.Util.stamp(layer);\n\t\tthis._layers[id] = {\n\t\t\tlayer: layer,\n\t\t\tname: name,\n\t\t\toverlay: overlay\n\t\t};\n\t},\n\n\t_update: function () {\n\t\tif (!this._container) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._baseLayersList.innerHTML = '';\n\t\tthis._overlaysList.innerHTML = '';\n\n\t\tvar baseLayersPresent = false,\n\t\t\toverlaysPresent = false;\n\n\t\tfor (var i in this._layers) {\n\t\t\tif (this._layers.hasOwnProperty(i)) {\n\t\t\t\tvar obj = this._layers[i];\n\t\t\t\tthis._addItem(obj);\n\t\t\t\toverlaysPresent = overlaysPresent || obj.overlay;\n\t\t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\n\t\t\t}\n\t\t}\n\n\t\tthis._separator.style.display = (overlaysPresent && baseLayersPresent ? '' : 'none');\n\t},\n\n\t_addItem: function (obj, onclick) {\n\t\tvar label = document.createElement('label');\n\n\t\tvar input = document.createElement('input');\n\t\tif (!obj.overlay) {\n\t\t\tinput.name = 'leaflet-base-layers';\n\t\t}\n\t\tinput.type = obj.overlay ? 'checkbox' : 'radio';\n\t\tinput.checked = this._map.hasLayer(obj.layer);\n\t\tinput.layerId = L.Util.stamp(obj.layer);\n\n\t\tL.DomEvent.addListener(input, 'click', this._onInputClick, this);\n\n\t\tvar name = document.createTextNode(' ' + obj.name);\n\n\t\tlabel.appendChild(input);\n\t\tlabel.appendChild(name);\n\n\t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\n\t\tcontainer.appendChild(label);\n\t},\n\n\t_onInputClick: function () {\n\t\tvar i, input, obj,\n\t\t\tinputs = this._form.getElementsByTagName('input'),\n\t\t\tinputsLen = inputs.length;\n\n\t\tfor (i = 0; i < inputsLen; i++) {\n\t\t\tinput = inputs[i];\n\t\t\tobj = this._layers[input.layerId];\n\n\t\t\tif (input.checked) {\n\t\t\t\tthis._map.addLayer(obj.layer, !obj.overlay);\n\t\t\t} else {\n\t\t\t\tthis._map.removeLayer(obj.layer);\n\t\t\t}\n\t\t}\n\t},\n\n\t_expand: function () {\n\t\tL.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');\n\t},\n\n\t_collapse: function () {\n\t\tthis._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');\n\t}\n});\n\n\nL.Transition = L.Class.extend({\n\tincludes: L.Mixin.Events,\n\n\tstatics: {\n\t\tCUSTOM_PROPS_SETTERS: {\n\t\t\tposition: L.DomUtil.setPosition\n\t\t\t//TODO transform custom attr\n\t\t},\n\n\t\timplemented: function () {\n\t\t\treturn L.Transition.NATIVE || L.Transition.TIMER;\n\t\t}\n\t},\n\n\toptions: {\n\t\teasing: 'ease',\n\t\tduration: 0.5\n\t},\n\n\t_setProperty: function (prop, value) {\n\t\tvar setters = L.Transition.CUSTOM_PROPS_SETTERS;\n\t\tif (prop in setters) {\n\t\t\tsetters[prop](this._el, value);\n\t\t} else {\n\t\t\tthis._el.style[prop] = value;\n\t\t}\n\t}\n});\n\n\n/*\n * L.Transition native implementation that powers Leaflet animation\n * in browsers that support CSS3 Transitions\n */\n\nL.Transition = L.Transition.extend({\n\tstatics: (function () {\n\t\tvar transition = L.DomUtil.TRANSITION,\n\t\t\ttransitionEnd = (transition === 'webkitTransition' || transition === 'OTransition' ?\n\t\t\t\ttransition + 'End' : 'transitionend');\n\n\t\treturn {\n\t\t\tNATIVE: !!transition,\n\n\t\t\tTRANSITION: transition,\n\t\t\tPROPERTY: transition + 'Property',\n\t\t\tDURATION: transition + 'Duration',\n\t\t\tEASING: transition + 'TimingFunction',\n\t\t\tEND: transitionEnd,\n\n\t\t\t// transition-property value to use with each particular custom property\n\t\t\tCUSTOM_PROPS_PROPERTIES: {\n\t\t\t\tposition: L.Browser.webkit ? L.DomUtil.TRANSFORM : 'top, left'\n\t\t\t}\n\t\t};\n\t}()),\n\n\toptions: {\n\t\tfakeStepInterval: 100\n\t},\n\n\tinitialize: function (/*HTMLElement*/ el, /*Object*/ options) {\n\t\tthis._el = el;\n\t\tL.Util.setOptions(this, options);\n\n\t\tL.DomEvent.addListener(el, L.Transition.END, this._onTransitionEnd, this);\n\t\tthis._onFakeStep = L.Util.bind(this._onFakeStep, this);\n\t},\n\n\trun: function (/*Object*/ props) {\n\t\tvar prop,\n\t\t\tpropsList = [],\n\t\t\tcustomProp = L.Transition.CUSTOM_PROPS_PROPERTIES;\n\n\t\tfor (prop in props) {\n\t\t\tif (props.hasOwnProperty(prop)) {\n\t\t\t\tprop = customProp[prop] ? customProp[prop] : prop;\n\t\t\t\tprop = this._dasherize(prop);\n\t\t\t\tpropsList.push(prop);\n\t\t\t}\n\t\t}\n\n\t\tthis._el.style[L.Transition.DURATION] = this.options.duration + 's';\n\t\tthis._el.style[L.Transition.EASING] = this.options.easing;\n\t\tthis._el.style[L.Transition.PROPERTY] = propsList.join(', ');\n\n\t\tfor (prop in props) {\n\t\t\tif (props.hasOwnProperty(prop)) {\n\t\t\t\tthis._setProperty(prop, props[prop]);\n\t\t\t}\n\t\t}\n\n\t\tthis._inProgress = true;\n\n\t\tthis.fire('start');\n\n\t\tif (L.Transition.NATIVE) {\n\t\t\tclearInterval(this._timer);\n\t\t\tthis._timer = setInterval(this._onFakeStep, this.options.fakeStepInterval);\n\t\t} else {\n\t\t\tthis._onTransitionEnd();\n\t\t}\n\t},\n\n\t_dasherize: (function () {\n\t\tvar re = /([A-Z])/g;\n\n\t\tfunction replaceFn(w) {\n\t\t\treturn '-' + w.toLowerCase();\n\t\t}\n\n\t\treturn function (str) {\n\t\t\treturn str.replace(re, replaceFn);\n\t\t};\n\t}()),\n\n\t_onFakeStep: function () {\n\t\tthis.fire('step');\n\t},\n\n\t_onTransitionEnd: function () {\n\t\tif (this._inProgress) {\n\t\t\tthis._inProgress = false;\n\t\t\tclearInterval(this._timer);\n\n\t\t\tthis._el.style[L.Transition.PROPERTY] = 'none';\n\n\t\t\tthis.fire('step');\n\t\t\tthis.fire('end');\n\t\t}\n\t}\n});\n\n\n/*\n * L.Transition fallback implementation that powers Leaflet animation\n * in browsers that don't support CSS3 Transitions\n */\n\nL.Transition = L.Transition.NATIVE ? L.Transition : L.Transition.extend({\n\tstatics: {\n\t\tgetTime: Date.now || function () {\n\t\t\treturn +new Date();\n\t\t},\n\n\t\tTIMER: true,\n\n\t\tEASINGS: {\n\t\t\t'ease': [0.25, 0.1, 0.25, 1.0],\n\t\t\t'linear': [0.0, 0.0, 1.0, 1.0],\n\t\t\t'ease-in': [0.42, 0, 1.0, 1.0],\n\t\t\t'ease-out': [0, 0, 0.58, 1.0],\n\t\t\t'ease-in-out': [0.42, 0, 0.58, 1.0]\n\t\t},\n\n\t\tCUSTOM_PROPS_GETTERS: {\n\t\t\tposition: L.DomUtil.getPosition\n\t\t},\n\n\t\t//used to get units from strings like \"10.5px\" (->px)\n\t\tUNIT_RE: /^[\\d\\.]+(\\D*)$/\n\t},\n\n\toptions: {\n\t\tfps: 50\n\t},\n\n\tinitialize: function (el, options) {\n\t\tthis._el = el;\n\t\tL.Util.extend(this.options, options);\n\n\t\tvar easings = L.Transition.EASINGS[this.options.easing] || L.Transition.EASINGS.ease;\n\n\t\tthis._p1 = new L.Point(0, 0);\n\t\tthis._p2 = new L.Point(easings[0], easings[1]);\n\t\tthis._p3 = new L.Point(easings[2], easings[3]);\n\t\tthis._p4 = new L.Point(1, 1);\n\n\t\tthis._step = L.Util.bind(this._step, this);\n\t\tthis._interval = Math.round(1000 / this.options.fps);\n\t},\n\n\trun: function (props) {\n\t\tthis._props = {};\n\n\t\tvar getters = L.Transition.CUSTOM_PROPS_GETTERS,\n\t\t\tre = L.Transition.UNIT_RE;\n\n\t\tthis.fire('start');\n\n\t\tfor (var prop in props) {\n\t\t\tif (props.hasOwnProperty(prop)) {\n\t\t\t\tvar p = {};\n\t\t\t\tif (prop in getters) {\n\t\t\t\t\tp.from = getters[prop](this._el);\n\t\t\t\t} else {\n\t\t\t\t\tvar matches = this._el.style[prop].match(re);\n\t\t\t\t\tp.from = parseFloat(matches[0]);\n\t\t\t\t\tp.unit = matches[1];\n\t\t\t\t}\n\t\t\t\tp.to = props[prop];\n\t\t\t\tthis._props[prop] = p;\n\t\t\t}\n\t\t}\n\n\t\tclearInterval(this._timer);\n\t\tthis._timer = setInterval(this._step, this._interval);\n\t\tthis._startTime = L.Transition.getTime();\n\t},\n\n\t_step: function () {\n\t\tvar time = L.Transition.getTime(),\n\t\t\telapsed = time - this._startTime,\n\t\t\tduration = this.options.duration * 1000;\n\n\t\tif (elapsed < duration) {\n\t\t\tthis._runFrame(this._cubicBezier(elapsed / duration));\n\t\t} else {\n\t\t\tthis._runFrame(1);\n\t\t\tthis._complete();\n\t\t}\n\t},\n\n\t_runFrame: function (percentComplete) {\n\t\tvar setters = L.Transition.CUSTOM_PROPS_SETTERS,\n\t\t\tprop, p, value;\n\n\t\tfor (prop in this._props) {\n\t\t\tif (this._props.hasOwnProperty(prop)) {\n\t\t\t\tp = this._props[prop];\n\t\t\t\tif (prop in setters) {\n\t\t\t\t\tvalue = p.to.subtract(p.from).multiplyBy(percentComplete).add(p.from);\n\t\t\t\t\tsetters[prop](this._el, value);\n\t\t\t\t} else {\n\t\t\t\t\tthis._el.style[prop] =\n\t\t\t\t\t\t\t((p.to - p.from) * percentComplete + p.from) + p.unit;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.fire('step');\n\t},\n\n\t_complete: function () {\n\t\tclearInterval(this._timer);\n\t\tthis.fire('end');\n\t},\n\n\t_cubicBezier: function (t) {\n\t\tvar a = Math.pow(1 - t, 3),\n\t\t\tb = 3 * Math.pow(1 - t, 2) * t,\n\t\t\tc = 3 * (1 - t) * Math.pow(t, 2),\n\t\t\td = Math.pow(t, 3),\n\t\t\tp1 = this._p1.multiplyBy(a),\n\t\t\tp2 = this._p2.multiplyBy(b),\n\t\t\tp3 = this._p3.multiplyBy(c),\n\t\t\tp4 = this._p4.multiplyBy(d);\n\n\t\treturn p1.add(p2).add(p3).add(p4).y;\n\t}\n});\n\n\nL.Map.include(!(L.Transition && L.Transition.implemented()) ? {} : {\n\tsetView: function (center, zoom, forceReset) {\n\t\tzoom = this._limitZoom(zoom);\n\t\tvar zoomChanged = (this._zoom !== zoom);\n\n\t\tif (this._loaded && !forceReset && this._layers) {\n\t\t\t// difference between the new and current centers in pixels\n\t\t\tvar offset = this._getNewTopLeftPoint(center).subtract(this._getTopLeftPoint());\n\n\t\t\tcenter = new L.LatLng(center.lat, center.lng);\n\n\t\t\tvar done = (zoomChanged ?\n\t\t\t\t\t\t!!this._zoomToIfCenterInView && this._zoomToIfCenterInView(center, zoom, offset) :\n\t\t\t\t\t\tthis._panByIfClose(offset));\n\n\t\t\t// exit if animated pan or zoom started\n\t\t\tif (done) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\n\t\t// reset the map view\n\t\tthis._resetView(center, zoom);\n\n\t\treturn this;\n\t},\n\n\tpanBy: function (offset) {\n\t\tif (!(offset.x || offset.y)) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (!this._panTransition) {\n\t\t\tthis._panTransition = new L.Transition(this._mapPane, {duration: 0.3});\n\n\t\t\tthis._panTransition.on('step', this._onPanTransitionStep, this);\n\t\t\tthis._panTransition.on('end', this._onPanTransitionEnd, this);\n\t\t}\n\t\tthis.fire('movestart');\n\n\t\tthis._panTransition.run({\n\t\t\tposition: L.DomUtil.getPosition(this._mapPane).subtract(offset)\n\t\t});\n\n\t\treturn this;\n\t},\n\n\t_onPanTransitionStep: function () {\n\t\tthis.fire('move');\n\t},\n\n\t_onPanTransitionEnd: function () {\n\t\tthis.fire('moveend');\n\t},\n\n\t_panByIfClose: function (offset) {\n\t\tif (this._offsetIsWithinView(offset)) {\n\t\t\tthis.panBy(offset);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\t_offsetIsWithinView: function (offset, multiplyFactor) {\n\t\tvar m = multiplyFactor || 1,\n\t\t\tsize = this.getSize();\n\t\treturn (Math.abs(offset.x) <= size.x * m) &&\n\t\t\t\t(Math.abs(offset.y) <= size.y * m);\n\t}\n});\n\n\nL.Map.include(!L.DomUtil.TRANSITION ? {} : {\n\t_zoomToIfCenterInView: function (center, zoom, centerOffset) {\n\n\t\tif (this._animatingZoom) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!this.options.zoomAnimation) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar zoomDelta = zoom - this._zoom,\n\t\t\tscale = Math.pow(2, zoomDelta),\n\t\t\toffset = centerOffset.divideBy(1 - 1 / scale);\n\n\t\t//if offset does not exceed half of the view\n\t\tif (!this._offsetIsWithinView(offset, 1)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._mapPane.className += ' leaflet-zoom-anim';\n\n        this\n\t\t\t.fire('movestart')\n\t\t\t.fire('zoomstart');\n\n\t\tvar centerPoint = this.containerPointToLayerPoint(this.getSize().divideBy(2)),\n\t\t\torigin = centerPoint.add(offset);\n\n\t\tthis._prepareTileBg();\n\n\t\tthis._runAnimation(center, zoom, scale, origin);\n\n\t\treturn true;\n\t},\n\n\n\t_runAnimation: function (center, zoom, scale, origin) {\n\t\tthis._animatingZoom = true;\n\n\t\tthis._animateToCenter = center;\n\t\tthis._animateToZoom = zoom;\n\n\t\tvar transform = L.DomUtil.TRANSFORM;\n\n\t\tclearTimeout(this._clearTileBgTimer);\n\n\t\t//dumb FireFox hack, I have no idea why this magic zero translate fixes the scale transition problem\n\t\tif (L.Browser.gecko || window.opera) {\n\t\t\tthis._tileBg.style[transform] += ' translate(0,0)';\n\t\t}\n\n\t\tvar scaleStr;\n\n\t\t// Android doesn't like translate/scale chains, transformOrigin + scale works better but\n\t\t// it breaks touch zoom which Anroid doesn't support anyway, so that's a really ugly hack\n\t\t// TODO work around this prettier\n\t\tif (L.Browser.android) {\n\t\t\tthis._tileBg.style[transform + 'Origin'] = origin.x + 'px ' + origin.y + 'px';\n\t\t\tscaleStr = 'scale(' + scale + ')';\n\t\t} else {\n\t\t\tscaleStr = L.DomUtil.getScaleString(scale, origin);\n\t\t}\n\n\t\tL.Util.falseFn(this._tileBg.offsetWidth); //hack to make sure transform is updated before running animation\n\n\t\tvar options = {};\n\t\toptions[transform] = this._tileBg.style[transform] + ' ' + scaleStr;\n\t\tthis._tileBg.transition.run(options);\n\t},\n\n\t_prepareTileBg: function () {\n\t\tif (!this._tileBg) {\n\t\t\tthis._tileBg = this._createPane('leaflet-tile-pane', this._mapPane);\n\t\t\tthis._tileBg.style.zIndex = 1;\n\t\t}\n\n\t\tvar tilePane = this._tilePane,\n\t\t\ttileBg = this._tileBg;\n\n\t\t// prepare the background pane to become the main tile pane\n\t\t//tileBg.innerHTML = '';\n\t\ttileBg.style[L.DomUtil.TRANSFORM] = '';\n\t\ttileBg.style.visibility = 'hidden';\n\n\t\t// tells tile layers to reinitialize their containers\n\t\ttileBg.empty = true;\n\t\ttilePane.empty = false;\n\n\t\tthis._tilePane = this._panes.tilePane = tileBg;\n\t\tthis._tileBg = tilePane;\n\n\t\tif (!this._tileBg.transition) {\n\t\t\tthis._tileBg.transition = new L.Transition(this._tileBg, {duration: 0.3, easing: 'cubic-bezier(0.25,0.1,0.25,0.75)'});\n\t\t\tthis._tileBg.transition.on('end', this._onZoomTransitionEnd, this);\n\t\t}\n\n\t\tthis._stopLoadingBgTiles();\n\t},\n\n\t// stops loading all tiles in the background layer\n\t_stopLoadingBgTiles: function () {\n\t\tvar tiles = [].slice.call(this._tileBg.getElementsByTagName('img'));\n\n\t\tfor (var i = 0, len = tiles.length; i < len; i++) {\n\t\t\tif (!tiles[i].complete) {\n\t\t\t\ttiles[i].onload = L.Util.falseFn;\n\t\t\t\ttiles[i].onerror = L.Util.falseFn;\n\t\t\t\ttiles[i].src = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\n\t\t\t\ttiles[i].parentNode.removeChild(tiles[i]);\n\t\t\t\ttiles[i] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\t_onZoomTransitionEnd: function () {\n\t\tthis._restoreTileFront();\n\n\t\tL.Util.falseFn(this._tileBg.offsetWidth);\n\t\tthis._resetView(this._animateToCenter, this._animateToZoom, true, true);\n\n\t\tthis._mapPane.className = this._mapPane.className.replace(' leaflet-zoom-anim', ''); //TODO toggleClass util\n\t\tthis._animatingZoom = false;\n\t},\n\n\t_restoreTileFront: function () {\n\t\tthis._tilePane.innerHTML = '';\n\t\tthis._tilePane.style.visibility = '';\n\t\tthis._tilePane.style.zIndex = 2;\n\t\tthis._tileBg.style.zIndex = 1;\n\t},\n\n\t_clearTileBg: function () {\n\t\tif (!this._animatingZoom && !this.touchZoom._zooming) {\n\t\t\tthis._tileBg.innerHTML = '';\n\t\t}\n\t}\n});\n\n\n/*\n * Provides L.Map with convenient shortcuts for W3C geolocation.\n */\n\nL.Map.include({\n\tlocate: function (/*Object*/ options) {\n\n\t\tthis._locationOptions = options = L.Util.extend({\n\t\t\twatch: false,\n\t\t\tsetView: false,\n\t\t\tmaxZoom: Infinity,\n\t\t\ttimeout: 10000,\n\t\t\tmaximumAge: 0,\n\t\t\tenableHighAccuracy: false\n\t\t}, options);\n\n\t\tif (!navigator.geolocation) {\n\t\t\treturn this.fire('locationerror', {\n\t\t\t\tcode: 0,\n\t\t\t\tmessage: \"Geolocation not supported.\"\n\t\t\t});\n\t\t}\n\n\t\tvar onResponse = L.Util.bind(this._handleGeolocationResponse, this),\n\t\t\tonError = L.Util.bind(this._handleGeolocationError, this);\n\n\t\tif (options.watch) {\n\t\t\tthis._locationWatchId = navigator.geolocation.watchPosition(onResponse, onError, options);\n\t\t} else {\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\n\t\t}\n\t\treturn this;\n\t},\n\n\tstopLocate: function () {\n\t\tif (navigator.geolocation) {\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\n\t\t}\n\t},\n\n\tlocateAndSetView: function (maxZoom, options) {\n\t\toptions = L.Util.extend({\n\t\t\tmaxZoom: maxZoom || Infinity,\n\t\t\tsetView: true\n\t\t}, options);\n\t\treturn this.locate(options);\n\t},\n\n\t_handleGeolocationError: function (error) {\n\t\tvar c = error.code,\n\t\t\tmessage = (c === 1 ? \"permission denied\" :\n\t\t\t\t(c === 2 ? \"position unavailable\" : \"timeout\"));\n\n\t\tif (this._locationOptions.setView && !this._loaded) {\n\t\t\tthis.fitWorld();\n\t\t}\n\n\t\tthis.fire('locationerror', {\n\t\t\tcode: c,\n\t\t\tmessage: \"Geolocation error: \" + message + \".\"\n\t\t});\n\t},\n\n\t_handleGeolocationResponse: function (pos) {\n\t\tvar latAccuracy = 180 * pos.coords.accuracy / 4e7,\n\t\t\tlngAccuracy = latAccuracy * 2,\n\t\t\tlat = pos.coords.latitude,\n\t\t\tlng = pos.coords.longitude,\n\t\t\tlatlng = new L.LatLng(lat, lng);\n\n\t\tvar sw = new L.LatLng(lat - latAccuracy, lng - lngAccuracy),\n\t\t\tne = new L.LatLng(lat + latAccuracy, lng + lngAccuracy),\n\t\t\tbounds = new L.LatLngBounds(sw, ne);\n\n\t\tif (this._locationOptions.setView) {\n\t\t\tvar zoom = Math.min(this.getBoundsZoom(bounds), this._locationOptions.maxZoom);\n\t\t\tthis.setView(latlng, zoom);\n\t\t}\n\n\t\tthis.fire('locationfound', {\n\t\t\tlatlng: latlng,\n\t\t\tbounds: bounds,\n\t\t\taccuracy: pos.coords.accuracy\n\t\t});\n\t}\n});\n\n\n"
  },
  {
    "path": "source/js/Core/Library/bootstrap-tooltip.js",
    "content": "/* ===========================================================\n * bootstrap-tooltip.js v2.0.1\n * http://twitter.github.com/bootstrap/javascript.html#tooltips\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ===========================================================\n * Copyright 2012 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n!function( $ ) {\n\n  \"use strict\"\n\n /* TOOLTIP PUBLIC CLASS DEFINITION\n  * =============================== */\n\n  var Tooltip = function ( element, options ) {\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.prototype = {\n\n    constructor: Tooltip\n\n  , init: function ( type, element, options ) {\n      var eventIn\n        , eventOut\n\n      this.type = type\n      this.$element = $(element)\n      this.options = this.getOptions(options)\n      this.enabled = true\n\n      if (this.options.trigger != 'manual') {\n        eventIn  = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'\n        eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'\n        this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))\n      }\n\n      this.options.selector ?\n        (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n        this.fixTitle()\n    }\n\n  , getOptions: function ( options ) {\n      options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())\n\n      if (options.delay && typeof options.delay == 'number') {\n        options.delay = {\n          show: options.delay\n        , hide: options.delay\n        }\n      }\n\n      return options\n    }\n\n  , enter: function ( e ) {\n      var self = $(e.currentTarget)[this.type](this._options).data(this.type)\n\n      if (!self.options.delay || !self.options.delay.show) {\n        self.show()\n      } else {\n        self.hoverState = 'in'\n        setTimeout(function() {\n          if (self.hoverState == 'in') {\n            self.show()\n          }\n        }, self.options.delay.show)\n      }\n    }\n\n  , leave: function ( e ) {\n      var self = $(e.currentTarget)[this.type](this._options).data(this.type)\n\n      if (!self.options.delay || !self.options.delay.hide) {\n        self.hide()\n      } else {\n        self.hoverState = 'out'\n        setTimeout(function() {\n          if (self.hoverState == 'out') {\n            self.hide()\n          }\n        }, self.options.delay.hide)\n      }\n    }\n\n  , show: function () {\n      var $tip\n        , inside\n        , pos\n        , actualWidth\n        , actualHeight\n        , placement\n        , tp\n\n      if (this.hasContent() && this.enabled) {\n        $tip = this.tip()\n        this.setContent()\n\n        if (this.options.animation) {\n          $tip.addClass('fade')\n        }\n\n        placement = typeof this.options.placement == 'function' ?\n          this.options.placement.call(this, $tip[0], this.$element[0]) :\n          this.options.placement\n\n        inside = /in/.test(placement)\n\n        $tip\n          .remove()\n          .css({ top: 0, left: 0, display: 'block' })\n          .appendTo(inside ? this.$element : document.body)\n\n        pos = this.getPosition(inside)\n\n        actualWidth = $tip[0].offsetWidth\n        actualHeight = $tip[0].offsetHeight\n\n        switch (inside ? placement.split(' ')[1] : placement) {\n          case 'bottom':\n            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}\n            break\n          case 'top':\n            tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}\n            break\n          case 'left':\n            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}\n            break\n          case 'right':\n            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}\n            break\n        }\n\n        $tip\n          .css(tp)\n          .addClass(placement)\n          .addClass('in')\n      }\n    }\n\n  , setContent: function () {\n      var $tip = this.tip()\n      $tip.find('.timeline-tooltip-inner').html(this.getTitle())\n      $tip.removeClass('fade in top bottom left right')\n    }\n\n  , hide: function () {\n      var that = this\n        , $tip = this.tip()\n\n      $tip.removeClass('in')\n\n      function removeWithAnimation() {\n        var timeout = setTimeout(function () {\n          $tip.off($.support.transition.end).remove()\n        }, 500)\n\n        $tip.one($.support.transition.end, function () {\n          clearTimeout(timeout)\n          $tip.remove()\n        })\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        removeWithAnimation() :\n        $tip.remove()\n    }\n\n  , fixTitle: function () {\n      var $e = this.$element\n      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\n        $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')\n      }\n    }\n\n  , hasContent: function () {\n      return this.getTitle()\n    }\n\n  , getPosition: function (inside) {\n      return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {\n        width: this.$element[0].offsetWidth\n      , height: this.$element[0].offsetHeight\n      })\n    }\n\n  , getTitle: function () {\n      var title\n        , $e = this.$element\n        , o = this.options\n\n      title = $e.attr('data-original-title')\n        || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n      title = title.toString().replace(/(^\\s*|\\s*$)/, \"\")\n\n      return title\n    }\n\n  , tip: function () {\n      return this.$tip = this.$tip || $(this.options.template)\n    }\n\n  , validate: function () {\n      if (!this.$element[0].parentNode) {\n        this.hide()\n        this.$element = null\n        this.options = null\n      }\n    }\n\n  , enable: function () {\n      this.enabled = true\n    }\n\n  , disable: function () {\n      this.enabled = false\n    }\n\n  , toggleEnabled: function () {\n      this.enabled = !this.enabled\n    }\n\n  , toggle: function () {\n      this[this.tip().hasClass('in') ? 'hide' : 'show']()\n    }\n\n  }\n\n\n /* TOOLTIP PLUGIN DEFINITION\n  * ========================= */\n\n  $.fn.tooltip = function ( option ) {\n    return this.each(function () {\n      var $this = $(this)\n        , data = $this.data('tooltip')\n        , options = typeof option == 'object' && option\n      if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tooltip.Constructor = Tooltip\n\n  $.fn.tooltip.defaults = {\n    animation: true\n  , delay: 0\n  , selector: false\n  , placement: 'top'\n  , trigger: 'hover'\n  , title: ''\n  , template: '<div class=\"timeline-tooltip\"><div class=\"timeline-tooltip-arrow\"></div><div class=\"timeline-tooltip-inner\"></div></div>'\n  }\n\n}( window.jQuery );"
  },
  {
    "path": "source/js/Core/Library/jQuery/easing.js",
    "content": "/*\n * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/\n *\n * Uses the built in easing capabilities added In jQuery 1.1\n * to offer multiple easing options\n *\n * TERMS OF USE - jQuery Easing\n * \n * Open source under the BSD License. \n * \n * Copyright Â© 2008 George McGinley Smith\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification, \n * are permitted provided that the following conditions are met:\n * \n * Redistributions of source code must retain the above copyright notice, this list of \n * conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list \n * of conditions and the following disclaimer in the documentation and/or other materials \n * provided with the distribution.\n * \n * Neither the name of the author nor the names of contributors may be used to endorse \n * or promote products derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n * OF THE POSSIBILITY OF SUCH DAMAGE. \n *\n*/\n\n// t: current time, b: begInnIng value, c: change In value, d: duration\njQuery.easing['jswing'] = jQuery.easing['swing'];\n\njQuery.extend( jQuery.easing,\n{\n\tdef: 'easeOutQuad',\n\tswing: function (x, t, b, c, d) {\n\t\t//alert(jQuery.easing.default);\n\t\treturn jQuery.easing[jQuery.easing.def](x, t, b, c, d);\n\t},\n\teaseInQuad: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t + b;\n\t},\n\teaseOutQuad: function (x, t, b, c, d) {\n\t\treturn -c *(t/=d)*(t-2) + b;\n\t},\n\teaseInOutQuad: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t + b;\n\t\treturn -c/2 * ((--t)*(t-2) - 1) + b;\n\t},\n\teaseInCubic: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t*t + b;\n\t},\n\teaseOutCubic: function (x, t, b, c, d) {\n\t\treturn c*((t=t/d-1)*t*t + 1) + b;\n\t},\n\teaseInOutCubic: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t + b;\n\t\treturn c/2*((t-=2)*t*t + 2) + b;\n\t},\n\teaseInQuart: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t*t*t + b;\n\t},\n\teaseOutQuart: function (x, t, b, c, d) {\n\t\treturn -c * ((t=t/d-1)*t*t*t - 1) + b;\n\t},\n\teaseInOutQuart: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t*t + b;\n\t\treturn -c/2 * ((t-=2)*t*t*t - 2) + b;\n\t},\n\teaseInQuint: function (x, t, b, c, d) {\n\t\treturn c*(t/=d)*t*t*t*t + b;\n\t},\n\teaseOutQuint: function (x, t, b, c, d) {\n\t\treturn c*((t=t/d-1)*t*t*t*t + 1) + b;\n\t},\n\teaseInOutQuint: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;\n\t\treturn c/2*((t-=2)*t*t*t*t + 2) + b;\n\t},\n\teaseInSine: function (x, t, b, c, d) {\n\t\treturn -c * Math.cos(t/d * (Math.PI/2)) + c + b;\n\t},\n\teaseOutSine: function (x, t, b, c, d) {\n\t\treturn c * Math.sin(t/d * (Math.PI/2)) + b;\n\t},\n\teaseInOutSine: function (x, t, b, c, d) {\n\t\treturn -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;\n\t},\n\teaseInExpo: function (x, t, b, c, d) {\n\t\treturn (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\n\t},\n\teaseOutExpo: function (x, t, b, c, d) {\n\t\treturn (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n\t},\n\teaseInOutExpo: function (x, t, b, c, d) {\n\t\tif (t==0) return b;\n\t\tif (t==d) return b+c;\n\t\tif ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;\n\t\treturn c/2 * (-Math.pow(2, -10 * --t) + 2) + b;\n\t},\n\teaseInCirc: function (x, t, b, c, d) {\n\t\treturn -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;\n\t},\n\teaseOutCirc: function (x, t, b, c, d) {\n\t\treturn c * Math.sqrt(1 - (t=t/d-1)*t) + b;\n\t},\n\teaseInOutCirc: function (x, t, b, c, d) {\n\t\tif ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;\n\t\treturn c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;\n\t},\n\teaseInElastic: function (x, t, b, c, d) {\n\t\tvar s=1.70158;var p=0;var a=c;\n\t\tif (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\n\t\treturn -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\n\t},\n\teaseOutElastic: function (x, t, b, c, d) {\n\t\tvar s=1.70158;var p=0;var a=c;\n\t\tif (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\n\t\treturn a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;\n\t},\n\teaseInOutElastic: function (x, t, b, c, d) {\n\t\tvar s=1.70158;var p=0;var a=c;\n\t\tif (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);\n\t\tif (a < Math.abs(c)) { a=c; var s=p/4; }\n\t\telse var s = p/(2*Math.PI) * Math.asin (c/a);\n\t\tif (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\n\t\treturn a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;\n\t},\n\teaseInBack: function (x, t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158;\n\t\treturn c*(t/=d)*t*((s+1)*t - s) + b;\n\t},\n\teaseOutBack: function (x, t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158;\n\t\treturn c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\n\t},\n\teaseInOutBack: function (x, t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158; \n\t\tif ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;\n\t\treturn c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;\n\t},\n\teaseInBounce: function (x, t, b, c, d) {\n\t\treturn c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;\n\t},\n\teaseOutBounce: function (x, t, b, c, d) {\n\t\tif ((t/=d) < (1/2.75)) {\n\t\t\treturn c*(7.5625*t*t) + b;\n\t\t} else if (t < (2/2.75)) {\n\t\t\treturn c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;\n\t\t} else if (t < (2.5/2.75)) {\n\t\t\treturn c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;\n\t\t} else {\n\t\t\treturn c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;\n\t\t}\n\t},\n\teaseInOutBounce: function (x, t, b, c, d) {\n\t\tif (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;\n\t\treturn jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;\n\t}\n});\n\n/*\n *\n * TERMS OF USE - EASING EQUATIONS\n * \n * Open source under the BSD License. \n * \n * Copyright Â© 2001 Robert Penner\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification, \n * are permitted provided that the following conditions are met:\n * \n * Redistributions of source code must retain the above copyright notice, this list of \n * conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list \n * of conditions and the following disclaimer in the documentation and/or other materials \n * provided with the distribution.\n * \n * Neither the name of the author nor the names of contributors may be used to endorse \n * or promote products derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY \n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED \n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED \n * OF THE POSSIBILITY OF SUCH DAMAGE. \n *\n */"
  },
  {
    "path": "source/js/Core/Media/VMM.ExternalAPI.js",
    "content": "/* External API\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.ExternalAPI == 'undefined') {\n\t\n\tVMM.ExternalAPI = ({\n\t\t\n\t\tkeys: {\n\t\t\tgoogle:\t\t\t\t\"\",\n\t\t\tflickr:\t\t\t\t\"\",\n\t\t\ttwitter:\t\t\t\"\"\n\t\t},\n\t\t\n\t\tkeys_master: {\n\t\t\tvp:\t\t\t\"Pellentesque nibh felis, eleifend id, commodo in, interdum vitae, leo\",\n\t\t\tflickr:\t\t\"RAIvxHY4hE/Elm5cieh4X5ptMyDpj7MYIxziGxi0WGCcy1s+yr7rKQ==\",\n\t\t\tgoogle:\t\t\"jwNGnYw4hE9lmAez4ll0QD+jo6SKBJFknkopLS4FrSAuGfIwyj57AusuR0s8dAo=\",\n\t\t\ttwitter:\t\"\"\n\t\t},\n\t\t\n\t\tinit: function() {\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\tsetKeys: function(d) {\n\t\t\tVMM.ExternalAPI.keys\t= d;\n\t\t},\n\t\t\n\t\tpushQues: function() {\n\t\t\t\n\t\t\tif (VMM.master_config.googlemaps.active) {\n\t\t\t\tVMM.ExternalAPI.googlemaps.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.youtube.active) {\n\t\t\t\tVMM.ExternalAPI.youtube.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.soundcloud.active) {\n\t\t\t\tVMM.ExternalAPI.soundcloud.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.googledocs.active) {\n\t\t\t\tVMM.ExternalAPI.googledocs.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.googleplus.active) {\n\t\t\t\tVMM.ExternalAPI.googleplus.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.wikipedia.active) {\n\t\t\t\tVMM.ExternalAPI.wikipedia.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.vimeo.active) {\n\t\t\t\tVMM.ExternalAPI.vimeo.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.vine.active) {\n\t\t\t\tVMM.ExternalAPI.vine.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.twitter.active) {\n\t\t\t\tVMM.ExternalAPI.twitter.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.flickr.active) {\n\t\t\t\tVMM.ExternalAPI.flickr.pushQue();\n\t\t\t}\n\t\t\tif (VMM.master_config.webthumb.active) {\n\t\t\t\tVMM.ExternalAPI.webthumb.pushQue();\n\t\t\t}\n\t\t},\n\t\t\n\t\ttwitter: {\n\t\t\ttweetArray: [],\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tvar tweet = {mid: m.id, id: m.uid};\n\t\t\t\tVMM.master_config.twitter.que.push(tweet);\n\t\t\t\tVMM.master_config.twitter.active = true;\n\t\t\t\t//VMM.master_config.api.pushques.push(VMM.ExternalAPI.twitter.pushQue);\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(tweet, callback) {\n\t\t\t\t\n\t\t\t\tvar id\t\t\t\t= tweet.mid.toString(),\n\t\t\t\t\terror_obj\t\t= { twitterid: tweet.mid },\n\t\t\t\t\tthe_url\t\t\t= \"//api.twitter.com/1/statuses/show.json?id=\" + tweet.mid + \"&include_entities=true&callback=?\";\n\t\t\t\t\t//twitter_timeout\t= setTimeout(VMM.ExternalAPI.twitter.errorTimeOut, VMM.master_config.timers.api, tweet),\n\t\t\t\t\t//callback_timeout= setTimeout(callback, VMM.master_config.timers.api, tweet);\n\t\t\t\t\n\t\t\t\tVMM.ExternalAPI.twitter.getOEmbed(tweet, callback);\n\t\t\t\t\n\t\t\t\t/*\n\t\t\t\t// Disabled thanks to twitter's new api\n\t\t\t\t\n\t\t\t\tVMM.getJSON(the_url, function(d) {\n\t\t\t\t\tvar id\t\t= d.id_str,\n\t\t\t\t\t\ttwit\t= \"<blockquote><p>\",\n\t\t\t\t\t\ttd\t\t= VMM.Util.linkify_with_twitter(d.text, \"_blank\");\n\t\t\t\t\t\n\t\t\t\t\t//\tTWEET CONTENT\t\n\t\t\t\t\ttwit += td;\n\t\t\t\t\ttwit += \"</p></blockquote>\";\n\t\t\t\t\t\n\t\t\t\t\t//\tTWEET MEDIA\n\t\t\t\t\tif (typeof d.entities.media != 'undefined') {\n\t\t\t\t\t\tif (d.entities.media[0].type == \"photo\") {\n\t\t\t\t\t\t\t//twit += \"<img src=' \" + d.entities.media[0].media_url + \"'  alt=''>\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//\tTWEET AUTHOR\n\t\t\t\t\ttwit += \"<div class='vcard author'>\";\n\t\t\t\t\ttwit += \"<a class='screen-name url' href='https://twitter.com/\" + d.user.screen_name + \"' data-screen-name='\" + d.user.screen_name + \"' target='_blank'>\";\n\t\t\t\t\ttwit += \"<span class='avatar'><img src=' \" + d.user.profile_image_url + \"'  alt=''></span>\";\n\t\t\t\t\ttwit += \"<span class='fn'>\" + d.user.name + \"</span>\";\n\t\t\t\t\ttwit += \"<span class='nickname'>@\" + d.user.screen_name + \"<span class='thumbnail-inline'></span></span>\";\n\t\t\t\t\ttwit += \"</a>\";\n\t\t\t\t\ttwit += \"</div>\";\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tVMM.attachElement(\"#\"+tweet.id.toString(), twit );\n\t\t\t\t\tVMM.attachElement(\"#text_thumb_\"+tweet.id.toString(), d.text );\n\t\t\t\t\tVMM.attachElement(\"#marker_content_\" + tweet.id.toString(), d.text );\n\t\t\t\t\t\n\t\t\t\t})\n\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\ttrace(\"TWITTER error\");\n\t\t\t\t\ttrace(\"TWITTER ERROR: \" + textStatus + \" \" + jqXHR.responseText);\n\t\t\t\t\tVMM.attachElement(\"#\"+tweet.id, VMM.MediaElement.loadingmessage(\"ERROR LOADING TWEET \" + tweet.mid) );\n\t\t\t\t})\n\t\t\t\t.success(function(d) {\n\t\t\t\t\tclearTimeout(twitter_timeout);\n\t\t\t\t\tclearTimeout(callback_timeout);\n\t\t\t\t\tcallback();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t*/\n\t\t\t},\n\t\t\t\n\t\t\terrorTimeOut: function(tweet) {\n\t\t\t\ttrace(\"TWITTER JSON ERROR TIMEOUT \" + tweet.mid);\n\t\t\t\tVMM.attachElement(\"#\"+tweet.id.toString(), VMM.MediaElement.loadingmessage(\"Still waiting on Twitter: \" + tweet.mid) );\n\t\t\t\t// CHECK RATE STATUS\n\t\t\t\tVMM.getJSON(\"//api.twitter.com/1/account/rate_limit_status.json\", function(d) {\n\t\t\t\t\ttrace(\"REMAINING TWITTER API CALLS \" + d.remaining_hits);\n\t\t\t\t\ttrace(\"TWITTER RATE LIMIT WILL RESET AT \" + d.reset_time);\n\t\t\t\t\tvar mes = \"\";\n\t\t\t\t\tif (d.remaining_hits == 0) {\n\t\t\t\t\t\tmes\t\t= \t\"<p>You've reached the maximum number of tweets you can load in an hour.</p>\";\n\t\t\t\t\t\tmes \t+=\t\"<p>You can view tweets again starting at: <br/>\" + d.reset_time + \"</p>\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmes\t\t=\t\"<p>Still waiting on Twitter. \" + tweet.mid + \"</p>\";\n\t\t\t\t\t\t//mes \t= \t\"<p>Tweet \" + id + \" was not found.</p>\";\n\t\t\t\t\t}\n\t\t\t\t\tVMM.attachElement(\"#\"+tweet.id.toString(), VMM.MediaElement.loadingmessage(mes) );\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\terrorTimeOutOembed: function(tweet) {\n\t\t\t\ttrace(\"TWITTER JSON ERROR TIMEOUT \" + tweet.mid);\n\t\t\t\tVMM.attachElement(\"#\"+tweet.id.toString(), VMM.MediaElement.loadingmessage(\"Still waiting on Twitter: \" + tweet.mid) );\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\tif (VMM.master_config.twitter.que.length > 0) {\n\t\t\t\t\tVMM.ExternalAPI.twitter.create(VMM.master_config.twitter.que[0], VMM.ExternalAPI.twitter.pushQue);\n\t\t\t\t\tVMM.Util.removeRange(VMM.master_config.twitter.que,0);\n\t\t\t\t}\n\t\t\t},\n\t\t\t\t\t\t\n\t\t\tgetOEmbed: function(tweet, callback) {\n\t\t\t\t\n\t\t\t\tvar the_url = \"https://api.twitter.com/1/statuses/oembed.json?id=\" + tweet.mid + \"&omit_script=true&include_entities=true&callback=?\",\n\t\t\t\t\ttwitter_timeout\t= setTimeout(VMM.ExternalAPI.twitter.errorTimeOutOembed, VMM.master_config.timers.api, tweet);\n\t\t\t\t\t//callback_timeout= setTimeout(callback, VMM.master_config.timers.api, tweet);\n\t\t\t\t\n\t\t\t\tVMM.getJSON(the_url, function(d) {\n\t\t\t\t\tvar twit\t= \"\",\n\t\t\t\t\t\ttuser\t= \"\";\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//\tTWEET CONTENT\n\t\t\t\t\ttwit += d.html.split(\"<\\/p>\\&mdash;\")[0] + \"</p></blockquote>\";\n\t\t\t\t\ttuser = d.author_url.split(\"twitter.com\\/\")[1];\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t//\tTWEET AUTHOR\n\t\t\t\t\ttwit += \"<div class='vcard author'>\";\n\t\t\t\t\ttwit += \"<a class='screen-name url' href='\" + d.author_url + \"' target='_blank'>\";\n\t\t\t\t\ttwit += \"<span class='avatar'></span>\";\n\t\t\t\t\ttwit += \"<span class='fn'>\" + d.author_name + \"</span>\";\n\t\t\t\t\ttwit += \"<span class='nickname'>@\" + tuser + \"<span class='thumbnail-inline'></span></span>\";\n\t\t\t\t\ttwit += \"</a>\";\n\t\t\t\t\ttwit += \"</div>\";\n\t\t\t\t\t\n\t\t\t\t\tVMM.attachElement(\"#\"+tweet.id.toString(), twit );\n\t\t\t\t\tVMM.attachElement(\"#text_thumb_\"+tweet.id.toString(), d.html );\n\t\t\t\t\tVMM.attachElement(\"#marker_content_\" + tweet.id.toString(), d.html );\n\t\t\t\t})\n\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\ttrace(\"TWITTER error\");\n\t\t\t\t\ttrace(\"TWITTER ERROR: \" + textStatus + \" \" + jqXHR.responseText);\n\t\t\t\t\tclearTimeout(twitter_timeout);\n\t\t\t\t\t//clearTimeout(callback_timeout);\n\t\t\t\t\tVMM.attachElement(\"#\"+tweet.id, VMM.MediaElement.loadingmessage(\"ERROR LOADING TWEET \" + tweet.mid) );\n\t\t\t\t})\n\t\t\t\t.success(function(d) {\n\t\t\t\t\tclearTimeout(twitter_timeout);\n\t\t\t\t\t// clearTimeout(callback_timeout);\n\t\t\t\t\tcallback();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tgetHTML: function(id) {\n\t\t\t\t//var the_url = document.location.protocol + \"//api.twitter.com/1/statuses/oembed.json?id=\" + id+ \"&callback=?\";\n\t\t\t\tvar the_url = \"https://api.twitter.com/1/statuses/oembed.json?id=\" + id+ \"&omit_script=true&include_entities=true&callback=?\";\n\t\t\t\tVMM.getJSON(the_url, VMM.ExternalAPI.twitter.onJSONLoaded);\n\t\t\t},\n\t\t\t\n\t\t\tonJSONLoaded: function(d) {\n\t\t\t\ttrace(\"TWITTER JSON LOADED\");\n\t\t\t\tvar id = d.id;\n\t\t\t\tVMM.attachElement(\"#\"+id, VMM.Util.linkify_with_twitter(d.html) );\n\t\t\t},\n\t\t\t\n\t\t\tparseTwitterDate: function(d) {\n\t\t\t\tvar date = new Date(Date.parse(d));\n\t\t\t\t/*\n\t\t\t\tvar t = d.replace(/(\\d{1,2}[:]\\d{2}[:]\\d{2}) (.*)/, '$2 $1');\n\t\t\t\tt = t.replace(/(\\+\\S+) (.*)/, '$2 $1');\n\t\t\t\tvar date = new Date(Date.parse(t)).toLocaleDateString();\n\t\t\t\tvar time = new Date(Date.parse(t)).toLocaleTimeString();\n\t\t\t\t*/\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\t\n\t\t\tprettyParseTwitterDate: function(d) {\n\t\t\t\tvar date = new Date(Date.parse(d));\n\t\t\t\treturn VMM.Date.prettyDate(date, true);\n\t\t\t},\n\t\t\t\n\t\t\tgetTweets: function(tweets) {\n\t\t\t\tvar tweetArray = [];\n\t\t\t\tvar number_of_tweets = tweets.length;\n\t\t\t\t\n\t\t\t\tfor(var i = 0; i < tweets.length; i++) {\n\t\t\t\t\t\n\t\t\t\t\tvar twitter_id = \"\";\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t/* FIND THE TWITTER ID\n\t\t\t\t\t================================================== */\n\t\t\t\t\tif (tweets[i].tweet.match(\"status\\/\")) {\n\t\t\t\t\t\ttwitter_id = tweets[i].tweet.split(\"status\\/\")[1];\n\t\t\t\t\t} else if (tweets[i].tweet.match(\"statuses\\/\")) {\n\t\t\t\t\t\ttwitter_id = tweets[i].tweet.split(\"statuses\\/\")[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttwitter_id = \"\";\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t/* FETCH THE DATA\n\t\t\t\t\t================================================== */\n\t\t\t\t\tvar the_url = \"//api.twitter.com/1/statuses/show.json?id=\" + twitter_id + \"&include_entities=true&callback=?\";\n\t\t\t\t\tVMM.getJSON(the_url, function(d) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar tweet = {}\n\t\t\t\t\t\t/* FORMAT RESPONSE\n\t\t\t\t\t\t================================================== */\n\t\t\t\t\t\tvar twit = \"<div class='twitter'><blockquote><p>\";\n\t\t\t\t\t\tvar td = VMM.Util.linkify_with_twitter(d.text, \"_blank\");\n\t\t\t\t\t\ttwit += td;\n\t\t\t\t\t\ttwit += \"</p>\";\n\t\t\t\t\t\t\n\t\t\t\t\t\ttwit += \"— \" + d.user.name + \" (<a href='https://twitter.com/\" + d.user.screen_name + \"'>@\" + d.user.screen_name + \"</a>) <a href='https://twitter.com/\" + d.user.screen_name + \"/status/\" + d.id + \"'>\" + VMM.ExternalAPI.twitter.prettyParseTwitterDate(d.created_at) + \" </a></blockquote></div>\";\n\t\t\t\t\t\t\n\t\t\t\t\t\ttweet.content = twit;\n\t\t\t\t\t\ttweet.raw = d;\n\t\t\t\t\t\t\n\t\t\t\t\t\ttweetArray.push(tweet);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t/* CHECK IF THATS ALL OF THEM\n\t\t\t\t\t\t================================================== */\n\t\t\t\t\t\tif (tweetArray.length == number_of_tweets) {\n\t\t\t\t\t\t\tvar the_tweets = {tweetdata: tweetArray}\n\t\t\t\t\t\t\tVMM.fireEvent(global, \"TWEETSLOADED\", the_tweets);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.success(function() { trace(\"second success\"); })\n\t\t\t\t\t.error(function() { trace(\"error\"); })\n\t\t\t\t\t.complete(function() { trace(\"complete\"); });\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tgetTweetSearch: function(tweets, number_of_tweets) {\n\t\t\t\tvar _number_of_tweets = 40;\n\t\t\t\tif (number_of_tweets != null && number_of_tweets != \"\") {\n\t\t\t\t\t_number_of_tweets = number_of_tweets;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar the_url = \"//search.twitter.com/search.json?q=\" + tweets + \"&rpp=\" + _number_of_tweets + \"&include_entities=true&result_type=mixed\";\n\t\t\t\tvar tweetArray = [];\n\t\t\t\tVMM.getJSON(the_url, function(d) {\n\t\t\t\t\t\n\t\t\t\t\t/* FORMAT RESPONSE\n\t\t\t\t\t================================================== */\n\t\t\t\t\tfor(var i = 0; i < d.results.length; i++) {\n\t\t\t\t\t\tvar tweet = {}\n\t\t\t\t\t\tvar twit = \"<div class='twitter'><blockquote><p>\";\n\t\t\t\t\t\tvar td = VMM.Util.linkify_with_twitter(d.results[i].text, \"_blank\");\n\t\t\t\t\t\ttwit += td;\n\t\t\t\t\t\ttwit += \"</p>\";\n\t\t\t\t\t\ttwit += \"— \" + d.results[i].from_user_name + \" (<a href='https://twitter.com/\" + d.results[i].from_user + \"'>@\" + d.results[i].from_user + \"</a>) <a href='https://twitter.com/\" + d.results[i].from_user + \"/status/\" + d.id + \"'>\" + VMM.ExternalAPI.twitter.prettyParseTwitterDate(d.results[i].created_at) + \" </a></blockquote></div>\";\n\t\t\t\t\t\ttweet.content = twit;\n\t\t\t\t\t\ttweet.raw = d.results[i];\n\t\t\t\t\t\ttweetArray.push(tweet);\n\t\t\t\t\t}\n\t\t\t\t\tvar the_tweets = {tweetdata: tweetArray}\n\t\t\t\t\tVMM.fireEvent(global, \"TWEETSLOADED\", the_tweets);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tprettyHTML: function(id, secondary) {\n\t\t\t\tvar id = id.toString();\n\t\t\t\tvar error_obj = {\n\t\t\t\t\ttwitterid: id\n\t\t\t\t};\n\t\t\t\tvar the_url = \"//api.twitter.com/1/statuses/show.json?id=\" + id + \"&include_entities=true&callback=?\";\n\t\t\t\tvar twitter_timeout = setTimeout(VMM.ExternalAPI.twitter.errorTimeOut, VMM.master_config.timers.api, id);\n\t\t\t\t\n\t\t\t\tVMM.getJSON(the_url, VMM.ExternalAPI.twitter.formatJSON)\n\t\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\ttrace(\"TWITTER error\");\n\t\t\t\t\t\ttrace(\"TWITTER ERROR: \" + textStatus + \" \" + jqXHR.responseText);\n\t\t\t\t\t\tVMM.attachElement(\"#twitter_\"+id, \"<p>ERROR LOADING TWEET \" + id + \"</p>\" );\n\t\t\t\t\t})\n\t\t\t\t\t.success(function(d) {\n\t\t\t\t\t\tclearTimeout(twitter_timeout);\n\t\t\t\t\t\tif (secondary) {\n\t\t\t\t\t\t\tVMM.ExternalAPI.twitter.secondaryMedia(d);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tformatJSON: function(d) {\n\t\t\t\tvar id = d.id_str;\n\t\t\t\t\n\t\t\t\tvar twit = \"<blockquote><p>\";\n\t\t\t\tvar td = VMM.Util.linkify_with_twitter(d.text, \"_blank\");\n\t\t\t\t//td = td.replace(/(@([\\w]+))/g,\"<a href='http://twitter.com/$2' target='_blank'>$1</a>\");\n\t\t\t\t//td = td.replace(/(#([\\w]+))/g,\"<a href='http://twitter.com/#search?q=%23$2' target='_blank'>$1</a>\");\n\t\t\t\ttwit += td;\n\t\t\t\ttwit += \"</p></blockquote>\";\n\t\t\t\t//twit += \" <a href='https://twitter.com/\" + d.user.screen_name + \"/status/\" + d.id_str + \"' target='_blank' alt='link to original tweet' title='link to original tweet'>\" + \"<span class='created-at'></span>\" + \" </a>\";\n\t\t\t\t\n\t\t\t\ttwit += \"<div class='vcard author'>\";\n\t\t\t\ttwit += \"<a class='screen-name url' href='https://twitter.com/\" + d.user.screen_name + \"' data-screen-name='\" + d.user.screen_name + \"' target='_blank'>\";\n\t\t\t\ttwit += \"<span class='avatar'><img src=' \" + d.user.profile_image_url + \"'  alt=''></span>\";\n\t\t\t\ttwit += \"<span class='fn'>\" + d.user.name + \"</span>\";\n\t\t\t\ttwit += \"<span class='nickname'>@\" + d.user.screen_name + \"<span class='thumbnail-inline'></span></span>\";\n\t\t\t\ttwit += \"</a>\";\n\t\t\t\ttwit += \"</div>\";\n\t\t\t\t\n\t\t\t\tif (typeof d.entities.media != 'undefined') {\n\t\t\t\t\tif (d.entities.media[0].type == \"photo\") {\n\t\t\t\t\t\ttwit += \"<img src=' \" + d.entities.media[0].media_url + \"'  alt=''>\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tVMM.attachElement(\"#twitter_\"+id.toString(), twit );\n\t\t\t\tVMM.attachElement(\"#text_thumb_\"+id.toString(), d.text );\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t},\n\t\t\n\t\tgooglemaps: {\n\t\t\t\n\t\t\tmaptype: \"TERRAIN\", // see also below for default if this is a google type\n\t\t\t\n\t\t\tsetMapType: function(d) {\n\t\t\t\tif (d != \"\") {\n\t\t\t\t\tVMM.ExternalAPI.googlemaps.maptype = d;\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tvar timer, \n\t\t\t\t\tapi_key,\n\t\t\t\t\tmap_url;\n\t\t\t\t\n\t\t\t\tm.vars = VMM.Util.getUrlVars(m.id);\n\t\t\t\t\n\t\t\t\tif (VMM.ExternalAPI.keys.google != \"\") {\n\t\t\t\t\tapi_key = VMM.ExternalAPI.keys.google;\n\t\t\t\t} else {\n\t\t\t\t\tapi_key = Aes.Ctr.decrypt(VMM.ExternalAPI.keys_master.google, VMM.ExternalAPI.keys_master.vp, 256);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t/*\n\t\t\t\t\tInvestigating a google map api change on the latest release that causes custom map types to stop working\n\t\t\t\t\thttp://stackoverflow.com/questions/13486271/google-map-markermanager-cannot-call-method-substr-of-undefined\n\t\t\t\t\tsoulution is to use api ver 3.9\n\t\t\t\t*/\n\t\t\t\tmap_url = \"//maps.googleapis.com/maps/api/js?key=\" + api_key + \"&v=3.9&libraries=places&sensor=false&callback=VMM.ExternalAPI.googlemaps.onMapAPIReady\";\n\t\t\t\t\n\t\t\t\tif (VMM.master_config.googlemaps.active) {\n\t\t\t\t\tVMM.master_config.googlemaps.que.push(m);\n\t\t\t\t} else {\n\t\t\t\t\tVMM.master_config.googlemaps.que.push(m);\n\t\t\t\t\t\n\t\t\t\t\tif (VMM.master_config.googlemaps.api_loaded) {\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tLoadLib.js(map_url, function() {\n\t\t\t\t\t\t\ttrace(\"Google Maps API Library Loaded\");\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(m) {\n\t\t\t\tVMM.ExternalAPI.googlemaps.createAPIMap(m);\n\t\t\t},\n\t\t\t\n\t\t\tcreateiFrameMap: function(m) {\n\t\t\t\tvar embed_url\t\t= m.id + \"&output=embed\",\n\t\t\t\t\tmc\t\t\t\t= \"\",\n\t\t\t\t\tunique_map_id\t= m.uid.toString() + \"_gmap\";\n\t\t\t\t\t\n\t\t\t\tmc\t\t\t\t+= \"<div class='google-map' id='\" + unique_map_id + \"' style='width=100%;height=100%;'>\";\n\t\t\t\tmc\t\t\t\t+= \"<iframe width='100%' height='100%' frameborder='0' scrolling='no' marginheight='0' marginwidth='0' src='\" + embed_url + \"'></iframe>\";\n\t\t\t\tmc\t\t\t\t+= \"</div>\";\n\t\t\t\t\n\t\t\t\tVMM.attachElement(\"#\" + m.uid, mc);\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcreateAPIMap: function(m) {\n\t\t\t\tvar map_attribution\t= \"\",\n\t\t\t\t\tlayer,\n\t\t\t\t\tmap,\n\t\t\t\t\tmap_options,\n\t\t\t\t\tunique_map_id\t\t\t= m.uid.toString() + \"_gmap\",\n\t\t\t\t\tmap_attribution_html\t= \"\",\n\t\t\t\t\tlocation\t\t\t\t= new google.maps.LatLng(41.875696,-87.624207),\n\t\t\t\t\tlatlong,\n\t\t\t\t\tzoom\t\t\t\t\t= 11,\n\t\t\t\t\thas_location\t\t\t= false,\n\t\t\t\t\thas_zoom\t\t\t\t= false,\n\t\t\t\t\tapi_limit\t\t\t\t= false,\n\t\t\t\t\tmap_bounds;\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tfunction mapProvider(name) {\n\t\t\t\t\tif (name in VMM.ExternalAPI.googlemaps.map_providers) {\n\t\t\t\t\t\tmap_attribution = VMM.ExternalAPI.googlemaps.map_attribution[VMM.ExternalAPI.googlemaps.map_providers[name].attribution];\n\t\t\t\t\t\treturn VMM.ExternalAPI.googlemaps.map_providers[name];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (VMM.ExternalAPI.googlemaps.defaultType(name)) {\n\t\t\t\t\t\t\ttrace(\"GOOGLE MAP DEFAULT TYPE\");\n\t\t\t\t\t\t\treturn google.maps.MapTypeId[name.toUpperCase()];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttrace(\"Not a maptype: \" + name );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tgoogle.maps.VeriteMapType = function(name) {\n\t\t\t\t\tif (VMM.ExternalAPI.googlemaps.defaultType(name)) {\n\t\t\t\t\t\treturn google.maps.MapTypeId[name.toUpperCase()];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar provider = \t\t\tmapProvider(name);\n\t\t\t\t\t\treturn google.maps.ImageMapType.call(this, {\n\t\t\t\t\t\t\t\"getTileUrl\": function(coord, zoom) {\n\t\t\t\t\t\t\t\tvar index = \t(zoom + coord.x + coord.y) % VMM.ExternalAPI.googlemaps.map_subdomains.length;\n\t\t\t\t\t\t\t\tvar retURL =  provider.url\n\t\t\t\t\t\t\t\t\t\t.replace(\"{S}\", VMM.ExternalAPI.googlemaps.map_subdomains[index])\n\t\t\t\t\t\t\t\t\t\t.replace(\"{Z}\", zoom)\n\t\t\t\t\t\t\t\t\t\t.replace(\"{X}\", coord.x)\n\t\t\t\t\t\t\t\t\t\t.replace(\"{Y}\", coord.y)\n\t\t\t\t\t\t\t\t\t\t.replace(\"{z}\", zoom)\n\t\t\t\t\t\t\t\t\t\t.replace(\"{x}\", coord.x)\n\t\t\t\t\t\t\t\t\t\t.replace(\"{y}\", coord.y);\n\n\t\t\t\t\t\t\t\t// trace(retURL);\n\t\t\t\t\t\t\t\treturn retURL;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"tileSize\": \t\tnew google.maps.Size(256, 256),\n\t\t\t\t\t\t\t\"name\":\t\t\t\tname,\n\t\t\t\t\t\t\t\"minZoom\":\t\t\tprovider.minZoom,\n\t\t\t\t\t\t\t\"maxZoom\":\t\t\tprovider.maxZoom\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tgoogle.maps.VeriteMapType.prototype = new google.maps.ImageMapType(\"_\");\n\t\t\t\t\n\t\t\t\t/* Make the Map\n\t\t\t\t================================================== */\n\t\t\t\t\n\t\t\t\tif (VMM.ExternalAPI.googlemaps.maptype != \"\") {\n\t\t\t\t\tif (VMM.ExternalAPI.googlemaps.defaultType(VMM.ExternalAPI.googlemaps.maptype)) {\n\t\t\t\t\t\tlayer\t\t\t\t=\tgoogle.maps.MapTypeId[VMM.ExternalAPI.googlemaps.maptype.toUpperCase()];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlayer\t\t\t\t=\tVMM.ExternalAPI.googlemaps.maptype;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlayer\t\t\t\t=\tgoogle.maps.MapTypeId['TERRAIN'];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar new_google_url_regex = new RegExp(/@([0-9\\.\\-]+),([0-9\\.\\-]+),(\\d+)z/);\n\n\t\t\t\tif (m.id.match(new_google_url_regex)) {\n\t\t\t\t\tvar match = m.id.match(new_google_url_regex)\n\t\t\t\t\tlat = parseFloat(match[1]);\n\t\t\t\t\tlng = parseFloat(match[2]);\n\t\t\t\t\tlocation = new google.maps.LatLng(lat,lng);\n\t\t\t\t\tzoom = parseFloat(match[3]);\n\t\t\t\t\thas_location = has_zoom = true;\n\t\t\t\t} else {\n\t\t\t\t\tif (type.of(VMM.Util.getUrlVars(m.id)[\"ll\"]) == \"string\") {\n\t\t\t\t\t\t\thas_location\t\t\t= true;\n\t\t\t\t\t\t\tlatlong\t\t\t\t\t= VMM.Util.getUrlVars(m.id)[\"ll\"].split(\",\");\n\t\t\t\t\t\t\tlocation\t\t\t\t= new google.maps.LatLng(parseFloat(latlong[0]),parseFloat(latlong[1]));\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else if (type.of(VMM.Util.getUrlVars(m.id)[\"sll\"]) == \"string\") {\n\t\t\t\t\t\t\tlatlong\t\t\t\t\t= VMM.Util.getUrlVars(m.id)[\"sll\"].split(\",\");\n\t\t\t\t\t\t\tlocation\t\t\t\t= new google.maps.LatLng(parseFloat(latlong[0]),parseFloat(latlong[1]));\n\t\t\t\t\t\t} \n\t\t\t\t\t\t\n\t\t\t\t\t\tif (type.of(VMM.Util.getUrlVars(m.id)[\"z\"]) == \"string\") {\n\t\t\t\t\t\t\thas_zoom\t\t\t\t=\ttrue;\n\t\t\t\t\t\t\tzoom\t\t\t\t\t=\tparseFloat(VMM.Util.getUrlVars(m.id)[\"z\"]);\n\t\t\t\t\t\t}\n\t\t\t\t}\t\t\t\t\n\t\t\t\t\t\n\t\t\t\tmap_options = {\n\t\t\t\t\tzoom:\t\t\t\t\t\tzoom,\n\t\t\t\t\tdraggable: \t\t\t\t\tfalse, \n\t\t\t\t\tdisableDefaultUI:\t\t\ttrue,\n\t\t\t\t\tmapTypeControl:\t\t\t\tfalse,\n\t\t\t\t\tzoomControl:\t\t\t\ttrue,\n\t\t\t\t\tzoomControlOptions: {\n\t\t\t\t\t\tstyle:\t\t\t\t\tgoogle.maps.ZoomControlStyle.SMALL,\n\t\t\t\t\t\tposition:\t\t\t\tgoogle.maps.ControlPosition.TOP_RIGHT\n\t\t\t\t\t},\n\t\t\t\t\tcenter: \t\t\t\t\tlocation,\n\t\t\t\t\tmapTypeId:\t\t\t\t\tlayer,\n\t\t\t\t\tmapTypeControlOptions: {\n\t\t\t\t        mapTypeIds:\t\t\t\t[layer]\n\t\t\t\t    }\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tVMM.attachElement(\"#\" + m.uid, \"<div class='google-map' id='\" + unique_map_id + \"' style='width=100%;height=100%;'></div>\");\n\t\t\t\t\n\t\t\t\tmap\t\t= new google.maps.Map(document.getElementById(unique_map_id), map_options);\n\t\t\t\t\n\t\t\t\tif (VMM.ExternalAPI.googlemaps.defaultType(VMM.ExternalAPI.googlemaps.maptype)) {\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tmap.mapTypes.set(layer, new google.maps.VeriteMapType(layer));\n\t\t\t\t\t// ATTRIBUTION\n\t\t\t\t\tmap_attribution_html =\t\"<div class='map-attribution'><div class='attribution-text'>\" + map_attribution + \"</div></div>\";\n\t\t\t\t\tVMM.appendElement(\"#\"+unique_map_id, map_attribution_html);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// DETERMINE IF KML IS POSSIBLE \n\t\t\t\tif (type.of(VMM.Util.getUrlVars(m.id)[\"msid\"]) == \"string\") {\n\t\t\t\t\tloadKML();\n\t\t\t\t} else {\n\t\t\t\t\t//loadPlaces();\n\t\t\t\t\tif (type.of(VMM.Util.getUrlVars(m.id)[\"q\"]) == \"string\") {\n\t\t\t\t\t\tgeocodePlace();\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// GEOCODE\n\t\t\t\tfunction geocodePlace() {\n\n\n\t\t\t\t\t\n\t\t\t\t\tvar geocoder\t= new google.maps.Geocoder(),\n\t\t\t\t\t\taddress\t\t= VMM.Util.getUrlVars(m.id)[\"q\"],\n\t\t\t\t\t\tmarker;\n\t\t\t\t\t\t\n\t\t\t\t\tif (address.match(\"loc:\")) {\n\t\t\t\t\t\tvar address_latlon = address.split(\":\")[1].split(\"+\");\n\t\t\t\t\t\tlocation = new google.maps.LatLng(parseFloat(address_latlon[0]),parseFloat(address_latlon[1]));\n\t\t\t\t\t\thas_location = true;\n\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\tgeocoder.geocode( { 'address': address}, function(results, status) {\n\t\t\t\t\t\tif (status == google.maps.GeocoderStatus.OK) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tmarker = new google.maps.Marker({\n\t\t\t\t\t\t\t\tmap: map,\n\t\t\t\t\t\t\t\tposition: results[0].geometry.location\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// POSITION MAP\n\t\t\t\t\t\t\t//map.setCenter(results[0].geometry.location);\n\t\t\t\t\t\t\t//map.panTo(location);\n\t\t\t\t\t\t\tif (typeof results[0].geometry.viewport != 'undefined') {\n\t\t\t\t\t\t\t\tmap.fitBounds(results[0].geometry.viewport);\n\t\t\t\t\t\t\t} else if (typeof results[0].geometry.bounds != 'undefined') {\n\t\t\t\t\t\t\t\tmap.fitBounds(results[0].geometry.bounds);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmap.setCenter(results[0].geometry.location);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\t\t\tmap.panTo(location);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (has_zoom) {\n\t\t\t\t\t\t\t\tmap.setZoom(zoom);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttrace(\"Geocode for \" + address + \" was not successful for the following reason: \" + status);\n\t\t\t\t\t\t\ttrace(\"TRYING PLACES SEARCH\");\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\t\t\tmap.panTo(location);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (has_zoom) {\n\t\t\t\t\t\t\t\tmap.setZoom(zoom);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tloadPlaces();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// PLACES\n\t\t\t\tfunction loadPlaces() {\n\t\t\t\t\tvar place,\n\t\t\t\t\t\tsearch_request,\n\t\t\t\t\t\tinfowindow,\n\t\t\t\t\t\tsearch_bounds,\n\t\t\t\t\t\tbounds_sw,\n\t\t\t\t\t\tbounds_ne;\n\t\t\t\t\t\n\t\t\t\t\tplace_search\t= new google.maps.places.PlacesService(map);\n\t\t\t\t\tinfowindow\t\t= new google.maps.InfoWindow();\n\t\t\t\t\t\n\t\t\t\t\tsearch_request = {\n\t\t\t\t\t\tquery:\t\t\"\",\n\t\t\t\t\t\ttypes:\t\t['country', 'neighborhood', 'political', 'locality', 'geocode']\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tif (type.of(VMM.Util.getUrlVars(m.id)[\"q\"]) == \"string\") {\n\t\t\t\t\t\tsearch_request.query\t= VMM.Util.getUrlVars(m.id)[\"q\"];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\tsearch_request.location\t= location;\n\t\t\t\t\t\tsearch_request.radius\t= \"15000\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbounds_sw = new google.maps.LatLng(-89.999999,-179.999999);\n\t\t\t\t\t\tbounds_ne = new google.maps.LatLng(89.999999,179.999999);\n\t\t\t\t\t\tsearch_bounds = new google.maps.LatLngBounds(bounds_sw,bounds_ne);\n\t\t\t\t\t\t\n\t\t\t\t\t\t//search_request.location\t= search_bounds;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tplace_search.textSearch(search_request, placeResults);\n\t\t\t\t\t\n\t\t\t\t\tfunction placeResults(results, status) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (status == google.maps.places.PlacesServiceStatus.OK) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tfor (var i = 0; i < results.length; i++) {\n\t\t\t\t\t\t\t\t//createMarker(results[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\t\t\tmap.panTo(location);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (results.length >= 1) {\n\t\t\t\t\t\t\t\t\tmap.panTo(results[0].geometry.location);\n\t\t\t\t\t\t\t\t\tif (has_zoom) {\n\t\t\t\t\t\t\t\t\t\tmap.setZoom(zoom);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttrace(\"Place search for \" + search_request.query + \" was not successful for the following reason: \" + status);\n\t\t\t\t\t\t\t// IF There's a problem loading the map, load a simple iFrame version instead\n\t\t\t\t\t\t\ttrace(\"YOU MAY NEED A GOOGLE MAPS API KEY IN ORDER TO USE THIS FEATURE OF TIMELINEJS\");\n\t\t\t\t\t\t\ttrace(\"FIND OUT HOW TO GET YOUR KEY HERE: https://developers.google.com/places/documentation/#Authentication\");\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\t\t\tmap.panTo(location);\n\t\t\t\t\t\t\t\tif (has_zoom) {\n\t\t\t\t\t\t\t\t\tmap.setZoom(zoom);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttrace(\"USING SIMPLE IFRAME MAP EMBED\");\n\t\t\t\t\t\t\t\tif (m.id[0].match(\"https\")) { \n\t\t\t\t\t\t\t\t\tm.id = m.url[0].replace(\"https\", \"http\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tVMM.ExternalAPI.googlemaps.createiFrameMap(m);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfunction createMarker(place) {\n\t\t\t\t\t\tvar marker, placeLoc;\n\t\t\t\t\t\t\n\t\t\t\t\t\tplaceLoc = place.geometry.location;\n\t\t\t\t\t\tmarker = new google.maps.Marker({\n\t\t\t\t\t\t\tmap: map,\n\t\t\t\t\t\t\tposition: place.geometry.location\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tgoogle.maps.event.addListener(marker, 'click', function() {\n\t\t\t\t\t\t\tinfowindow.setContent(place.name);\n\t\t\t\t\t\t\tinfowindow.open(map, this);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfunction loadPlacesAlt() {\n\t\t\t\t\tvar api_key,\n\t\t\t\t\t\tplaces_url,\n\t\t\t\t\t\thas_key\t\t= false;\n\t\t\t\t\t\t\n\t\t\t\t\ttrace(\"LOADING PLACES API FOR GOOGLE MAPS\");\n\t\t\t\t\t\t\n\t\t\t\t\tif (VMM.ExternalAPI.keys.google != \"\") {\n\t\t\t\t\t\tapi_key\t= VMM.ExternalAPI.keys.google;\n\t\t\t\t\t\thas_key\t= true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttrace(\"YOU NEED A GOOGLE MAPS API KEY IN ORDER TO USE THIS FEATURE OF TIMELINEJS\");\n\t\t\t\t\t\ttrace(\"FIND OUT HOW TO GET YOUR KEY HERE: https://developers.google.com/places/documentation/#Authentication\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tplaces_url\t\t= \"https://maps.googleapis.com/maps/api/place/textsearch/json?key=\" + api_key + \"&sensor=false&language=\" + m.lang + \"&\";\n\t\t\t\t\t\n\t\t\t\t\tif (type.of(VMM.Util.getUrlVars(m.id)[\"q\"]) == \"string\") {\n\t\t\t\t\t\tplaces_url\t+= \"query=\" + VMM.Util.getUrlVars(m.id)[\"q\"];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\tplaces_url\t+= \"&location=\" + location;\n\t\t\t\t\t} \n\t\t\t\t\t\n\t\t\t\t\tif (has_key) {\n\t\t\t\t\t\tVMM.getJSON(places_url, function(d) {\n\t\t\t\t\t\t\ttrace(\"PLACES JSON\");\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar places_location \t= \"\",\n\t\t\t\t\t\t\t\tplaces_bounds\t\t= \"\",\n\t\t\t\t\t\t\t\tplaces_bounds_ne\t= \"\",\n\t\t\t\t\t\t\t\tplaces_bounds_sw\t= \"\";\n\t\t\t\t\t\t\n\t\t\t\t\t\t\ttrace(d);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (d.status == \"OVER_QUERY_LIMIT\") {\n\t\t\t\t\t\t\t\ttrace(\"OVER_QUERY_LIMIT\");\n\t\t\t\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\t\t\t\tmap.panTo(location);\n\t\t\t\t\t\t\t\t\tif (has_zoom) {\n\t\t\t\t\t\t\t\t\t\tmap.setZoom(zoom);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttrace(\"DOING TRADITIONAL MAP IFRAME EMBED UNTIL QUERY LIMIT RESTORED\");\n\t\t\t\t\t\t\t\t\tapi_limit = true;\n\t\t\t\t\t\t\t\t\tVMM.ExternalAPI.googlemaps.createiFrameMap(m);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (d.results.length >= 1) {\n\t\t\t\t\t\t\t\t\t//location = new google.maps.LatLng(parseFloat(d.results[0].geometry.location.lat),parseFloat(d.results[0].geometry.location.lng));\n\t\t\t\t\t\t\t\t\t//map.panTo(location);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tplaces_bounds_ne\t= new google.maps.LatLng(parseFloat(d.results[0].geometry.viewport.northeast.lat),parseFloat(d.results[0].geometry.viewport.northeast.lng));\n\t\t\t\t\t\t\t\t\tplaces_bounds_sw\t= new google.maps.LatLng(parseFloat(d.results[0].geometry.viewport.southwest.lat),parseFloat(d.results[0].geometry.viewport.southwest.lng));\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tplaces_bounds = new google.maps.LatLngBounds(places_bounds_sw, places_bounds_ne)\n\t\t\t\t\t\t\t\t\tmap.fitBounds(places_bounds);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttrace(\"NO RESULTS\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\t\t\t\tmap.panTo(location);\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t\tif (has_zoom) {\n\t\t\t\t\t\t\t\t\tmap.setZoom(zoom);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\t\ttrace(\"PLACES JSON ERROR\");\n\t\t\t\t\t\t\ttrace(\"PLACES JSON ERROR: \" + textStatus + \" \" + jqXHR.responseText);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.success(function(d) {\n\t\t\t\t\t\t\ttrace(\"PLACES JSON SUCCESS\");\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\t\tmap.panTo(location);\n\t\t\t\t\t\t\tif (has_zoom) {\n\t\t\t\t\t\t\t\tmap.setZoom(zoom);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttrace(\"DOING TRADITIONAL MAP IFRAME EMBED BECAUSE NO GOOGLE MAP API KEY WAS PROVIDED\");\n\t\t\t\t\t\t\tVMM.ExternalAPI.googlemaps.createiFrameMap(m);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// KML\n\t\t\t\tfunction loadKML() {\n\t\t\t\t\tvar kml_url, kml_layer, infowindow, text;\n\t\t\t\t\t\n\t\t\t\t\tkml_url\t\t\t\t= m.id + \"&output=kml\";\n\t\t\t\t\tkml_url\t\t\t\t= kml_url.replace(\"&output=embed\", \"\");\n\t\t\t\t\tkml_layer\t\t\t= new google.maps.KmlLayer(kml_url, {preserveViewport:true});\n\t\t\t\t\tinfowindow\t\t\t= new google.maps.InfoWindow();\n\t\t\t\t\tkml_layer.setMap(map);\n\t\t\t\t\t\n\t\t\t\t\tgoogle.maps.event.addListenerOnce(kml_layer, \"defaultviewport_changed\", function() {\n\t\t\t\t\t   \n\t\t\t\t\t\tif (has_location) {\n\t\t\t\t\t\t\tmap.panTo(location);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmap.fitBounds(kml_layer.getDefaultViewport() );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (has_zoom) {\n\t\t\t\t\t\t\tmap.setZoom(zoom);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tgoogle.maps.event.addListener(kml_layer, 'click', function(kmlEvent) {\n\t\t\t\t\t\ttext\t\t\t= kmlEvent.featureData.description;\n\t\t\t\t\t\tshowInfoWindow(text);\n\t\t\t\t\t\t\n\t\t\t\t\t\tfunction showInfoWindow(c) {\n\t\t\t\t\t\t\tinfowindow.setContent(c);\n\t\t\t\t\t\t\tinfowindow.open(map);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\tfor(var i = 0; i < VMM.master_config.googlemaps.que.length; i++) {\n\t\t\t\t\tVMM.ExternalAPI.googlemaps.create(VMM.master_config.googlemaps.que[i]);\n\t\t\t\t}\n\t\t\t\tVMM.master_config.googlemaps.que = [];\n\t\t\t},\n\t\t\t\n\t\t\tonMapAPIReady: function() {\n\t\t\t\tVMM.master_config.googlemaps.map_active = true;\n\t\t\t\tVMM.master_config.googlemaps.places_active = true;\n\t\t\t\tVMM.ExternalAPI.googlemaps.onAPIReady();\n\t\t\t},\n\t\t\t\n\t\t\tonPlacesAPIReady: function() {\n\t\t\t\tVMM.master_config.googlemaps.places_active = true;\n\t\t\t\tVMM.ExternalAPI.googlemaps.onAPIReady();\n\t\t\t},\n\t\t\t\n\t\t\tonAPIReady: function() {\n\t\t\t\tif (!VMM.master_config.googlemaps.active) {\n\t\t\t\t\tif (VMM.master_config.googlemaps.map_active && VMM.master_config.googlemaps.places_active) {\n\t\t\t\t\t\tVMM.master_config.googlemaps.active = true;\n\t\t\t\t\t\tVMM.ExternalAPI.googlemaps.pushQue();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tdefaultType: function(name) {\n\t\t\t\tif (name.toLowerCase() == \"satellite\" || name.toLowerCase() == \"hybrid\" || name.toLowerCase() == \"terrain\" || name.toLowerCase() == \"roadmap\") {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tmap_subdomains: [\"a\", \"b\", \"c\", \"d\"],\n\t\t\t\n\t\t\tmap_attribution: {\n\t\t\t\t\"stamen\": \t\t\t\"Map tiles by <a href='http://stamen.com'>Stamen Design</a>, under <a href='http://creativecommons.org/licenses/by/3.0'>CC BY 3.0</a>. Data by <a href='http://openstreetmap.org'>OpenStreetMap</a>, under <a href='http://creativecommons.org/licenses/by-sa/3.0'>CC BY SA</a>.\",\n\t\t\t\t\"apple\": \t\t\t\"Map data &copy; 2012  Apple, Imagery &copy; 2012 Apple\",\n\t\t\t\t\"osm\":\t\t\t\t\"&copy; <a href='http://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors\"\n\t\t\t},\n\t\t\t\t\t\t\t\t\t\n\t\t\tmap_providers: {\n\t\t\t\t\"toner\": {\n\t\t\t\t\t\"url\": \"https://stamen-tiles-{S}.a.ssl.fastly.net/toner/{Z}/{X}/{Y}.png\",\n\t\t\t\t\t\"minZoom\": \t\t0,\n\t\t\t\t\t\"maxZoom\": \t\t20,\n\t\t\t\t\t\"attribution\": \t\"stamen\"\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\t\"toner-lines\": {\n\t\t\t\t\t\"url\": \"https://stamen-tiles-{S}.a.ssl.fastly.net/toner-lines/{Z}/{X}/{Y}.png\",\n\t\t\t\t\t\"minZoom\": \t\t0,\n\t\t\t\t\t\"maxZoom\": \t\t20,\n\t\t\t\t\t\"attribution\": \t\"stamen\"\n\t\t\t\t},\n\t\t\t\t\"toner-labels\": {\n\t\t\t\t\t\"url\": \"https://stamen-tiles-{S}.a.ssl.fastly.net/toner-labels/{Z}/{X}/{Y}.png\",\n\t\t\t\t\t\"minZoom\": \t\t0,\n\t\t\t\t\t\"maxZoom\": \t\t20,\n\t\t\t\t\t\"attribution\": \t\"stamen\"\n\t\t\t\t},\n\t\t\t\t\"sterrain\": {\n\t\t\t\t\t\"url\": \"https://stamen-tiles-{S}.a.ssl.fastly.net/terrain/{Z}/{X}/{Y}.jpg\",\n\t\t\t\t\t\"minZoom\": \t\t4,\n\t\t\t\t\t\"maxZoom\": \t\t20,\n\t\t\t\t\t\"attribution\": \t\"stamen\"\n\t\t\t\t},\n\t\t\t\t\"apple\": {\n\t\t\t\t\t\"url\": \t\t\t\"//gsp2.apple.com/tile?api=1&style=slideshow&layers=default&lang=en_US&z={z}&x={x}&y={y}&v=9\",\n\t\t\t\t\t\"minZoom\": \t\t4,\n\t\t\t\t\t\"maxZoom\": \t\t14,\n\t\t\t\t\t\"attribution\": \t\"apple\"\n\t\t\t\t},\n\t\t\t\t\"watercolor\": {\n\t\t\t\t\t\"url\": \"https://stamen-tiles-{S}.a.ssl.fastly.net/watercolor/{Z}/{X}/{Y}.jpg\",\n\t\t\t\t\t\"minZoom\": \t\t3,\n\t\t\t\t\t\"maxZoom\": \t\t16,\n\t\t\t\t\t\"attribution\": \t\"stamen\"\n\t\t\t\t},\n\t\t\t\t\"osm\": {\n\t\t\t\t\t\"url\": \t\t\t\"//tile.openstreetmap.org/{z}/{x}/{y}.png\",\n\t\t\t\t\t\"minZoom\": \t\t3,\n\t\t\t\t\t\"maxZoom\": \t\t18,\n\t\t\t\t\t\"attribution\":\t\t\"osm\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\tgoogleplus: {\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tvar api_key;\n\t\t\t\tvar gplus = {user: m.user, activity: m.id, id: m.uid};\n\t\t\t\t\n\t\t\t\tVMM.master_config.googleplus.que.push(gplus);\n\t\t\t\tVMM.master_config.googleplus.active = true;\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(gplus, callback) {\n\t\t\t\tvar mediaElem\t\t\t= \"\",\n\t\t\t\t\tapi_key\t\t\t\t= \"\",\n\t\t\t\t\tg_activity\t\t\t= \"\",\n\t\t\t\t\tg_content\t\t\t= \"\",\n\t\t\t\t\tg_attachments\t\t= \"\",\n\t\t\t\t\tgperson_api_url,\n\t\t\t\t\tgactivity_api_url;\n\t\t\t\t\tgoogleplus_timeout\t= setTimeout(VMM.ExternalAPI.googleplus.errorTimeOut, VMM.master_config.timers.api, gplus),\n\t\t\t\t\tcallback_timeout\t= setTimeout(callback, VMM.master_config.timers.api, gplus);\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\tif (VMM.master_config.Timeline.api_keys.google != \"\") {\n\t\t\t\t\tapi_key = VMM.master_config.Timeline.api_keys.google;\n\t\t\t\t} else {\n\t\t\t\t\tapi_key = Aes.Ctr.decrypt(VMM.master_config.api_keys_master.google, VMM.master_config.vp, 256);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tgperson_api_url = \"https://www.googleapis.com/plus/v1/people/\" + gplus.user + \"/activities/public?alt=json&maxResults=100&fields=items(id,url)&key=\" + api_key;\n\t\t\t\t\n\t\t\t\t//mediaElem\t=\t\"<iframe class='doc' frameborder='0' width='100%' height='100%' src='\" + gplus.url + \"&amp;embedded=true'></iframe>\";\n\t\t\t\tmediaElem = \"GOOGLE PLUS API CALL\";\n\t\t\t\t\n\t\t\t\tVMM.getJSON(gperson_api_url, function(p_data) {\n\t\t\t\t\tfor(var i = 0; i < p_data.items.length; i++) {\n\t\t\t\t\t\ttrace(\"loop\");\n\t\t\t\t\t\tif (p_data.items[i].url.split(\"posts/\")[1] == gplus.activity) {\n\t\t\t\t\t\t\ttrace(\"FOUND IT!!\");\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tg_activity = p_data.items[i].id;\n\t\t\t\t\t\t\tgactivity_api_url = \"https://www.googleapis.com/plus/v1/activities/\" + g_activity + \"?alt=json&key=\" + api_key;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tVMM.getJSON(gactivity_api_url, function(a_data) {\n\t\t\t\t\t\t\t\ttrace(a_data);\n\t\t\t\t\t\t\t\t//a_data.url\n\t\t\t\t\t\t\t\t//a_data.image.url\n\t\t\t\t\t\t\t\t//a_data.actor.displayName\n\t\t\t\t\t\t\t\t//a_data.provider.title\n\t\t\t\t\t\t\t\t//a_data.object.content\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//g_content\t\t+=\t\"<h4>\" + a_data.title + \"</h4>\";\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (typeof a_data.annotation != 'undefined') {\n\t\t\t\t\t\t\t\t\tg_content\t+=\t\"<div class='googleplus-annotation'>'\" + a_data.annotation + \"</div>\";\n\t\t\t\t\t\t\t\t\tg_content\t+=\ta_data.object.content;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tg_content\t+=\ta_data.object.content;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (typeof a_data.object.attachments != 'undefined') {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t//g_attachments\t+=\t\"<div class='googleplus-attachemnts'>\";\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfor(var k = 0; k < a_data.object.attachments.length; k++) {\n\t\t\t\t\t\t\t\t\t\tif (a_data.object.attachments[k].objectType == \"photo\") {\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t=\t\"<a href='\" + a_data.object.url + \"' target='_blank'>\" + \"<img src='\" + a_data.object.attachments[k].image.url + \"' class='article-thumb'></a>\" + g_attachments;\n\t\t\t\t\t\t\t\t\t\t} else if (a_data.object.attachments[k].objectType == \"video\") {\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t=\t\"<img src='\" + a_data.object.attachments[k].image.url + \"' class='article-thumb'>\" + g_attachments;\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"<div>\";\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"<a href='\" + a_data.object.attachments[k].url + \"' target='_blank'>\"\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"<h5>\" + a_data.object.attachments[k].displayName + \"</h5>\";\n\t\t\t\t\t\t\t\t\t\t\t//g_attachments\t+=\t\"<p>\" + a_data.object.attachments[k].content + \"</p>\";\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"</a>\";\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"</div>\";\n\t\t\t\t\t\t\t\t\t\t} else if (a_data.object.attachments[k].objectType == \"article\") {\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"<div>\";\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"<a href='\" + a_data.object.attachments[k].url + \"' target='_blank'>\"\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"<h5>\" + a_data.object.attachments[k].displayName + \"</h5>\";\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"<p>\" + a_data.object.attachments[k].content + \"</p>\";\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"</a>\";\n\t\t\t\t\t\t\t\t\t\t\tg_attachments\t+=\t\"</div>\";\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\ttrace(a_data.object.attachments[k]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tg_attachments\t=\t\"<div class='googleplus-attachments'>\" + g_attachments + \"</div>\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t//mediaElem\t\t=\t\"<div class='googleplus'>\";\n\t\t\t\t\t\t\t\tmediaElem\t\t=\t\"<div class='googleplus-content'>\" + g_content + g_attachments + \"</div>\";\n\n\t\t\t\t\t\t\t\tmediaElem\t\t+=\t\"<div class='vcard author'><a class='screen-name url' href='\" + a_data.url + \"' target='_blank'>\";\n\t\t\t\t\t\t\t\tmediaElem\t\t+=\t\"<span class='avatar'><img src='\" + a_data.actor.image.url + \"' style='max-width: 32px; max-height: 32px;'></span>\"\n\t\t\t\t\t\t\t\tmediaElem\t\t+=\t\"<span class='fn'>\" + a_data.actor.displayName + \"</span>\";\n\t\t\t\t\t\t\t\tmediaElem\t\t+=\t\"<span class='nickname'><span class='thumbnail-inline'></span></span>\";\n\t\t\t\t\t\t\t\tmediaElem\t\t+=\t\"</a></div>\";\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tVMM.attachElement(\"#googleplus_\" + gplus.activity, mediaElem);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t})\n\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tvar error_obj = VMM.parseJSON(jqXHR.responseText);\n\t\t\t\t\ttrace(error_obj.error.message);\n\t\t\t\t\tVMM.attachElement(\"#googleplus_\" + gplus.activity, VMM.MediaElement.loadingmessage(\"<p>ERROR LOADING GOOGLE+ </p><p>\" + error_obj.error.message + \"</p>\"));\n\t\t\t\t})\n\t\t\t\t.success(function(d) {\n\t\t\t\t\tclearTimeout(googleplus_timeout);\n\t\t\t\t\tclearTimeout(callback_timeout);\n\t\t\t\t\tcallback();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\tif (VMM.master_config.googleplus.que.length > 0) {\n\t\t\t\t\tVMM.ExternalAPI.googleplus.create(VMM.master_config.googleplus.que[0], VMM.ExternalAPI.googleplus.pushQue);\n\t\t\t\t\tVMM.Util.removeRange(VMM.master_config.googleplus.que,0);\n\t\t\t\t}\n\t\t\t\t/*\n\t\t\t\tfor(var i = 0; i < VMM.master_config.googleplus.que.length; i++) {\n\t\t\t\t\tVMM.ExternalAPI.googleplus.create(VMM.master_config.googleplus.que[i]);\n\t\t\t\t}\n\t\t\t\tVMM.master_config.googleplus.que = [];\n\t\t\t\t*/\n\t\t\t},\n\t\t\t\n\t\t\terrorTimeOut: function(gplus) {\n\t\t\t\ttrace(\"GOOGLE+ JSON ERROR TIMEOUT \" + gplus.activity);\n\t\t\t\tVMM.attachElement(\"#googleplus_\" + gplus.activity, VMM.MediaElement.loadingmessage(\"<p>Still waiting on GOOGLE+ </p><p>\" + gplus.activity + \"</p>\"));\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\tgoogledocs: {\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tVMM.master_config.googledocs.que.push(m);\n\t\t\t\tVMM.master_config.googledocs.active = true;\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(m) {\n\t\t\t\tvar mediaElem = \"\"; \n\t\t\t\tif (m.id.match(/docs.google.com/i)) {\n\t\t\t\t\tmediaElem\t=\t\"<iframe class='doc' frameborder='0' width='100%' height='100%' src='\" + m.id + \"&amp;embedded=true'></iframe>\";\n\t\t\t\t} else {\n\t\t\t\t\tmediaElem\t=\t\"<iframe class='doc' frameborder='0' width='100%' height='100%' src='\" + \"//docs.google.com/viewer?url=\" + m.id + \"&amp;embedded=true'></iframe>\";\n\t\t\t\t}\n\t\t\t\tVMM.attachElement(\"#\"+m.uid, mediaElem);\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\t\n\t\t\t\tfor(var i = 0; i < VMM.master_config.googledocs.que.length; i++) {\n\t\t\t\t\tVMM.ExternalAPI.googledocs.create(VMM.master_config.googledocs.que[i]);\n\t\t\t\t}\n\t\t\t\tVMM.master_config.googledocs.que = [];\n\t\t\t}\n\t\t\n\t\t},\n\t\t\n\t\tflickr: {\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tVMM.master_config.flickr.que.push(m);\n\t\t\t\tVMM.master_config.flickr.active = true;\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(m, callback) {\n\t\t\t\tvar api_key,\n\t\t\t\t\tcallback_timeout= setTimeout(callback, VMM.master_config.timers.api, m);\n\t\t\t\t\t\n\t\t\t\tif (typeof VMM.master_config.Timeline != 'undefined' && VMM.master_config.Timeline.api_keys.flickr != \"\") {\n\t\t\t\t\tapi_key = VMM.master_config.Timeline.api_keys.flickr;\n\t\t\t\t} else {\n\t\t\t\t\tapi_key = Aes.Ctr.decrypt(VMM.master_config.api_keys_master.flickr, VMM.master_config.vp, 256)\n\t\t\t\t}\n\t\t\t\tvar the_url = \"https://api.flickr.com/services/rest/?method=flickr.photos.getSizes&api_key=\" + api_key + \"&photo_id=\" + m.id + \"&format=json&jsoncallback=?\";\n\t\t\t\t\n\t\t\t\tVMM.getJSON(the_url, function(d) {\n\t\t\t\t\tvar flickr_id = VMM.ExternalAPI.flickr.getFlickrIdFromUrl(d.sizes.size[0].url);\n\t\t\t\t\n\t\t\t\t\tvar flickr_large_id = \"#\" + m.uid,\n\t\t\t\t\t\tflickr_thumb_id = \"#\" + m.uid + \"_thumb\";\n\t\t\t\t\t\t//flickr_thumb_id = \"flickr_\" + uid + \"_thumb\";\n\t\t\t\t\n\t\t\t\t\tvar flickr_img_size,\n\t\t\t\t\t\tflickr_img_thumb,\n\t\t\t\t\t\tflickr_size_found = false,\n\t\t\t\t\t\tflickr_best_size = \"Large\";\n\t\t\t\t\n\t\t\t\t\tflickr_best_size = VMM.ExternalAPI.flickr.sizes(VMM.master_config.sizes.api.height);\n\t\t\t\t\tfor(var i = 0; i < d.sizes.size.length; i++) {\n\t\t\t\t\t\tif (d.sizes.size[i].label == flickr_best_size) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tflickr_size_found = true;\n\t\t\t\t\t\t\tflickr_img_size = d.sizes.size[i].source;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!flickr_size_found) {\n\t\t\t\t\t\tflickr_img_size = d.sizes.size[d.sizes.size.length - 2].source;\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\tflickr_img_thumb = d.sizes.size[0].source;\n\t\t\t\t\tVMM.Lib.attr(flickr_large_id, \"src\", flickr_img_size);\n\t\t\t\t\t//VMM.attachElement(flickr_large_id, \"<a href='\" + flick.link + \"' target='_blank'><img src='\" + flickr_img_size + \"'></a>\");\n\t\t\t\t\tVMM.attachElement(flickr_thumb_id, \"<img src='\" + flickr_img_thumb + \"'>\");\n\t\t\t\t\t\n\t\t\t\t})\n\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\ttrace(\"FLICKR error\");\n\t\t\t\t\ttrace(\"FLICKR ERROR: \" + textStatus + \" \" + jqXHR.responseText);\n\t\t\t\t})\n\t\t\t\t.success(function(d) {\n\t\t\t\t\tclearTimeout(callback_timeout);\n\t\t\t\t\tcallback();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\tif (VMM.master_config.flickr.que.length > 0) {\n\t\t\t\t\tVMM.ExternalAPI.flickr.create(VMM.master_config.flickr.que[0], VMM.ExternalAPI.flickr.pushQue);\n\t\t\t\t\tVMM.Util.removeRange(VMM.master_config.flickr.que,0);\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tsizes: function(s) {\n\t\t\t\tvar _size = \"\";\n\t\t\t\tif (s <= 75) {\n\t\t\t\t\t_size = \"Thumbnail\";\n\t\t\t\t} else if (s <= 180) {\n\t\t\t\t\t_size = \"Small\";\n\t\t\t\t} else if (s <= 240) {\n\t\t\t\t\t_size = \"Small 320\";\n\t\t\t\t} else if (s <= 375) {\n\t\t\t\t\t_size = \"Medium\";\n\t\t\t\t} else if (s <= 480) {\n\t\t\t\t\t_size = \"Medium 640\";\n\t\t\t\t} else if (s <= 600) {\n\t\t\t\t\t_size = \"Large\";\n\t\t\t\t} else {\n\t\t\t\t\t_size = \"Large\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn _size;\n\t\t\t},\n\n\t\t\tgetFlickrIdFromUrl: function(url) {\n\t\t\t\tvar idx = url.indexOf(\"flickr.com/photos/\");\n\t\t\t\tif (idx == -1) return null; \n\t\t\t\tvar pos = idx + \"flickr.com/photos/\".length;\n\t\t\t\tvar photo_info = url.substr(pos)\n\t\t\t\tif (photo_info.indexOf('/') == -1) return null;\n\t\t\t\tif (photo_info.indexOf('/') == 0) photo_info = photo_info.substr(1);\n\t\t\t\treturn photo_info.split(\"/\")[1];\n\t\t\t}\n\t\t},\n\t\t\n\t\tinstagram: {\n\t\t\tget: function(m, thumb) {\n\t\t\t\tif (thumb) {\n\t\t\t\t\treturn \"//instagr.am/p/\" + m.id + \"/media/?size=t\";\n\t\t\t\t} else {\n\t\t\t\t\treturn \"//instagr.am/p/\" + m.id + \"/media/?size=\" + VMM.ExternalAPI.instagram.sizes(VMM.master_config.sizes.api.height);\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tsizes: function(s) {\n\t\t\t\tvar _size = \"\";\n\t\t\t\tif (s <= 150) {\n\t\t\t\t\t_size = \"t\";\n\t\t\t\t} else if (s <= 306) {\n\t\t\t\t\t_size = \"m\";\n\t\t\t\t} else {\n\t\t\t\t\t_size = \"l\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn _size;\n\t\t\t},\n\n\t\t\tisInstagramUrl: function(url) {\n\t\t\t\treturn url.match(\"instagr.am/p/\") || url.match(\"instagram.com/p/\");\n\t\t\t},\n\n\t\t\tgetInstagramIdFromUrl: function(url) {\n\t\t\t\ttry {\n\t\t\t\t\treturn url.split(\"\\/p\\/\")[1].split(\"/\")[0];\t\n\t\t\t\t} catch(e) {\n\t\t\t\t\ttrace(\"Invalid Instagram url: \" + url);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\tsoundcloud: {\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tVMM.master_config.soundcloud.que.push(m);\n\t\t\t\tVMM.master_config.soundcloud.active = true;\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(m, callback) {\n\t\t\t\tvar the_url = \"//soundcloud.com/oembed?url=\" + m.id + \"&maxheight=168&format=js&callback=?\";\n\t\t\t\tVMM.getJSON(the_url, function(d) {\n\t\t\t\t\tVMM.attachElement(\"#\"+m.uid, d.html);\n\t\t\t\t\tcallback();\n\t\t\t\t});\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\tif (VMM.master_config.soundcloud.que.length > 0) {\n\t\t\t\t\tVMM.ExternalAPI.soundcloud.create(VMM.master_config.soundcloud.que[0], VMM.ExternalAPI.soundcloud.pushQue);\n\t\t\t\t\tVMM.Util.removeRange(VMM.master_config.soundcloud.que,0);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\twikipedia: {\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tVMM.master_config.wikipedia.que.push(m);\n\t\t\t\tVMM.master_config.wikipedia.active = true;\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(m, callback) {\n\t\t\t\tvar the_url = \"//\" + m.lang + \".wikipedia.org/w/api.php?action=query&prop=extracts&redirects=&titles=\" + m.id + \"&exintro=1&format=json&callback=?\";\n\t\t\t\tcallback_timeout= setTimeout(callback, VMM.master_config.timers.api, m);\n\t\t\t\t\n\t\t\t\tif ( VMM.Browser.browser == \"Explorer\" && parseInt(VMM.Browser.version, 10) >= 7 && window.XDomainRequest) {\n\t\t\t\t\tvar temp_text\t=\t\"<h4><a href='http://\" + VMM.master_config.language.api.wikipedia + \".wikipedia.org/wiki/\" + m.id + \"' target='_blank'>\" + m.url + \"</a></h4>\";\n\t\t\t\t\ttemp_text\t\t+=\t\"<span class='wiki-source'>\" + VMM.master_config.language.messages.wikipedia + \"</span>\";\n\t\t\t\t\ttemp_text\t\t+=\t\"<p>Wikipedia entry unable to load using Internet Explorer 8 or below.</p>\";\n\t\t\t\t\tVMM.attachElement(\"#\"+m.uid, temp_text );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tVMM.getJSON(the_url, function(d) {\n\t\t\t\t\tif (d.query) {\n\t\t\t\t\t\tvar wiki_extract,\n\t\t\t\t\t\t\twiki_title, \n\t\t\t\t\t\t\t_wiki = \"\", \n\t\t\t\t\t\t\twiki_text = \"\", \n\t\t\t\t\t\t\twiki_number_of_paragraphs = 1, \n\t\t\t\t\t\t\twiki_text_array = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\twiki_extract = VMM.Util.getObjectAttributeByIndex(d.query.pages, 0).extract;\n\t\t\t\t\t\twiki_title = VMM.Util.getObjectAttributeByIndex(d.query.pages, 0).title;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (wiki_extract.match(\"<p>\")) {\n\t\t\t\t\t\t\twiki_text_array = wiki_extract.split(\"<p>\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twiki_text_array.push(wiki_extract);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\tfor(var i = 0; i < wiki_text_array.length; i++) {\n\t\t\t\t\t\t\tif (i+1 <= wiki_number_of_paragraphs && i+1 < wiki_text_array.length) {\n\t\t\t\t\t\t\t\twiki_text\t+= \"<p>\" + wiki_text_array[i+1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\t_wiki\t\t=\t\"<h4><a href='http://\" + VMM.master_config.language.api.wikipedia + \".wikipedia.org/wiki/\" + wiki_title + \"' target='_blank'>\" + wiki_title + \"</a></h4>\";\n\t\t\t\t\t\t_wiki\t\t+=\t\"<span class='wiki-source'>\" + VMM.master_config.language.messages.wikipedia + \"</span>\";\n\t\t\t\t\t\t_wiki\t\t+=\tVMM.Util.linkify_wikipedia(wiki_text);\n\t\t\t\t\t\n\t\t\t\t\t\tif (wiki_extract.match(\"REDIRECT\")) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tVMM.attachElement(\"#\"+m.uid, _wiki );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//callback();\n\t\t\t\t})\n\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\ttrace(\"WIKIPEDIA error\");\n\t\t\t\t\ttrace(\"WIKIPEDIA ERROR: \" + textStatus + \" \" + jqXHR.responseText);\n\t\t\t\t\ttrace(errorThrown);\n\t\t\t\t\t\n\t\t\t\t\tVMM.attachElement(\"#\"+m.uid, VMM.MediaElement.loadingmessage(\"<p>Wikipedia is not responding</p>\"));\n\t\t\t\t\t// TRY AGAIN?\n\t\t\t\t\tclearTimeout(callback_timeout);\n\t\t\t\t\tif (VMM.master_config.wikipedia.tries < 4) {\n\t\t\t\t\t\ttrace(\"WIKIPEDIA ATTEMPT \" + VMM.master_config.wikipedia.tries);\n\t\t\t\t\t\ttrace(m);\n\t\t\t\t\t\tVMM.master_config.wikipedia.tries++;\n\t\t\t\t\t\tVMM.ExternalAPI.wikipedia.create(m, callback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t})\n\t\t\t\t.success(function(d) {\n\t\t\t\t\tVMM.master_config.wikipedia.tries = 0;\n\t\t\t\t\tclearTimeout(callback_timeout);\n\t\t\t\t\tcallback();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\t\n\t\t\t\tif (VMM.master_config.wikipedia.que.length > 0) {\n\t\t\t\t\ttrace(\"WIKIPEDIA PUSH QUE \" + VMM.master_config.wikipedia.que.length);\n\t\t\t\t\tVMM.ExternalAPI.wikipedia.create(VMM.master_config.wikipedia.que[0], VMM.ExternalAPI.wikipedia.pushQue);\n\t\t\t\t\tVMM.Util.removeRange(VMM.master_config.wikipedia.que,0);\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\tyoutube: {\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tvar the_url = \"//gdata.youtube.com/feeds/api/videos/\" + m.id + \"?v=2&alt=jsonc&callback=?\";\n\t\t\t\t\t\n\t\t\t\tVMM.master_config.youtube.que.push(m);\n\t\t\t\t\n\t\t\t\tif (!VMM.master_config.youtube.active) {\n\t\t\t\t\tif (!VMM.master_config.youtube.api_loaded) {\n\t\t\t\t\t\tLoadLib.js('//www.youtube.com/player_api', function() {\n\t\t\t\t\t\t\ttrace(\"YouTube API Library Loaded\");\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// THUMBNAIL\n\t\t\t\tVMM.getJSON(the_url, function(d) {\n\t\t\t\t\tVMM.ExternalAPI.youtube.createThumb(d, m)\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(m) {\n\t\t\t\tif (typeof(m.start) != 'undefined') {\n\t\t\t\t\t\n\t\t\t\t\tvar vidstart\t\t\t= m.start.toString(),\n\t\t\t\t\t\tvid_start_minutes\t= 0,\n\t\t\t\t\t\tvid_start_seconds\t= 0;\n\t\t\t\t\t\t\n\t\t\t\t\tif (vidstart.match('m')) {\n\t\t\t\t\t\tvid_start_minutes = parseInt(vidstart.split(\"m\")[0], 10);\n\t\t\t\t\t\tvid_start_seconds = parseInt(vidstart.split(\"m\")[1].split(\"s\")[0], 10);\n\t\t\t\t\t\tm.start = (vid_start_minutes * 60) + vid_start_seconds;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm.start = 0;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tm.start = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar p = {\n\t\t\t\t\tactive: \t\t\t\tfalse,\n\t\t\t\t\tplayer: \t\t\t\t{},\n\t\t\t\t\tname:\t\t\t\t\tm.uid,\n\t\t\t\t\tplaying:\t\t\t\tfalse,\n\t\t\t\t\thd:\t\t\t\t\t\tfalse\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (typeof(m.hd) != 'undefined') {\n\t\t\t\t\tp.hd = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tp.player[m.id] = new YT.Player(m.uid, {\n\t\t\t\t\theight: \t\t\t\t'390',\n\t\t\t\t\twidth: \t\t\t\t\t'640',\n\t\t\t\t\tplayerVars: {\n\t\t\t\t\t\tenablejsapi: 1,\n\t\t\t\t\t\tcolor: (\"dark\" == VMM.master_config.Timeline.youtubeTheme) ? \"red\" : \"white\", // https://developers.google.com/youtube/player_parameters#color\n\t\t\t\t\t\tshowinfo: 0,\n\t\t\t\t\t\ttheme: (\"undefined\" !== VMM.master_config.Timeline.youtubeTheme) ? VMM.master_config.Timeline.youtubeTheme : \"light\", // https://developers.google.com/youtube/player_parameters#theme\n\t\t\t\t\t\tstart: m.start,\n\t\t\t\t\t\trel: 0\n\t\t\t\t\t},\n\t\t\t\t\tvideoId: m.id,\n\t\t\t\t\tevents: {\n\t\t\t\t\t\t'onReady': \t\t\tVMM.ExternalAPI.youtube.onPlayerReady,\n\t\t\t\t\t\t'onStateChange': \tVMM.ExternalAPI.youtube.onStateChange\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tVMM.master_config.youtube.array.push(p);\n\t\t\t},\n\t\t\t\n\t\t\tcreateThumb: function(d, m) {\n\t\t\t\ttrace(\"CREATE THUMB\");\n\t\t\t\ttrace(d);\n\t\t\t\ttrace(m);\n\t\t\t\tif (typeof d.data != 'undefined') {\n\t\t\t\t\tvar thumb_id = \"#\" + m.uid + \"_thumb\";\n\t\t\t\t\tVMM.attachElement(thumb_id, \"<img src='\" + d.data.thumbnail.sqDefault + \"'>\");\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\tfor(var i = 0; i < VMM.master_config.youtube.que.length; i++) {\n\t\t\t\t\tVMM.ExternalAPI.youtube.create(VMM.master_config.youtube.que[i]);\n\t\t\t\t}\n\t\t\t\tVMM.master_config.youtube.que = [];\n\t\t\t},\n\t\t\t\n\t\t\tonAPIReady: function() {\n\t\t\t\tVMM.master_config.youtube.active = true;\n\t\t\t\tVMM.ExternalAPI.youtube.pushQue();\n\t\t\t},\n\t\t\t\n\t\t\tstopPlayers: function() {\n\t\t\t\tfor(var i = 0; i < VMM.master_config.youtube.array.length; i++) {\n\t\t\t\t\tif (VMM.master_config.youtube.array[i].playing) {\n\t\t\t\t\t\tif (typeof VMM.master_config.youtube.array[i].player.the_name !== 'undefined') {\n\t\t\t\t\t\t\tVMM.master_config.youtube.array[i].player.the_name.stopVideo();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t \n\t\t\tonStateChange: function(e) {\n\t\t\t\tfor(var i = 0; i < VMM.master_config.youtube.array.length; i++) {\n\t\t\t\t\tfor (var z in VMM.master_config.youtube.array[i].player) {\n\t\t\t\t\t\tif (VMM.master_config.youtube.array[i].player[z] == e.target) {\n\t\t\t\t\t\t\tVMM.master_config.youtube.array[i].player.the_name = VMM.master_config.youtube.array[i].player[z];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (VMM.master_config.youtube.array[i].player.the_name == e.target) {\n\t\t\t\t\t\tif (e.data == YT.PlayerState.PLAYING) {\n\t\t\t\t\t\t\tVMM.master_config.youtube.array[i].playing = true;\n\t\t\t\t\t\t\tif (VMM.master_config.youtube.array[i].hd === false) {\n\t\t\t\t\t\t\t\tVMM.master_config.youtube.array[i].hd = true;\n\t\t\t\t\t\t\t\tVMM.master_config.youtube.array[i].player.the_name.setPlaybackQuality(\"hd720\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\n\t\t\tonPlayerReady: function(e) {\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t},\n\t\t\n\t\tvimeo: {\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tVMM.master_config.vimeo.que.push(m);\n\t\t\t\tVMM.master_config.vimeo.active = true;\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(m, callback) {\n\t\t\t\ttrace(\"VIMEO CREATE\");\n\t\t\t\t\n\t\t\t\t// THUMBNAIL\n\t\t\t\tvar thumb_url\t= \"//vimeo.com/api/v2/video/\" + m.id + \".json\",\n\t\t\t\t\tvideo_url\t= \"//player.vimeo.com/video/\" + m.id + \"?title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff\";\n\t\t\t\t\t\n\t\t\t\tVMM.getJSON(thumb_url, function(d) {\n\t\t\t\t\tVMM.ExternalAPI.vimeo.createThumb(d, m);\n\t\t\t\t\tcallback();\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// VIDEO\n\t\t\t\tVMM.attachElement(\"#\" + m.uid, \"<iframe autostart='false' frameborder='0' width='100%' height='100%' src='\" + video_url + \"'></iframe>\");\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tcreateThumb: function(d, m) {\n\t\t\t\ttrace(\"VIMEO CREATE THUMB\");\n\t\t\t\tvar thumb_id = \"#\" + m.uid + \"_thumb\";\n\t\t\t\tVMM.attachElement(thumb_id, \"<img src='\" + d[0].thumbnail_small + \"'>\");\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\tif (VMM.master_config.vimeo.que.length > 0) {\n\t\t\t\t\tVMM.ExternalAPI.vimeo.create(VMM.master_config.vimeo.que[0], VMM.ExternalAPI.vimeo.pushQue);\n\t\t\t\t\tVMM.Util.removeRange(VMM.master_config.vimeo.que,0);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\tvine: {\n\t\t\t\n\t\t\tget: function(m) {\n\t\t\t\tVMM.master_config.vine.que.push(m);\n\t\t\t\tVMM.master_config.vine.active = true;\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(m, callback) {\n\t\t\t\ttrace(\"VINE CREATE\");\t\t\t\t\n\t\t\t\t\n\t\t\t\tvar video_url\t= \"https://vine.co/v/\" + m.id + \"/embed/simple\";\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// VIDEO\n\t\t\t\t// TODO: NEED TO ADD ASYNC SCRIPT TO TIMELINE FLOW\n\t\t\t\tVMM.attachElement(\"#\" + m.uid, \"<iframe frameborder='0' width='100%' height='100%' src='\" + video_url + \"'></iframe><script async src='https://platform.vine.co/static/scripts/embed.js' charset='utf-8'></script>\");\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\tif (VMM.master_config.vine.que.length > 0) {\n\t\t\t\t\tVMM.ExternalAPI.vine.create(VMM.master_config.vine.que[0], VMM.ExternalAPI.vine.pushQue);\n\t\t\t\t\tVMM.Util.removeRange(VMM.master_config.vine.que,0);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\twebthumb: {\n\t\t\t\n\t\t\tget: function(m, thumb) {\n\t\t\t\tVMM.master_config.webthumb.que.push(m);\n\t\t\t\tVMM.master_config.webthumb.active = true;\n\t\t\t},\n\t\t\t\n\t\t\tsizes: function(s) {\n\t\t\t\tvar _size = \"\";\n\t\t\t\tif (s <= 150) {\n\t\t\t\t\t_size = \"t\";\n\t\t\t\t} else if (s <= 306) {\n\t\t\t\t\t_size = \"m\";\n\t\t\t\t} else {\n\t\t\t\t\t_size = \"l\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn _size;\n\t\t\t},\n\t\t\t\n\t\t\tcreate: function(m) {\n\t\t\t\ttrace(\"WEB THUMB CREATE\");\n\t\t\t\t\n\t\t\t\tvar thumb_url\t= \"//api.pagepeeker.com/v2/thumbs.php?\";\n\t\t\t\t\turl\t\t\t= m.id.replace(\"http://\", \"\");//.split(\"/\")[0];\n\t\t\t\t\t\n\t\t\t\t// Main Image\n\t\t\t\tVMM.attachElement(\"#\" + m.uid, \"<a href='\" + m.id + \"' target='_blank'><img src='\" + thumb_url + \"size=x&url=\" + url + \"'></a>\");\n\t\t\t\t\n\t\t\t\t// Thumb\n\t\t\t\tVMM.attachElement(\"#\" + m.uid + \"_thumb\", \"<img src='\" + thumb_url + \"size=t&url=\" + url + \"'>\");\n\t\t\t},\n\t\t\t\n\t\t\tpushQue: function() {\n\t\t\t\tfor(var i = 0; i < VMM.master_config.webthumb.que.length; i++) {\n\t\t\t\t\tVMM.ExternalAPI.webthumb.create(VMM.master_config.webthumb.que[i]);\n\t\t\t\t}\n\t\t\t\tVMM.master_config.webthumb.que = [];\n\t\t\t}\n\t\t}\n\t\n\t}).init();\n\t\n}\n\n/*  YOUTUBE API READY\n\tCan't find a way to customize this callback and keep it in the VMM namespace\n\tYoutube wants it to be this function. \n================================================== */\nfunction onYouTubePlayerAPIReady() {\n\ttrace(\"GLOBAL YOUTUBE API CALLED\")\n\tVMM.ExternalAPI.youtube.onAPIReady();\n}\n"
  },
  {
    "path": "source/js/Core/Media/VMM.Media.js",
    "content": "/* Media\n================================================== */\n\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n================================================== */\n// @codekit-prepend \"VMM.ExternalAPI.js\";\n// @codekit-prepend \"VMM.MediaElement.js\";\n// @codekit-prepend \"VMM.MediaType.js\";\n// @codekit-prepend \"VMM.TextElement.js\";\n"
  },
  {
    "path": "source/js/Core/Media/VMM.MediaElement.js",
    "content": "/* MediaElement\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.MediaElement == 'undefined') {\n\t\n\tVMM.MediaElement = ({\n\t\t\n\t\tinit: function() {\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\tloadingmessage: function(m) {\n\t\t\treturn \"<div class='vco-loading'><div class='vco-loading-container'><div class='vco-loading-icon'></div>\" + \"<div class='vco-message'><p>\" + m + \"</p></div></div></div>\";\n\t\t},\n\t\t\n\t\tthumbnail: function(data, w, h, uid) {\n\t\t\tvar _w\t\t= 16,\n\t\t\t\t_h\t\t= 24,\n\t\t\t\t_uid\t= \"\";\n\t\t\t\t\n\t\t\tif (w != null && w != \"\") {_w = w};\n\t\t\tif (h != null && h != \"\") {_h = h};\n\t\t\tif (uid != null && uid != \"\") {_uid = uid};\n\t\t\t\n\n\t\t\tif (data.thumbnail != null && data.thumbnail != \"\") {\n\t\t\t\t\ttrace(\"CUSTOM THUMB\");\n\t\t\t\t\tmediaElem =\t\"<div class='thumbnail thumb-custom' id='\" + uid + \"_custom_thumb'><img src='\" + data.thumbnail + \"'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t} else if (data.media != null && data.media != \"\") {\n\t\t\t\tvar _valid\t\t= true,\n\t\t\t\t\tmediaElem\t= \"\",\n\t\t\t\t\tm\t\t\t= VMM.MediaType(data.media); //returns an object with .type and .id\n\t\t\t\t\t\n\t\t\t\t// DETERMINE THUMBNAIL OR ICON\n\t\t\t\tif (m.type == \"image\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-photo'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"flickr\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-photo' id='\" + uid + \"_thumb'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"instagram\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-instagram' id='\" + uid + \"_thumb'><img src='\" + VMM.ExternalAPI.instagram.get(m, true) + \"'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"youtube\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-youtube' id='\" + uid + \"_thumb'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"googledoc\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-document'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"vimeo\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-vimeo' id='\" + uid + \"_thumb'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type  ==  \"vine\") {\n\t\t\t\t\tmediaElem\t\t=  \"<div class='thumbnail thumb-vine'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type  ==  \"dailymotion\") {\n\t\t\t\t\tmediaElem\t\t=  \"<div class='thumbnail thumb-video'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"twitter\"){\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-twitter'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"twitter-ready\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-twitter'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"soundcloud\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-audio'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"google-map\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-map'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t\t==\t\"googleplus\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-googleplus'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"wikipedia\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-wikipedia'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"storify\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-storify'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"quote\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-quote'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"iframe\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-video'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"unknown\") {\n\t\t\t\t\tif (m.id.match(\"blockquote\")) {\n\t\t\t\t\t\tmediaElem\t=\t\"<div class='thumbnail thumb-quote'></div>\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmediaElem\t=\t\"<div class='thumbnail thumb-plaintext'></div>\";\n\t\t\t\t\t}\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else if (m.type\t==\t\"website\") {\n\t\t\t\t\tmediaElem\t\t=\t\"<div class='thumbnail thumb-website' id='\" + uid + \"_thumb'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t} else {\n\t\t\t\t\tmediaElem = \"<div class='thumbnail thumb-plaintext'></div>\";\n\t\t\t\t\treturn mediaElem;\n\t\t\t\t}\n\t\t\t} \n\t\t},\n\t\t\n\t\tcreate: function(data, uid) {\n\t\t\tvar _valid = false,\n\t\t\t\t//loading_messege\t\t\t=\t\"<span class='messege'><p>\" + VMM.master_config.language.messages.loading + \"</p></span>\";\n\t\t\t\tloading_messege\t\t\t=\tVMM.MediaElement.loadingmessage(VMM.master_config.language.messages.loading + \"...\");\n\t\t\t\n\t\t\tif (data.media != null && data.media != \"\") {\n\t\t\t\tvar mediaElem = \"\", captionElem = \"\", creditElem = \"\", _id = \"\", isTextMedia = false, m;\n\t\t\t\t\n\t\t\t\tm = VMM.MediaType(data.media); //returns an object with .type and .id\n\t\t\t\tm.uid = uid;\n\t\t\t\t_valid = true;\n\t\t\t\t\n\t\t\t// CREDIT\n\t\t\t\tif (data.credit != null && data.credit != \"\") {\n\t\t\t\t\tcreditElem\t\t\t=\t\"<div class='credit'>\" + VMM.Util.linkify_with_twitter(data.credit, \"_blank\") + \"</div>\";\n\t\t\t\t}\n\t\t\t// CAPTION\n\t\t\t\tif (data.caption != null && data.caption != \"\") {\n\t\t\t\t\tcaptionElem\t\t\t=\t\"<div class='caption'>\" + VMM.Util.linkify_with_twitter(data.caption, \"_blank\") + \"</div>\";\n\t\t\t\t}\n\t\t\t// IMAGE\n\t\t\t\tif (m.type\t\t\t\t==\t\"image\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-image media-shadow'><img src='\" + m.id + \"' class='media-image'></div>\";\n\t\t\t// FLICKR\n\t\t\t\t} else if (m.type\t\t==\t\"flickr\") {\n\t\t\t\t\t//mediaElem\t\t\t=\t\"<div class='media-image media-shadow' id='\" + uid + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-image media-shadow'><a href='\" + m.link + \"' target='_blank'><img id='\" + uid + \"'></a></div>\";\n\t\t\t\t\tVMM.ExternalAPI.flickr.get(m);\n\t\t\t// INSTAGRAM\n\t\t\t\t} else if (m.type\t\t==\t\"instagram\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-image media-shadow'><a href='\" + m.link + \"' target='_blank'><img src='\" + VMM.ExternalAPI.instagram.get(m) + \"'></a></div>\";\n\t\t\t// GOOGLE DOCS\n\t\t\t\t} else if (m.type\t\t==\t\"googledoc\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-frame media-shadow doc' id='\" + m.uid + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tVMM.ExternalAPI.googledocs.get(m);\n\t\t\t// YOUTUBE\n\t\t\t\t} else if (m.type\t\t==\t\"youtube\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-shadow'><div class='media-frame video youtube' id='\" + m.uid + \"'>\" + loading_messege + \"</div></div>\";\n\t\t\t\t\tVMM.ExternalAPI.youtube.get(m);\n\t\t\t// VIMEO\n\t\t\t\t} else if (m.type\t\t==\t\"vimeo\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-shadow media-frame video vimeo' id='\" + m.uid + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tVMM.ExternalAPI.vimeo.get(m);\n\t\t\t// DAILYMOTION\n\t\t\t\t} else if (m.type\t\t==\t\"dailymotion\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-shadow'><iframe class='media-frame video dailymotion' autostart='false' frameborder='0' width='100%' height='100%' src='//www.dailymotion.com/embed/video/\" + m.id + \"'></iframe></div>\";\n\t\t\t// VINE\n\t\t\t\t} else if (m.type\t\t==\t\"vine\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-shadow media-frame video vine' id='\" + m.uid + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tVMM.ExternalAPI.vine.get(m);\n\t\t\t// TWITTER\n\t\t\t\t} else if (m.type\t\t==\t\"twitter\"){\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='twitter' id='\" + m.uid + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tisTextMedia\t\t\t=\ttrue;\n\t\t\t\t\tVMM.ExternalAPI.twitter.get(m);\n\t\t\t// TWITTER\n\t\t\t\t} else if (m.type\t\t==\t\"twitter-ready\") {\n\t\t\t\t\tisTextMedia\t\t\t=\ttrue;\n\t\t\t\t\tmediaElem\t\t\t=\tm.id;\n\t\t\t// SOUNDCLOUD\n\t\t\t\t} else if (m.type\t\t==\t\"soundcloud\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-frame media-shadow soundcloud' id='\" + m.uid + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tVMM.ExternalAPI.soundcloud.get(m);\n\t\t\t// GOOGLE MAPS\n\t\t\t\t} else if (m.type\t\t==\t\"google-map\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-frame media-shadow map' id='\" + m.uid + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tVMM.ExternalAPI.googlemaps.get(m);\n\t\t\t// GOOGLE PLUS\n\t\t\t\t} else if (m.type\t\t==\t\"googleplus\") {\n\t\t\t\t\t_id\t\t\t\t\t=\t\"googleplus_\" + m.id;\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='googleplus' id='\" + _id + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tisTextMedia\t\t\t=\ttrue;\n\t\t\t\t\tVMM.ExternalAPI.googleplus.get(m);\n\t\t\t// WIKIPEDIA\n\t\t\t\t} else if (m.type\t\t==\t\"wikipedia\") {\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='wikipedia' id='\" + m.uid + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tisTextMedia\t\t\t=\ttrue;\n\t\t\t\t\tVMM.ExternalAPI.wikipedia.get(m);\n\t\t\t// STORIFY\n\t\t\t\t} else if (m.type\t\t==\t\"storify\") { \n\t\t\t\t\tisTextMedia\t\t\t=\ttrue;\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='plain-text-quote'>\" + m.id + \"</div>\";\n\t\t\t// IFRAME\n\t\t\t\t} else if (m.type\t\t==\t\"iframe\") { \n\t\t\t\t\tisTextMedia\t\t\t=\ttrue;\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-shadow'><iframe class='media-frame video' autostart='false' frameborder='0' width='100%' height='100%' src='\" + m.id + \"'></iframe></div>\";\n\t\t\t// QUOTE\n\t\t\t\t} else if (m.type\t\t==\t\"quote\") { \n\t\t\t\t\tisTextMedia\t\t\t=\ttrue;\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='plain-text-quote'>\" + m.id + \"</div>\";\n\t\t\t// UNKNOWN\n\t\t\t\t} else if (m.type\t\t==\t\"unknown\") { \n\t\t\t\t\ttrace(\"NO KNOWN MEDIA TYPE FOUND TRYING TO JUST PLACE THE HTML\"); \n\t\t\t\t\tisTextMedia\t\t\t=\ttrue;\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='plain-text'><div class='container'>\" + VMM.Util.properQuotes(m.id) + \"</div></div>\";\n\t\t\t// WEBSITE\n\t\t\t\t} else if (m.type\t\t==\t\"website\") { \n\t\t\t\t\t\n\t\t\t\t\tmediaElem\t\t\t=\t\"<div class='media-shadow website' id='\" + m.uid + \"'>\" + loading_messege + \"</div>\";\n\t\t\t\t\tVMM.ExternalAPI.webthumb.get(m);\n\t\t\t\t\t//mediaElem\t\t\t=\t\"<div class='media-shadow website'><a href='\" + m.id + \"' target='_blank'>\" + \"<img src='http://api1.thumbalizr.com/?url=\" + m.id.replace(/[\\./]$/g, \"\") + \"&width=300' class='media-image'></a></div>\";\n\t\t\t\t\t\n\t\t\t// NO MATCH\n\t\t\t\t} else {\n\t\t\t\t\ttrace(\"NO KNOWN MEDIA TYPE FOUND\");\n\t\t\t\t\ttrace(m.type);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t// WRAP THE MEDIA ELEMENT\n\t\t\t\tmediaElem\t\t\t\t=\t\"<div class='media-container' >\" + mediaElem + creditElem + captionElem + \"</div>\";\n\t\t\t// RETURN\n\t\t\t\tif (isTextMedia) {\n\t\t\t\t\treturn \"<div class='text-media'><div class='media-wrapper'>\" + mediaElem + \"</div></div>\";\n\t\t\t\t} else {\n\t\t\t\t\treturn \"<div class='media-wrapper'>\" + mediaElem + \"</div>\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\t\t\t\n\t\t}\n\t\t\n\t}).init();\n}"
  },
  {
    "path": "source/js/Core/Media/VMM.MediaType.js",
    "content": "/*\tMediaType\n\tDetermines the type of media the url string is.\n\treturns an object with .type and .id\n\tthe id is a key piece of information needed to make\n\tthe request of the api.\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.MediaType == 'undefined') {\n\t\n\tVMM.MediaType = function(_d) {\n\t\tvar d\t\t= _d.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''),\n\t\t\tsuccess\t= false,\n\t\t\tmedia\t= {\n\t\t\t\ttype:\t\t\"unknown\",\n\t\t\t\tid:\t\t\t\"\",\n\t\t\t\tstart:\t\t0,\n\t\t\t\thd:\t\t\tfalse,\n\t\t\t\tlink:\t\t\"\",\n\t\t\t\tlang:\t\tVMM.Language.lang,\n\t\t\t\tuniqueid:\tVMM.Util.unique_ID(6)\n\t\t\t};\n\t\t\n\t\tif (d.match(\"div class='twitter'\")) {\n\t\t\tmedia.type = \"twitter-ready\";\n\t\t    media.id = d;\n\t\t    success = true;\n\t\t} else if (d.match('<blockquote')) {\n\t\t\tmedia.type = \"quote\";\n\t\t\tmedia.id = d;\n\t\t\tsuccess = true;\n\t\t} else if (d.match('<iframe')) {\n\t\t\tmedia.type = \"iframe\";\n\t\t\ttrace(\"IFRAME\")\n\t\t\tregex = /src=['\"](\\S+?)['\"]/;\n\t\t\tgroup = d.match(regex);\n\t\t\tif (group) {\n\t\t\t\tmedia.id = group[1];\n\t\t\t}\n\t\t\ttrace( \"iframe url: \" + media.id );\n\t\t\tsuccess = Boolean(media.id);\n\t\t} else if (d.match('(www.)?youtube|youtu\\.be')) {\n\t\t\tif (d.match('v=')) {\n\t\t\t\tmedia.id\t= VMM.Util.getUrlVars(d)[\"v\"];\n\t\t\t} else if (d.match('\\/embed\\/')) {\n\t\t\t\t// TODO Issue #618 better splitting\n\t\t\t\tmedia.id\t= d.split(\"embed\\/\")[1].split(/[?&]/)[0];\n\t\t\t} else if (d.match(/v\\/|v=|youtu\\.be\\//)){\n\t\t\t\tmedia.id\t= d.split(/v\\/|v=|youtu\\.be\\//)[1].split(/[?&]/)[0];\n\t\t\t} else {\n\t\t\t\ttrace(\"YOUTUBE IN URL BUT NOT A VALID VIDEO\");\n\t\t\t}\n\t\t\tmedia.start\t= VMM.Util.getUrlVars(d)[\"t\"];\n\t\t\tmedia.hd\t= VMM.Util.getUrlVars(d)[\"hd\"];\n\t\t    media.type = \"youtube\";\n\t\t    success = true;\n\t\t} else if (d.match('(player.)?vimeo\\.com')) {\n\t\t    media.type = \"vimeo\";\n\t\t    media.id = d.split(/video\\/|\\/\\/vimeo\\.com\\//)[1].split(/[?&]/)[0];;\n\t\t    success = true;\n\t    } else if (d.match('(www.)?dailymotion\\.com')) {\n\t\t\tmedia.id = d.split(/video\\/|\\/\\/dailymotion\\.com\\//)[1];\n\t\t\tmedia.type = \"dailymotion\";\n\t\t\tsuccess = true;\n\t    } else if (d.match('(www.)?vine\\.co')) {\n\t\t\ttrace(\"VINE\");\n\t\t\t//https://vine.co/v/b55LOA1dgJU\n\t\t\tif (d.match(\"vine.co/v/\")) {\n\t\t\t\tmedia.id = d.split(\"vine.co/v/\")[1];\n\t\t\t\ttrace(media.id);\n\t\t\t}\n\t\t\ttrace(d);\n\t\t\tmedia.type = \"vine\";\n\t\t\tsuccess = true;\n\t\t} else if (d.match('(player.)?soundcloud\\.com')) {\n\t\t\tmedia.type = \"soundcloud\";\n\t\t\tmedia.id = d;\n\t\t\tsuccess = true;\n\t\t} else if (d.match('(www.)?twitter\\.com') && d.match('status') ) {\n\t\t\tif (d.match(\"status\\/\")) {\n\t\t\t\tmedia.id = d.split(\"status\\/\")[1];\n\t\t\t} else if (d.match(\"statuses\\/\")) {\n\t\t\t\tmedia.id = d.split(\"statuses\\/\")[1];\n\t\t\t} else {\n\t\t\t\tmedia.id = \"\";\n\t\t\t}\n\t\t\tmedia.type = \"twitter\";\n\t\t\tsuccess = true;\n\t\t} else if (d.match(\"maps.google\") && !d.match(\"staticmap\") && !d.match('streetview')) {\n\t\t\tmedia.type = \"google-map\";\n\t\t    media.id = d;\n\t\t\tsuccess = true;\n\t\t} else if (d.match(/www.google.\\w+\\/maps/)) {\n\t\t\tmedia.type = \"google-map\";\n\t\t    media.id = d;\n\t\t\tsuccess = true;\n\t\t} else if (d.match(\"plus.google\")) {\n\t\t\tmedia.type = \"googleplus\";\n\t\t    media.id = d.split(\"/posts/\")[1];\n\t\t\t//https://plus.google.com/u/0/112374836634096795698/posts/bRJSvCb5mUU\n\t\t\t//https://plus.google.com/107096716333816995401/posts/J5iMpEDHWNL\n\t\t\tif (d.split(\"/posts/\")[0].match(\"u/0/\")) {\n\t\t\t\tmedia.user = d.split(\"u/0/\")[1].split(\"/posts\")[0];\n\t\t\t} else {\n\t\t\t\tmedia.user = d.split(\"google.com/\")[1].split(\"/posts/\")[0];\n\t\t\t}\n\t\t\tsuccess = true;\n\t\t} else if (d.match(\"flickr.com/photos/\")) {\n\t\t\tmedia.type = \"flickr\";\n\t\t\tmedia.id = VMM.ExternalAPI.flickr.getFlickrIdFromUrl(d)\n\t\t\tmedia.link = d;\n\t\t\tsuccess = Boolean(media.id);\n\t\t} else if (VMM.ExternalAPI.instagram.isInstagramUrl(d)) {\n\t\t\tmedia.type = \"instagram\";\n\t\t\tmedia.link = d;\n\t\t\tmedia.id = VMM.ExternalAPI.instagram.getInstagramIdFromUrl(d)\n\t\t\tsuccess = Boolean(media.id);\n\t\t} else if (d.match(/jpg|jpeg|png|gif|svg|bmp/i) || \n\t\t\t\t   d.match(\"staticmap\") || \n\t\t\t\t   d.match(\"yfrog.com\") || \n\t\t\t\t   d.match(\"twitpic.com\") ||\n\t\t\t\t   d.match('maps.googleapis.com/maps/api/streetview')) {\n\t\t\tmedia.type = \"image\";\n\t\t\tmedia.id = d;\n\t\t\tsuccess = true;\n\t\t} else if (VMM.FileExtention.googleDocType(d)) {\n\t\t\tmedia.type = \"googledoc\";\n\t\t\tmedia.id = d;\n\t\t\tsuccess = true;\n\t\t} else if (d.match('^(?:http|https)://.*wikipedia\\.org/wiki/([^\\s#]+)')) {\n\t\t\tmedia.type = \"wikipedia\";\n\t\t\t//media.id = d.split(\"wiki\\/\")[1];\n\t\t\t// TODO Issue #618 better splitting\n\t\t\tvar wiki_id = d.match('^(?:http|https)://.*wikipedia\\.org/wiki/([^\\s#]+)')[1].replace(\"_\", \" \");\n\t\t\tmedia.id = wiki_id.replace(\" \", \"%20\");\n\t\t\tmedia.lang = d.split(\"//\")[1].split(\".wikipedia\")[0];\n\t\t\tsuccess = true;\n\t\t} else if (d.indexOf('http://') == 0 || d.indexOf('https://') == 0) {\n\t\t\tmedia.type = \"website\";\n\t\t\tmedia.id = d;\n\t\t\tsuccess = true;\n\t\t} else if (d.match('storify')) {\n\t\t\tmedia.type = \"storify\";\n\t\t\tmedia.id = d;\n\t\t\tsuccess = true;\n\t\t} else {\n\t\t\ttrace(\"unknown media\");  \n\t\t\tmedia.type = \"unknown\";\n\t\t\tmedia.id = d;\n\t\t\tsuccess = true;\n\t\t}\n\t\t\n\t\tif (success) { \n\t\t\treturn media;\n\t\t} else {\n\t\t\ttrace(\"No valid media id detected\");\n\t\t\ttrace(d);\n\t\t}\n\t\treturn false;\n\t}\n}\n"
  },
  {
    "path": "source/js/Core/Media/VMM.TextElement.js",
    "content": "/* TextElement\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.TextElement == 'undefined') {\n\t\n\tVMM.TextElement = ({\n\t\t\n\t\tinit: function() {\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\tcreate: function(data) {\n\t\t\treturn data;\n\t\t}\n\t\t\n\t}).init();\n}"
  },
  {
    "path": "source/js/Core/README.md",
    "content": "StoryJS-Core\n============\n\nCore javascript functionality for StoryJS (including TimelineJS)\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n"
  },
  {
    "path": "source/js/Core/Slider/VMM.DragSlider.js",
    "content": "/* DRAG SLIDER\n================================================== */\nif(typeof VMM != 'undefined' && typeof VMM.DragSlider == 'undefined') {\n\n\tVMM.DragSlider = function() {\n\t\tvar drag = {\n\t\t\telement:\t\t\"\",\n\t\t\telement_move:\t\"\",\n\t\t\tconstraint:\t\t\"\",\n\t\t\tsliding:\t\tfalse,\n\t\t\tpagex: {\n\t\t\t\tstart:\t\t0,\n\t\t\t\tend:\t\t0\n\t\t\t},\n\t\t\tpagey: {\n\t\t\t\tstart:\t\t0,\n\t\t\t\tend:\t\t0\n\t\t\t},\n\t\t\tleft: {\n\t\t\t\tstart:\t\t0,\n\t\t\t\tend:\t\t0\n\t\t\t},\n\t\t\ttime: {\n\t\t\t\tstart:\t\t0,\n\t\t\t\tend:\t\t0\n\t\t\t},\n\t\t\ttouch:\t\t\tfalse,\n\t\t\tease:\t\t\t\"easeOutExpo\"\n\t\t},\n\t\tdragevent = {\n\t\t\tdown:\t\t\"mousedown\",\n\t\t\tup:\t\t\t\"mouseup\",\n\t\t\tleave:\t\t\"mouseleave\",\n\t\t\tmove:\t\t\"mousemove\"\n\t\t},\n\t\tmousedrag = {\n\t\t\tdown:\t\t\"mousedown\",\n\t\t\tup:\t\t\t\"mouseup\",\n\t\t\tleave:\t\t\"mouseleave\",\n\t\t\tmove:\t\t\"mousemove\"\n\t\t},\n\t\ttouchdrag = {\n\t\t\tdown:\t\t\"touchstart\",\n\t\t\tup:\t\t\t\"touchend\",\n\t\t\tleave:\t\t\"mouseleave\",\n\t\t\tmove:\t\t\"touchmove\"\n\t\t},\n\t\tdragslider\t\t= this,\n\t\tis_sticky\t\t= false;\n\t\t\n\t\t/* PUBLIC FUNCTIONS\n\t\t================================================== */\n\t\tthis.createPanel = function(drag_object, move_object, constraint, touch, sticky) {\n\t\t\tdrag.element\t\t= drag_object;\n\t\t\tdrag.element_move\t= move_object;\n\t\t\t//dragslider\t\t\t= drag_object;\n\t\t\tif ( sticky != null && sticky != \"\") {\n\t\t\t\tis_sticky = sticky;\n\t\t\t}\n\t\t\tif ( constraint != null && constraint != \"\") {\n\t\t\t\tdrag.constraint = constraint;\n\t\t\t} else {\n\t\t\t\tdrag.constraint = false;\n\t\t\t}\n\t\t\tif ( touch) {\n\t\t\t\tdrag.touch = touch;\n\t\t\t} else {\n\t\t\t\tdrag.touch = false;\n\t\t\t}\n\t\t\ttrace(\"TOUCH\" + drag.touch);\n\t\t\tif (drag.touch) {\n\t\t\t\tdragevent = touchdrag;\n\t\t\t} else {\n\t\t\t\tdragevent = mousedrag;\n\t\t\t}\n\t\t\t\n\t\t\tmakeDraggable(drag.element, drag.element_move);\n\t\t}\n\t\t\n\t\tthis.updateConstraint = function(constraint) {\n\t\t\ttrace(\"updateConstraint\");\n\t\t\tdrag.constraint = constraint;\n\t\t}\n\t\t\n\t\tthis.cancelSlide = function(e) {\n\t\t\tVMM.unbindEvent(drag.element, onDragMove, dragevent.move);\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\t/* PRIVATE FUNCTIONS\n\t\t================================================== */\n\t\tfunction makeDraggable(drag_object, move_object) {\n\t\t\t\n\t\t\tVMM.bindEvent(drag_object, onDragStart, dragevent.down, {element: move_object, delement: drag_object});\n\t\t\tVMM.bindEvent(drag_object, onDragEnd, dragevent.up, {element: move_object, delement: drag_object});\n\t\t\tVMM.bindEvent(drag_object, onDragLeave, dragevent.leave, {element: move_object, delement: drag_object});\n\t\t\t\n\t    }\n\t\t\n\t\tfunction onDragLeave(e) {\n\t\t\tVMM.unbindEvent(e.data.delement, onDragMove, dragevent.move);\n\t\t\tif (!drag.touch) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\te.stopPropagation();\n\t\t\tif (drag.sliding) {\n\t\t\t\tdrag.sliding = false;\n\t\t\t\tdragEnd(e.data.element, e.data.delement, e);\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onDragStart(e) {\n\t\t\tdragStart(e.data.element, e.data.delement, e);\n\t\t\tif (!drag.touch) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t//e.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tfunction onDragEnd(e) {\n\t\t\tif (!drag.touch) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\t//e.stopPropagation();\n\t\t\tif (drag.sliding) {\n\t\t\t\tdrag.sliding = false;\n\t\t\t\tdragEnd(e.data.element, e.data.delement, e);\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onDragMove(e) {\n\t\t\tdragMove(e.data.element, e);\n\t\t\t\n\t\t}\n\t\t\n\t\tfunction dragStart(elem, delem, e) {\n\t\t\tif (drag.touch) {\n\t\t\t\ttrace(\"IS TOUCH\")\n\t\t\t\tVMM.Lib.css(elem, '-webkit-transition-duration', '0');\n\t\t\t\tdrag.pagex.start = e.originalEvent.touches[0].screenX;\n\t\t\t\tdrag.pagey.start = e.originalEvent.touches[0].screenY;\n\t\t\t} else {\n\t\t\t\tdrag.pagex.start = e.pageX;\n\t\t\t\tdrag.pagey.start = e.pageY;\n\t\t\t}\n\t\t\tdrag.left.start = getLeft(elem);\n\t\t\tdrag.time.start = new Date().getTime();\n\t\t\t\n\t\t\tVMM.Lib.stop(elem);\n\t\t\tVMM.bindEvent(delem, onDragMove, dragevent.move, {element: elem});\n\n\t    }\n\t\t\n\t\tfunction dragEnd(elem, delem, e) {\n\t\t\tVMM.unbindEvent(delem, onDragMove, dragevent.move);\n\t\t\tdragMomentum(elem, e);\n\t\t}\n\t\t\n\t\tfunction dragMove(elem, e) {\n\t\t\tvar drag_to, drag_to_y;\n\t\t\tdrag.sliding = true;\n\t\t\tif (drag.touch) {\n\t\t\t\tdrag.pagex.end = e.originalEvent.touches[0].screenX;\n\t\t\t\tdrag.pagey.end = e.originalEvent.touches[0].screenY;\n\t\t\t} else {\n\t\t\t\tdrag.pagex.end = e.pageX;\n\t\t\t\tdrag.pagey.end = e.pageY;\n\t\t\t}\n\t\t\t\n\t\t\tdrag.left.end\t= getLeft(elem);\n\t\t\tdrag_to\t\t\t= -(drag.pagex.start - drag.pagex.end - drag.left.start);\n\t\t\t\n\t\t\t\n\t\t\tif (Math.abs(drag.pagey.start) - Math.abs(drag.pagey.end) > 10) {\n\t\t\t\ttrace(\"SCROLLING Y\")\n\t\t\t\ttrace(Math.abs(drag.pagey.start) - Math.abs(drag.pagey.end));\n\t\t\t}\n\t\t\tif (Math.abs(drag_to - drag.left.start) > 10) {\n\t\t\t\tVMM.Lib.css(elem, 'left', drag_to);\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction dragMomentum(elem, e) {\n\t\t\tvar drag_info = {\n\t\t\t\t\tleft:\t\t\tdrag.left.end,\n\t\t\t\t\tleft_adjust:\t0,\n\t\t\t\t\tchange: {\n\t\t\t\t\t\tx:\t\t\t0\n\t\t\t\t\t},\n\t\t\t\t\ttime:\t\t\t(new Date().getTime() - drag.time.start) * 10,\n\t\t\t\t\ttime_adjust:\t(new Date().getTime() - drag.time.start) * 10\n\t\t\t\t},\n\t\t\t\tmultiplier = 3000;\n\t\t\t\t\n\t\t\tif (drag.touch) {\n\t\t\t\tmultiplier = 6000;\n\t\t\t}\n\t\t\t\n\t\t\tdrag_info.change.x = multiplier * (Math.abs(drag.pagex.end) - Math.abs(drag.pagex.start));\n\t\t\t\n\t\t\t\n\t\t\tdrag_info.left_adjust = Math.round(drag_info.change.x / drag_info.time);\n\t\t\t\n\t\t\tdrag_info.left = Math.min(drag_info.left + drag_info.left_adjust);\n\t\t\t\n\t\t\tif (drag.constraint) {\n\t\t\t\tif (drag_info.left > drag.constraint.left) {\n\t\t\t\t\tdrag_info.left = drag.constraint.left;\n\t\t\t\t\tif (drag_info.time > 5000) {\n\t\t\t\t\t\tdrag_info.time = 5000;\n\t\t\t\t\t}\n\t\t\t\t} else if (drag_info.left < drag.constraint.right) {\n\t\t\t\t\tdrag_info.left = drag.constraint.right;\n\t\t\t\t\tif (drag_info.time > 5000) {\n\t\t\t\t\t\tdrag_info.time = 5000;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tVMM.fireEvent(dragslider, \"DRAGUPDATE\", [drag_info]);\n\t\t\t\n\t\t\tif (!is_sticky) {\n\t\t\t\tif (drag_info.time > 0) {\n\t\t\t\t\tif (drag.touch) {\n\t\t\t\t\t\tVMM.Lib.animate(elem, drag_info.time, \"easeOutCirc\", {\"left\": drag_info.left});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tVMM.Lib.animate(elem, drag_info.time, drag.ease, {\"left\": drag_info.left});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction getLeft(elem) {\n\t\t\treturn parseInt(VMM.Lib.css(elem, 'left').substring(0, VMM.Lib.css(elem, 'left').length - 2), 10);\n\t\t}\n\t\t\n\t}\n}"
  },
  {
    "path": "source/js/Core/Slider/VMM.Slider.Slide.js",
    "content": "/* Slider Slide \n================================================== */\n\nif (typeof VMM.Slider != 'undefined') {\n\tVMM.Slider.Slide = function(d, _parent) {\n\t\t\n\t\tvar $media, $text, $slide, $wrap, element, c,\n\t\t\tdata\t\t= d,\n\t\t\tslide\t\t= {},\n\t\t\telement\t\t= \"\",\n\t\t\tmedia\t\t= \"\",\n\t\t\tloaded\t\t= false,\n\t\t\tpreloaded\t= false,\n\t\t\tis_skinny\t= false,\n\t\t\t_enqueue\t= true,\n\t\t\t_removeque\t= false,\n\t\t\t_id\t\t\t= \"slide_\",\n\t\t\t_class\t\t= 0,\n\t\t\ttimer\t\t= {pushque:\"\", render:\"\", relayout:\"\", remove:\"\", skinny:false},\n\t\t\ttimes\t\t= {pushque:500, render:100, relayout:100, remove:30000};\n\t\t\n\t\t_id\t\t\t\t= _id + data.uniqueid;\n\t\tthis.enqueue\t= _enqueue;\n\t\tthis.id\t\t\t= _id;\n\t\t\n\t\t\n\t\telement\t\t=\tVMM.appendAndGetElement(_parent, \"<div>\", \"slider-item\");\n\t\t\n\t\tif (typeof data.classname != 'undefined') {\n\t\t\ttrace(\"HAS CLASSNAME\");\n\t\t\tVMM.Lib.addClass(element, data.classname);\n\t\t} else {\n\t\t\ttrace(\"NO CLASSNAME\");\n\t\t\ttrace(data);\n\t\t}\n\t\t\n\t\tc = {slide:\"\", text: \"\", media: \"\", media_element: \"\", layout: \"content-container layout\", has: { headline: false, text: false, media: false }};\n\t\t\n\t\t/* PUBLIC\n\t\t================================================== */\n\t\tthis.show = function(skinny) {\n\t\t\t_enqueue = false;\n\t\t\ttimer.skinny = skinny;\n\t\t\t_removeque = false;\n\t\t\tclearTimeout(timer.remove);\n\t\t\t\n\t\t\tif (!loaded) {\n\t\t\t\tif (preloaded) {\n\t\t\t\t\tclearTimeout(timer.relayout);\n\t\t\t\t\ttimer.relayout = setTimeout(reloadLayout, times.relayout);\n\t\t\t\t} else {\n\t\t\t\t\trender(skinny);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.hide = function() {\n\t\t\tif (loaded && !_removeque) {\n\t\t\t\t_removeque = true;\n\t\t\t\tclearTimeout(timer.remove);\n\t\t\t\ttimer.remove = setTimeout(removeSlide, times.remove);\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.clearTimers = function() {\n\t\t\t//clearTimeout(timer.remove);\n\t\t\tclearTimeout(timer.relayout);\n\t\t\tclearTimeout(timer.pushque);\n\t\t\tclearTimeout(timer.render);\n\t\t};\n\t\t\n\t\tthis.layout = function(skinny) {\n\t\t\tif (loaded && preloaded) {\n\t\t\t\treLayout(skinny);\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.elem = function() {\t\n\t\t\treturn element;\n\t\t};\n\t\t\n\t\tthis.position = function() {\n\t\t\treturn VMM.Lib.position(element);\n\t\t};\n\t\t\n\t\tthis.leftpos = function(p) {\n\t\t\tif(typeof p != 'undefined') {\n\t\t\t\tVMM.Lib.css(element, \"left\", p);\n\t\t\t} else {\n\t\t\t\treturn VMM.Lib.position(element).left\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.animate = function(d, e, p) {\n\t\t\tVMM.Lib.animate(element, d, e, p);\n\t\t};\n\t\t\n\t\tthis.css = function(p, v) {\n\t\t\tVMM.Lib.css(element, p, v );\n\t\t}\n\t\t\n\t\tthis.opacity = function(p) {\n\t\t\tVMM.Lib.css(element, \"opacity\", p);\t\n\t\t}\n\t\t\n\t\tthis.width = function() {\n\t\t\treturn VMM.Lib.width(element);\n\t\t};\n\t\t\n\t\tthis.height = function() {\n\t\t\treturn VMM.Lib.height(element);\n\t\t};\n\t\t\n\t\tthis.content_height = function () {\n\t\t\tvar ch = VMM.Lib.find( element, \".content\")[0];\n\t\t\t\n\t\t\tif (ch != 'undefined' && ch != null) {\n\t\t\t\treturn VMM.Lib.height(ch);\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t\t\n\t\t/* PRIVATE\n\t\t================================================== */\n\t\tvar render = function(skinny) {\n\t\t\ttrace(\"RENDER \" + _id);\n\t\t\t\n\t\t\tloaded = true;\n\t\t\tpreloaded = true;\n\t\t\ttimer.skinny = skinny;\n\t\t\t\n\t\t\tbuildSlide();\n\t\t\t\n\t\t\tclearTimeout(timer.pushque);\n\t\t\tclearTimeout(timer.render);\n\t\t\ttimer.pushque = setTimeout(VMM.ExternalAPI.pushQues, times.pushque);\n\t\t\t\n\t\t};\n\t\t\n\t\tvar removeSlide = function() {\n\t\t\t//VMM.attachElement(element, \"\");\n\t\t\ttrace(\"REMOVE SLIDE TIMER FINISHED\");\n\t\t\tloaded = false;\n\t\t\tVMM.Lib.detach($text);\n\t\t\tVMM.Lib.detach($media);\n\t\t\t\n\t\t};\n\t\t\n\t\tvar reloadLayout = function() {\n\t\t\tloaded = true;\n\t\t\treLayout(timer.skinny, true);\n\t\t};\n\t\t\n\t\tvar reLayout = function(skinny, reload) {\n\t\t\tif (c.has.text)\t{\n\t\t\t\tif (skinny) {\n\t\t\t\t\tif (!is_skinny || reload) {\n\t\t\t\t\t\tVMM.Lib.removeClass($slide, \"pad-left\");\n\t\t\t\t\t\tVMM.Lib.detach($text);\n\t\t\t\t\t\tVMM.Lib.detach($media);\n\t\t\t\t\t\tVMM.Lib.append($slide, $text);\n\t\t\t\t\t\tVMM.Lib.append($slide, $media);\n\t\t\t\t\t\tis_skinny = true;\n\t\t\t\t\t} \n\t\t\t\t} else {\n\t\t\t\t\tif (is_skinny || reload) {\n\t\t\t\t\t\tVMM.Lib.addClass($slide, \"pad-left\");\n\t\t\t\t\t\tVMM.Lib.detach($text);\n\t\t\t\t\t\tVMM.Lib.detach($media);\n\t\t\t\t\t\tVMM.Lib.append($slide, $media);\n\t\t\t\t\t\tVMM.Lib.append($slide, $text);\n\t\t\t\t\t\tis_skinny = false;\n\t\t\t\t\t\t\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t} else if (reload) {\n\t\t\t\tif (c.has.headline) {\n\t\t\t\t\tVMM.Lib.detach($text);\n\t\t\t\t\tVMM.Lib.append($slide, $text);\n\t\t\t\t}\n\t\t\t\tVMM.Lib.detach($media);\n\t\t\t\tVMM.Lib.append($slide, $media);\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar buildSlide = function() {\n\t\t\ttrace(\"BUILDSLIDE\");\n\t\t\t$wrap\t= VMM.appendAndGetElement(element, \"<div>\", \"content\");\n\t\t\t$slide\t= VMM.appendAndGetElement($wrap, \"<div>\");\n\t\t\t\n\t\t\t/* DATE\n\t\t\t================================================== */\n\t\t\tif (data.startdate != null && data.startdate != \"\") {\n\t\t\t\tif (type.of(data.startdate) == \"date\") {\n\t\t\t\t\tif (data.type != \"start\") {\n\t\t\t\t\t\tvar st\t= VMM.Date.prettyDate(data.startdate, false, data.precisiondate);\n\t\t\t\t\t\tvar en\t= VMM.Date.prettyDate(data.enddate, false, data.precisiondate);\n\t\t\t\t\t\tvar tag\t= \"\";\n\t\t\t\t\t\t/* TAG / CATEGORY\n\t\t\t\t\t\t================================================== */\n\t\t\t\t\t\tif (data.tag != null && data.tag != \"\") {\n\t\t\t\t\t\t\ttag\t\t= VMM.createElement(\"span\", data.tag, \"slide-tag\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (st != en) {\n\t\t\t\t\t\t\tc.text += VMM.createElement(\"h2\", st + \" &mdash; \" + en + tag, \"date\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tc.text += VMM.createElement(\"h2\", st + tag, \"date\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* HEADLINE\n\t\t\t================================================== */\n\t\t\tif (data.headline != null && data.headline != \"\") {\n\t\t\t\tc.has.headline\t=\ttrue;\n\t\t\t\tif (data.type == \"start\") {\n\t\t\t\t\tc.text\t\t+=\tVMM.createElement(\"h2\", VMM.Util.linkify_with_twitter(data.headline, \"_blank\"), \"start\");\n\t\t\t\t} else { \n\t\t\t\t\tc.text\t\t+=\tVMM.createElement(\"h3\", VMM.Util.linkify_with_twitter(data.headline, \"_blank\"));\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* TEXT\n\t\t\t================================================== */\n\t\t\tif (data.text != null && data.text != \"\") {\n\t\t\t\tc.has.text\t\t=  true;\n\t\t\t\tc.text\t\t\t+= VMM.createElement(\"p\", VMM.Util.linkify_with_twitter(data.text, \"_blank\"));\n\t\t\t}\n\t\t\t\n\t\t\tif (c.has.text || c.has.headline) {\n\t\t\t\tc.text\t\t= VMM.createElement(\"div\", c.text, \"container\");\n\t\t\t\t//$text\t\t=\tVMM.appendAndGetElement($slide, \"<div>\", \"text\", c.text);\n\t\t\t\t\n\t\t\t\t$text\t\t= VMM.appendAndGetElement($slide, \"<div>\", \"text\", VMM.TextElement.create(c.text));\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t/* SLUG\n\t\t\t================================================== */\n\t\t\tif (data.needs_slug) {\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t/* MEDIA\n\t\t\t================================================== */\n\t\t\tif (data.asset != null && data.asset != \"\") {\n\t\t\t\tif (data.asset.media != null && data.asset.media != \"\") {\n\t\t\t\t\tc.has.media\t= true;\n\t\t\t\t\t$media\t\t= VMM.appendAndGetElement($slide, \"<div>\", \"media\", VMM.MediaElement.create(data.asset, data.uniqueid));\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* COMBINE\n\t\t\t================================================== */\n\t\t\tif (c.has.text)\t{ c.layout\t\t+=\t\"-text\"\t\t};\n\t\t\tif (c.has.media){ c.layout\t\t+=\t\"-media\"\t};\n\n\t\t\tif (c.has.text)\t{\n\t\t\t\tif (timer.skinny) {\n\t\t\t\t\tVMM.Lib.addClass($slide, c.layout);\n\t\t\t\t\tis_skinny = true;\n\t\t\t\t} else {\n\t\t\t\t\tVMM.Lib.addClass($slide, c.layout);\n\t\t\t\t\tVMM.Lib.addClass($slide, \"pad-left\");\n\t\t\t\t\tVMM.Lib.detach($text);\n\t\t\t\t\tVMM.Lib.append($slide, $text);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tVMM.Lib.addClass($slide, c.layout);\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t};\n\t\t\n\t}\n\t\n};\n"
  },
  {
    "path": "source/js/Core/Slider/VMM.Slider.js",
    "content": "/* Slider\n================================================== */\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n================================================== */\n// @codekit-append \"VMM.Slider.Slide.js\";\n\nif(typeof VMM != 'undefined' && typeof VMM.Slider == 'undefined') {\n\t\n\tVMM.Slider = function(parent, parent_config) {\n\t\t\n\t\tvar config,\n\t\t\ttimer,\n\t\t\t$slider,\n\t\t\t$slider_mask,\n\t\t\t$slider_container,\n\t\t\t$slides_items,\n\t\t\t$dragslide,\n\t\t\t$explainer,\n\t\t\tevents\t\t\t\t= {},\n\t\t\tdata\t\t\t\t= [],\n\t\t\tslides\t\t\t\t= [],\n\t\t\tslide_positions\t\t= [],\n\t\t\tslides_content\t\t= \"\",\n\t\t\tcurrent_slide\t\t= 0,\n\t\t\tcurrent_width\t\t= 960,\n\t\t\ttouch = {\n\t\t\t\tmove:\t\t\tfalse,\n\t\t\t\tx:\t\t\t\t10,\n\t\t\t\ty:\t\t\t\t0,\n\t\t\t\toff:\t\t\t0,\n\t\t\t\tdampen:\t\t\t48\n\t\t\t},\n\t\t\tcontent\t\t\t\t= \"\",\n\t\t\t_active\t\t\t\t= false,\n\t\t\tlayout\t\t\t\t= parent,\n\t\t\tnavigation = {\n\t\t\t\tnextBtn:\t\t\"\",\n\t\t\t\tprevBtn:\t\t\"\",\n\t\t\t\tnextDate:\t\t\"\",\n\t\t\t\tprevDate:\t\t\"\",\n\t\t\t\tnextTitle:\t\t\"\",\n\t\t\t\tprevTitle:\t\t\"\"\n\t\t\t};\n\t\t\n\t\t// CONFIG\n\t\tif(typeof parent_config != 'undefined') {\n\t\t\tconfig\t= parent_config;\n\t\t} else {\n\t\t\tconfig\t= {\n\t\t\t\tpreload:\t\t\t4,\n\t\t\t\tcurrent_slide:\t\t0,\n\t\t\t\tinterval:\t\t\t10, \n\t\t\t\tsomething:\t\t\t0, \n\t\t\t\twidth:\t\t\t\t720, \n\t\t\t\theight:\t\t\t\t400, \n\t\t\t\tease:\t\t\t\t\"easeInOutExpo\", \n\t\t\t\tduration:\t\t\t1000, \n\t\t\t\ttimeline:\t\t\tfalse, \n\t\t\t\tspacing:\t\t\t15,\n\t\t\t\tslider: {\n\t\t\t\t\twidth:\t\t\t720, \n\t\t\t\t\theight:\t\t\t400, \n\t\t\t\t\tcontent: {\n\t\t\t\t\t\twidth:\t\t720, \n\t\t\t\t\t\theight:\t\t400, \n\t\t\t\t\t\tpadding:\t120,\n\t\t\t\t\t\tpadding_default: 120\n\t\t\t\t\t}, \n\t\t\t\t\tnav: {\n\t\t\t\t\t\twidth:\t\t100, \n\t\t\t\t\t\theight:\t\t200\n\t\t\t\t\t} \n\t\t\t\t} \n\t\t\t};\n\t\t}\n\t\t\n\t\t/* PUBLIC VARS\n\t\t================================================== */\n\t\tthis.ver = \"0.6\";\n\t\t\n\t\tconfig.slider.width\t\t= config.width;\n\t\tconfig.slider.height\t= config.height;\n\t\t\n\t\t/* PUBLIC FUNCTIONS\n\t\t================================================== */\n\t\tthis.init = function(d) {\n\t\t\tslides\t\t\t= [];\n\t\t\tslide_positions\t= [];\n\t\t\t\n\t\t\tif(typeof d != 'undefined') {\n\t\t\t\tthis.setData(d);\n\t\t\t} else {\n\t\t\t\ttrace(\"WAITING ON DATA\");\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.width = function(w) {\n\t\t\tif (w != null && w != \"\") {\n\t\t\t\tconfig.slider.width = w;\n\t\t\t\treSize();\n\t\t\t} else {\n\t\t\t\treturn config.slider.width;\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.height = function(h) {\n\t\t\tif (h != null && h != \"\") {\n\t\t\t\tconfig.slider.height = h;\n\t\t\t\treSize();\n\t\t\t} else {\n\t\t\t\treturn config.slider.height;\n\t\t\t}\n\t\t}\n\t\t\n\t\t/* GETTERS AND SETTERS\n\t\t================================================== */\n\t\tthis.setData = function(d) {\n\t\t\tif(typeof d != 'undefined') {\n\t\t\t\tdata = d;\n\t\t\t\tbuild();\n\t\t\t} else{\n\t\t\t\ttrace(\"NO DATA\");\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.getData = function() {\n\t\t\treturn data;\n\t\t};\n\t\t\n\t\tthis.setConfig = function(d) {\n\t\t\tif(typeof d != 'undefined') {\n\t\t\t\tconfig = d;\n\t\t\t} else{\n\t\t\t\ttrace(\"NO CONFIG DATA\");\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.getConfig = function() {\n\t\t\treturn config;\n\t\t};\n\t\t\n\t\tthis.setSize = function(w, h) {\n\t\t\tif (w != null) {config.slider.width = w};\n\t\t\tif (h != null) {config.slider.height = h};\n\t\t\tif (_active) {\n\t\t\t\treSize();\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tthis.active = function() {\n\t\t\treturn _active;\n\t\t};\n\t\t\n\t\tthis.getCurrentNumber = function() {\n\t\t\treturn current_slide;\n\t\t};\n\t\t\n\t\tthis.setSlide = function(n) {\n\t\t\tgoToSlide(n);\n\t\t};\n\t\t\n\t\t/* ON EVENT\n\t\t================================================== */\n\t\tfunction onConfigSet() {\n\t\t\ttrace(\"onConfigSet\");\n\t\t};\n\t\t\n\t\tfunction reSize(go_to_slide, from_start) {\n\t\t\tvar _go_to_slide\t= true,\n\t\t\t\t_from_start\t\t= false;\n\t\t\t\n\t\t\tif (go_to_slide != null) {_go_to_slide = go_to_slide};\n\t\t\tif (from_start != null) {_from_start = from_start};\n\t\t\t\n\t\t\tcurrent_width = config.slider.width;\n\t\t\t\n\t\t\tconfig.slider.nav.height = VMM.Lib.height(navigation.prevBtnContainer);\n\t\t\t\n\t\t\t// Handle smaller sizes\n\t\t\tif (VMM.Browser.device == \"mobile\" || current_width <= 640) {\n\t\t\t\tconfig.slider.content.padding\t= 10;\n\t\t\t} else {\n\t\t\t\tconfig.slider.content.padding\t= config.slider.content.padding_default;\n\t\t\t}\n\t\t\t\n\t\t\tconfig.slider.content.width = current_width - (config.slider.content.padding *2);\n\t\t\t\n\t\t\tVMM.Lib.width($slides_items, (slides.length * config.slider.content.width));\n\t\t\t\n\t\t\tif (_from_start) {\n\t\t\t\tVMM.Lib.css($slider_container, \"left\", slides[current_slide].leftpos());\n\t\t\t}\n\t\t\t\n\t\t\t// RESIZE SLIDES\n\t\t\tsizeSlides();\n\t\t\t\n\t\t\t// POSITION SLIDES\n\t\t\tpositionSlides();\n\t\t\t\n\t\t\t// POSITION NAV\n\t\t\tVMM.Lib.css(navigation.nextBtn, \"left\", (current_width - config.slider.nav.width));\n\t\t\tVMM.Lib.height(navigation.prevBtn, config.slider.height);\n\t\t\tVMM.Lib.height(navigation.nextBtn, config.slider.height);\n\t\t\tVMM.Lib.css(navigation.nextBtnContainer, \"top\", ( (config.slider.height/2) - (config.slider.nav.height/2) ) + 10 );\n\t\t\tVMM.Lib.css(navigation.prevBtnContainer, \"top\", ( (config.slider.height/2) - (config.slider.nav.height/2) ) + 10 );\n\t\t\t\n\t\t\t// Animate Changes\n\t\t\tVMM.Lib.height($slider_mask, config.slider.height);\n\t\t\tVMM.Lib.width($slider_mask, current_width);\n\t\t\t\n\t\t\tif (_go_to_slide) {\n\t\t\t\tgoToSlide(current_slide, \"linear\", 1);\n\t\t\t};\n\t\t\t\n\t\t\tif (current_slide == 0) {\n\t\t\t\tVMM.Lib.visible(navigation.prevBtn, false);\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tfunction onDragFinish(e, d) {\n\t\t\ttrace(\"DRAG FINISH\");\n\t\t\ttrace(d.left_adjust);\n\t\t\ttrace((config.slider.width / 2));\n\t\t\t\n\t\t\tif (d.left_adjust < 0 ) {\n\t\t\t\tif (Math.abs(d.left_adjust) > (config.slider.width / 2) ) {\n\t\t\t\t\t//onNextClick(e);\n\t\t\t\t\tif (current_slide == slides.length - 1) {\n\t\t\t\t\t\tbackToCurrentSlide();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgoToSlide(current_slide+1, \"easeOutExpo\");\n\t\t\t\t\t\tupDate();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tbackToCurrentSlide();\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t} else if (Math.abs(d.left_adjust) > (config.slider.width / 2) ) {\n\t\t\t\tif (current_slide == 0) {\n\t\t\t\t\tbackToCurrentSlide();\n\t\t\t\t} else {\n\t\t\t\t\tgoToSlide(current_slide-1, \"easeOutExpo\");\n\t\t\t\t\tupDate();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbackToCurrentSlide();\n\t\t\t}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t}\n\t\t/* NAVIGATION\n\t\t================================================== */\n\t\tfunction onNextClick(e) {\n\t\t\tif (current_slide == slides.length - 1) {\n\t\t\t\tbackToCurrentSlide();\n\t\t\t} else {\n\t\t\t\tgoToSlide(current_slide+1);\n\t\t\t\tupDate();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onPrevClick(e) {\n\t\t\tif (current_slide == 0) {\n\t\t\t\tbackToCurrentSlide();\n\t\t\t} else {\n\t\t\t\tgoToSlide(current_slide-1);\n\t\t\t\tupDate();\n\t\t\t}\n\t\t}\n\n\t\tfunction onKeypressNav(e) {\n\t\t\tswitch(e.keyCode) {\n\t\t\t\tcase 39:\n\t\t\t\t\t// RIGHT ARROW\n\t\t\t\t\tonNextClick(e);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\t\t// LEFT ARROW\n\t\t\t\t\tonPrevClick(e);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onTouchUpdate(e, b) {\n\t\t\tif (slide_positions.length == 0) {\n\t\t\t\tfor(var i = 0; i < slides.length; i++) {\n\t\t\t\t\tslide_positions.push( slides[i].leftpos() );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof b.left == \"number\") {\n\t\t\t\tvar _pos = b.left;\n\t\t\t\tvar _slide_pos = -(slides[current_slide].leftpos());\n\t\t\t\tif (_pos < _slide_pos - (config.slider_width/3)) {\n\t\t\t\t\tonNextClick();\n\t\t\t\t} else if (_pos > _slide_pos + (config.slider_width/3)) {\n\t\t\t\t\tonPrevClick();\n\t\t\t\t} else {\n\t\t\t\t\tVMM.Lib.animate($slider_container, config.duration, config.ease, {\"left\": _slide_pos });\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tVMM.Lib.animate($slider_container, config.duration, config.ease, {\"left\": _slide_pos });\n\t\t\t}\n\t\t\t\n\t\t\tif (typeof b.top == \"number\") {\n\t\t\t\tVMM.Lib.animate($slider_container, config.duration, config.ease, {\"top\": -b.top});\n\t\t\t} else {\n\t\t\t\t\n\t\t\t}\n\t\t};\n\t\t\n\t\tfunction onExplainerClick(e) {\n\t\t\tdetachMessege();\n\t\t}\n\t\t\n\t\t/* UPDATE\n\t\t================================================== */\n\t\tfunction upDate() {\n\t\t\tconfig.current_slide = current_slide;\n\t\t\tVMM.fireEvent(layout, \"UPDATE\");\n\t\t};\n\t\t\n\t\t/* GET DATA\n\t\t================================================== */\n\t\tfunction getData(d) {\n\t\t\tdata = d;\n\t\t};\n\t\t\n\t\t/* BUILD SLIDES\n\t\t================================================== */\n\t\tfunction buildSlides(d) {\n\t\t\tvar i\t= 0;\n\t\t\t\n\t\t\tVMM.attachElement($slides_items, \"\");\n\t\t\tslides = [];\n\t\t\t\n\t\t\tfor(i = 0; i < d.length; i++) {\n\t\t\t\tvar _slide = new VMM.Slider.Slide(d[i], $slides_items);\n\t\t\t\t//_slide.show();\n\t\t\t\tslides.push(_slide);\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction preloadSlides(skip) {\n\t\t\tvar i\t= 0;\n\t\t\t\n\t\t\tif (skip) {\n\t\t\t\tpreloadTimeOutSlides();\n\t\t\t} else {\n\t\t\t\tfor(i = 0; i < slides.length; i++) {\n\t\t\t\t\tslides[i].clearTimers();\n\t\t\t\t}\n\t\t\t\ttimer = setTimeout(preloadTimeOutSlides, config.duration);\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction preloadTimeOutSlides() {\n\t\t\tvar i = 0;\n\t\t\t\n\t\t\tfor(i = 0; i < slides.length; i++) {\n\t\t\t\tslides[i].enqueue = true;\n\t\t\t}\n\t\t\t\n\t\t\tfor(i = 0; i < config.preload; i++) {\n\t\t\t\tif ( !((current_slide + i) > slides.length - 1)) {\n\t\t\t\t\tslides[current_slide + i].show();\n\t\t\t\t\tslides[current_slide + i].enqueue = false;\n\t\t\t\t}\n\t\t\t\tif ( !( (current_slide - i) < 0 ) ) {\n\t\t\t\t\tslides[current_slide - i].show();\n\t\t\t\t\tslides[current_slide - i].enqueue = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (slides.length > 50) {\n\t\t\t\tfor(i = 0; i < slides.length; i++) {\n\t\t\t\t\tif (slides[i].enqueue) {\n\t\t\t\t\t\tslides[i].hide();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tsizeSlides();\n\t\t}\n\t\t\n\t\tfunction sizeSlide(slide_id) {\n\t\t\t\n\t\t}\n\t\t\n\t\t/* SIZE SLIDES\n\t\t================================================== */\n\t\tfunction sizeSlides() {\n\t\t\tvar i\t\t\t\t\t\t= 0,\n\t\t\t\tlayout_text_media\t\t= \".slider-item .layout-text-media .media .media-container \",\n\t\t\t\tlayout_media\t\t\t= \".slider-item .layout-media .media .media-container \",\n\t\t\t\tlayout_both\t\t\t\t= \".slider-item .media .media-container\",\n\t\t\t\tlayout_caption\t\t\t= \".slider-item .media .media-container .media-shadow .caption\",\n\t\t\t\tis_skinny\t\t\t\t= false,\n\t\t\t\tmediasize = {\n\t\t\t\t\ttext_media: {\n\t\t\t\t\t\twidth: \t\t\t(config.slider.content.width/100) * 60,\n\t\t\t\t\t\theight: \t\tconfig.slider.height - 60,\n\t\t\t\t\t\tvideo: {\n\t\t\t\t\t\t\twidth:\t\t0,\n\t\t\t\t\t\t\theight:\t\t0\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttext: {\n\t\t\t\t\t\t\twidth:\t\t((config.slider.content.width/100) * 40) - 30,\n\t\t\t\t\t\t\theight:\t\tconfig.slider.height\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tmedia: {\n\t\t\t\t\t\twidth: \t\t\tconfig.slider.content.width,\n\t\t\t\t\t\theight: \t\tconfig.slider.height - 110,\n\t\t\t\t\t\tvideo: {\n\t\t\t\t\t\t\twidth: \t\t0,\n\t\t\t\t\t\t\theight: \t0\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\t// Handle smaller sizes\n\t\t\tif (VMM.Browser.device == \"mobile\" || current_width < 641) {\n\t\t\t\tis_skinny = true;\n\n\t\t\t} \n\t\t\t\n\t\t\tVMM.master_config.sizes.api.width\t= mediasize.media.width;\n\t\t\tVMM.master_config.sizes.api.height\t= mediasize.media.height;\n\t\t\t\n\t\t\tmediasize.text_media.video\t\t\t= VMM.Util.ratio.fit(mediasize.text_media.width, mediasize.text_media.height, 16, 9);\n\t\t\tmediasize.media.video\t\t\t\t= VMM.Util.ratio.fit(mediasize.media.width, mediasize.media.height, 16, 9);\n\t\t\t\n\t\t\tVMM.Lib.css(\".slider-item\", \"width\", config.slider.content.width );\n\t\t\tVMM.Lib.height(\".slider-item\", config.slider.height);\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tif (is_skinny) {\n\t\t\t\t\n\t\t\t\tmediasize.text_media.width = \tconfig.slider.content.width - (config.slider.content.padding*2);\n\t\t\t\tmediasize.media.width = \t\tconfig.slider.content.width - (config.slider.content.padding*2);\n\t\t\t\tmediasize.text_media.height = \t((config.slider.height/100) * 50 ) - 50;\n\t\t\t\tmediasize.media.height = \t\t((config.slider.height/100) * 70 ) - 40;\n\t\t\t\t\n\t\t\t\tmediasize.text_media.video = \tVMM.Util.ratio.fit(mediasize.text_media.width, mediasize.text_media.height, 16, 9);\n\t\t\t\tmediasize.media.video = \t\tVMM.Util.ratio.fit(mediasize.media.width, mediasize.media.height, 16, 9);\n\t\t\t\t\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text\", \"width\", \"100%\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text\", \"display\", \"block\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text .container\", \"display\", \"block\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text .container\", \"width\", mediasize.media.width );\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text .container .start\", \"width\", \"auto\" );\n\t\t\t\t\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .media\", \"float\", \"none\" );\n\t\t\t\tVMM.Lib.addClass(\".slider-item .content-container\", \"pad-top\");\n\t\t\t\t\n\t\t\t\tVMM.Lib.css(\".slider-item .media blockquote p\", \"line-height\", \"18px\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .media blockquote p\", \"font-size\", \"16px\" );\n\t\t\t\t\n\t\t\t\tVMM.Lib.css(\".slider-item\", \"overflow-y\", \"auto\" );\n\t\t\t\t\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text\", \"width\", \"40%\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text\", \"display\", \"table-cell\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text .container\", \"display\", \"table-cell\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text .container\", \"width\", \"auto\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .text .container .start\", \"width\", mediasize.text_media.text.width );\n\t\t\t\t//VMM.Lib.addClass(\".slider-item .content-container\", \"pad-left\");\n\t\t\t\tVMM.Lib.removeClass(\".slider-item .content-container\", \"pad-top\");\n\t\t\t\t\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media .media\", \"float\", \"left\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .layout-text-media\", \"display\", \"table\" );\n\t\t\t\t\n\t\t\t\tVMM.Lib.css(\".slider-item .media blockquote p\", \"line-height\", \"36px\" );\n\t\t\t\tVMM.Lib.css(\".slider-item .media blockquote p\", \"font-size\", \"28px\" );\n\t\t\t\t\n\t\t\t\tVMM.Lib.css(\".slider-item\", \"display\", \"table\" );\n\t\t\t\tVMM.Lib.css(\".slider-item\", \"overflow-y\", \"auto\" );\n\t\t\t}\n\t\t\t\n\t\t\t// MEDIA FRAME\n\t\t\tVMM.Lib.css(\tlayout_text_media + \".media-frame\", \t\t\"max-width\", \tmediasize.text_media.width);\n\t\t\tVMM.Lib.height(\tlayout_text_media + \".media-frame\", \t\t\t\t\t\tmediasize.text_media.height);\n\t\t\tVMM.Lib.width(\tlayout_text_media + \".media-frame\", \t\t\t\t\t\tmediasize.text_media.width);\n\t\t\t\n\t\t\t// WEBSITES\n\t\t\t//VMM.Lib.css(\tlayout_both + \t\t\".website\", \t\t\t\"max-width\", \t300 );\n\t\t\t\n\t\t\t// IMAGES\n\t\t\tVMM.Lib.css(\tlayout_text_media + \"img\", \t\t\t\t\t\"max-height\", \tmediasize.text_media.height );\n\t\t\tVMM.Lib.css(\tlayout_media + \t\t\"img\", \t\t\t\t\t\"max-height\", \tmediasize.media.height );\n\t\t\t\n\t\t\t// FIX FOR NON-WEBKIT BROWSERS\n\t\t\tVMM.Lib.css(\tlayout_text_media + \"img\", \t\t\t\t\t\"max-width\", \tmediasize.text_media.width );\n\t\t\tVMM.Lib.css(\tlayout_text_media + \".avatar img\", \"max-width\", \t\t\t32 );\n\t\t\tVMM.Lib.css(\tlayout_text_media + \".avatar img\", \"max-height\", \t\t\t32 );\n\t\t\tVMM.Lib.css(\tlayout_media + \t\t\".avatar img\", \"max-width\", \t\t\t32 );\n\t\t\tVMM.Lib.css(\tlayout_media + \t\t\".avatar img\", \"max-height\", \t\t\t32 );\n\t\t\t\n\t\t\tVMM.Lib.css(\tlayout_text_media + \".article-thumb\", \"max-width\", \t\t\t\"50%\" );\n\t\t\t//VMM.Lib.css(\tlayout_text_media + \".article-thumb\", \"max-height\", \t\t100 );\n\t\t\tVMM.Lib.css(\tlayout_media + \t\t\".article-thumb\", \"max-width\", \t\t\t200 );\n\t\t\t//VMM.Lib.css(\tlayout_media + \t\t\".article-thumb\", \"max-height\", \t\t100 );\n\t\t\t\n\t\t\t\n\t\t\t// IFRAME FULL SIZE VIDEO\n\t\t\tVMM.Lib.width(\tlayout_text_media + \".media-frame\", \t\t\t\t\t\tmediasize.text_media.video.width);\n\t\t\tVMM.Lib.height(\tlayout_text_media + \".media-frame\", \t\t\t\t\t\tmediasize.text_media.video.height);\n\t\t\tVMM.Lib.width(\tlayout_media + \t\t\".media-frame\", \t\t\t\t\t\tmediasize.media.video.width);\n\t\t\tVMM.Lib.height(\tlayout_media + \t\t\".media-frame\", \t\t\t\t\t\tmediasize.media.video.height);\n\t\t\tVMM.Lib.css(\tlayout_media + \t\t\".media-frame\", \t\t\"max-height\", \tmediasize.media.video.height);\n\t\t\tVMM.Lib.css(\tlayout_media + \t\t\".media-frame\", \t\t\"max-width\", \tmediasize.media.video.width);\n\t\t\t\n\t\t\t// SOUNDCLOUD\n\t\t\tVMM.Lib.height(\tlayout_media + \t\t\".soundcloud\", \t\t\t\t\t\t\t168);\n\t\t\tVMM.Lib.height(\tlayout_text_media + \".soundcloud\", \t\t\t\t\t\t\t168);\n\t\t\tVMM.Lib.width(\tlayout_media + \t\t\".soundcloud\", \t\t\t\t\t\t\tmediasize.media.width);\n\t\t\tVMM.Lib.width(\tlayout_text_media + \".soundcloud\", \t\t\t\t\t\t\tmediasize.text_media.width);\n\t\t\tVMM.Lib.css(\tlayout_both + \t\t\".soundcloud\", \t\t\t\"max-height\", \t168 );\n\t\t\t\n\t\t\t// MAPS\n\t\t\tVMM.Lib.height(\tlayout_text_media\t+ \".map\", \t\t\t\t\t\t\t\tmediasize.text_media.height);\n\t\t\tVMM.Lib.width(\tlayout_text_media\t+ \".map\", \t\t\t\t\t\t\t\tmediasize.text_media.width);\n\t\t\tVMM.Lib.css(\tlayout_media\t\t+ \".map\", \t\t\t\t\"max-height\", \tmediasize.media.height);\n\t\t\tVMM.Lib.width(\tlayout_media\t\t+ \".map\", \t\t\t\t\t\t\t\tmediasize.media.width);\n\t\t\t\n\t\t\t\n\t\t\t// DOCS\n\t\t\tVMM.Lib.height(\tlayout_text_media + \".doc\", \t\t\t\t\t\t\t\tmediasize.text_media.height);\n\t\t\tVMM.Lib.width(\tlayout_text_media\t+ \".doc\", \t\t\t\t\t\t\t\tmediasize.text_media.width);\n\t\t\tVMM.Lib.height(\tlayout_media + \t\t\".doc\", \t\t\t\t\t\t\t\tmediasize.media.height);\n\t\t\tVMM.Lib.width(\tlayout_media\t\t+ \".doc\", \t\t\t\t\t\t\t\tmediasize.media.width);\n\t\t\t\n\t\t\t// IE8 NEEDS THIS\n\t\t\tVMM.Lib.width(\tlayout_media + \t\t\".wikipedia\", \t\t\t\t\t\t\tmediasize.media.width);\n\t\t\tVMM.Lib.width(\tlayout_media + \t\t\".twitter\", \t\t\t\t\t\t\tmediasize.media.width);\n\t\t\tVMM.Lib.width(\tlayout_media + \t\t\".plain-text-quote\", \t\t\t\t\tmediasize.media.width);\n\t\t\tVMM.Lib.width(\tlayout_media + \t\t\".plain-text\", \t\t\t\t\t\t\tmediasize.media.width);\n\t\t\t\n\t\t\tVMM.Lib.css(\tlayout_both, \t\t\"max-width\", \t\t\t\t\t\t\tmediasize.media.width);\n\t\t\t\n\t\t\t\n\t\t\t// CAPTION WIDTH\n\t\t\tVMM.Lib.css( layout_text_media + \t\".caption\",\t\"max-width\",\tmediasize.text_media.video.width);\n\t\t\tVMM.Lib.css( layout_media + \t\t\".caption\",\t\"max-width\",\tmediasize.media.video.width);\n\t\t\t//VMM.Lib.css( layout_text_media + \t\".caption\",\t\"max-width\",\tmediasize.text_media.width);\n\t\t\t//VMM.Lib.css( layout_media + \t\t\".caption\",\t\"max-width\",\tmediasize.media.width);\n\t\t\t\n\t\t\t// MAINTAINS VERTICAL CENTER IF IT CAN\n\t\t\tfor(i = 0; i < slides.length; i++) {\n\t\t\t\t\n\t\t\t\tslides[i].layout(is_skinny);\n\t\t\t\t\n\t\t\t\tif (slides[i].content_height() > config.slider.height + 20) {\n\t\t\t\t\tslides[i].css(\"display\", \"block\");\n\t\t\t\t} else {\n\t\t\t\t\tslides[i].css(\"display\", \"table\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\t/* POSITION SLIDES\n\t\t================================================== */\n\t\tfunction positionSlides() {\n\t\t\tvar pos = 0,\n\t\t\t\ti\t= 0;\n\t\t\t\t\n\t\t\tfor(i = 0; i < slides.length; i++) {\n\t\t\t\tpos = i * (config.slider.width+config.spacing);\n\t\t\t\tslides[i].leftpos(pos);\n\t\t\t}\n\t\t}\n\t\t\n\t\t/* OPACITY SLIDES\n\t\t================================================== */\n\t\tfunction opacitySlides(n) {\n\t\t\tvar _ease\t= \"linear\",\n\t\t\t\ti\t\t= 0;\n\t\t\t\t\n\t\t\tfor(i = 0; i < slides.length; i++) {\n\t\t\t\tif (i == current_slide) {\n\t\t\t\t\tslides[i].animate(config.duration, _ease, {\"opacity\": 1});\n\t\t\t\t} else if (i == current_slide - 1 || i == current_slide + 1) {\n\t\t\t\t\tslides[i].animate(config.duration, _ease, {\"opacity\": 0.1});\n\t\t\t\t} else {\n\t\t\t\t\tslides[i].opacity(n);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t/* GO TO SLIDE\n\t\t\tgoToSlide(n, ease, duration);\n\t\t================================================== */\n\t\tfunction goToSlide(n, ease, duration, fast, firstrun) {\n\t\t\tvar _ease\t\t= config.ease,\n\t\t\t\t_duration\t= config.duration,\n\t\t\t\tis_last\t\t= false,\n\t\t\t\tis_first\t= false,\n\t\t\t\t_title\t\t= \"\",\n\t\t\t\t_pos;\n\t\t\t\n\t\t\t/* STOP ANY VIDEO PLAYERS ACTIVE\n\t\t\t================================================== */\n\t\t\tVMM.ExternalAPI.youtube.stopPlayers();\n\t\t\t\n\t\t\t// Set current slide\n\t\t\tcurrent_slide\t= n;\n\t\t\t_pos\t\t\t= slides[current_slide].leftpos();\n\t\t\t\n\t\t\t\n\t\t\tif (current_slide == 0) {is_first = true};\n\t\t\tif (current_slide +1 >= slides.length) {is_last = true};\n\t\t\tif (ease != null && ease != \"\") {_ease = ease};\n\t\t\tif (duration != null && duration != \"\") {_duration = duration};\n\t\t\t\n\t\t\t/*\tNAVIGATION\n\t\t\t\tset proper nav titles and dates etc.\n\t\t\t================================================== */\n\t\t\t// Handle smaller sizes\n\t\t\tif (VMM.Browser.device == \"mobile\") {\n\t\t\t//if (VMM.Browser.device == \"mobile\" || current_width <= 640) {\n\t\t\t\tVMM.Lib.visible(navigation.prevBtn, false);\n\t\t\t\tVMM.Lib.visible(navigation.nextBtn, false);\n\t\t\t} else {\n\t\t\t\tif (is_first) {\n\t\t\t\t\tVMM.Lib.visible(navigation.prevBtn, false);\n\t\t\t\t} else {\n\t\t\t\t\tVMM.Lib.visible(navigation.prevBtn, true);\n\t\t\t\t\t_title = VMM.Util.unlinkify(data[current_slide - 1].title)\n\t\t\t\t\tif (config.type == \"timeline\") {\n\t\t\t\t\t\tif(typeof data[current_slide - 1].date === \"undefined\") {\n\t\t\t\t\t\t\tVMM.attachElement(navigation.prevDate, _title);\n\t\t\t\t\t\t\tVMM.attachElement(navigation.prevTitle, \"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tVMM.attachElement(navigation.prevDate, VMM.Date.prettyDate(data[current_slide - 1].startdate, false, data[current_slide - 1].precisiondate));\n\t\t\t\t\t\t\tVMM.attachElement(navigation.prevTitle, _title);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tVMM.attachElement(navigation.prevTitle, _title);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (is_last) {\n\t\t\t\t\tVMM.Lib.visible(navigation.nextBtn, false);\n\t\t\t\t} else {\n\t\t\t\t\tVMM.Lib.visible(navigation.nextBtn, true);\n\t\t\t\t\t_title = VMM.Util.unlinkify(data[current_slide + 1].title);\n\t\t\t\t\tif (config.type == \"timeline\") {\n\t\t\t\t\t\tif(typeof data[current_slide + 1].date === \"undefined\") {\n\t\t\t\t\t\t\tVMM.attachElement(navigation.nextDate, _title);\n\t\t\t\t\t\t\tVMM.attachElement(navigation.nextTitle, \"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tVMM.attachElement(navigation.nextDate, VMM.Date.prettyDate(data[current_slide + 1].startdate, false, data[current_slide + 1].precisiondate) );\n\t\t\t\t\t\t\tVMM.attachElement(navigation.nextTitle, _title);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tVMM.attachElement(navigation.nextTitle,  _title);\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t/* ANIMATE SLIDE\n\t\t\t================================================== */\n\t\t\tif (fast) {\n\t\t\t\tVMM.Lib.css($slider_container, \"left\", -(_pos - config.slider.content.padding));\t\n\t\t\t} else{\n\t\t\t\tVMM.Lib.stop($slider_container);\n\t\t\t\tVMM.Lib.animate($slider_container, _duration, _ease, {\"left\": -(_pos - config.slider.content.padding)});\n\t\t\t}\n\t\t\t\n\t\t\tif (firstrun) {\n\t\t\t\tVMM.fireEvent(layout, \"LOADED\");\n\t\t\t}\n\t\t\t\n\t\t\t/* SET Vertical Scoll\n\t\t\t================================================== */\n\t\t\tif (slides[current_slide].height() > config.slider_height) {\n\t\t\t\tVMM.Lib.css(\".slider\", \"overflow-y\", \"scroll\" );\n\t\t\t} else {\n\t\t\t\tVMM.Lib.css(layout, \"overflow-y\", \"hidden\" );\n\t\t\t\tvar scroll_height = 0;\n\t\t\t\ttry {\n\t\t\t\t\tscroll_height = VMM.Lib.prop(layout, \"scrollHeight\");\n\t\t\t\t\tVMM.Lib.animate(layout, _duration, _ease, {scrollTop: scroll_height - VMM.Lib.height(layout) });\n\t\t\t\t}\n\t\t\t\tcatch(err) {\n\t\t\t\t\tscroll_height = VMM.Lib.height(layout);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tpreloadSlides();\n\t\t\tVMM.fireEvent($slider, \"MESSAGE\", \"TEST\");\n\t\t}\n\n\t\tfunction backToCurrentSlide() {\n\t\t\tVMM.Lib.stop($slider_container);\n\t\t\tVMM.Lib.animate($slider_container, config.duration, \"easeOutExpo\", {\"left\": -(slides[current_slide].leftpos()) +  config.slider.content.padding} );\n\t\t}\n\t\t\n\t\t/* MESSEGES \n\t\t================================================== */\n\t\tfunction showMessege(e, msg, other) {\n\t\t\ttrace(\"showMessege \" + msg);\n\t\t\t//VMM.attachElement($timeline, $feedback);\n\t\t\tVMM.attachElement($explainer, \"<div class='vco-explainer'><div class='vco-explainer-container'><div class='vco-bezel'><div class='vco-gesture-icon'></div>\" + \"<div class='vco-message'><p>\" + msg + \"</p></div></div></div></div>\");\n\t\t};\n\t\t\n\t\tfunction hideMessege() {\n\t\t\tVMM.Lib.animate($explainer, config.duration, config.ease, {\"opacity\": 0}, detachMessege);\n\t\t};\n\t\t\n\t\tfunction detachMessege() {\n\t\t\tVMM.Lib.detach($explainer);\n\t\t}\n\t\t\n\t\t/* BUILD NAVIGATION\n\t\t================================================== */\n\t\tfunction buildNavigation() {\n\t\t\t\n\t\t\tvar temp_icon = \"<div class='icon'>&nbsp;</div>\";\n\t\t\t\n\t\t\tnavigation.nextBtn = VMM.appendAndGetElement($slider, \"<div>\", \"nav-next\");\n\t\t\tnavigation.prevBtn = VMM.appendAndGetElement($slider, \"<div>\", \"nav-previous\");\n\t\t\tnavigation.nextBtnContainer = VMM.appendAndGetElement(navigation.nextBtn, \"<div>\", \"nav-container\", temp_icon);\n\t\t\tnavigation.prevBtnContainer = VMM.appendAndGetElement(navigation.prevBtn, \"<div>\", \"nav-container\", temp_icon);\n\t\t\tif (config.type == \"timeline\") {\n\t\t\t\tnavigation.nextDate = VMM.appendAndGetElement(navigation.nextBtnContainer, \"<div>\", \"date\", \"\");\n\t\t\t\tnavigation.prevDate = VMM.appendAndGetElement(navigation.prevBtnContainer, \"<div>\", \"date\", \"\");\n\t\t\t}\n\t\t\tnavigation.nextTitle = VMM.appendAndGetElement(navigation.nextBtnContainer, \"<div>\", \"title\", \"\");\n\t\t\tnavigation.prevTitle = VMM.appendAndGetElement(navigation.prevBtnContainer, \"<div>\", \"title\", \"\");\n\t\t\t\n\t\t\tVMM.bindEvent(\".nav-next\", onNextClick);\n\t\t\tVMM.bindEvent(\".nav-previous\", onPrevClick);\n\t\t\tVMM.bindEvent(window, onKeypressNav, 'keydown');\n\t\t\t\n\t\t}\n\t\t\n\t\t/* BUILD\n\t\t================================================== */\n\t\tfunction build() {\n\t\t\tvar __duration = 3000;\n\t\t\t// Clear out existing content\n\t\t\tVMM.attachElement(layout, \"\");\n\t\t\t\n\t\t\t// Get DOM Objects to local objects\n\t\t\t$slider\t\t\t\t= VMM.getElement(layout);\n\t\t\t$slider_mask\t\t= VMM.appendAndGetElement($slider, \"<div>\", \"slider-container-mask\");\n\t\t\t$slider_container\t= VMM.appendAndGetElement($slider_mask, \"<div>\", \"slider-container\");\n\t\t\t$slides_items\t\t= VMM.appendAndGetElement($slider_container, \"<div>\", \"slider-item-container\");\n\t\t\t\n\t\t\t\n\t\t\t// BUILD NAVIGATION\n\t\t\tbuildNavigation();\n\n\t\t\t// ATTACH SLIDES\n\t\t\tbuildSlides(data);\n\t\t\t\n\t\t\t/* MAKE SLIDER DRAGGABLE/TOUCHABLE\n\t\t\t================================================== */\n\t\t\t\n\t\t\tif (VMM.Browser.device == \"tablet\" || VMM.Browser.device == \"mobile\") {\n\t\t\t\t// Different Animation duration for touch\n\t\t\t\tconfig.duration = 500;\n\t\t\t\t__duration = 1000;\n\t\t\t\t\n\t\t\t\t// Make touchable\n\t\t\t\t$dragslide = new VMM.DragSlider();\n\t\t\t\t$dragslide.createPanel($slider, $slider_container, \"\", config.touch, true);\n\t\t\t\tVMM.bindEvent($dragslide, onDragFinish, 'DRAGUPDATE');\n\t\t\t\t\n\t\t\t\t// EXPLAINER\n\t\t\t\t$explainer = VMM.appendAndGetElement($slider_mask, \"<div>\", \"vco-feedback\", \"\");\n\t\t\t\tshowMessege(null, VMM.master_config.language.messages.swipe_nav);\n\t\t\t\tVMM.Lib.height($explainer, config.slider.height);\n\t\t\t\tVMM.bindEvent($explainer, onExplainerClick);\n\t\t\t\tVMM.bindEvent($explainer, onExplainerClick, 'touchend');\n\t\t\t}\n\t\t\t\n\t\t\treSize(false, true);\n\t\t\t\n\t\t\t\n\t\t\tVMM.Lib.visible(navigation.prevBtn, false);\n\t\t\tgoToSlide(config.current_slide, \"easeOutExpo\", __duration, true, true);\n\t\t\t\n\t\t\t_active = true;\n\t\t};\n\t\t\n\t};\n\t\n}\n\n\n\n\n"
  },
  {
    "path": "source/js/Core/VMM.StoryJS.js",
    "content": "/* VeriteCo StoryJS\n================================================== */\n\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n================================================== */\n// @codekit-prepend \"Core/VMM.Core.js\";\n// @codekit-prepend \"Language/VMM.Language.js\";\n// @codekit-prepend \"Media/VMM.Media.js\";\n// @codekit-prepend \"Slider/VMM.DragSlider.js\";\n// @codekit-prepend \"Slider/VMM.Slider.js\";\n// @codekit-prepend \"Library/AES.js\";\n// @codekit-prepend \"Library/bootstrap-tooltip.js\";\n\n\nif(typeof VMM != 'undefined' && typeof VMM.StoryJS == 'undefined') {\n\t\n\tVMM.StoryJS = function() {  \n\t\t\n\t\t/* PRIVATE VARS\n\t\t================================================== */\n\t\t\n\t\t/* PUBLIC FUNCTIONS\n\t\t================================================== */\n\t\tthis.init = function(d) {\n\t\t\t\n\t\t};\n\t\t\n\t}\n}\n"
  },
  {
    "path": "source/js/VMM.Timeline.DataObj.js",
    "content": "/*\tVMM.Timeline.DataObj.js\n    TIMELINE SOURCE DATA PROCESSOR\n================================================== */\n\nif (typeof VMM.Timeline !== 'undefined' && typeof VMM.Timeline.DataObj == 'undefined') {\n\tVMM.Timeline.DataObj = {\n\t\tdata_obj: {},\n\t\tmodel_array: [],\n\t\tgetData: function (raw_data) {\n\t\t\tVMM.Timeline.DataObj.data_obj = {};\n\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, VMM.Timeline.Config.language.messages.loading_timeline);\n\t\t\tif (type.of(raw_data) == \"object\") {\n\t\t\t\ttrace(\"DATA SOURCE: JSON OBJECT\");\n\t\t\t\tVMM.Timeline.DataObj.parseJSON(raw_data);\n\t\t\t} else if (type.of(raw_data) == \"string\") {\n\t\t\t\tif (raw_data.match(\"%23\")) {\n\t\t\t\t\ttrace(\"DATA SOURCE: TWITTER SEARCH\");\n\t\t\t\t\tVMM.Timeline.DataObj.model.tweets.getData(\"%23medill\");\n\t\t\t\t} else if (\traw_data.match(\"spreadsheet\") ) {\n\t\t\t\t\ttrace(\"DATA SOURCE: GOOGLE SPREADSHEET\");\n\t\t\t\t\tVMM.Timeline.DataObj.model.googlespreadsheet.getData(raw_data);\n\t\t\t\t} else if (raw_data.match(\"storify.com\")) {\n\t\t\t\t\ttrace(\"DATA SOURCE: STORIFY\");\n\t\t\t\t\tVMM.Timeline.DataObj.model.storify.getData(raw_data);\n\t\t\t\t\t//http://api.storify.com/v1/stories/number10gov/g8-and-nato-chicago-summit\n\t\t\t\t} else if (raw_data.match(\"\\.jsonp\")) {\n\t\t\t\t\ttrace(\"DATA SOURCE: JSONP\");\n\t\t\t\t\tLoadLib.js(raw_data, VMM.Timeline.DataObj.onJSONPLoaded);\n\t\t\t\t} else {\n\t\t\t\t\ttrace(\"DATA SOURCE: JSON\");\n\t\t\t\t\tvar req = \"\";\n\t\t\t\t\tif (raw_data.indexOf(\"?\") > -1) {\n\t\t\t\t\t\treq = raw_data + \"&callback=onJSONP_Data\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\treq = raw_data + \"?callback=onJSONP_Data\";\n\t\t\t\t\t}\n\t\t\t\t\tVMM.getJSON(req, VMM.Timeline.DataObj.parseJSON);\n\t\t\t\t}\n\t\t\t} else if (type.of(raw_data) == \"html\") {\n\t\t\t\ttrace(\"DATA SOURCE: HTML\");\n\t\t\t\tVMM.Timeline.DataObj.parseHTML(raw_data);\n\t\t\t} else {\n\t\t\t\ttrace(\"DATA SOURCE: UNKNOWN\");\n\t\t\t}\n\t\t\t\n\t\t},\n\t\t\n\t\tonJSONPLoaded: function() {\n\t\t\ttrace(\"JSONP IS LOADED\");\n\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, storyjs_jsonp_data);\n\t\t},\n\t\t\n\t\tparseHTML: function (d) {\n\t\t\ttrace(\"parseHTML\");\n\t\t\ttrace(\"WARNING: THIS IS STILL ALPHA AND WILL NOT WORK WITH ID's other than #timeline\");\n\t\t\tvar _data_obj = VMM.Timeline.DataObj.data_template_obj;\n\t\t\t\n\t\t\t/*\tTimeline start slide\n\t\t\t================================================== */\n\t\t\tif (VMM.Lib.find(\"#timeline section\", \"time\")[0]) {\n\t\t\t\t_data_obj.timeline.startDate = VMM.Lib.html(VMM.Lib.find(\"#timeline section\", \"time\")[0]);\n\t\t\t\t_data_obj.timeline.headline = VMM.Lib.html(VMM.Lib.find(\"#timeline section\", \"h2\"));\n\t\t\t\t_data_obj.timeline.text = VMM.Lib.html(VMM.Lib.find(\"#timeline section\", \"article\"));\n\t\t\t\t\n\t\t\t\tvar found_main_media = false;\n\t\t\t\t\n\t\t\t\tif (VMM.Lib.find(\"#timeline section\", \"figure img\").length != 0) {\n\t\t\t\t\tfound_main_media = true;\n\t\t\t\t\t_data_obj.timeline.asset.media = VMM.Lib.attr(VMM.Lib.find(\"#timeline section\", \"figure img\"), \"src\");\n\t\t\t\t} else if (VMM.Lib.find(\"#timeline section\", \"figure a\").length != 0) {\n\t\t\t\t\tfound_main_media = true;\n\t\t\t\t\t_data_obj.timeline.asset.media = VMM.Lib.attr(VMM.Lib.find(\"#timeline section\", \"figure a\"), \"href\");\n\t\t\t\t} else {\n\t\t\t\t\t//trace(\"NOT FOUND\");\n\t\t\t\t}\n\n\t\t\t\tif (found_main_media) {\n\t\t\t\t\tif (VMM.Lib.find(\"#timeline section\", \"cite\").length != 0) {\n\t\t\t\t\t\t_data_obj.timeline.asset.credit = VMM.Lib.html(VMM.Lib.find(\"#timeline section\", \"cite\"));\n\t\t\t\t\t}\n\t\t\t\t\tif (VMM.Lib.find(this, \"figcaption\").length != 0) {\n\t\t\t\t\t\t_data_obj.timeline.asset.caption = VMM.Lib.html(VMM.Lib.find(\"#timeline section\", \"figcaption\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/*\tTimeline Date Slides\n\t\t\t================================================== */\n\t\t\tVMM.Lib.each(\"#timeline li\", function(i, elem){\n\t\t\t\t\n\t\t\t\tvar valid_date = false;\n\t\t\t\t\n\t\t\t\tvar _date = {\n\t\t\t\t\t\"type\":\"default\",\n\t\t\t\t\t\"startDate\":\"\",\n\t\t            \"headline\":\"\",\n\t\t            \"text\":\"\",\n\t\t            \"asset\":\n\t\t            {\n\t\t                \"media\":\"\",\n\t\t                \"credit\":\"\",\n\t\t                \"caption\":\"\"\n\t\t            },\n\t\t            \"tags\":\"Optional\"\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (VMM.Lib.find(this, \"time\") != 0) {\n\t\t\t\t\t\n\t\t\t\t\tvalid_date = true;\n\t\t\t\t\t\n\t\t\t\t\t_date.startDate = VMM.Lib.html(VMM.Lib.find(this, \"time\")[0]);\n\n\t\t\t\t\tif (VMM.Lib.find(this, \"time\")[1]) {\n\t\t\t\t\t\t_date.endDate = VMM.Lib.html(VMM.Lib.find(this, \"time\")[1]);\n\t\t\t\t\t}\n\n\t\t\t\t\t_date.headline = VMM.Lib.html(VMM.Lib.find(this, \"h3\"));\n\n\t\t\t\t\t_date.text = VMM.Lib.html(VMM.Lib.find(this, \"article\"));\n\n\t\t\t\t\tvar found_media = false;\n\t\t\t\t\tif (VMM.Lib.find(this, \"figure img\").length != 0) {\n\t\t\t\t\t\tfound_media = true;\n\t\t\t\t\t\t_date.asset.media = VMM.Lib.attr(VMM.Lib.find(this, \"figure img\"), \"src\");\n\t\t\t\t\t} else if (VMM.Lib.find(this, \"figure a\").length != 0) {\n\t\t\t\t\t\tfound_media = true;\n\t\t\t\t\t\t_date.asset.media = VMM.Lib.attr(VMM.Lib.find(this, \"figure a\"), \"href\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//trace(\"NOT FOUND\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (found_media) {\n\t\t\t\t\t\tif (VMM.Lib.find(this, \"cite\").length != 0) {\n\t\t\t\t\t\t\t_date.asset.credit = VMM.Lib.html(VMM.Lib.find(this, \"cite\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (VMM.Lib.find(this, \"figcaption\").length != 0) {\n\t\t\t\t\t\t\t_date.asset.caption = VMM.Lib.html(VMM.Lib.find(this, \"figcaption\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\ttrace(_date);\n\t\t\t\t\t_data_obj.timeline.date.push(_date);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t\t\n\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, _data_obj);\n\t\t\t\n\t\t},\n\t\t\n\t\tparseJSON: function(d) {\n\t\t\ttrace(\"parseJSON\");\n\t\t\tif (d.timeline.type == \"default\") {\n\t\t\t\ttrace(\"DATA SOURCE: JSON STANDARD TIMELINE\");\n\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, d);\n\t\t\t} else if (d.timeline.type == \"twitter\") {\n\t\t\t\ttrace(\"DATA SOURCE: JSON TWEETS\");\n\t\t\t\tVMM.Timeline.DataObj.model_Tweets.buildData(d);\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\ttrace(\"DATA SOURCE: UNKNOWN JSON\");\n\t\t\t\ttrace(type.of(d.timeline));\n\t\t\t};\n\t\t},\n\t\t\n\t\t/*\tMODEL OBJECTS \n\t\t\tNew Types of Data can be formatted for the timeline here\n\t\t================================================== */\n\t\t\n\t\tmodel: {\n\t\t\t\n\t\t\tgooglespreadsheet: {\n\t\t\t\textractSpreadsheetKey: function(url) {\n\t\t\t\t\tvar key\t= VMM.Util.getUrlVars(url)[\"key\"];\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tif (url.match(\"docs.google.com/spreadsheets/d/\")) {\n\t\t\t\t\t\t\tvar pos = url.indexOf(\"docs.google.com/spreadsheets/d/\") + \"docs.google.com/spreadsheets/d/\".length;\n\t\t\t\t\t\t\tvar tail = url.substr(pos);\n\t\t\t\t\t\t\tkey = tail.split('/')[0]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!key) { key = url}\n\t\t\t\t\treturn key;\n\t\t\t\t},\n\t\t\t\tgetData: function(raw) {\n\t\t\t\t\tvar getjsondata, key, worksheet, url, timeout, tries = 0;\n\t\t\t\t\t\n\t\t\t\t\t// new Google Docs URLs can specify 'key' differently. \n\t\t\t\t\t// that format doesn't seem to have a way to specify a worksheet.\n\t\t\t\t\tkey\t= VMM.Timeline.DataObj.model.googlespreadsheet.extractSpreadsheetKey(raw);\n\t\t\t\t\tworksheet = VMM.Util.getUrlVars(raw)[\"worksheet\"];\n\t\t\t\t\tif (typeof worksheet == \"undefined\") worksheet = \"1\";\n\t\t\t\t\t\n\t\t\t\t\turl\t= \"https://spreadsheets.google.com/feeds/list/\" + key + \"/\" + worksheet + \"/public/values?alt=json\";\n\t\t\t\t\t\n\t\t\t\t\ttimeout = setTimeout(function() {\n\t\t\t\t\t\ttrace(\"Google Docs timeout \" + url);\n\t\t\t\t\t\ttrace(url);\n\t\t\t\t\t\tif (tries < 3) {\n\t\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Still waiting on Google Docs, trying again \" + tries);\n\t\t\t\t\t\t\ttries ++;\n\t\t\t\t\t\t\tgetjsondata.abort()\n\t\t\t\t\t\t\trequestJsonData();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Google Docs is not responding\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 16000);\n\t\t\t\t\t\n\t\t\t\t\tfunction requestJsonData() {\n\t\t\t\t\t\tgetjsondata = VMM.getJSON(url, function(d) {\n\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\tVMM.Timeline.DataObj.model.googlespreadsheet.buildData(d);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\t\t\tif (jqXHR.status == 400) {\n\t\t\t\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Error reading Google spreadsheet. Check the URL and make sure it's published to the web.\");\n\t\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttrace(\"Google Docs ERROR\");\n\t\t\t\t\t\t\t\ttrace(\"Google Docs ERROR: \" + textStatus + \" \" + jqXHR.responseText);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.success(function(d) {\n\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trequestJsonData();\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tbuildData: function(d) {\n\t\t\t\t\tvar data_obj\t= VMM.Timeline.DataObj.data_template_obj,\n\t\t\t\t\t\tis_valid\t= false;\n\t\t\t\t\t\n\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Parsing Google Doc Data\");\n\n\t\t\t\t\tfunction getGVar(v) {\n\t\t\t\t\t\tif (typeof v != 'undefined') {\n\t\t\t\t\t\t\treturn v.$t;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof d.feed.entry == 'undefined') {\n\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Error parsing spreadsheet. Make sure you have no blank rows and that the headers have not been changed.\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tis_valid = true;\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor(var i = 0; i < d.feed.entry.length; i++) {\n\t\t\t\t\t\t\tvar dd\t\t= d.feed.entry[i],\n\t\t\t\t\t\t\t\tdd_type\t= \"\";\n\n\t\t\t\t\t\t\tif (typeof(dd.gsx$startdate) == 'undefined') {\n\t\t\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Missing start date. Make sure the headers of your Google Spreadsheet have not been changed.\");\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (typeof dd.gsx$type != 'undefined') {\n\t\t\t\t\t\t\t\tdd_type = dd.gsx$type.$t;\n\t\t\t\t\t\t\t} else if (typeof dd.gsx$titleslide != 'undefined') {\n\t\t\t\t\t\t\t\tdd_type = dd.gsx$titleslide.$t;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (dd_type.match(\"start\") || dd_type.match(\"title\") ) {\n\t\t\t\t\t\t\t\tif (data_obj.timeline.startDate) {\n\t\t\t\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Invalid data: Multiple 'title' slides. You should only have one row with 'title' in the 'type' column.\");\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdata_obj.timeline.startDate\t\t= getGVar(dd.gsx$startdate);\n\t\t\t\t\t\t\t\tdata_obj.timeline.headline\t\t= getGVar(dd.gsx$headline);\n\t\t\t\t\t\t\t\tdata_obj.timeline.asset.media\t= getGVar(dd.gsx$media);\n\t\t\t\t\t\t\t\tdata_obj.timeline.asset.caption\t= getGVar(dd.gsx$mediacaption);\n\t\t\t\t\t\t\t\tdata_obj.timeline.asset.credit\t= getGVar(dd.gsx$mediacredit);\n\t\t\t\t\t\t\t\tdata_obj.timeline.text\t\t\t= getGVar(dd.gsx$text);\n\t\t\t\t\t\t\t\tdata_obj.timeline.type\t\t\t= \"google spreadsheet\";\n\t\t\t\t\t\t\t} else if (dd_type.match(\"era\")) {\n\t\t\t\t\t\t\t\tvar era = {\n\t\t\t\t\t\t\t\t\tstartDate:\t\tgetGVar(dd.gsx$startdate),\n\t\t\t\t\t\t\t\t\tendDate:\t\tgetGVar(dd.gsx$enddate),\n\t\t\t\t\t\t\t\t\theadline:\t\tgetGVar(dd.gsx$headline),\n\t\t\t\t\t\t\t\t\ttext:\t\t\tgetGVar(dd.gsx$text),\n\t\t\t\t\t\t\t\t\ttag:\t\t\tgetGVar(dd.gsx$tag)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdata_obj.timeline.era.push(era);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar date = {\n\t\t\t\t\t\t\t\t\t\ttype:\t\t\t\"google spreadsheet\",\n\t\t\t\t\t\t\t\t\t\tstartDate:\t\tgetGVar(dd.gsx$startdate),\n\t\t\t\t\t\t\t\t\t\tendDate:\t\tgetGVar(dd.gsx$enddate),\n\t\t\t\t\t\t\t\t\t\theadline:\t\tgetGVar(dd.gsx$headline),\n\t\t\t\t\t\t\t\t\t\ttext:\t\t\tgetGVar(dd.gsx$text),\n\t\t\t\t\t\t\t\t\t\ttag:\t\t\tgetGVar(dd.gsx$tag),\n\t\t\t\t\t\t\t\t\t\tasset: {\n\t\t\t\t\t\t\t\t\t\t\tmedia:\t\tgetGVar(dd.gsx$media),\n\t\t\t\t\t\t\t\t\t\t\tcredit:\t\tgetGVar(dd.gsx$mediacredit),\n\t\t\t\t\t\t\t\t\t\t\tcaption:\tgetGVar(dd.gsx$mediacaption),\n\t\t\t\t\t\t\t\t\t\t\tthumbnail:\tgetGVar(dd.gsx$mediathumbnail)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tdata_obj.timeline.date.push(date);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif (is_valid) {\n\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Finished Parsing Data\");\n\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, data_obj);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, VMM.Language.messages.loading + \" Google Doc Data (cells)\");\n\t\t\t\t\t\ttrace(\"There may be too many entries. Still trying to load data. Now trying to load cells to avoid Googles limitation on cells\");\n\t\t\t\t\t\tVMM.Timeline.DataObj.model.googlespreadsheet.getDataCells(d.feed.link[0].href);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tgetDataCells: function(raw) {\n\t\t\t\t\tvar getjsondata, key, url, timeout, tries = 0;\n\t\t\t\t\t\n\t\t\t\t\tkey\t= VMM.Timeline.DataObj.model.googlespreadsheet.extractSpreadsheetKey(raw);\n\t\t\t\t\turl\t= \"https://spreadsheets.google.com/feeds/cells/\" + key + \"/od6/public/values?alt=json\";\n\t\t\t\t\t\n\t\t\t\t\ttimeout = setTimeout(function() {\n\t\t\t\t\t\ttrace(\"Google Docs timeout \" + url);\n\t\t\t\t\t\ttrace(url);\n\t\t\t\t\t\tif (tries < 3) {\n\t\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Still waiting on Google Docs, trying again \" + tries);\n\t\t\t\t\t\t\ttries ++;\n\t\t\t\t\t\t\tgetjsondata.abort()\n\t\t\t\t\t\t\trequestJsonData();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Google Docs is not responding\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 16000);\n\t\t\t\t\t\n\t\t\t\t\tfunction requestJsonData() {\n\t\t\t\t\t\tgetjsondata = VMM.getJSON(url, function(d) {\n\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\tVMM.Timeline.DataObj.model.googlespreadsheet.buildDataCells(d);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\t\t\ttrace(\"Google Docs ERROR\");\n\t\t\t\t\t\t\t\ttrace(\"Google Docs ERROR: \" + textStatus + \" \" + jqXHR.responseText);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.success(function(d) {\n\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\trequestJsonData();\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tbuildDataCells: function(d) {\n\t\t\t\t\tvar data_obj\t= VMM.Timeline.DataObj.data_template_obj,\n\t\t\t\t\t\tis_valid\t= false,\n\t\t\t\t\t\tcellnames\t= [\"timeline\"],\n\t\t\t\t\t\tlist \t\t= [],\n\t\t\t\t\t\tmax_row\t\t= 0,\n\t\t\t\t\t\ti\t\t\t= 0,\n\t\t\t\t\t\tk\t\t\t= 0;\n\t\t\t\t\t\n\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, VMM.Language.messages.loading_timeline + \" Parsing Google Doc Data (cells)\");\n\n\t\t\t\t\tfunction getGVar(v) {\n\t\t\t\t\t\tif (typeof v != 'undefined') {\n\t\t\t\t\t\t\treturn v.$t;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof d.feed.entry != 'undefined') {\n\t\t\t\t\t\tis_valid = true;\n\t\t\t\t\t\t\n\t\t\t\t\t\t// DETERMINE NUMBER OF ROWS\n\t\t\t\t\t\tfor(i = 0; i < d.feed.entry.length; i++) {\n\t\t\t\t\t\t\tvar dd\t\t\t\t= d.feed.entry[i];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (parseInt(dd.gs$cell.row) > max_row) {\n\t\t\t\t\t\t\t\tmax_row = parseInt(dd.gs$cell.row);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// CREATE OBJECT FOR EACH ROW\n\t\t\t\t\t\tfor(var i = 0; i < max_row + 1; i++) {\n\t\t\t\t\t\t\tvar date = {\n\t\t\t\t\t\t\t\ttype:\t\t\t\"\",\n\t\t\t\t\t\t\t\tstartDate:\t\t\"\",\n\t\t\t\t\t\t\t\tendDate:\t\t\"\",\n\t\t\t\t\t\t\t\theadline:\t\t\"\",\n\t\t\t\t\t\t\t\ttext:\t\t\t\"\",\n\t\t\t\t\t\t\t\ttag:\t\t\t\"\",\n\t\t\t\t\t\t\t\tasset: {\n\t\t\t\t\t\t\t\t\tmedia:\t\t\"\",\n\t\t\t\t\t\t\t\t\tcredit:\t\t\"\",\n\t\t\t\t\t\t\t\t\tcaption:\t\"\",\n\t\t\t\t\t\t\t\t\tthumbnail:\t\"\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tlist.push(date);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// PREP GOOGLE DOC CELL DATA TO EVALUATE\n\t\t\t\t\t\tfor(i = 0; i < d.feed.entry.length; i++) {\n\t\t\t\t\t\t\tvar dd\t\t\t\t= d.feed.entry[i],\n\t\t\t\t\t\t\t\tdd_type\t\t\t= \"\",\n\t\t\t\t\t\t\t\tcolumn_name\t\t= \"\",\n\t\t\t\t\t\t\t\tcell = {\n\t\t\t\t\t\t\t\t\tcontent: \tgetGVar(dd.gs$cell),\n\t\t\t\t\t\t\t\t\tcol: \t\tdd.gs$cell.col,\n\t\t\t\t\t\t\t\t\trow: \t\tdd.gs$cell.row,\n\t\t\t\t\t\t\t\t\tname: \t\t\"\"\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//trace(cell);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (cell.row == 1) {\n\t\t\t\t\t\t\t\tif (cell.content == \"Start Date\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"startDate\";\n\t\t\t\t\t\t\t\t} else if (cell.content == \"End Date\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"endDate\";\n\t\t\t\t\t\t\t\t} else if (cell.content == \"Headline\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"headline\";\n\t\t\t\t\t\t\t\t} else if (cell.content == \"Text\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"text\";\n\t\t\t\t\t\t\t\t} else if (cell.content == \"Media\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"media\";\n\t\t\t\t\t\t\t\t} else if (cell.content == \"Media Credit\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"credit\";\n\t\t\t\t\t\t\t\t} else if (cell.content == \"Media Caption\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"caption\";\n\t\t\t\t\t\t\t\t} else if (cell.content == \"Media Thumbnail\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"thumbnail\";\n\t\t\t\t\t\t\t\t} else if (cell.content == \"Type\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"type\";\n\t\t\t\t\t\t\t\t} else if (cell.content == \"Tag\") {\n\t\t\t\t\t\t\t\t\tcolumn_name = \"tag\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tcellnames.push(column_name);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcell.name = cellnames[cell.col];\n\t\t\t\t\t\t\t\tlist[cell.row][cell.name] = cell.content;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\n\t\t\t\t\t\tfor(i = 0; i < list.length; i++) {\n\t\t\t\t\t\t\tvar date\t= list[i];\n\t\t\t\t\t\t\tif (date.type.match(\"start\") || date.type.match(\"title\") ) {\n\t\t\t\t\t\t\t\tdata_obj.timeline.startDate\t\t= date.startDate;\n\t\t\t\t\t\t\t\tdata_obj.timeline.headline\t\t= date.headline;\n\t\t\t\t\t\t\t\tdata_obj.timeline.asset.media\t= date.media;\n\t\t\t\t\t\t\t\tdata_obj.timeline.asset.caption\t= date.caption;\n\t\t\t\t\t\t\t\tdata_obj.timeline.asset.credit\t= date.credit;\n\t\t\t\t\t\t\t\tdata_obj.timeline.text\t\t\t= date.text;\n\t\t\t\t\t\t\t\tdata_obj.timeline.type\t\t\t= \"google spreadsheet\";\n\t\t\t\t\t\t\t} else if (date.type.match(\"era\")) {\n\t\t\t\t\t\t\t\tvar era = {\n\t\t\t\t\t\t\t\t\tstartDate:\t\tdate.startDate,\n\t\t\t\t\t\t\t\t\tendDate:\t\tdate.endDate,\n\t\t\t\t\t\t\t\t\theadline:\t\tdate.headline,\n\t\t\t\t\t\t\t\t\ttext:\t\t\tdate.text,\n\t\t\t\t\t\t\t\t\ttag:\t\t\tdate.tag\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdata_obj.timeline.era.push(era);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (date.startDate) {\n\n\t\t\t\t\t\t\t\t\tvar date = {\n\t\t\t\t\t\t\t\t\t\t\ttype:\t\t\t\"google spreadsheet\",\n\t\t\t\t\t\t\t\t\t\t\tstartDate:\t\tdate.startDate,\n\t\t\t\t\t\t\t\t\t\t\tendDate:\t\tdate.endDate,\n\t\t\t\t\t\t\t\t\t\t\theadline:\t\tdate.headline,\n\t\t\t\t\t\t\t\t\t\t\ttext:\t\t\tdate.text,\n\t\t\t\t\t\t\t\t\t\t\ttag:\t\t\tdate.tag,\n\t\t\t\t\t\t\t\t\t\t\tasset: {\n\t\t\t\t\t\t\t\t\t\t\t\tmedia:\t\tdate.media,\n\t\t\t\t\t\t\t\t\t\t\t\tcredit:\t\tdate.credit,\n\t\t\t\t\t\t\t\t\t\t\t\tcaption:\tdate.caption,\n\t\t\t\t\t\t\t\t\t\t\t\tthumbnail:\tdate.thumbnail\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tdata_obj.timeline.date.push(date);\n\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttrace(\"Skipping item \" + i + \" in list: no start date.\")\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\tis_valid = data_obj.timeline.date.length > 0;\n\t\t\t\t\tif (is_valid) {\n\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Finished Parsing Data\");\n\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, data_obj);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Unable to load Google Doc data source. Make sure you have no blank rows and that the headers have not been changed.\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\tstorify: {\n\t\t\t\t\n\t\t\t\tgetData: function(raw) {\n\t\t\t\t\tvar key, url, storify_timeout;\n\t\t\t\t\t//http://storify.com/number10gov/g8-and-nato-chicago-summit\n\t\t\t\t\t//http://api.storify.com/v1/stories/number10gov/g8-and-nato-chicago-summit\n\t\t\t\t\t\n\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Loading Storify...\");\n\t\t\t\t\t\n\t\t\t\t\tkey\t= raw.split(\"storify.com\\/\")[1];\n\t\t\t\t\turl\t= \"//api.storify.com/v1/stories/\" + key + \"?per_page=300&callback=?\";\n\t\t\t\t\t\n\t\t\t\t\tstorify_timeout = setTimeout(function() {\n\t\t\t\t\t\ttrace(\"STORIFY timeout\");\n\t\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Storify is not responding\");\n\t\t\t\t\t}, 6000);\n\t\t\t\t\t\n\t\t\t\t\tVMM.getJSON(url, VMM.Timeline.DataObj.model.storify.buildData)\n\t\t\t\t\t\t.error(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\t\ttrace(\"STORIFY error\");\n\t\t\t\t\t\t\ttrace(\"STORIFY ERROR: \" + textStatus + \" \" + jqXHR.responseText);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.success(function(d) {\n\t\t\t\t\t\t\tclearTimeout(storify_timeout);\n\t\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tbuildData: function(d) {\n\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.messege, \"Parsing Data\");\n\t\t\t\t\tvar _data_obj = VMM.Timeline.DataObj.data_template_obj;\n\t\t\t\t\t\n\t\t\t\t\t_data_obj.timeline.startDate\t= \tnew Date(d.content.date.created);;\n\t\t\t\t\t_data_obj.timeline.headline\t\t= \td.content.title;\n\t\t\t\t\t\n\t\t\t\t\ttrace(d);\n\t\t\t\t\t//d.permalink\n\t\t\t\t\tvar tt\t\t\t=\t\"\";\n\t\t\t\t\tvar t_name\t\t=\td.content.author.username;\n\t\t\t\t\tvar t_nickname\t=\t\"\";\n\t\t\t\t\tif (typeof d.content.author.name != 'undefined') {\n\t\t\t\t\t\tt_name\t\t=\td.content.author.name;\n\t\t\t\t\t\tt_nickname\t=\td.content.author.username + \"&nbsp;\";\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof d.content.description != 'undefined' && d.content.description != null) {\n\t\t\t\t\t\ttt\t\t\t+=\td.content.description;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\ttt\t\t\t\t+=\t\"<div class='storify'>\"\n\t\t\t\t\t//tt\t\t\t\t += \" <a href='\" + d.content.permalink + \"' target='_blank' alt='link to original story' title='link to original story'>\" + \"<span class='created-at'></span>\" + \" </a>\";\n\t\t\t\t\t\n\t\t\t\t\ttt\t\t\t\t+=\t\"<div class='vcard author'><a class='screen-name url' href='\" + d.content.author.permalink + \"' target='_blank'>\";\n\t\t\t\t\t\n\t\t\t\t\ttt\t\t\t\t+=\t\"<span class='avatar'><img src='\" + d.content.author.avatar + \"' style='max-width: 32px; max-height: 32px;'></span>\"\n\t\t\t\t\ttt\t\t\t\t+=\t\"<span class='fn'>\" + t_name + \"</span>\";\n\t\t\t\t\ttt\t\t\t\t+=\t\"<span class='nickname'>\" + t_nickname + \"<span class='thumbnail-inline'></span></span>\";\n\t\t\t\t\ttt\t\t\t\t+=\t\"</a>\";\n\t\t\t\t\t//tt\t\t\t\t+=\t\"<span class='nickname'>\" + d.content.author.stats.stories + \" Stories</span>\";\n\t\t\t\t\t//tt\t\t\t\t+=\t\"<span class='nickname'>\" + d.content.author.stats.subscribers + \" Subscribers</span>\";\n\t\t\t\t\ttt\t\t\t\t+=\t\"</div>\"\n\t\t\t\t\ttt\t\t\t\t+=\t\"</div>\";\n\t\t\t\t\t\n\t\t\t\t\t_data_obj.timeline.text = tt;\n\t\t\t\t\t_data_obj.timeline.asset.media = d.content.thumbnail;\n\t\t\t\t\t\n\t\t\t\t\t//_data_obj.timeline.asset.media = \t\tdd.gsx$media.$t;\n\t\t\t\t\t//_data_obj.timeline.asset.caption = \t\tdd.gsx$mediacaption.$t;\n\t\t\t\t\t//_data_obj.timeline.asset.credit = \t\tdd.gsx$mediacredit.$t;\n\t\t\t\t\t_data_obj.timeline.type = \t\t\t\t\"storify\";\n\t\t\t\t\t\n\t\t\t\t\tfor(var i = 0; i < d.content.elements.length; i++) {\n\t\t\t\t\t\tvar dd = d.content.elements[i];\n\t\t\t\t\t\tvar is_text = false;\n\t\t\t\t\t\tvar d_date = new Date(dd.posted_at);\n\t\t\t\t\t\t//trace(tempdat);\n\t\t\t\t\t\ttrace(dd.type);\n\t\t\t\t\t\t//trace(dd);\n\t\t\t\t\t\tvar _date = {\n\t\t\t\t\t\t\t\"type\": \t\t\"storify\",\n\t\t\t\t\t\t\t\"startDate\": \tdd.posted_at,\n\t\t\t\t\t\t\t\"endDate\": \t\tdd.posted_at,\n\t\t\t\t            \"headline\": \t\" \",\n\t\t\t\t\t\t\t\"slug\": \t\t\"\", \n\t\t\t\t            \"text\": \t\t\"\",\n\t\t\t\t            \"asset\": {\n\t\t\t\t\t\t\t\t\"media\": \t\"\", \n\t\t\t\t\t\t\t\t\"credit\": \t\"\", \n\t\t\t\t\t\t\t\t\"caption\": \t\"\" \n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\t/*\tMEDIA\n\t\t\t\t\t\t================================================== */\n\t\t\t\t\t\tif (dd.type == \"image\") {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (typeof dd.source.name != 'undefined') {\n\t\t\t\t\t\t\t\tif (dd.source.name == \"flickr\") {\n\t\t\t\t\t\t\t\t\t_date.asset.media\t\t=\t\"//flickr.com/photos/\" + dd.meta.pathalias + \"/\" + dd.meta.id + \"/\";\n\t\t\t\t\t\t\t\t\t_date.asset.credit\t\t=\t\"<a href='\" + _date.asset.media + \"'>\" + dd.attribution.name + \"</a>\";\n\t\t\t\t\t\t\t\t\t_date.asset.credit\t\t+=\t\" on <a href='\" + dd.source.href + \"'>\" + dd.source.name + \"</a>\";\n\t\t\t\t\t\t\t\t} else if (dd.source.name\t==\t\"instagram\") {\n\t\t\t\t\t\t\t\t\t_date.asset.media\t\t=\tdd.permalink;\n\t\t\t\t\t\t\t\t\t_date.asset.credit\t\t=\t\"<a href='\" + dd.permalink + \"'>\" + dd.attribution.name + \"</a>\";\n\t\t\t\t\t\t\t\t\t_date.asset.credit\t\t+=\t\" on <a href='\" + dd.source.href + \"'>\" + dd.source.name + \"</a>\";\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t_date.asset.credit\t\t=\t\"<a href='\" + dd.permalink + \"'>\" + dd.attribution.name + \"</a>\";\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (typeof dd.source.href != 'undefined') {\n\t\t\t\t\t\t\t\t\t\t_date.asset.credit\t+=\t\" on <a href='\" + dd.source.href + \"'>\" + dd.source.name + \"</a>\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t_date.asset.media\t\t=\tdd.data.image.src;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_date.asset.credit\t\t\t=\t\"<a href='\" + dd.permalink + \"'>\" + dd.attribution.name + \"</a>\";\n\t\t\t\t\t\t\t\t_date.asset.media\t\t\t=\tdd.data.image.src;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t_date.slug\t \t\t\t\t\t=\tdd.attribution.name;\n\t\t\t\t\t\t\tif (typeof dd.data.image.caption != 'undefined') {\n\t\t\t\t\t\t\t\tif (dd.data.image.caption != 'undefined') {\n\t\t\t\t\t\t\t\t\t_date.asset.caption\t\t\t\t=\tdd.data.image.caption;\n\t\t\t\t\t\t\t\t\t_date.slug\t \t\t\t\t\t=\tdd.data.image.caption;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else if (dd.type == \"quote\") {\n\t\t\t\t\t\t\tif (dd.permalink.match(\"twitter\")) {\n\t\t\t\t\t\t\t\t_date.asset.media\t=\tdd.permalink; \n\t\t\t\t\t\t\t\t_date.slug = VMM.Util.untagify(dd.data.quote.text);\n\t\t\t\t\t\t\t} else if (dd.permalink.match(\"storify\")) {\n\t\t\t\t\t\t\t\tis_text = true;\n\t\t\t\t\t\t\t\t_date.asset.media\t=\t\"<blockquote>\" + dd.data.quote.text.replace(/<\\s*\\/?\\s*b\\s*.*?>/g,\"\") + \"</blockquote>\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (dd.type == \"link\") {\n\t\t\t\t\t\t\t_date.headline\t\t=\tdd.data.link.title;\n\t\t\t\t\t\t\t_date.text\t\t\t=\tdd.data.link.description;\n\t\t\t\t\t\t\tif (dd.data.link.thumbnail != 'undefined' && dd.data.link.thumbnail != '') {\n\t\t\t\t\t\t\t\t_date.asset.media\t=\tdd.data.link.thumbnail;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_date.asset.media\t=\tdd.permalink;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//_date.asset.media\t=\tdd.permalink;\n\t\t\t\t\t\t\t_date.asset.caption\t=\t\"<a href='\" + dd.permalink + \"' target='_blank'>\" + dd.data.link.title + \"</a>\"\n\t\t\t\t\t\t\t_date.slug\t\t\t=\tdd.data.link.title;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else if (dd.type == \"text\") {\n\t\t\t\t\t\t\tif (dd.permalink.match(\"storify\")) {\n\t\t\t\t\t\t\t\tis_text = true;\n\t\t\t\t\t\t\t\tvar d_name\t\t=\td.content.author.username;\n\t\t\t\t\t\t\t\tvar d_nickname\t=\t\"\";\n\t\t\t\t\t\t\t\tif (typeof dd.attribution.name != 'undefined') {\n\t\t\t\t\t\t\t\t\tt_name\t\t=\tdd.attribution.name;\n\t\t\t\t\t\t\t\t\tt_nickname\t=\tdd.attribution.username + \"&nbsp;\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tvar asset_text\t=\t\"<div class='storify'>\"\n\t\t\t\t\t\t\t\tasset_text\t\t+=\t\"<blockquote><p>\" + dd.data.text.replace(/<\\s*\\/?\\s*b\\s*.*?>/g,\"\") + \"</p></blockquote>\";\n\t\t\t\t\t\t\t\t//asset_text\t\t+=\t\" <a href='\" + dd.attribution.href + \"' target='_blank' alt='link to author' title='link to author'>\" + \"<span class='created-at'></span>\" + \" </a>\";\n\n\t\t\t\t\t\t\t\tasset_text\t\t+=\t\"<div class='vcard author'><a class='screen-name url' href='\" + dd.attribution.href + \"' target='_blank'>\";\n\t\t\t\t\t\t\t\tasset_text\t\t+=\t\"<span class='avatar'><img src='\" + dd.attribution.thumbnail + \"' style='max-width: 32px; max-height: 32px;'></span>\"\n\t\t\t\t\t\t\t\tasset_text\t\t+=\t\"<span class='fn'>\" + t_name + \"</span>\";\n\t\t\t\t\t\t\t\tasset_text\t\t+=\t\"<span class='nickname'>\" + t_nickname + \"<span class='thumbnail-inline'></span></span>\";\n\t\t\t\t\t\t\t\tasset_text\t\t+=\t\"</a></div></div>\";\n\t\t\t\t\t\t\t\t_date.text\t\t=\tasset_text;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// Try and put it before the element where it is expected on storify\n\t\t\t\t\t\t\t\tif ( (i+1) >= d.content.elements.length ) {\n\t\t\t\t\t\t\t\t\t_date.startDate = d.content.elements[i-1].posted_at;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (d.content.elements[i+1].type == \"text\" && d.content.elements[i+1].permalink.match(\"storify\")) {\n\t\t\t\t\t\t\t\t\t\tif ( (i+2) >= d.content.elements.length ) {\n\t\t\t\t\t\t\t\t\t\t\t_date.startDate = d.content.elements[i-1].posted_at;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tif (d.content.elements[i+2].type == \"text\" && d.content.elements[i+2].permalink.match(\"storify\")) {\n\t\t\t\t\t\t\t\t\t\t\t\tif ( (i+3) >= d.content.elements.length ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t_date.startDate = d.content.elements[i-1].posted_at;\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (d.content.elements[i+3].type == \"text\" && d.content.elements[i+3].permalink.match(\"storify\")) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_date.startDate = d.content.elements[i-1].posted_at;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttrace(\"LEVEL 3\");\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_date.startDate = d.content.elements[i+3].posted_at;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\ttrace(\"LEVEL 2\");\n\t\t\t\t\t\t\t\t\t\t\t\t_date.startDate = d.content.elements[i+2].posted_at;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttrace(\"LEVEL 1\");\n\t\t\t\t\t\t\t\t\t\t_date.startDate = d.content.elements[i+1].posted_at;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t_date.endDate = _date.startDate\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else if (dd.type == \"video\") {\n\t\t\t\t\t\t\t_date.headline\t\t=\tdd.data.video.title;\n\t\t\t\t\t\t\t_date.asset.caption\t=\tdd.data.video.description;\n\t\t\t\t\t\t\t_date.asset.caption\t=\tdd.source.username;\n\t\t\t\t\t\t\t_date.asset.media\t=\tdd.data.video.src;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttrace(\"NO MATCH \");\n\t\t\t\t\t\t\ttrace(dd);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (is_text) {\n\t\t\t\t\t\t\t_date.slug = VMM.Util.untagify(dd.data.text);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t_data_obj.timeline.date.push(_date);\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, _data_obj);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t},\n\t\t\t\n\t\t\ttweets: {\n\t\t\t\t\n\t\t\t\ttype: \"twitter\",\n\t\t\t\n\t\t\t\tbuildData: function(raw_data) {\n\t\t\t\t\tVMM.bindEvent(global, VMM.Timeline.DataObj.model.tweets.onTwitterDataReady, \"TWEETSLOADED\");\n\t\t\t\t\tVMM.ExternalAPI.twitter.getTweets(raw_data.timeline.tweets);\n\t\t\t\t},\n\t\t\t\n\t\t\t\tgetData: function(raw_data) {\n\t\t\t\t\tVMM.bindEvent(global, VMM.Timeline.DataObj.model.tweets.onTwitterDataReady, \"TWEETSLOADED\");\n\t\t\t\t\tVMM.ExternalAPI.twitter.getTweetSearch(raw_data);\n\t\t\t\t},\n\t\t\t\n\t\t\t\tonTwitterDataReady: function(e, d) {\n\t\t\t\t\tvar _data_obj = VMM.Timeline.DataObj.data_template_obj;\n\n\t\t\t\t\tfor(var i = 0; i < d.tweetdata.length; i++) {\n\n\t\t\t\t\t\tvar _date = {\n\t\t\t\t\t\t\t\"type\":\"tweets\",\n\t\t\t\t\t\t\t\"startDate\":\"\",\n\t\t\t\t            \"headline\":\"\",\n\t\t\t\t            \"text\":\"\",\n\t\t\t\t            \"asset\":\n\t\t\t\t            {\n\t\t\t\t                \"media\":\"\",\n\t\t\t\t                \"credit\":\"\",\n\t\t\t\t                \"caption\":\"\"\n\t\t\t\t            },\n\t\t\t\t            \"tags\":\"Optional\"\n\t\t\t\t\t\t};\n\t\t\t\t\t\t// pass in the 'created_at' string returned from twitter //\n\t\t\t\t\t\t// stamp arrives formatted as Tue Apr 07 22:52:51 +0000 2009 //\n\t\t\t\t\t\n\t\t\t\t\t\t//var twit_date = VMM.ExternalAPI.twitter.parseTwitterDate(d.tweetdata[i].raw.created_at);\n\t\t\t\t\t\t//trace(twit_date);\n\t\t\t\t\t\n\t\t\t\t\t\t_date.startDate = d.tweetdata[i].raw.created_at;\n\t\t\t\t\t\n\t\t\t\t\t\tif (type.of(d.tweetdata[i].raw.from_user_name)) {\n\t\t\t\t\t\t\t_date.headline = d.tweetdata[i].raw.from_user_name + \" (<a href='https://twitter.com/\" + d.tweetdata[i].raw.from_user + \"'>\" + \"@\" + d.tweetdata[i].raw.from_user + \"</a>)\" ;\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_date.headline = d.tweetdata[i].raw.user.name + \" (<a href='https://twitter.com/\" + d.tweetdata[i].raw.user.screen_name + \"'>\" + \"@\" + d.tweetdata[i].raw.user.screen_name + \"</a>)\" ;\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\t_date.asset.media = d.tweetdata[i].content;\n\t\t\t\t\t\t_data_obj.timeline.date.push(_date);\n\t\t\t\t\t\n\t\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\tVMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, _data_obj);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\t\n\t\t\n\t\t/*\tTEMPLATE OBJECTS\n\t\t================================================== */\n\t\tdata_template_obj: {  \"timeline\": { \"headline\":\"\", \"description\":\"\", \"asset\": { \"media\":\"\", \"credit\":\"\", \"caption\":\"\" }, \"date\": [], \"era\":[] } },\n\t\tdate_obj: {\"startDate\":\"2012,2,2,11,30\", \"headline\":\"\", \"text\":\"\", \"asset\": {\"media\":\"http://youtu.be/vjVfu8-Wp6s\", \"credit\":\"\", \"caption\":\"\" }, \"tags\":\"Optional\"}\n\t\n\t};\n\t\n}"
  },
  {
    "path": "source/js/VMM.Timeline.Min.js",
    "content": "// VMM.Timeline.Min.js\n\n/* \tCodeKit Import\n\thttp://incident57.com/codekit/\n================================================== */\n// @codekit-prepend \"VMM.Timeline.js\";\n\nVMM.debug = false;"
  },
  {
    "path": "source/js/VMM.Timeline.TimeNav.js",
    "content": "/* \tVMM.Timeline.TimeNav.js\n    TimeNav\n\tThis class handles the bottom timeline navigation.\n\tIt requires the VMM.Util class and VMM.Date class\n================================================== */\n\nif(typeof VMM.Timeline != 'undefined' && typeof VMM.Timeline.TimeNav == 'undefined') {\n\t\n\tVMM.Timeline.TimeNav = function(parent, content_width, content_height) {\n\t\ttrace(\"VMM.Timeline.TimeNav\");\n\t\t\n\t\tvar $timenav, $content, $time, $timeintervalminor, $timeinterval, $timeintervalmajor, $timebackground, \n\t\t\t$timeintervalbackground, $timenavline, $timenavindicator, $timeintervalminor_minor, $toolbar, $zoomin, $zoomout, $dragslide,\n\t\t\tconfig\t\t\t\t\t= VMM.Timeline.Config,\n\t\t\trow_height,\n\t\t\tevents\t\t\t\t\t= {},\n\t\t\ttimespan\t\t\t\t= {},\n\t\t\tlayout\t\t\t\t\t= parent,\n\t\t\tdata\t\t\t\t\t= [],\n\t\t\tera_markers\t\t\t\t= [],\n\t\t\tmarkers\t\t\t\t\t= [],\n\t\t\tinterval_array\t\t\t= [],\n\t\t\tinterval_major_array\t= [],\n\t\t\ttags\t\t\t\t\t= [],\n\t\t\tcurrent_marker\t\t\t= 0,\n\t\t\t_active\t\t\t\t\t= false,\n\t\t\teras,\n\t\t\tcontent,\n\t\t\ttimeouts = {\n\t\t\t\tinterval_position:\t\"\"\n\t\t\t},\n\t\t\ttimenav_pos = {\n\t\t\t\tleft:\t\t\t\t\"\",\n\t\t\t\tvisible: {\n\t\t\t\t\tleft:\t\t\t\"\",\n\t\t\t\t\tright:\t\t\t\"\"\n\t\t\t\t}\n\t\t\t},\n\t\t\ttimelookup = {\n\t\t\t\tday:\t\t\t24,\n\t\t\t\tmonth:\t\t\t12,\n\t\t\t\tyear:\t\t\t10,\n\t\t\t\thour:\t\t\t60,\n\t\t\t\tminute:\t\t\t60,\n\t\t\t\tsecond:\t\t\t1000,\n\t\t\t\tdecade:\t\t\t10,\n\t\t\t\tcentury:\t\t100,\n\t\t\t\tmillenium:\t\t1000,\n\t\t\t\tage:\t\t\t1000000,\n\t\t\t\tepoch:\t\t\t10000000,\n\t\t\t\tera:\t\t\t100000000,\n\t\t\t\teon:\t\t\t500000000,\n\t\t\t\tweek:\t\t\t4.34812141,\n\t\t\t\tdays_in_month:\t30.4368499,\n\t\t\t\tdays_in_week:\t7,\n\t\t\t\tweeks_in_month:\t4.34812141,\n\t\t\t\tweeks_in_year:\t52.177457,\n\t\t\t\tdays_in_year:\t365.242199,\n\t\t\t\thours_in_day:\t24\n\t\t\t},\n\t\t\tdateFractionBrowser = {\n\t\t\t\tday:\t\t\t86400000,\n\t\t\t\tweek:\t\t\t7,\n\t\t\t\tmonth:\t\t\t30.4166666667,\n\t\t\t\tyear:\t\t\t12,\n\t\t\t\thour:\t\t\t24,\n\t\t\t\tminute:\t\t\t1440,\n\t\t\t\tsecond:\t\t\t86400,\n\t\t\t\tdecade:\t\t\t10,\n\t\t\t\tcentury:\t\t100,\n\t\t\t\tmillenium:\t\t1000,\n\t\t\t\tage:\t\t\t1000000,\n\t\t\t\tepoch:\t\t\t10000000,\n\t\t\t\tera:\t\t\t100000000,\n\t\t\t\teon:\t\t\t500000000\n\t\t\t},\n\t\t\tinterval = {\n\t\t\t\ttype:\t\t\t\"year\",\n\t\t\t\tnumber:\t\t\t10,\n\t\t\t\tfirst:\t\t\t1970,\n\t\t\t\tlast:\t\t\t2011,\n\t\t\t\tmultiplier:\t\t100,\n\t\t\t\tclassname:\t\t\"_idd\",\n\t\t\t\tinterval_type:\t\"interval\"\n\t\t\t},\n\t\t\tinterval_major = {\n\t\t\t\ttype:\t\t\t\"year\",\n\t\t\t\tnumber:\t\t\t10,\n\t\t\t\tfirst:\t\t\t1970,\n\t\t\t\tlast:\t\t\t2011,\n\t\t\t\tmultiplier:\t\t100,\n\t\t\t\tclassname:\t\t\"major\",\n\t\t\t\tinterval_type:\t\"interval major\"\n\t\t\t},\n\t\t\tinterval_macro = {\n\t\t\t\ttype:\t\t\t\"year\",\n\t\t\t\tnumber:\t\t\t10,\n\t\t\t\tfirst:\t\t\t1970,\n\t\t\t\tlast:\t\t\t2011,\n\t\t\t\tmultiplier:\t\t100,\n\t\t\t\tclassname:\t\t\"_dd_minor\",\n\t\t\t\tinterval_type:\t\"interval minor\"\n\t\t\t},\n\t\t\tinterval_calc = {\n\t\t\t\tday: {},\n\t\t\t\tmonth: {},\n\t\t\t\tyear: {},\n\t\t\t\thour: {},\n\t\t\t\tminute: {},\n\t\t\t\tsecond: {},\n\t\t\t\tdecade: {},\n\t\t\t\tcentury: {},\n\t\t\t\tmillenium: {},\n\t\t\t\tweek: {},\n\t\t\t\tage: {},\n\t\t\t\tepoch: {},\n\t\t\t\tera: {},\n\t\t\t\teon: {}\n\t\t\t};\n\t\t\n\t\t\n\t\t/* ADD to Config\n\t\t================================================== */\n\t\trow_height\t\t\t=\tconfig.nav.marker.height/2;\n\t\tconfig.nav.rows = {\n\t\t\tfull:\t\t\t\t[1, row_height*2, row_height*4],\n\t\t\thalf:\t\t\t\t[1, row_height, row_height*2, row_height*3, row_height*4, row_height*5],\n\t\t\tcurrent:\t\t\t[]\n\t\t}\n\t\t\n\t\tif (content_width != null && content_width != \"\") {\n\t\t\tconfig.nav.width\t= \tcontent_width;\n\t\t} \n\t\tif (content_height != null && content_height != \"\") {\n\t\t\tconfig.nav.height\t= \tcontent_height;\n\t\t}\n\t\t\n\t\t/* INIT\n\t\t================================================== */\n\t\tthis.init = function(d,e) {\n\t\t\ttrace('VMM.Timeline.TimeNav init');\n\t\t\t// need to evaluate d\n\t\t\t// some function to determine type of data and prepare it\n\t\t\tif(typeof d != 'undefined') {\n\t\t\t\tthis.setData(d, e);\n\t\t\t} else {\n\t\t\t\ttrace(\"WAITING ON DATA\");\n\t\t\t}\n\t\t};\n\t\t\n\t\t/* GETTERS AND SETTERS\n\t\t================================================== */\n\t\tthis.setData = function(d,e) {\n\t\t\tif(typeof d != 'undefined') {\n\t\t\t\tdata = {};\n\t\t\t\tdata = d;\n\t\t\t\teras = e;\n\t\t\t\tbuild();\n\t\t\t} else{\n\t\t\t\ttrace(\"NO DATA\");\n\t\t\t}\n\t\t};\n\t\t\n\t\tthis.setSize = function(w, h) {\n\t\t\tif (w != null) {config.width = w};\n\t\t\tif (h != null) {config.height = h};\n\t\t\tif (_active) {\n\t\t\t\treSize();\n\t\t\t}\n\n\t\t\t\n\t\t}\n\t\t\n\t\tthis.setMarker = function(n, ease, duration, fast) {\n\t\t\tgoToMarker(n, ease, duration);\n\t\t}\n\t\t\n\t\tthis.getCurrentNumber = function() {\n\t\t\treturn current_marker;\n\t\t}\n\t\t\n\t\t/* ON EVENT\n\t\t================================================== */\n\t\t\n\t\tfunction onConfigSet() {\n\t\t\ttrace(\"onConfigSet\");\n\t\t};\n\t\t\n\t\tfunction reSize(firstrun) {\n\t\t\tconfig.nav.constraint.left = (config.width/2);\n\t\t\tconfig.nav.constraint.right = config.nav.constraint.right_min - (config.width/2);\n\t\t\t$dragslide.updateConstraint(config.nav.constraint);\n\t\t\t\n\t\t\tVMM.Lib.css($timenavline, \"left\", Math.round(config.width/2)+2);\n\t\t\tVMM.Lib.css($timenavindicator, \"left\", Math.round(config.width/2)-8);\n\t\t\tgoToMarker(config.current_slide, config.ease, config.duration, true, firstrun);\n\t\t};\n\t\t\n\t\tfunction upDate() {\n\t\t\tVMM.fireEvent(layout, \"UPDATE\");\n\t\t}\n\t\t\n\t\tfunction onZoomIn() {\n\t\t\t\n\t\t\t$dragslide.cancelSlide();\n\t\t\tif (config.nav.multiplier.current > config.nav.multiplier.min) {\n\t\t\t\tif (config.nav.multiplier.current <= 1) {\n\t\t\t\t\tconfig.nav.multiplier.current = config.nav.multiplier.current - .25;\n\t\t\t\t} else {\n\t\t\t\t\tif (config.nav.multiplier.current > 5) {\n\t\t\t\t\t\tif (config.nav.multiplier.current > 16) {\n\t\t\t\t\t\t\tconfig.nav.multiplier.current = Math.round(config.nav.multiplier.current - 10);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconfig.nav.multiplier.current = Math.round(config.nav.multiplier.current - 4);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconfig.nav.multiplier.current = Math.round(config.nav.multiplier.current - 1);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (config.nav.multiplier.current <= 0) {\n\t\t\t\t\tconfig.nav.multiplier.current = config.nav.multiplier.min;\n\t\t\t\t}\n\t\t\t\trefreshTimeline();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onZoomOut() {\n\t\t\t$dragslide.cancelSlide();\n\t\t\tif (config.nav.multiplier.current < config.nav.multiplier.max) {\n\t\t\t\tif (config.nav.multiplier.current > 4) {\n\t\t\t\t\tif (config.nav.multiplier.current > 16) {\n\t\t\t\t\t\tconfig.nav.multiplier.current = Math.round(config.nav.multiplier.current + 10);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconfig.nav.multiplier.current = Math.round(config.nav.multiplier.current + 4);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconfig.nav.multiplier.current = Math.round(config.nav.multiplier.current + 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (config.nav.multiplier.current >= config.nav.multiplier.max) {\n\t\t\t\t\tconfig.nav.multiplier.current = config.nav.multiplier.max;\n\t\t\t\t}\n\t\t\t\trefreshTimeline();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onBackHome(e) {\n\t\t\t$dragslide.cancelSlide();\n\t\t\tgoToMarker(0);\n\t\t\tupDate();\n\t\t}\n\t\t\n\t\tfunction onMouseScroll(e) {\n\t\t\tvar delta\t\t= 0,\n\t\t\t\tscroll_to\t= 0;\n\t\t\tif (!e) {\n\t\t\t\te = window.event;\n\t\t\t}\n\t\t\tif (e.originalEvent) {\n\t\t\t\te = e.originalEvent;\n\t\t\t}\n\t\t\t\n\t\t\t// Browsers unable to differntiate between up/down and left/right scrolling\n\t\t\t/*\n\t\t\tif (e.wheelDelta) {\n\t\t\t\tdelta = e.wheelDelta/6;\n\t\t\t} else if (e.detail) {\n\t\t\t\tdelta = -e.detail*12;\n\t\t\t}\n\t\t\t*/\n\t\t\t\n\t\t\t// Webkit and browsers able to differntiate between up/down and left/right scrolling\n\t\t\tif (typeof e.wheelDeltaX != 'undefined' ) {\n\t\t\t\tdelta = e.wheelDeltaY/6;\n\t\t\t\tif (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) {\n\t\t\t\t\tdelta = e.wheelDeltaX/6;\n\t\t\t\t} else {\n\t\t\t\t\t//delta = e.wheelDeltaY/6;\n\t\t\t\t\tdelta = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (delta) {\n\t\t\t\tif (e.preventDefault) {\n\t\t\t\t\t e.preventDefault();\n\t\t\t\t}\n\t\t\t\te.returnValue = false;\n\t\t\t}\n\t\t\t// Stop from scrolling too far\n\t\t\tscroll_to = VMM.Lib.position($timenav).left + delta;\n\t\t\t\n\t\t\tif (scroll_to > config.nav.constraint.left) {\n\t\t\t\tscroll_to = config.width/2;\n\t\t\t} else if (scroll_to < config.nav.constraint.right) {\n\t\t\t\tscroll_to = config.nav.constraint.right;\n\t\t\t}\n\t\t\t\n\t\t\t//VMM.Lib.stop($timenav);\n\t\t\t//VMM.Lib.animate($timenav, config.duration/2, \"linear\", {\"left\": scroll_to});\n\t\t\tVMM.Lib.css($timenav, \"left\", scroll_to);\t\n\t\t}\n\t\t\n\t\tfunction refreshTimeline() {\n\t\t\ttrace(\"config.nav.multiplier \" + config.nav.multiplier.current);\n\t\t\tpositionMarkers(true);\n\t\t\tpositionEras(true);\n\t\t\tpositionInterval($timeinterval, interval_array, true, true);\n\t\t\tpositionInterval($timeintervalmajor, interval_major_array, true);\n\t\t\tconfig.nav.constraint.left = (config.width/2);\n\t\t\tconfig.nav.constraint.right = config.nav.constraint.right_min - (config.width/2);\n\t\t\t$dragslide.updateConstraint(config.nav.constraint);\n\t\t};\n\t\t\n\t\t/* MARKER EVENTS\n\t\t================================================== */\n\t\tfunction onMarkerClick(e) {\n\t\t\t$dragslide.cancelSlide();\n\t\t\tgoToMarker(e.data.number);\n\t\t\tupDate();\n\t\t};\n\t\t\n\t\tfunction onMarkerHover(e) {\n\t\t\tVMM.Lib.toggleClass(e.data.elem, \"zFront\");\n\t\t};\n\t\t\n\t\tfunction goToMarker(n, ease, duration, fast, firstrun) {\n\t\t\ttrace(\"GO TO MARKER\");\n\t\t\tvar _ease\t\t= config.ease,\n\t\t\t\t_duration\t= config.duration,\n\t\t\t\tis_last\t\t= false,\n\t\t\t\tis_first\t= false;\n\t\t\t\n\t\t\tcurrent_marker = \tn;\n\t\t\t\n\t\t\ttimenav_pos.left\t\t\t= (config.width/2) - markers[current_marker].pos_left\n\t\t\ttimenav_pos.visible.left\t= Math.abs(timenav_pos.left) - 100;\n\t\t\ttimenav_pos.visible.right\t= Math.abs(timenav_pos.left) + config.width + 100;\n\t\t\t\n\t\t\tif (current_marker == 0) {\n\t\t\t\tis_first = true;\n\t\t\t}\n\t\t\tif (current_marker +1 == markers.length) {\n\t\t\t\tis_last = true\n\t\t\t}\n\t\t\tif (ease != null && ease != \"\") {_ease = ease};\n\t\t\tif (duration != null && duration != \"\") {_duration = duration};\n\t\t\t\n\t\t\t// set marker style\n\t\t\tfor(var i = 0; i < markers.length; i++) {\n\t\t\t\tVMM.Lib.removeClass(markers[i].marker, \"active\");\n\t\t\t}\n\t\t\t\n\t\t\tif (config.start_page && markers[0].type == \"start\") {\n\t\t\t\tVMM.Lib.visible(markers[0].marker, false);\n\t\t\t\tVMM.Lib.addClass(markers[0].marker, \"start\");\n\t\t\t}\n\t\t\t\n\t\t\tVMM.Lib.addClass(markers[current_marker].marker, \"active\");\n\t\t\t\n\t\t\t// ANIMATE MARKER\n\t\t\tVMM.Lib.stop($timenav);\n\t\t\tVMM.Lib.animate($timenav, _duration, _ease, {\"left\": timenav_pos.left});\n\t\t\t\n\t\t}\n\t\t\n\t\t/* TOUCH EVENTS\n\t\t================================================== */\n\t\tfunction onTouchUpdate(e, b) {\n\t\t\tVMM.Lib.animate($timenav, b.time/2, config.ease, {\"left\": b.left});\n\t\t};\n\t\t\n\t\t/* CALCULATIONS\n\t\t================================================== */\n\t\tfunction averageMarkerPositionDistance() {\n\t\t\tvar last_pos\t= 0,\n\t\t\t\tpos\t\t\t= 0,\n\t\t\t\tpos_dif\t\t= 0,\n\t\t\t\tmp_diff\t\t= [],\n\t\t\t\ti\t\t\t= 0;\n\t\t\t\n\t\t\tfor(i = 0; i < markers.length; i++) {\n\t\t\t\tif (data[i].type == \"start\") {\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tvar _pos = positionOnTimeline(interval, markers[i].relative_pos),\n\t\t\t\t\tlast_pos = pos;\n\t\t\t\t\tpos = _pos.begin;\n\t\t\t\t\tpos_dif = pos - last_pos;\n\t\t\t\t\tmp_diff.push(pos_dif);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn VMM.Util.average(mp_diff).mean;\n\t\t}\n\t\t\n\t\tfunction averageDateDistance() {\n\t\t\tvar last_dd\t\t\t= 0,\n\t\t\t\tdd\t\t\t\t= 0,\n\t\t\t\t_dd\t\t\t\t= \"\",\n\t\t\t\tdate_dif\t\t= 0,\n\t\t\t\tdate_diffs\t\t= [],\n\t\t\t\tis_first_date\t= true,\n\t\t\t\ti\t\t\t\t= 0;\n\t\t\t\n\t\t\tfor(i = 0; i < data.length; i++) {\n\t\t\t\tif (data[i].type == \"start\") {\n\t\t\t\t\ttrace(\"DATA DATE IS START\")\n\t\t\t\t} else {\n\t\t\t\t\t_dd\t\t\t= data[i].startdate;\n\t\t\t\t\tlast_dd\t\t= dd;\n\t\t\t\t\tdd\t\t\t= _dd;\n\t\t\t\t\tdate_dif\t= dd - last_dd;\n\t\t\t\t\tdate_diffs.push(date_dif);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn VMM.Util.average(date_diffs);\n\t\t}\n\t\t\n\t\tfunction calculateMultiplier() {\n\t\t\tvar temp_multiplier\t= config.nav.multiplier.current,\n\t\t\t\ti\t\t\t\t= 0;\n\t\t\t\t\n\t\t\tfor(i = 0; i < temp_multiplier; i++) {\n\t\t\t\tif (averageMarkerPositionDistance() < 75) {\n\t\t\t\t\tif (config.nav.multiplier.current > 1) {\n\t\t\t\t\t\tconfig.nav.multiplier.current = (config.nav.multiplier.current - 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\tfunction calculateInterval() {\n\t\t\t// NEED TO REWRITE ALL OF THIS\n\t\t\tvar _first\t\t\t\t\t\t\t\t= getDateFractions(data[0].startdate),\n\t\t\t\t_last\t\t\t\t\t\t\t\t= getDateFractions(data[data.length - 1].enddate);\n\t\t\t\n\t\t\t// EON\n\t\t\tinterval_calc.eon.type\t\t\t\t\t=\t\"eon\";\n\t\t\tinterval_calc.eon.first\t\t\t\t\t=\t_first.eons;\n\t\t\tinterval_calc.eon.base\t\t\t\t\t=\tMath.floor(_first.eons);\n\t\t\tinterval_calc.eon.last\t\t\t\t\t=\t_last.eons;\n\t\t\tinterval_calc.eon.number\t\t\t\t=\ttimespan.eons;\n\t\t\tinterval_calc.eon.multiplier\t\t \t=\ttimelookup.eons;\n\t\t\tinterval_calc.eon.minor\t\t\t\t\t=\ttimelookup.eons;\n\t\t\t\n\t\t\t// ERA\n\t\t\tinterval_calc.era.type\t\t\t\t\t=\t\"era\";\n\t\t\tinterval_calc.era.first\t\t\t\t\t=\t_first.eras;\n\t\t\tinterval_calc.era.base\t\t\t\t\t=\tMath.floor(_first.eras);\n\t\t\tinterval_calc.era.last\t\t\t\t\t=\t_last.eras;\n\t\t\tinterval_calc.era.number\t\t\t\t=\ttimespan.eras;\n\t\t\tinterval_calc.era.multiplier\t\t \t=\ttimelookup.eras;\n\t\t\tinterval_calc.era.minor\t\t\t\t\t=\ttimelookup.eras;\n\t\t\t\n\t\t\t// EPOCH\n\t\t\tinterval_calc.epoch.type\t\t\t\t=\t\"epoch\";\n\t\t\tinterval_calc.epoch.first\t\t\t\t=\t_first.epochs;\n\t\t\tinterval_calc.epoch.base\t\t\t\t=\tMath.floor(_first.epochs);\n\t\t\tinterval_calc.epoch.last\t\t\t\t=\t_last.epochs;\n\t\t\tinterval_calc.epoch.number\t\t\t\t=\ttimespan.epochs;\n\t\t\tinterval_calc.epoch.multiplier\t\t \t=\ttimelookup.epochs;\n\t\t\tinterval_calc.epoch.minor\t\t\t\t=\ttimelookup.epochs;\n\t\t\t\n\t\t\t// AGE\n\t\t\tinterval_calc.age.type\t\t\t\t\t=\t\"age\";\n\t\t\tinterval_calc.age.first\t\t\t\t\t=\t_first.ages;\n\t\t\tinterval_calc.age.base\t\t\t\t\t=\tMath.floor(_first.ages);\n\t\t\tinterval_calc.age.last\t\t\t\t\t=\t_last.ages;\n\t\t\tinterval_calc.age.number\t\t\t\t=\ttimespan.ages;\n\t\t\tinterval_calc.age.multiplier\t\t \t=\ttimelookup.ages;\n\t\t\tinterval_calc.age.minor\t\t\t\t\t=\ttimelookup.ages;\n\t\t\t\n\t\t\t// MILLENIUM\n\t\t\tinterval_calc.millenium.type \t\t\t=\t\"millenium\";\n\t\t\tinterval_calc.millenium.first\t\t\t=\t_first.milleniums;\n\t\t\tinterval_calc.millenium.base\t\t\t=\tMath.floor(_first.milleniums);\n\t\t\tinterval_calc.millenium.last\t\t\t=\t_last.milleniums;\n\t\t\tinterval_calc.millenium.number\t\t\t=\ttimespan.milleniums;\n\t\t\tinterval_calc.millenium.multiplier\t \t=\ttimelookup.millenium;\n\t\t\tinterval_calc.millenium.minor\t\t\t=\ttimelookup.millenium;\n\t\t\t\n\t\t\t// CENTURY\n\t\t\tinterval_calc.century.type \t\t\t\t= \"century\";\n\t\t\tinterval_calc.century.first \t\t\t= _first.centuries;\n\t\t\tinterval_calc.century.base \t\t\t\t= Math.floor(_first.centuries);\n\t\t\tinterval_calc.century.last \t\t\t\t= _last.centuries;\n\t\t\tinterval_calc.century.number \t\t\t= timespan.centuries;\n\t\t\tinterval_calc.century.multiplier\t \t= timelookup.century;\n\t\t\tinterval_calc.century.minor \t\t\t= timelookup.century;\n\t\t\t\n\t\t\t// DECADE\n\t\t\tinterval_calc.decade.type \t\t\t\t= \"decade\";\n\t\t\tinterval_calc.decade.first \t\t\t\t= _first.decades;\n\t\t\tinterval_calc.decade.base \t\t\t\t= Math.floor(_first.decades);\n\t\t\tinterval_calc.decade.last \t\t\t\t= _last.decades;\n\t\t\tinterval_calc.decade.number \t\t\t= timespan.decades;\n\t\t\tinterval_calc.decade.multiplier \t\t= timelookup.decade;\n\t\t\tinterval_calc.decade.minor \t\t\t\t= timelookup.decade;\n\t\t\t\n\t\t\t// YEAR\n\t\t\tinterval_calc.year.type\t\t\t\t\t= \"year\";\n\t\t\tinterval_calc.year.first \t\t\t\t= _first.years;\n\t\t\tinterval_calc.year.base \t\t\t\t= Math.floor(_first.years);\n\t\t\tinterval_calc.year.last\t\t\t\t\t= _last.years;\n\t\t\tinterval_calc.year.number \t\t\t\t= timespan.years;\n\t\t\tinterval_calc.year.multiplier \t\t\t= 1;\n\t\t\tinterval_calc.year.minor \t\t\t\t= timelookup.month;\n\t\t\t\n\t\t\t// MONTH\n\t\t\tinterval_calc.month.type \t\t\t\t= \"month\";\n\t\t\tinterval_calc.month.first \t\t\t\t= _first.months;\n\t\t\tinterval_calc.month.base \t\t\t\t= Math.floor(_first.months);\n\t\t\tinterval_calc.month.last \t\t\t\t= _last.months;\n\t\t\tinterval_calc.month.number \t\t\t\t= timespan.months;\n\t\t\tinterval_calc.month.multiplier \t\t\t= 1;\n\t\t\tinterval_calc.month.minor \t\t\t\t= Math.round(timelookup.week);\n\t\t\t\n\t\t\t// WEEK\n\t\t\t// NOT DONE\n\t\t\tinterval_calc.week.type \t\t\t\t= \"week\";\n\t\t\tinterval_calc.week.first \t\t\t\t= _first.weeks;\n\t\t\tinterval_calc.week.base \t\t\t\t= Math.floor(_first.weeks);\n\t\t\tinterval_calc.week.last \t\t\t\t= _last.weeks;\n\t\t\tinterval_calc.week.number \t\t\t\t= timespan.weeks;\n\t\t\tinterval_calc.week.multiplier \t\t\t= 1;\n\t\t\tinterval_calc.week.minor \t\t\t\t= 7;\n\t\t\t\n\t\t\t// DAY\n\t\t\tinterval_calc.day.type \t\t\t\t\t= \"day\";\n\t\t\tinterval_calc.day.first \t\t\t\t= _first.days;\n\t\t\tinterval_calc.day.base\t \t\t\t\t= Math.floor(_first.days);\n\t\t\tinterval_calc.day.last \t\t\t\t\t= _last.days;\n\t\t\tinterval_calc.day.number \t\t\t\t= timespan.days;\n\t\t\tinterval_calc.day.multiplier \t\t\t= 1;\n\t\t\tinterval_calc.day.minor \t\t\t\t= 24;\n\t\t\t\n\t\t\t// HOUR\n\t\t\tinterval_calc.hour.type \t\t\t\t= \"hour\";\n\t\t\tinterval_calc.hour.first \t\t\t\t= _first.hours;\n\t\t\tinterval_calc.hour.base \t\t\t\t= Math.floor(_first.hours);\n\t\t\tinterval_calc.hour.last \t\t\t\t= _last.hours;\n\t\t\tinterval_calc.hour.number \t\t\t\t= timespan.hours;\n\t\t\tinterval_calc.hour.multiplier \t\t\t= 1;\n\t\t\tinterval_calc.hour.minor \t\t\t\t= 60;\n\t\t\t\n\t\t\t// MINUTE\n\t\t\tinterval_calc.minute.type \t\t\t\t= \"minute\";\n\t\t\tinterval_calc.minute.first \t\t\t\t= _first.minutes;\n\t\t\tinterval_calc.minute.base \t\t\t\t= Math.floor(_first.minutes);\n\t\t\tinterval_calc.minute.last \t\t\t\t= _last.minutes;\n\t\t\tinterval_calc.minute.number \t\t\t= timespan.minutes;\n\t\t\tinterval_calc.minute.multiplier \t\t= 1;\n\t\t\tinterval_calc.minute.minor \t\t\t\t= 60;\n\t\t\t\n\t\t\t// SECOND\n\t\t\tinterval_calc.second.type \t\t\t\t= \"decade\";\n\t\t\tinterval_calc.second.first \t\t\t\t= _first.seconds;\n\t\t\tinterval_calc.second.base \t\t\t\t= Math.floor(_first.seconds);\n\t\t\tinterval_calc.second.last \t\t\t\t= _last.seconds;\n\t\t\tinterval_calc.second.number \t\t\t= timespan.seconds;\n\t\t\tinterval_calc.second.multiplier \t\t= 1;\n\t\t\tinterval_calc.second.minor \t\t\t\t= 10;\n\t\t}\n\t\t\n\t\tfunction getDateFractions(the_date, is_utc) {\n\t\t\t\n\t\t\tvar _time = {};\n\t\t\t_time.days\t\t\t=\t\tthe_date\t\t/\tdateFractionBrowser.day;\n\t\t\t_time.weeks \t\t=\t\t_time.days\t\t/\tdateFractionBrowser.week;\n\t\t\t_time.months \t\t=\t\t_time.days\t\t/\tdateFractionBrowser.month;\n\t\t\t_time.years \t\t=\t\t_time.months \t/\tdateFractionBrowser.year;\n\t\t\t_time.hours \t\t=\t\t_time.days\t\t*\tdateFractionBrowser.hour;\n\t\t\t_time.minutes \t\t=\t\t_time.days\t\t*\tdateFractionBrowser.minute;\n\t\t\t_time.seconds \t\t=\t\t_time.days\t\t*\tdateFractionBrowser.second;\n\t\t\t_time.decades \t\t=\t\t_time.years\t\t/\tdateFractionBrowser.decade;\n\t\t\t_time.centuries \t=\t\t_time.years\t\t/\tdateFractionBrowser.century;\n\t\t\t_time.milleniums \t=\t\t_time.years\t\t/\tdateFractionBrowser.millenium;\n\t\t\t_time.ages\t\t\t=\t\t_time.years\t\t/\tdateFractionBrowser.age;\n\t\t\t_time.epochs\t\t=\t\t_time.years\t\t/\tdateFractionBrowser.epoch;\n\t\t\t_time.eras\t\t\t=\t\t_time.years\t\t/\tdateFractionBrowser.era;\n\t\t\t_time.eons\t\t\t=\t\t_time.years\t\t/\tdateFractionBrowser.eon;\n\t\t\t\n\t\t\t/*\n\t\t\ttrace(\"AGES \"\t\t + \t\t_time.ages);\n\t\t\ttrace(\"EPOCHS \"\t\t + \t\t_time.epochs);\n\t\t\ttrace(\"MILLENIUMS \"  + \t\t_time.milleniums);\n\t\t\ttrace(\"CENTURIES \"\t + \t\t_time.centuries);\n\t\t\ttrace(\"DECADES \"\t + \t\t_time.decades);\n\t\t\ttrace(\"YEARS \"\t\t + \t\t_time.years);\n\t\t\ttrace(\"MONTHS \"\t\t + \t\t_time.months);\n\t\t\ttrace(\"WEEKS \"\t\t + \t\t_time.weeks);\n\t\t\ttrace(\"DAYS \"\t\t + \t\t_time.days);\n\t\t\ttrace(\"HOURS \"\t\t + \t\t_time.hours);\n\t\t\ttrace(\"MINUTES \"\t + \t\t_time.minutes);\n\t\t\ttrace(\"SECONDS \"\t + \t\t_time.seconds);\n\t\t\t*/\n\t\t\treturn _time;\n\t\t}\n\t\t\n\t\t/*\tPOSITION\n\t\t\tPositions elements on the timeline based on date\n\t\t\trelative to the calculated interval\n\t\t================================================== */\n\t\tfunction positionRelative(_interval, first, last) {\n\t\t\tvar _first,\n\t\t\t\t_last,\n\t\t\t\t_type\t\t\t= _interval.type,\n\t\t\t\ttimerelative = {\n\t\t\t\t\tstart:\t\t\"\",\n\t\t\t\t\tend:\t\t\"\",\n\t\t\t\t\ttype:\t\t_type\n\t\t\t\t};\n\t\t\t\n\t\t\t/* FIRST\n\t\t\t================================================== */\n\t\t\t_first\t\t\t\t\t= getDateFractions(first);\n\t\t\ttimerelative.start\t\t= first.months;\n\t\t\t\n\t\t\tif (_type == \"eon\") {\n\t\t\t\ttimerelative.start\t= _first.eons;\n\t\t\t} else if (_type == \"era\") {\n\t\t\t\ttimerelative.start\t= _first.eras;\n\t\t\t} else if (_type == \"epoch\") {\n\t\t\t\ttimerelative.start\t= _first.epochs;\n\t\t\t} else if (_type == \"age\") {\n\t\t\t\ttimerelative.start\t= _first.ages;\n\t\t\t} else if (_type == \"millenium\") {\n\t\t\t\ttimerelative.start\t= first.milleniums;\n\t\t\t} else if (_type == \"century\") {\n\t\t\t\ttimerelative.start\t= _first.centuries;\n\t\t\t} else if (_type == \"decade\") {\n\t\t\t\ttimerelative.start\t= _first.decades;\n\t\t\t} else if (_type == \"year\") {\n\t\t\t\ttimerelative.start\t= _first.years;\n\t\t\t} else if (_type == \"month\") {\n\t\t\t\ttimerelative.start\t= _first.months;\n\t\t\t} else if (_type == \"week\") {\n\t\t\t\ttimerelative.start\t= _first.weeks;\n\t\t\t} else if (_type == \"day\") {\n\t\t\t\ttimerelative.start\t= _first.days;\n\t\t\t} else if (_type == \"hour\") {\n\t\t\t\ttimerelative.start\t= _first.hours;\n\t\t\t} else if (_type == \"minute\") {\n\t\t\t\ttimerelative.start\t= _first.minutes;\n\t\t\t}\n\t\t\t\n\t\t\t/* LAST\n\t\t\t================================================== */\n\t\t\tif (type.of(last) == \"date\") {\n\t\t\t\t\n\t\t\t\t_last\t\t\t\t\t= getDateFractions(last);\n\t\t\t\ttimerelative.end\t\t= last.months;\n\t\t\t\t\n\t\t\t\tif (_type == \"eon\") {\n\t\t\t\t\ttimerelative.end\t= _last.eons;\n\t\t\t\t} else if (_type == \"era\") {\n\t\t\t\t\ttimerelative.end\t= _last.eras;\n\t\t\t\t} else if (_type == \"epoch\") {\n\t\t\t\t\ttimerelative.end\t= _last.epochs;\n\t\t\t\t} else if (_type == \"age\") {\n\t\t\t\t\ttimerelative.end\t= _last.ages;\n\t\t\t\t} else if (_type == \"millenium\") {\n\t\t\t\t\ttimerelative.end\t= last.milleniums;\n\t\t\t\t} else if (_type == \"century\") {\n\t\t\t\t\ttimerelative.end\t= _last.centuries;\n\t\t\t\t} else if (_type == \"decade\") {\n\t\t\t\t\ttimerelative.end\t= _last.decades;\n\t\t\t\t} else if (_type == \"year\") {\n\t\t\t\t\ttimerelative.end\t= _last.years;\n\t\t\t\t} else if (_type == \"month\") {\n\t\t\t\t\ttimerelative.end\t= _last.months;\n\t\t\t\t} else if (_type == \"week\") {\n\t\t\t\t\ttimerelative.end\t= _last.weeks;\n\t\t\t\t} else if (_type == \"day\") {\n\t\t\t\t\ttimerelative.end\t= _last.days;\n\t\t\t\t} else if (_type == \"hour\") {\n\t\t\t\t\ttimerelative.end\t= _last.hours;\n\t\t\t\t} else if (_type == \"minute\") {\n\t\t\t\t\ttimerelative.end\t= _last.minutes;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\ttimerelative.end\t\t= timerelative.start;\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\treturn timerelative\n\t\t}\n\t\t\n\t\tfunction positionOnTimeline(the_interval, timerelative) {\n\t\t\treturn {\n\t\t\t\tbegin:\t(timerelative.start\t-\tinterval.base) * (config.nav.interval_width / config.nav.multiplier.current), \n\t\t\t\tend:\t(timerelative.end\t-\tinterval.base) * (config.nav.interval_width / config.nav.multiplier.current)\n\t\t\t};\n\t\t}\n\t\t\n\t\tfunction positionMarkers(is_animated) {\n\t\t\t\n\t\t\tvar row\t\t\t\t\t\t= 2,\n\t\t\t\tprevious_pos\t\t\t= 0,\n\t\t\t\tpos_offset\t\t\t\t= -2,\n\t\t\t\trow_depth\t\t\t\t= 0,\n\t\t\t\trow_depth_sub\t\t\t= 0,\n\t\t\t\tline_last_height_pos\t= 150,\n\t\t\t\tline_height\t\t\t\t= 6,\n\t\t\t\tcur_mark\t\t\t\t= 0,\n\t\t\t\tin_view_margin\t\t\t= config.width,\n\t\t\t\tpos_cache_array\t\t\t= [],\n\t\t\t\tpos_cache_max\t\t\t= 6,\n\t\t\t\tin_view = {\n\t\t\t\t\tleft:\t\t\t\ttimenav_pos.visible.left - in_view_margin,\n\t\t\t\t\tright:\t\t\t\ttimenav_pos.visible.right + in_view_margin\n\t\t\t\t},\n\t\t\t\ti\t\t\t\t\t\t= 0,\n\t\t\t\tk\t\t\t\t\t\t= 0;\n\t\t\t\t\n\t\t\tconfig.nav.minor_width = config.width;\n\t\t\t\n\t\t\tVMM.Lib.removeClass(\".flag\", \"row1\");\n\t\t\tVMM.Lib.removeClass(\".flag\", \"row2\");\n\t\t\tVMM.Lib.removeClass(\".flag\", \"row3\");\n\t\t\t\n\t\t\tfor(i = 0; i < markers.length; i++) {\n\t\t\t\t\n\t\t\t\tvar line,\n\t\t\t\t\tmarker\t\t\t\t= markers[i],\n\t\t\t\t\tpos\t\t\t\t\t= positionOnTimeline(interval, markers[i].relative_pos),\n\t\t\t\t\trow_pos\t\t\t\t= 0,\n\t\t\t\t\tis_in_view\t\t\t= false,\n\t\t\t\t\tpos_cache_obj\t\t= {id: i, pos: 0, row: 0},\n\t\t\t\t\tpos_cache_close\t\t= 0;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// COMPENSATE FOR DATES BEING POITIONED IN THE MIDDLE\n\t\t\t\tpos.begin\t\t\t\t= Math.round(pos.begin +  pos_offset);\n\t\t\t\tpos.end\t\t\t\t\t= Math.round(pos.end + pos_offset);\n\t\t\t\tline\t\t\t\t\t= Math.round(pos.end - pos.begin);\n\t\t\t\tmarker.pos_left\t\t\t= pos.begin;\n\t\t\t\t\n\t\t\t\tif (current_marker == i) {\n\t\t\t\t\ttimenav_pos.left\t\t\t= (config.width/2) - pos;\n\t\t\t\t\ttimenav_pos.visible.left\t= Math.abs(timenav_pos.left);\n\t\t\t\t\ttimenav_pos.visible.right\t= Math.abs(timenav_pos.left) + config.width;\n\t\t\t\t\tin_view.left\t\t\t\t= timenav_pos.visible.left - in_view_margin;\n\t\t\t\t\tin_view.right\t\t\t\t= timenav_pos.visible.right + in_view_margin;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (Math.abs(pos.begin) >= in_view.left && Math.abs(pos.begin) <= in_view.right ) {\n\t\t\t\t\tis_in_view = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// APPLY POSITION TO MARKER\n\t\t\t\tif (is_animated) {\n\t\t\t\t\tVMM.Lib.stop(marker.marker);\n\t\t\t\t\tVMM.Lib.animate(marker.marker, config.duration/2, config.ease, {\"left\": pos.begin});\n\t\t\t\t} else {\n\t\t\t\t\tVMM.Lib.stop(marker.marker);\n\t\t\t\t\tVMM.Lib.css(marker.marker, \"left\", pos.begin);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (i == current_marker) {\n\t\t\t\t\tcur_mark = pos.begin;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// EVENT LENGTH LINE\n\t\t\t\tif (line > 5) {\n\t\t\t\t\tVMM.Lib.css(marker.lineevent, \"height\", line_height);\n\t\t\t\t\tVMM.Lib.css(marker.lineevent, \"top\", line_last_height_pos);\n\t\t\t\t\tif (is_animated) {\n\t\t\t\t\t\tVMM.Lib.animate(marker.lineevent, config.duration/2, config.ease, {\"width\": line});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tVMM.Lib.css(marker.lineevent, \"width\", line);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// CONTROL ROW POSITION\n\t\t\t\tif (tags.length > 0) {\n\t\t\t\t\t\n\t\t\t\t\tfor (k = 0; k < tags.length; k++) {\n\t\t\t\t\t\tif (k < config.nav.rows.current.length) {\n\t\t\t\t\t\t\tif (marker.tag == tags[k]) {\n\t\t\t\t\t\t\t\trow = k;\n\t\t\t\t\t\t\t\tif (k == config.nav.rows.current.length - 1) {\n\t\t\t\t\t\t\t\t\ttrace(\"ON LAST ROW\");\n\t\t\t\t\t\t\t\t\tVMM.Lib.addClass(marker.flag, \"flag-small-last\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\trow_pos = config.nav.rows.current[row];\n\t\t\t\t} else {\n\t\t\t\t\t\n\t\t\t\t\tif (pos.begin - previous_pos.begin < (config.nav.marker.width + config.spacing)) {\n\t\t\t\t\t\tif (row < config.nav.rows.current.length - 1) {\n\t\t\t\t\t\t\trow ++;\n\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trow = 0;\n\t\t\t\t\t\t\trow_depth ++;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow_depth = 1;\n\t\t\t\t\t\trow = 1;\n\t\t\t\t\t}\n\t\t\t\t\trow_pos = config.nav.rows.current[row];\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// SET LAST MARKER POSITION\n\t\t\t\tprevious_pos = pos;\n\t\t\t\t\n\t\t\t\t// POSITION CACHE\n\t\t\t\tpos_cache_obj.pos = pos;\n\t\t\t\tpos_cache_obj.row = row;\n\t\t\t\tpos_cache_array.push(pos_cache_obj);\n\t\t\t\tif (pos_cache_array.length > pos_cache_max) {\n\t\t\t\t\tVMM.Util.removeRange(pos_cache_array,0);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//if (is_animated && is_in_view) {\n\t\t\t\tif (is_animated) {\n\t\t\t\t\tVMM.Lib.stop(marker.flag);\n\t\t\t\t\tVMM.Lib.animate(marker.flag, config.duration, config.ease, {\"top\": row_pos});\n\t\t\t\t} else {\n\t\t\t\t\tVMM.Lib.stop(marker.flag);\n\t\t\t\t\tVMM.Lib.css(marker.flag, \"top\", row_pos);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// IS THE MARKER A REPRESENTATION OF A START SCREEN?\n\t\t\t\tif (config.start_page && markers[i].type == \"start\") {\n\t\t\t\t\tVMM.Lib.visible(marker.marker, false);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (pos > config.nav.minor_width) {\n\t\t\t\t\tconfig.nav.minor_width = pos;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (pos < config.nav.minor_left) {\n\t\t\t\t\tconfig.nav.minor_left = pos;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t// ANIMATE THE TIMELINE TO ADJUST TO CHANGES\n\t\t\tif (is_animated) {\n\t\t\t\tVMM.Lib.stop($timenav);\n\t\t\t\tVMM.Lib.animate($timenav, config.duration/2, config.ease, {\"left\": (config.width/2) - (cur_mark)});\n\t\t\t} else {\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t//VMM.Lib.delay_animate(config.duration, $timenav, config.duration/2, config.ease, {\"left\": (config.width/2) - (cur_mark)});\n\t\t\t\n\t\t\n\t\t}\n\t\t\n\t\tfunction positionEras(is_animated) {\n\t\t\tvar i\t= 0,\n\t\t\t\tp\t= 0;\n\t\t\t\t\n\t\t\tfor(i = 0; i < era_markers.length; i++) {\n\t\t\t\tvar era\t\t\t= era_markers[i],\n\t\t\t\t\tpos\t\t\t= positionOnTimeline(interval, era.relative_pos),\n\t\t\t\t\trow_pos\t\t= 0,\n\t\t\t\t\trow\t\t\t= 0,\n\t\t\t\t\tera_height\t= config.nav.marker.height * config.nav.rows.full.length,\n\t\t\t\t\tera_length\t= pos.end - pos.begin;\n\t\t\t\t\t\n\t\t\t\t// CONTROL ROW POSITION\n\t\t\t\tif (era.tag != \"\") {\n\t\t\t\t\tera_height = (config.nav.marker.height * config.nav.rows.full.length) / config.nav.rows.current.length;\n\t\t\t\t\tfor (p = 0; p < tags.length; p++) {\n\t\t\t\t\t\tif (p < config.nav.rows.current.length) {\n\t\t\t\t\t\t\tif (era.tag == tags[p]) {\n\t\t\t\t\t\t\t\trow = p;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\trow_pos = config.nav.rows.current[row];\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\trow_pos = -1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// APPLY POSITION TO MARKER\n\t\t\t\tif (is_animated) {\n\t\t\t\t\tVMM.Lib.stop(era.content);\n\t\t\t\t\tVMM.Lib.stop(era.text_content);\n\t\t\t\t\tVMM.Lib.animate(era.content, config.duration/2, config.ease, {\"top\": row_pos, \"left\": pos.begin, \"width\": era_length, \"height\":era_height});\n\t\t\t\t\tVMM.Lib.animate(era.text_content, config.duration/2, config.ease, {\"left\": pos.begin});\n\t\t\t\t} else {\n\t\t\t\t\tVMM.Lib.stop(era.content);\n\t\t\t\t\tVMM.Lib.stop(era.text_content);\n\t\t\t\t\tVMM.Lib.css(era.content, \"left\", pos.begin);\n\t\t\t\t\tVMM.Lib.css(era.content, \"width\", era_length);\n\t\t\t\t\tVMM.Lib.css(era.content, \"height\", era_height);\n\t\t\t\t\tVMM.Lib.css(era.content, \"top\", row_pos);\n\t\t\t\t\tVMM.Lib.css(era.text_content, \"left\", pos.begin);\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction positionInterval(the_main_element, the_intervals, is_animated, is_minor) {\n\t\t\t\n\t\t\tvar last_position\t\t= 0,\n\t\t\t\tlast_position_major\t= 0,\n\t\t\t\t//in_view_margin\t\t= (config.nav.minor_width/config.nav.multiplier.current)/2,\n\t\t\t\tin_view_margin\t\t= config.width,\n\t\t\t\tin_view = {\n\t\t\t\t\tleft:\t\t\ttimenav_pos.visible.left - in_view_margin,\n\t\t\t\t\tright:\t\t\ttimenav_pos.visible.right + in_view_margin\n\t\t\t\t}\n\t\t\t\tnot_too_many\t\t= true,\n\t\t\t\ti\t\t\t\t\t= 0;\n\t\t\t\n\t\t\tconfig.nav.minor_left = 0;\n\t\t\t\t\n\t\t\tif (the_intervals.length > 100) {\n\t\t\t\tnot_too_many = false;\n\t\t\t\ttrace(\"TOO MANY \" + the_intervals.length);\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tfor(i = 0; i < the_intervals.length; i++) {\n\t\t\t\tvar _interval\t\t\t= the_intervals[i].element,\n\t\t\t\t\t_interval_date\t\t= the_intervals[i].date,\n\t\t\t\t\t_interval_visible\t= the_intervals[i].visible,\n\t\t\t\t\t_pos\t\t\t\t= positionOnTimeline(interval, the_intervals[i].relative_pos),\n\t\t\t\t\tpos\t\t\t\t\t= _pos.begin,\n\t\t\t\t\t_animation\t\t\t= the_intervals[i].animation,\n\t\t\t\t\tis_visible\t\t\t= true,\n\t\t\t\t\tis_in_view\t\t\t= false,\n\t\t\t\t\tpos_offset\t\t\t= 50;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t_animation.pos\t\t\t= pos;\n\t\t\t\t_animation.animate\t\t= false;\n\t\t\t\t\n\t\t\t\tif (Math.abs(pos) >= in_view.left && Math.abs(pos) <= in_view.right ) {\n\t\t\t\t\tis_in_view = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (true) {\n\t\t\t\t\t\n\t\t\t\t\t// CONDENSE WHAT IS DISPLAYED\n\t\t\t\t\tif (config.nav.multiplier.current > 16 && is_minor) {\n\t\t\t\t\t\tis_visible = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ((pos - last_position) < 65 ) {\n\t\t\t\t\t\t\tif ((pos - last_position) < 35 ) {\n\t\t\t\t\t\t\t\tif (i%4 == 0) {\n\t\t\t\t\t\t\t\t\tif (pos == 0) {\n\t\t\t\t\t\t\t\t\t\tis_visible = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tis_visible = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (!VMM.Util.isEven(i)) {\n\t\t\t\t\t\t\t\t\tis_visible = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (is_visible) {\n\t\t\t\t\t\tif (the_intervals[i].is_detached) {\n\t\t\t\t\t\t\tVMM.Lib.append(the_main_element, _interval);\n\t\t\t\t\t\t\tthe_intervals[i].is_detached = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthe_intervals[i].is_detached = true;\n\t\t\t\t\t\tVMM.Lib.detach(_interval);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif (_interval_visible) {\n\t\t\t\t\t\tif (!is_visible) {\n\t\t\t\t\t\t\t_animation.opacity\t= \"0\";\n\t\t\t\t\t\t\tif (is_animated && not_too_many) {\n\t\t\t\t\t\t\t\t_animation.animate\t= true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthe_intervals[i].interval_visible = false;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_animation.opacity\t= \"100\";\n\t\t\t\t\t\t\tif (is_animated && is_in_view) {\n\t\t\t\t\t\t\t\t_animation.animate\t= true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_animation.opacity\t= \"100\";\n\t\t\t\t\t\tif (is_visible) {\n\t\t\t\t\t\t\tif (is_animated && not_too_many) {\n\t\t\t\t\t\t\t\t_animation.animate\t= true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (is_animated && is_in_view) {\n\t\t\t\t\t\t\t\t\t_animation.animate\t= true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthe_intervals[i].interval_visible = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (is_animated && not_too_many) {\n\t\t\t\t\t\t\t\t_animation.animate\t= true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\tlast_position = pos;\n\t\t\t\t\n\t\t\t\t\tif (pos > config.nav.minor_width) {\n\t\t\t\t\t\tconfig.nav.minor_width = pos;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (pos < config.nav.minor_left) {\n\t\t\t\t\t\tconfig.nav.minor_left = pos;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (_animation.animate) {\n\t\t\t\t\tVMM.Lib.animate(_interval, config.duration/2, config.ease, {opacity: _animation.opacity, left: _animation.pos});\n\t\t\t\t} else {\n\t\t\t\t\tVMM.Lib.css(_interval, \"opacity\", _animation.opacity);\n\t\t\t\t\tVMM.Lib.css(_interval, \"left\", pos);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconfig.nav.constraint.right_min = -(config.nav.minor_width)+(config.width);\n\t\t\tconfig.nav.constraint.right = config.nav.constraint.right_min + (config.width/2);\n\t\t\t\n\t\t\tVMM.Lib.css($timeintervalminor_minor, \"left\", config.nav.minor_left - (config.width)/2);\n\t\t\tVMM.Lib.width($timeintervalminor_minor, (config.nav.minor_width)+(config.width) + Math.abs(config.nav.minor_left) );\n\t\t\t\n\t\t}\n\t\t\n\t\t/* Interval Elements\n\t\t================================================== */\n\t\tfunction createIntervalElements(_interval, _array, _element_parent) {\n\t\t\t\n\t\t\tvar inc_time\t\t\t= 0,\n\t\t\t\t_first_run\t\t\t= true,\n\t\t\t\t_last_pos\t\t\t= 0,\n\t\t\t\t_largest_pos\t\t= 0,\n\t\t\t\t_timezone_offset,\n\t\t\t\t_first_date,\n\t\t\t\t_last_date,\n\t\t\t\tint_number\t\t\t= Math.ceil(_interval.number) + 2,\n\t\t\t\tfirefox = {\n\t\t\t\t\tflag:\t\t\tfalse,\n\t\t\t\t\toffset:\t\t\t0\n\t\t\t\t},\n\t\t\t\ti\t\t\t\t\t= 0;\n\t\t\t\n\t\t\tVMM.attachElement(_element_parent, \"\");\n\t\t\t\n\t\t\t_interval.date = new Date(data[0].startdate.getFullYear(), 0, 1, 0,0,0);\n\t\t\t_timezone_offset = _interval.date.getTimezoneOffset();\n\t\t\t\n\t\t\tfor(i = 0; i < int_number; i++) {\n\t\t\t\ttrace(_interval.type);\n\t\t\t\tvar _is_year\t\t\t= false,\n\t\t\t\t\tint_obj = {\n\t\t\t\t\t\telement: \t\tVMM.appendAndGetElement(_element_parent, \"<div>\", _interval.classname),\n\t\t\t\t\t\tdate: \t\t\tnew Date(data[0].startdate.getFullYear(), 0, 1, 0,0,0),\n\t\t\t\t\t\tvisible: \t\tfalse,\n\t\t\t\t\t\tdate_string:\t\"\",\n\t\t\t\t\t\ttype: \t\t\t_interval.interval_type,\n\t\t\t\t\t\trelative_pos:\t0,\n\t\t\t\t\t\tis_detached:\tfalse,\n\t\t\t\t\t\tanimation: {\n\t\t\t\t\t\t\tanimate:\tfalse,\n\t\t\t\t\t\t\tpos:\t\t\"\",\n\t\t\t\t\t\t\topacity:\t\"100\"\n\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (_interval.type == \"eon\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = Math.floor(data[0].startdate.getFullYear() / 500000000) * 500000000;\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setFullYear(_first_date + (inc_time * 500000000));\n\t\t\t\t\t_is_year = true;\n\t\t\t\t} else if (_interval.type == \"era\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = Math.floor(data[0].startdate.getFullYear() / 100000000) * 100000000;\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setFullYear(_first_date + (inc_time * 100000000));\n\t\t\t\t\t_is_year = true;\n\t\t\t\t} else if (_interval.type == \"epoch\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = Math.floor(data[0].startdate.getFullYear() / 10000000) * 10000000\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setFullYear(_first_date + (inc_time * 10000000));\n\t\t\t\t\t_is_year = true;\n\t\t\t\t} else if (_interval.type == \"age\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = Math.floor(data[0].startdate.getFullYear() / 1000000) * 1000000\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setFullYear(_first_date + (inc_time * 1000000));\n\t\t\t\t\t_is_year = true;\n\t\t\t\t} else if (_interval.type == \"millenium\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = Math.floor(data[0].startdate.getFullYear() / 1000) * 1000;\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setFullYear(_first_date + (inc_time * 1000));\n\t\t\t\t\t_is_year = true;\n\t\t\t\t} else if (_interval.type == \"century\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = Math.floor(data[0].startdate.getFullYear() / 100) * 100\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setFullYear(_first_date + (inc_time * 100));\n\t\t\t\t\t_is_year = true;\n\t\t\t\t} else if (_interval.type == \"decade\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = Math.floor(data[0].startdate.getFullYear() / 10) * 10;\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setFullYear(_first_date + (inc_time * 10));\n\t\t\t\t\t_is_year = true;\n\t\t\t\t} else if (_interval.type == \"year\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = data[0].startdate.getFullYear();\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setFullYear(_first_date + inc_time);\n\t\t\t\t\t_is_year = true;\n\t\t\t\t} else if (_interval.type == \"month\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = data[0].startdate.getMonth();\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setMonth(_first_date + inc_time);\n\t\t\t\t} else if (_interval.type == \"week\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = data[0].startdate.getMonth();\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setMonth(data[0].startdate.getMonth());\n\t\t\t\t\tint_obj.date.setDate(_first_date + (inc_time * 7) );\n\t\t\t\t} else if (_interval.type == \"day\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = data[0].startdate.getDate();\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setMonth(data[0].startdate.getMonth());\n\t\t\t\t\tint_obj.date.setDate(_first_date + inc_time);\n\t\t\t\t} else if (_interval.type == \"hour\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = data[0].startdate.getHours();\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setMonth(data[0].startdate.getMonth());\n\t\t\t\t\tint_obj.date.setDate(data[0].startdate.getDate());\n\t\t\t\t\tint_obj.date.setHours(_first_date + inc_time);\n\t\t\t\t} else if (_interval.type == \"minute\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = data[0].startdate.getMinutes();\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setMonth(data[0].startdate.getMonth());\n\t\t\t\t\tint_obj.date.setDate(data[0].startdate.getDate());\n\t\t\t\t\tint_obj.date.setHours(data[0].startdate.getHours());\n\t\t\t\t\tint_obj.date.setMinutes(_first_date + inc_time);\n\t\t\t\t} else if (_interval.type == \"second\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = data[0].startdate.getSeconds();\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setMonth(data[0].startdate.getMonth());\n\t\t\t\t\tint_obj.date.setDate(data[0].startdate.getDate());\n\t\t\t\t\tint_obj.date.setHours(data[0].startdate.getHours());\n\t\t\t\t\tint_obj.date.setMinutes(data[0].startdate.getMinutes());\n\t\t\t\t\tint_obj.date.setSeconds(_first_date + inc_time);\n\t\t\t\t}\telse if (_interval.type == \"millisecond\") {\n\t\t\t\t\tif (_first_run) {\n\t\t\t\t\t\t_first_date = data[0].startdate.getMilliseconds();\n\t\t\t\t\t}\n\t\t\t\t\tint_obj.date.setMonth(data[0].startdate.getMonth());\n\t\t\t\t\tint_obj.date.setDate(data[0].startdate.getDate());\n\t\t\t\t\tint_obj.date.setHours(data[0].startdate.getHours());\n\t\t\t\t\tint_obj.date.setMinutes(data[0].startdate.getMinutes());\n\t\t\t\t\tint_obj.date.setSeconds(data[0].startdate.getSeconds());\n\t\t\t\t\tint_obj.date.setMilliseconds(_first_date + inc_time);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// FIX WEIRD FIREFOX BUG FOR GMT TIME FORMATTING\n\t\t\t\tif (VMM.Browser.browser == \"Firefox\") {\n\t\t\t\t\tif (int_obj.date.getFullYear() == \"1970\" && int_obj.date.getTimezoneOffset() != _timezone_offset) {\n\t\t\t\t\t\t\n\t\t\t\t\t\ttrace(\"FIREFOX 1970 TIMEZONE OFFSET \" + int_obj.date.getTimezoneOffset() + \" SHOULD BE \" + _timezone_offset);\n\t\t\t\t\t\ttrace(_interval.type + \" \" + _interval.date);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// try and fix firefox bug, if not the flag will catch it\n\t\t\t\t\t\tfirefox.offset = (int_obj.date.getTimezoneOffset()/60);\n\t\t\t\t\t\tfirefox.flag = true;\n\t\t\t\t\t\tint_obj.date.setHours(int_obj.date.getHours() + firefox.offset );\n\t\t\t\t\t\t\n\t\t\t\t\t} else if (firefox.flag) {\n\t\t\t\t\t\t// catch the bug the second time around\n\t\t\t\t\t\tfirefox.flag = false;\n\t\t\t\t\t\tint_obj.date.setHours(int_obj.date.getHours() + firefox.offset );\n\t\t\t\t\t\tif (_is_year) {\n\t\t\t\t\t\t\tfirefox.flag = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (_is_year) {\n\t\t\t\t\tif ( int_obj.date.getFullYear() < 0 ) {\n\t\t\t\t\t\tint_obj.date_string = \tMath.abs( int_obj.date.getFullYear() ).toString() + \" B.C.\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tint_obj.date_string = int_obj.date.getFullYear();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tint_obj.date_string = VMM.Date.prettyDate(int_obj.date, true);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Increment Time\n\t\t\t\tinc_time = inc_time + 1;\n\t\t\t\t\n\t\t\t\t// No longer first run\n\t\t\t\t_first_run = false;\n\t\t\t\t\n\t\t\t\tint_obj.relative_pos = positionRelative(interval, int_obj.date);\n\t\t\t\t_last_pos = int_obj.relative_pos.begin;\n\t\t\t\tif (int_obj.relative_pos.begin > _largest_pos) {\n\t\t\t\t\t_largest_pos = int_obj.relative_pos.begin;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Add the time string to the element and position it.\n\t\t\t\tVMM.appendElement(int_obj.element, int_obj.date_string);\n\t\t\t\tVMM.Lib.css(int_obj.element, \"text-indent\", -(VMM.Lib.width(int_obj.element)/2));\n\t\t\t\tVMM.Lib.css(int_obj.element, \"opacity\", \"0\");\n\t\t\t\t\n\t\t\t\t// add the interval element to the array\n\t\t\t\t_array.push(int_obj);\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\tVMM.Lib.width($timeintervalminor_minor, _largest_pos);\n\t\t\t\n\t\t\tpositionInterval(_element_parent, _array);\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t}\n\t\t\n\t\t/* BUILD\n\t\t================================================== */\n\t\tfunction build() {\n\t\t\tvar i\t= 0,\n\t\t\t\tj\t= 0;\n\t\t\t\t\n\t\t\tVMM.attachElement(layout, \"\");\n\t\t\t\n\t\t\t$timenav\t\t\t\t\t= VMM.appendAndGetElement(layout, \"<div>\", \"timenav\");\n\t\t\t$content\t\t\t\t\t= VMM.appendAndGetElement($timenav, \"<div>\", \"content\");\n\t\t\t$time\t\t\t\t\t\t= VMM.appendAndGetElement($timenav, \"<div>\", \"time\");\n\t\t\t$timeintervalminor\t\t\t= VMM.appendAndGetElement($time, \"<div>\", \"time-interval-minor\");\n\t\t\t$timeintervalminor_minor\t= VMM.appendAndGetElement($timeintervalminor, \"<div>\", \"minor\");\n\t\t\t$timeintervalmajor\t\t\t= VMM.appendAndGetElement($time, \"<div>\", \"time-interval-major\");\n\t\t\t$timeinterval\t\t\t\t= VMM.appendAndGetElement($time, \"<div>\", \"time-interval\");\n\t\t\t$timebackground\t\t\t\t= VMM.appendAndGetElement(layout, \"<div>\", \"timenav-background\");\n\t\t\t$timenavline\t\t\t\t= VMM.appendAndGetElement($timebackground, \"<div>\", \"timenav-line\");\n\t\t\t$timenavindicator\t\t\t= VMM.appendAndGetElement($timebackground, \"<div>\", \"timenav-indicator\");\n\t\t\t$timeintervalbackground\t\t= VMM.appendAndGetElement($timebackground, \"<div>\", \"timenav-interval-background\", \"<div class='top-highlight'></div>\");\n\t\t\t$toolbar\t\t\t\t\t= VMM.appendAndGetElement(layout, \"<div>\", \"vco-toolbar\");\n\t\t\t\n\t\t\t\n\t\t\tbuildInterval();\n\t\t\tbuildMarkers();\n\t\t\tbuildEras();\n\t\t\tcalculateMultiplier();\n\t\t\tpositionMarkers(false);\n\t\t\tpositionEras();\n\t\t\t\n\t\t\tpositionInterval($timeinterval, interval_array, false, true);\n\t\t\tpositionInterval($timeintervalmajor, interval_major_array);\n\t\t\t\n\t\t\t\n\t\t\tif (config.start_page) {\n\t\t\t\t$backhome = VMM.appendAndGetElement($toolbar, \"<div>\", \"back-home\", \"<div class='icon'></div>\");\n\t\t\t\tVMM.bindEvent(\".back-home\", onBackHome, \"click\");\n\t\t\t\tVMM.Lib.attribute($backhome, \"title\", VMM.master_config.language.messages.return_to_title);\n\t\t\t\tVMM.Lib.attribute($backhome, \"rel\", \"timeline-tooltip\");\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t// MAKE TIMELINE DRAGGABLE/TOUCHABLE\n\t\t\t$dragslide = new VMM.DragSlider;\n\t\t\t$dragslide.createPanel(layout, $timenav, config.nav.constraint, config.touch);\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tif (config.touch && config.start_page) {\n\t\t\t\tVMM.Lib.addClass($toolbar, \"touch\");\n\t\t\t\tVMM.Lib.css($toolbar, \"top\", 55);\n\t\t\t\tVMM.Lib.css($toolbar, \"left\", 10);\n\t\t\t} else {\n\t\t\t\tif (config.start_page) {\n\t\t\t\t\tVMM.Lib.css($toolbar, \"top\", 27);\n\t\t\t\t}\n\t\t\t\t$zoomin\t\t= VMM.appendAndGetElement($toolbar, \"<div>\", \"zoom-in\", \"<div class='icon'></div>\");\n\t\t\t\t$zoomout\t= VMM.appendAndGetElement($toolbar, \"<div>\", \"zoom-out\", \"<div class='icon'></div>\");\n\t\t\t\t// ZOOM EVENTS\n\t\t\t\tVMM.bindEvent($zoomin, onZoomIn, \"click\");\n\t\t\t\tVMM.bindEvent($zoomout, onZoomOut, \"click\");\n\t\t\t\t// TOOLTIP\n\t\t\t\tVMM.Lib.attribute($zoomin, \"title\", VMM.master_config.language.messages.expand_timeline);\n\t\t\t\tVMM.Lib.attribute($zoomin, \"rel\", \"timeline-tooltip\");\n\t\t\t\tVMM.Lib.attribute($zoomout, \"title\", VMM.master_config.language.messages.contract_timeline);\n\t\t\t\tVMM.Lib.attribute($zoomout, \"rel\", \"timeline-tooltip\");\n\t\t\t\t$toolbar.tooltip({selector: \"div[rel=timeline-tooltip]\", placement: \"right\"});\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t// MOUSE EVENTS\n\t\t\t\tVMM.bindEvent(layout, onMouseScroll, 'DOMMouseScroll');\n\t\t\t\tVMM.bindEvent(layout, onMouseScroll, 'mousewheel');\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t// USER CONFIGURABLE ADJUSTMENT TO DEFAULT ZOOM\n\t\t\tif (config.nav.zoom.adjust != 0) {\n\t\t\t\tif (config.nav.zoom.adjust < 0) {\n\t\t\t\t\tfor(i = 0; i < Math.abs(config.nav.zoom.adjust); i++) {\n\t\t\t\t\t\tonZoomOut();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor(j = 0; j < config.nav.zoom.adjust; j++) {\n\t\t\t\t\t\tonZoomIn();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t//VMM.fireEvent(layout, \"LOADED\");\n\t\t\t_active = true;\n\t\t\t\n\t\t\treSize(true);\n\t\t\tVMM.fireEvent(layout, \"LOADED\");\n\t\t\t\n\t\t};\n\t\t\n\t\tfunction buildInterval() {\n\t\t\tvar i\t= 0,\n\t\t\t\tj\t= 0;\n\t\t\t// CALCULATE INTERVAL\n\t\t\ttimespan = getDateFractions((data[data.length - 1].enddate) - (data[0].startdate), true);\n\t\t\ttrace(timespan);\n\t\t\tcalculateInterval();\n\n\t\t\t/* DETERMINE DEFAULT INTERVAL TYPE\n\t\t\t\tmillenium, ages, epoch, era and eon are not optimized yet. They may never be.\n\t\t\t================================================== */\n\t\t\t/*\n\t\t\tif (timespan.eons\t\t\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.eon;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.eon;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.era;\n\t\t\t} else if (timespan.eras\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.era;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.eon;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.epoch;\n\t\t\t} else if (timespan.epochs\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.epoch;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.era;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.age;\n\t\t\t} else if (timespan.ages\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.ages;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.epoch;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.millenium;\n\t\t\t} else if (timespan.milleniums\t\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.millenium;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.age;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.century;\n\t\t\t} else \n\t\t\t*/\n\t\t\tif (timespan.centuries\t\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.century;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.millenium;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.decade;\n\t\t\t} else if (timespan.decades\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.decade;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.century;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.year;\n\t\t\t} else if (timespan.years\t\t>\t\tdata.length / config.nav.density) {\t\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.year;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.decade;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.month;\n\t\t\t} else if (timespan.months\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.month;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.year;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.day;\n\t\t\t} else if (timespan.days\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.day;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.month;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.hour;\n\t\t\t} else if (timespan.hours\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.hour;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.day;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.minute;\n\t\t\t} else if (timespan.minutes\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.minute;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.hour;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.second;\n\t\t\t} else if (timespan.seconds\t\t>\t\tdata.length / config.nav.density) {\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.second;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.minute;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.second;\n\t\t\t} else {\n\t\t\t\ttrace(\"NO IDEA WHAT THE TYPE SHOULD BE\");\n\t\t\t\tinterval\t\t\t\t\t=\t\tinterval_calc.day;\n\t\t\t\tinterval_major\t\t\t\t=\t\tinterval_calc.month;\n\t\t\t\tinterval_macro\t\t\t\t=\t\tinterval_calc.hour;\n\t\t\t}\n\t\t\t\n\t\t\ttrace(\"INTERVAL TYPE: \" + interval.type);\n\t\t\ttrace(\"INTERVAL MAJOR TYPE: \" + interval_major.type);\n\t\t\t\n\t\t\tcreateIntervalElements(interval, interval_array, $timeinterval);\n\t\t\tcreateIntervalElements(interval_major, interval_major_array, $timeintervalmajor);\n\t\t\t\n\t\t\t// Cleanup duplicate interval elements between normal and major\n\t\t\tfor(i = 0; i < interval_array.length; i++) {\n\t\t\t\tfor(j = 0; j < interval_major_array.length; j++) {\n\t\t\t\t\tif (interval_array[i].date_string == interval_major_array[j].date_string) {\n\t\t\t\t\t\tVMM.attachElement(interval_array[i].element, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction buildMarkers() {\n\t\t\t\n\t\t\tvar row\t\t\t= 2,\n\t\t\t\tlpos\t\t= 0,\n\t\t\t\trow_depth\t= 0,\n\t\t\t\ti\t\t\t= 0,\n\t\t\t\tk\t\t\t= 0,\n\t\t\t\tl\t\t\t= 0;\n\t\t\t\t\n\t\t\t\t\n\t\t\tmarkers\t\t\t= [];\n\t\t\tera_markers\t\t= [];\n\t\t\t\n\t\t\tfor(i = 0; i < data.length; i++) {\n\t\t\t\t\n\t\t\t\tvar _marker,\n\t\t\t\t\t_marker_flag,\n\t\t\t\t\t_marker_content,\n\t\t\t\t\t_marker_dot,\n\t\t\t\t\t_marker_line,\n\t\t\t\t\t_marker_line_event,\n\t\t\t\t\t_marker_obj,\n\t\t\t\t\t_marker_title\t\t= \"\",\n\t\t\t\t\thas_title\t\t\t= false;\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t_marker\t\t\t\t\t= VMM.appendAndGetElement($content, \"<div>\", \"marker\");\n\t\t\t\t_marker_flag\t\t\t= VMM.appendAndGetElement(_marker, \"<div>\", \"flag\");\n\t\t\t\t_marker_content\t\t\t= VMM.appendAndGetElement(_marker_flag, \"<div>\", \"flag-content\");\n\t\t\t\t_marker_dot\t\t\t\t= VMM.appendAndGetElement(_marker, \"<div>\", \"dot\");\n\t\t\t\t_marker_line\t\t\t= VMM.appendAndGetElement(_marker, \"<div>\", \"line\");\n\t\t\t\t_marker_line_event\t\t= VMM.appendAndGetElement(_marker_line, \"<div>\", \"event-line\");\n\t\t\t\t_marker_relative_pos\t= positionRelative(interval, data[i].startdate, data[i].enddate);\n\t\t\t\t_marker_thumb\t\t\t= \"\";\n\t\t\t\t\n\t\t\t\t// THUMBNAIL\n\t\t\t\tif (data[i].asset != null && data[i].asset != \"\") {\n\t\t\t\t\tVMM.appendElement(_marker_content, VMM.MediaElement.thumbnail(data[i].asset, 24, 24, data[i].uniqueid));\n\t\t\t\t} else {\n\t\t\t\t\tVMM.appendElement(_marker_content, \"<div style='margin-right:7px;height:50px;width:2px;float:left;'></div>\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// ADD DATE AND TITLE\n\t\t\t\tif (data[i].title == \"\" || data[i].title == \" \" ) {\n\t\t\t\t\ttrace(\"TITLE NOTHING\")\n\t\t\t\t\tif (typeof data[i].slug != 'undefined' && data[i].slug != \"\") {\n\t\t\t\t\t\ttrace(\"SLUG\")\n\t\t\t\t\t\t_marker_title = VMM.Util.untagify(data[i].slug);\n\t\t\t\t\t\thas_title = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar m = VMM.MediaType(data[i].asset.media);\n\t\t\t\t\t\tif (m.type == \"quote\" || m.type == \"unknown\") {\n\t\t\t\t\t\t\t_marker_title = VMM.Util.untagify(m.id);\n\t\t\t\t\t\t\thas_title = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thas_title = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (data[i].title != \"\" || data[i].title != \" \") {\n\t\t\t\t\ttrace(data[i].title)\n\t\t\t\t\t_marker_title = VMM.Util.untagify(data[i].title);\n\t\t\t\t\thas_title = true;\n\t\t\t\t} else {\n\t\t\t\t\ttrace(\"TITLE SLUG NOT FOUND \" + data[i].slug)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (has_title) {\n\t\t\t\t\tVMM.appendElement(_marker_content, \"<h3>\" + _marker_title + \"</h3>\");\n\t\t\t\t} else {\n\t\t\t\t\tVMM.appendElement(_marker_content, \"<h3>\" + _marker_title + \"</h3>\");\n\t\t\t\t\tVMM.appendElement(_marker_content, \"<h3 id='marker_content_\" + data[i].uniqueid + \"'>\" + _marker_title + \"</h3>\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// ADD ID\n\t\t\t\tVMM.Lib.attr(_marker, \"id\", ( \"marker_\" + data[i].uniqueid).toString() );\n\t\t\t\t\n\t\t\t\t// MARKER CLICK\n\t\t\t\tVMM.bindEvent(_marker_flag, onMarkerClick, \"\", {number: i});\n\t\t\t\tVMM.bindEvent(_marker_flag, onMarkerHover, \"mouseenter mouseleave\", {number: i, elem:_marker_flag});\n\t\t\t\t\n\t\t\t\t_marker_obj = {\n\t\t\t\t\tmarker: \t\t\t_marker,\n\t\t\t\t\tflag: \t\t\t\t_marker_flag,\n\t\t\t\t\tlineevent: \t\t\t_marker_line_event,\n\t\t\t\t\ttype: \t\t\t\t\"marker\",\n\t\t\t\t\tfull:\t\t\t\ttrue,\n\t\t\t\t\trelative_pos:\t\t_marker_relative_pos,\n\t\t\t\t\ttag:\t\t\t\tdata[i].tag,\n\t\t\t\t\tpos_left:\t\t\t0\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif (data[i].type == \"start\") {\n\t\t\t\t\ttrace(\"BUILD MARKER HAS START PAGE\");\n\t\t\t\t\tconfig.start_page = true;\n\t\t\t\t\t_marker_obj.type = \"start\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (data[i].type == \"storify\") {\n\t\t\t\t\t_marker_obj.type = \"storify\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif (data[i].tag) {\n\t\t\t\t\ttags.push(data[i].tag);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tmarkers.push(_marker_obj);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t// CREATE TAGS\n\t\t\ttags = VMM.Util.deDupeArray(tags);\n\n\t\t\tconfig.tagSortFunction(tags);\n\n\t\t\tif (tags.length > 3) {\n\t\t\t\tconfig.nav.rows.current = config.nav.rows.half;\n\t\t\t} else {\n\t\t\t\tconfig.nav.rows.current = config.nav.rows.full;\n\t\t\t}\n\t\t\tfor(k = 0; k < tags.length; k++) {\n\t\t\t\tif (k < config.nav.rows.current.length) {\n\t\t\t\t\tvar tag_element = VMM.appendAndGetElement($timebackground, \"<div>\", \"timenav-tag\");\n\t\t\t\t\tVMM.Lib.addClass(tag_element, \"timenav-tag-row-\" + (k+1));\n\t\t\t\t\tif (tags.length > 3) {\n\t\t\t\t\t\tVMM.Lib.addClass(tag_element, \"timenav-tag-size-half\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tVMM.Lib.addClass(tag_element, \"timenav-tag-size-full\");\n\t\t\t\t\t}\n\t\t\t\t\tVMM.appendElement(tag_element, \"<div><h3>\" + tags[k] + \"</h3></div>\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t// RESIZE FLAGS IF NEEDED\n\t\t\tif (tags.length > 3) {\n\t\t\t\tfor(l = 0; l < markers.length; l++) {\n\t\t\t\t\tVMM.Lib.addClass(markers[l].flag, \"flag-small\");\n\t\t\t\t\tmarkers[l].full = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\t\t}\n\t\t\n\t\tfunction buildEras() {\n\t\t\tvar number_of_colors\t= 6,\n\t\t\t\tcurrent_color\t\t= 0,\n\t\t\t\tj\t\t\t\t\t= 0;\n\t\t\t// CREATE ERAS\n\t\t\tfor(j = 0; j < eras.length; j++) {\n\t\t\t\tvar era = {\n\t\t\t\t\t\tcontent: \t\t\tVMM.appendAndGetElement($content, \"<div>\", \"era\"),\n\t\t\t\t\t\ttext_content: \t\tVMM.appendAndGetElement($timeinterval, \"<div>\", \"era\"),\n\t\t\t\t\t\tstartdate: \t\t\tVMM.Date.parse(eras[j].startDate),\n\t\t\t\t\t\tenddate: \t\t\tVMM.Date.parse(eras[j].endDate),\n\t\t\t\t\t\ttitle: \t\t\t\teras[j].headline,\n\t\t\t\t\t\tuniqueid: \t\t\tVMM.Util.unique_ID(6),\n\t\t\t\t\t\ttag:\t\t\t\t\"\",\n\t\t\t\t\t\trelative_pos:\t \t\"\"\n\t\t\t\t\t},\n\t\t\t\t\tst\t\t\t\t\t\t= VMM.Date.prettyDate(era.startdate),\n\t\t\t\t\ten\t\t\t\t\t\t= VMM.Date.prettyDate(era.enddate),\n\t\t\t\t\tera_text\t\t\t\t= \"<div>&nbsp;</div>\";\n\t\t\t\t\t\n\t\t\t\tif (typeof eras[j].tag != \"undefined\") {\n\t\t\t\t\tera.tag = eras[j].tag;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tera.relative_pos = positionRelative(interval, era.startdate, era.enddate);\n\t\t\t\t\n\t\t\t\tVMM.Lib.attr(era.content, \"id\", era.uniqueid);\n\t\t\t\tVMM.Lib.attr(era.text_content, \"id\", era.uniqueid + \"_text\");\n\t\t\t\t\n\t\t\t\t// Background Color\n\t\t\t\tVMM.Lib.addClass(era.content, \"era\"+(current_color+1));\n\t\t\t\tVMM.Lib.addClass(era.text_content, \"era\"+(current_color+1));\n\t\t\t\t\n\t\t\t\tif (current_color < number_of_colors) {\n\t\t\t\t\tcurrent_color++;\n\t\t\t\t} else {\n\t\t\t\t\tcurrent_color = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tVMM.appendElement(era.content, era_text);\n\t\t\t\tVMM.appendElement(era.text_content, VMM.Util.unlinkify(era.title));\n\t\t\t\t\n\t\t\t\tera_markers.push(era);\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t};\n\t\n}\n"
  },
  {
    "path": "source/js/VMM.Timeline.js",
    "content": "// VMM.Timeline.js\n/*\t* CodeKit Import\n\t* http://incident57.com/codekit/\n================================================== */\n// @codekit-prepend \"Core/VMM.StoryJS.js\";\n\n// @codekit-append \"VMM.Timeline.TimeNav.js\";\n// @codekit-append \"VMM.Timeline.DataObj.js\";\n\n\n/* Timeline\n================================================== */\n\nif(typeof VMM != 'undefined' && typeof VMM.Timeline == 'undefined') {\n\t\n\tVMM.Timeline = function(_timeline_id, w, h) {\n\t\t\n\t\tvar $timeline,\n\t\t\t$container,\n\t\t\t$feature,\n\t\t\t$feedback,\n\t\t\t$slider,\n\t\t\t$navigation,\n\t\t\tslider,\n\t\t\ttimenav,\n\t\t\tversion\t\t= \"2.x\",\n\t\t\ttimeline_id\t= \"#timelinejs\",\n\t\t\tevents\t\t= {},\n\t\t\tdata\t\t= {},\n\t\t\t_dates\t\t= [],\n\t\t\tconfig\t\t= {},\n\t\t\thas_width\t= false,\n\t\t\thas_height\t= false,\n\t\t\tie7\t\t\t= false,\n\t\t\tis_moving\t= false;\n\t\t\n\n\t\tif (type.of(_timeline_id) == \"string\") {\n\t\t\tif (_timeline_id.match(\"#\")) {\n\t\t\t\ttimeline_id\t= _timeline_id;\n\t\t\t} else {\n\t\t\t\ttimeline_id\t= \"#\" + _timeline_id;\n\t\t\t}\n\t\t} else {\n\t\t\ttimeline_id\t\t= \"#timelinejs\";\n\t\t}\n\t\t\n\t\t\n\t\t/* CONFIG\n\t\t================================================== */\n\t\tconfig = {\n\t\t\tembed:\t\t\t\t\tfalse,\n\t\t\tevents: {\n\t\t\t\tdata_ready:\t\t\t\"DATAREADY\",\n\t\t\t\tmessege:\t\t\t\"MESSEGE\",\n\t\t\t\theadline:\t\t\t\"HEADLINE\",\n\t\t\t\tslide_change:\t\t\"SLIDE_CHANGE\",\n\t\t\t\tresize:\t\t\t\t\"resize\"\n\t\t\t},\n\t\t\tid: \t\t\t\t\ttimeline_id,\n\t\t\tsource:\t\t\t\t\t\"nothing\",\n\t\t\ttype: \t\t\t\t\t\"timeline\",\n\t\t\ttouch:\t\t\t\t\tfalse,\n\t\t\torientation: \t\t\t\"normal\", \n\t\t\tmaptype: \t\t\t\t\"\",\n\t\t\tversion: \t\t\t\t\"2.x\", \n\t\t\tpreload:\t\t\t\t4,\n\t\t\tcurrent_slide:\t\t\t0,\n\t\t\thash_bookmark:\t\t\tfalse,\n\t\t\tstart_at_end: \t\t\tfalse,\n\t\t\tstart_at_slide:\t\t\t0,\n\t\t\tstart_zoom_adjust:\t\t0,\n\t\t\tstart_page: \t\t\tfalse,\n\t\t\tapi_keys: {\n\t\t\t\tgoogle:\t\t\t\t\"\",\n\t\t\t\tflickr:\t\t\t\t\"\",\n\t\t\t\ttwitter:\t\t\t\"\"\n\t\t\t},\n\t\t\tinterval: \t\t\t\t10,\n\t\t\tsomething: \t\t\t\t0,\n\t\t\twidth: \t\t\t\t\t960,\n\t\t\theight: \t\t\t\t540,\n\t\t\tspacing: \t\t\t\t15,\n\t\t\tloaded: {\n\t\t\t\tslider: \t\t\tfalse, \n\t\t\t\ttimenav: \t\t\tfalse, \n\t\t\t\tpercentloaded: \t\t0\n\t\t\t},\n\t\t\tnav: {\n\t\t\t\tstart_page: \t\tfalse,\n\t\t\t\tinterval_width: \t200,\n\t\t\t\tdensity: \t\t\t4,\n\t\t\t\tminor_width: \t\t0,\n\t\t\t\tminor_left:\t\t\t0,\n\t\t\t\tconstraint: {\n\t\t\t\t\tleft:\t\t\t0,\n\t\t\t\t\tright:\t\t\t0,\n\t\t\t\t\tright_min:\t\t0,\n\t\t\t\t\tright_max:\t\t0\n\t\t\t\t},\n\t\t\t\tzoom: {\n\t\t\t\t\tadjust:\t\t\t0\n\t\t\t\t},\n\t\t\t\tmultiplier: {\n\t\t\t\t\tcurrent: \t\t6,\n\t\t\t\t\tmin: \t\t\t.1,\n\t\t\t\t\tmax: \t\t\t50\n\t\t\t\t},\n\t\t\t\trows: \t\t\t\t[1, 1, 1],\n\t\t\t\twidth: \t\t\t\t960,\n\t\t\t\theight: \t\t\t200,\n\t\t\t\tmarker: {\n\t\t\t\t\twidth: \t\t\t150,\n\t\t\t\t\theight: \t\t50\n\t\t\t\t}\n\t\t\t},\n\t\t\tfeature: {\n\t\t\t\twidth: \t\t\t\t960,\n\t\t\t\theight: \t\t\t540\n\t\t\t},\n\t\t\tslider: {\n\t\t\t\twidth: \t\t\t\t720,\n\t\t\t\theight: \t\t\t400,\n\t\t\t\tcontent: {\n\t\t\t\t\twidth: \t\t\t720,\n\t\t\t\t\theight: \t\t400,\n\t\t\t\t\tpadding: \t\t130,\n\t\t\t\t\tpadding_default:130\n\t\t\t\t},\n\t\t\t\tnav: {\n\t\t\t\t\twidth: \t\t\t100,\n\t\t\t\t\theight: \t\t200\n\t\t\t\t}\n\t\t\t},\n\t\t\tease: \t\t\t\t\t\"easeInOutExpo\",\n\t\t\tduration: \t\t\t\t1000,\n\t\t\tgmap_key: \t\t\t\t\"\",\n\t\t\tlanguage: \t\t\t\tVMM.Language,\n\t\t\ttagSortFunction: \t\tfunction (arr) {\n\t\t\t\tarr.sort(function (a, b) {\n\t\t\t\t\treturn a.localeCompare(b);\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\t\t\n\t\tif ( w != null && w != \"\") {\n\t\t\tconfig.width = w;\n\t\t\thas_width = true;\n\t\t} \n\n\t\tif ( h != null && h != \"\") {\n\t\t\tconfig.height = h;\n\t\t\thas_height = true;\n\t\t}\n\t\t\n\t\tif(window.location.hash) {\n\t\t\t var hash\t\t\t\t\t=\twindow.location.hash.substring(1);\n\t\t\t if (!isNaN(hash)) {\n\t\t\t \t config.current_slide\t=\tparseInt(hash);\n\t\t\t }\n\t\t}\n\t\t\n\t\twindow.onhashchange = function () {\n\t\t\tvar hash\t\t\t\t\t=\twindow.location.hash.substring(1);\n\t\t\tif (config.hash_bookmark) {\n\t\t\t\tif (is_moving) {\n\t\t\t\t\tgoToEvent(parseInt(hash));\n\t\t\t\t} else {\n\t\t\t\t\tis_moving = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tgoToEvent(parseInt(hash));\n\t\t\t}\n\t\t}\n\t\t\n\t\t/* CREATE CONFIG\n\t\t================================================== */\n\t\tfunction createConfig(conf) {\n\t\t\t\n\t\t\t// APPLY SUPPLIED CONFIG TO TIMELINE CONFIG\n\t\t\tif (typeof embed_config == 'object') {\n\t\t\t\ttimeline_config = embed_config;\n\t\t\t}\n\t\t\tif (typeof timeline_config == 'object') {\n\t\t\t\ttrace(\"HAS TIMELINE CONFIG\");\n\t\t\t\tconfig = VMM.Util.mergeConfig(config, timeline_config);\n\t\t\t} else if (typeof conf == 'object') {\n\t\t\t\tconfig = VMM.Util.mergeConfig(config, conf);\n\t\t\t}\n\t\t\t\n\t\t\tif (VMM.Browser.device == \"mobile\" || VMM.Browser.device == \"tablet\") {\n\t\t\t\tconfig.touch = true;\n\t\t\t}\n\t\t\t\n\t\t\tconfig.nav.width\t\t\t= config.width;\n\t\t\tconfig.nav.height\t\t\t= 200;\n\t\t\tconfig.feature.width\t\t= config.width;\n\t\t\tconfig.feature.height\t\t= config.height - config.nav.height;\n\t\t\tconfig.nav.zoom.adjust\t\t= parseInt(config.start_zoom_adjust, 10);\n\t\t\tVMM.Timeline.Config\t\t\t= config;\n\t\t\tVMM.master_config.Timeline\t= VMM.Timeline.Config;\n\t\t\tthis.events\t\t\t\t\t= config.events;\n\t\t\t\n\t\t\tif (config.gmap_key != \"\") {\n\t\t\t\tconfig.api_keys.google = config.gmap_key;\n\t\t\t}\n\t\t\t\n\t\t\ttrace(\"VERSION \" + config.version);\n\t\t\tversion = config.version;\n\t\t}\n\t\t\n\t\t/* CREATE TIMELINE STRUCTURE\n\t\t================================================== */\n\t\tfunction createStructure() {\n\t\t\t// CREATE DOM STRUCTURE\n\t\t\t$timeline\t= VMM.getElement(timeline_id);\n\t\t\tVMM.Lib.addClass($timeline, \"vco-timeline\");\n\t\t\tVMM.Lib.addClass($timeline, \"vco-storyjs\");\n\t\t\t\n\t\t\t$container\t= VMM.appendAndGetElement($timeline, \"<div>\", \"vco-container vco-main\");\n\t\t\t$feature\t= VMM.appendAndGetElement($container, \"<div>\", \"vco-feature\");\n\t\t\t$slider\t\t= VMM.appendAndGetElement($feature, \"<div>\", \"vco-slider\");\n\t\t\t$navigation\t= VMM.appendAndGetElement($container, \"<div>\", \"vco-navigation\");\n\t\t\t$feedback\t= VMM.appendAndGetElement($timeline, \"<div>\", \"vco-feedback\", \"\");\n\t\t\t\n\t\t\t\n\t\t\tif (typeof config.language.right_to_left != 'undefined') {\n\t\t\t\tVMM.Lib.addClass($timeline, \"vco-right-to-left\");\n\t\t\t}\n\t\t\t\n\t\t\tslider\t\t= new VMM.Slider($slider, config);\n\t\t\ttimenav\t\t= new VMM.Timeline.TimeNav($navigation);\n\t\t\t\n\t\t\tif (!has_width) {\n\t\t\t\tconfig.width = VMM.Lib.width($timeline);\n\t\t\t} else {\n\t\t\t\tVMM.Lib.width($timeline, config.width);\n\t\t\t}\n\n\t\t\tif (!has_height) {\n\t\t\t\tconfig.height = VMM.Lib.height($timeline);\n\t\t\t} else {\n\t\t\t\tVMM.Lib.height($timeline, config.height);\n\t\t\t}\n\t\t\t\n\t\t\tif (config.touch) {\n\t\t\t\tVMM.Lib.addClass($timeline, \"vco-touch\");\n\t\t\t} else {\n\t\t\t\tVMM.Lib.addClass($timeline, \"vco-notouch\");\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t}\n\t\t\n\t\t/* ON EVENT\n\t\t================================================== */\n\n\t\tfunction onDataReady(e, d) {\n\t\t\ttrace(\"onDataReady\");\n\t\t\tdata = d.timeline;\n\t\t\t\n\t\t\tif (type.of(data.era) != \"array\") {\n\t\t\t\tdata.era = [];\n\t\t\t}\n\t\t\t\n\t\t\tbuildDates();\n\t\t\t\n\t\t};\n\t\t\n\t\tfunction reSize() {\n\t\t\t\n\t\t\tupdateSize();\n\t\t\t\n\t\t\tslider.setSize(config.feature.width, config.feature.height);\n\t\t\ttimenav.setSize(config.width, config.height);\n\t\t\tif (orientationChange()) {\n\t\t\t\tsetViewport();\n\t\t\t}\n\t\t\t\n\t\t};\n\t\t\n\t\tfunction onSliderLoaded(e) {\n\t\t\tconfig.loaded.slider = true;\n\t\t\tonComponentLoaded();\n\t\t};\n\t\t\n\t\tfunction onComponentLoaded(e) {\n\t\t\tconfig.loaded.percentloaded = config.loaded.percentloaded + 25;\n\t\t\t\n\t\t\tif (config.loaded.slider && config.loaded.timenav) {\n\t\t\t\thideMessege();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction onTimeNavLoaded(e) {\n\t\t\tconfig.loaded.timenav = true;\n\t\t\tonComponentLoaded();\n\t\t}\n\t\t\n\t\tfunction onSlideUpdate(e) {\n\t\t\tis_moving = true;\n\t\t\tconfig.current_slide = slider.getCurrentNumber();\n\t\t\tsetHash(config.current_slide);\n\t\t\ttimenav.setMarker(config.current_slide, config.ease,config.duration);\n\t\t};\n\t\t\n\t\tfunction onMarkerUpdate(e) {\n\t\t\tis_moving = true;\n\t\t\tconfig.current_slide = timenav.getCurrentNumber();\n\t\t\tsetHash(config.current_slide);\n\t\t\tslider.setSlide(config.current_slide);\n\t\t};\n\t\t\n\t\tfunction goToEvent(n) {\n\t\t\tif (n <= _dates.length - 1 && n >= 0) {\n\t\t\t\tconfig.current_slide = n;\n\t\t\t\tslider.setSlide(config.current_slide);\n\t\t\t\ttimenav.setMarker(config.current_slide, config.ease,config.duration);\n\t\t\t} \n\t\t}\n\t\t\n\t\tfunction setHash(n) {\n\t\t\tif (config.hash_bookmark) {\n\t\t\t\twindow.location.hash = \"#\" + n.toString();\n\t\t\t}\n\t\t}\n\t\t\n\t\tfunction getViewport() {\n\t\t\t\n\t\t}\n\t\t\n\t\tfunction setViewport() {\n\t\t\tvar viewport_content\t\t= \"\",\n\t\t\t\tviewport_orientation\t= searchOrientation(window.orientation);\n\t\t\t\n\t\t\tif (VMM.Browser.device == \"mobile\") {\n\t\t\t\tif (viewport_orientation == \"portrait\") {\n\t\t\t\t\t//viewport_content\t= \"width=device-width; initial-scale=0.75, maximum-scale=0.75\";\n\t\t\t\t\tviewport_content\t= \"width=device-width; initial-scale=0.5, maximum-scale=0.5\";\n\t\t\t\t} else if (viewport_orientation == \"landscape\") {\n\t\t\t\t\tviewport_content\t= \"width=device-width; initial-scale=0.5, maximum-scale=0.5\";\n\t\t\t\t} else {\n\t\t\t\t\tviewport_content\t= \"width=device-width, initial-scale=1, maximum-scale=1.0\";\n\t\t\t\t}\n\t\t\t} else if (VMM.Browser.device == \"tablet\") {\n\t\t\t\t//viewport_content\t\t= \"width=device-width, initial-scale=1, maximum-scale=1.0\";\n\t\t\t}\n\t\t\t\n\t\t\tif (document.getElementById(\"viewport\")) {\n\t\t\t\t//VMM.Lib.attr(\"#viewport\", \"content\", viewport_content);\n\t\t\t} else {\n\t\t\t\t//VMM.appendElement(\"head\", \"<meta id='viewport' name='viewport' content=\" + viewport_content + \"/>\");\n\t\t\t}\n\n\t\t}\n\t\t\n\t\t/* ORIENTATION\n\t\t================================================== */\n\t\tfunction searchOrientation(orientation) {\n\t\t\tvar orient = \"\";\n\t\t\t\n\t\t\tif ( orientation == 0  || orientation == 180) {  \n\t\t\t\torient = \"portrait\";\n\t\t\t} else if ( orientation == 90 || orientation == -90) {  \n\t\t\t\torient = \"landscape\";\n\t\t\t} else {\n\t\t\t\torient = \"normal\";\n\t\t\t}\n\t\t\t\n\t\t\treturn orient;\n\t\t}\n\t\t\n\t\tfunction orientationChange() {\n\t\t\tvar orientation\t= searchOrientation(window.orientation);\n\t\t\t\n\t\t\tif (orientation == config.orientation) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tconfig.orientation = orientation;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\t\n\t\t/* PUBLIC FUNCTIONS\n\t\t================================================== */\n\t\tthis.init = function(c, _data) {\n\t\t\ttrace('INIT');\n\t\t\tsetViewport();\n\t\t\tcreateConfig(c);\n\t\t\tcreateStructure();\n\t\t\t\n\t\t\tif (type.of(_data) == \"string\") {\n\t\t\t\tconfig.source\t= _data;\n\t\t\t}\n\t\t\t\n\t\t\t// LANGUAGE\n\t\t\tVMM.Date.setLanguage(config.language);\n\t\t\tVMM.master_config.language = config.language;\n\t\t\t\n\t\t\t// EXTERNAL API\n\t\t\tVMM.ExternalAPI.setKeys(config.api_keys);\n\t\t\tVMM.ExternalAPI.googlemaps.setMapType(config.maptype);\n\t\t\t\n\t\t\t// EVENTS\n\t\t\tVMM.bindEvent(global, onDataReady, config.events.data_ready);\n\t\t\tVMM.bindEvent(global, showMessege, config.events.messege);\n\t\t\t\n\t\t\tVMM.fireEvent(global, config.events.messege, config.language.messages.loading_timeline);\n\t\t\t\n\t\t\t/* GET DATA\n\t\t\t================================================== */\n\t\t\tif (VMM.Browser.browser == \"Explorer\" || VMM.Browser.browser == \"MSIE\") {\n\t\t\t    if (parseInt(VMM.Browser.version, 10) <= 7 && (VMM.Browser.tridentVersion == null || VMM.Browser.tridentVersion < 4)) {\n\t\t\t\t\tie7 = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (type.of(config.source) == \"string\" || type.of(config.source) == \"object\") {\n\t\t\t\tVMM.Timeline.DataObj.getData(config.source);\n\t\t\t} else {\n\t\t\t\tVMM.fireEvent(global, config.events.messege, \"No data source provided\");\n\t\t\t\t//VMM.Timeline.DataObj.getData(VMM.getElement(timeline_id));\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t};\n\t\t\n\t\tthis.iframeLoaded = function() {\n\t\t\ttrace(\"iframeLoaded\");\n\t\t};\n\t\t\n\t\tthis.reload = function(_d) {\n\t\t\ttrace(\"Load new timeline data\" + _d);\n\t\t\tVMM.fireEvent(global, config.events.messege, config.language.messages.loading_timeline);\n\t\t\tdata = {};\n\t\t\tVMM.Timeline.DataObj.getData(_d);\n\t\t\tconfig.current_slide = 0;\n\t\t\tslider.setSlide(0);\n\t\t\ttimenav.setMarker(0, config.ease,config.duration);\n\t\t};\n\t\t\n\t\t/* DATA \n\t\t================================================== */\n\t\tfunction getData(url) {\n\t\t\tVMM.getJSON(url, function(d) {\n\t\t\t\tdata = VMM.Timeline.DataObj.getData(d);\n\t\t\t\tVMM.fireEvent(global, config.events.data_ready);\n\t\t\t});\n\t\t};\n\t\t\n\t\t/* MESSEGES \n\t\t================================================== */\n\t\tfunction showMessege(e, msg, other) {\n\t\t\ttrace(\"showMessege \" + msg);\n\t\t\t//VMM.attachElement($timeline, $feedback);\n\t\t\tif (other) {\n\t\t\t\tVMM.attachElement($feedback, msg);\n\t\t\t} else{\n\t\t\t\tVMM.attachElement($feedback, VMM.MediaElement.loadingmessage(msg));\n\t\t\t}\n\t\t};\n\t\t\n\t\tfunction hideMessege() {\n\t\t\tVMM.Lib.animate($feedback, config.duration, config.ease*4, {\"opacity\": 0}, detachMessege);\n\t\t};\n\t\t\n\t\tfunction detachMessege() {\n\t\t\tVMM.Lib.detach($feedback);\n\t\t}\n\t\t\n\t\t/* BUILD DISPLAY\n\t\t================================================== */\n\t\tfunction build() {\n\t\t\t// START AT SLIDE\n\t\t\tif (parseInt(config.start_at_slide) > 0 && config.current_slide == 0) {\n\t\t\t\tconfig.current_slide = parseInt(config.start_at_slide); \n\t\t\t}\n\t\t\t// START AT END\n\t\t\tif (config.start_at_end && config.current_slide == 0) {\n\t\t\t\tconfig.current_slide = _dates.length - 1;\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t// IE7\n\t\t\tif (ie7) {\n\t\t\t\tie7 = true;\n\t\t\t\tVMM.fireEvent(global, config.events.messege, \"Internet Explorer \" + VMM.Browser.version + \" is not supported by TimelineJS. Please update your browser to version 8 or higher. If you are using a recent version of Internet Explorer you may need to disable compatibility mode in your browser.\");\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tdetachMessege();\n\t\t\t\treSize();\n\t\t\t\t\n\t\t\t\t// EVENT LISTENERS\n\t\t\t\tVMM.bindEvent($slider, onSliderLoaded, \"LOADED\");\n\t\t\t\tVMM.bindEvent($navigation, onTimeNavLoaded, \"LOADED\");\n\t\t\t\tVMM.bindEvent($slider, onSlideUpdate, \"UPDATE\");\n\t\t\t\tVMM.bindEvent($navigation, onMarkerUpdate, \"UPDATE\");\n\t\t\t\t\n\t\t\t\t// INITIALIZE COMPONENTS\n\t\t\t\tslider.init(_dates);\n\t\t\t\ttimenav.init(_dates, data.era);\n\t\t\t\n\t\t\t\t// RESIZE EVENT LISTENERS\n\t\t\t\tVMM.bindEvent(global, reSize, config.events.resize);\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t};\n\t\t\n\t\tfunction updateSize() {\n\t\t\ttrace(\"UPDATE SIZE\");\n\t\t\tconfig.width = VMM.Lib.width($timeline);\n\t\t\tconfig.height = VMM.Lib.height($timeline);\n\t\t\t\n\t\t\tconfig.nav.width = config.width;\n\t\t\tconfig.feature.width = config.width;\n\t\t\t\n\t\t\tconfig.feature.height = config.height - config.nav.height - 3;\n\t\t\t\n\t\t\tif (VMM.Browser.device == \"mobile\") {\n\t\t\t\t/*\n\t\t\t\tif (VMM.Browser.orientation == \"portrait\") {\n\t\t\t\t\tconfig.feature.height\t= 480;\n\t\t\t\t\tconfig.height\t\t\t= 480 + config.nav.height;\n\t\t\t\t} else if(VMM.Browser.orientation == \"landscape\") {\n\t\t\t\t\tconfig.feature.height\t= 320;\n\t\t\t\t\tconfig.height\t\t\t= 320 + config.nav.height;\n\t\t\t\t} else {\n\t\t\t\t\tconfig.feature.height = config.height - config.nav.height - 3;\n\t\t\t\t}\n\t\t\t\t*/\n\t\t\t}\n\t\t\t\n\t\t\tif (config.width < 641) {\n\t\t\t\tVMM.Lib.addClass($timeline, \"vco-skinny\");\n\t\t\t} else {\n\t\t\t\tVMM.Lib.removeClass($timeline, \"vco-skinny\");\n\t\t\t}\n\t\t\t\n\t\t};\n\t\t\n\t\t// BUILD DATE OBJECTS\n\t\t// called from onDataReady, passes to function build \n\t\tfunction buildDates() {\n\t\t\t\n\t\t\t_dates = [];\n\t\t\tVMM.fireEvent(global, config.events.messege, \"Building Dates\");\n\t\t\tupdateSize();\n\t\t\t\n\t\t\tfor(var i = 0; i < data.date.length; i++) {\n\t\t\t\t\n\t\t\t\tif (data.date[i].startDate != null && data.date[i].startDate != \"\") {\n\t\t\t\t\t\n\t\t\t\t\tvar _date\t\t= {},\n\t\t\t\t\t\tdo_start\t= VMM.Date.parse(data.date[i].startDate, true),\n\t\t\t\t\t\tdo_end;\n\t\t\t\t\t\t\n\t\t\t\t\t_date.startdate\t\t= do_start.date;\n\t\t\t\t\t_date.precisiondate\t= do_start.precision;\n\t\t\t\t\t\n\t\t\t\t\tif (isNaN(_date.startdate)) {\n\t\t\t\t\t\ttrace(\"Failed to parse start date \" + data.date[i].startDate);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t// END DATE\n\t\t\t\t\t\tif (data.date[i].endDate != null && data.date[i].endDate != \"\") {\n\t\t\t\t\t\t\t_date.enddate = VMM.Date.parse(data.date[i].endDate);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_date.enddate = _date.startdate;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t_date.needs_slug = false;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (data.date[i].headline == \"\") {\n\t\t\t\t\t\t\tif (data.date[i].slug != null && data.date[i].slug != \"\") {\n\t\t\t\t\t\t\t\t_date.needs_slug = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t_date.title\t\t\t\t= data.date[i].headline;\n\t\t\t\t\t\t_date.headline\t\t\t= data.date[i].headline;\n\t\t\t\t\t\t_date.type\t\t\t\t= data.date[i].type;\n\t\t\t\t\t\t_date.date\t\t\t\t= VMM.Date.prettyDate(_date.startdate, false, _date.precisiondate);\n\t\t\t\t\t\t_date.asset\t\t\t\t= data.date[i].asset;\n\t\t\t\t\t\t_date.fulldate\t\t\t= _date.startdate.getTime();\n\t\t\t\t\t\t_date.text\t\t\t\t= data.date[i].text;\n\t\t\t\t\t\t_date.content\t\t\t= \"\";\n\t\t\t\t\t\t_date.tag\t\t\t\t= data.date[i].tag;\n\t\t\t\t\t\t_date.slug\t\t\t\t= data.date[i].slug;\n\t\t\t\t\t\t_date.uniqueid\t\t\t= VMM.Util.unique_ID(7);\n\t\t\t\t\t\t_date.classname\t\t\t= data.date[i].classname;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t_dates.push(_date);\n\t\t\t\t\t} \n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\n\t\t\tif (data.date.length != _dates.length) {\n\t\t\t\tshowMessege(null,\"Error processing data. Check for invalid date formats.\")\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t/* CUSTOM SORT\n\t\t\t================================================== */\n\t\t\tif (data.type != \"storify\") {\n\t\t\t\t_dates.sort(function(a, b){\n\t\t\t\t\treturn a.fulldate - b.fulldate\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t/* CREATE START PAGE IF AVAILABLE\n\t\t\t================================================== */\n\t\t\tif (data.headline != null && data.headline != \"\" && data.text != null && data.text != \"\") {\n\n\t\t\t\tvar startpage_date,\n\t\t\t\t\tdo_start,\n\t\t\t\t\t_date\t\t\t= {},\n\t\t\t\t\ttd_num\t\t\t= 0,\n\t\t\t\t\ttd;\n\t\t\t\t\t\n\t\t\t\tif (typeof data.startDate != 'undefined') {\n\t\t\t\t\tdo_start\t\t= VMM.Date.parse(data.startDate, true);\n\t\t\t\t\tstartpage_date\t= do_start.date;\n\t\t\t\t} else {\n\t\t\t\t\tstartpage_date = false;\n\t\t\t\t}\n\t\t\t\ttrace(\"HAS STARTPAGE\");\n\t\t\t\ttrace(startpage_date);\n\t\t\t\t\n\t\t\t\tif (startpage_date && startpage_date < _dates[0].startdate) {\n\t\t\t\t\t_date.startdate = new Date(startpage_date);\n\t\t\t\t} else {\n\t\t\t\t\ttd = _dates[0].startdate;\n\t\t\t\t\t_date.startdate = new Date(_dates[0].startdate);\n\t\t\t\t\n\t\t\t\t\tif (td.getMonth() === 0 && td.getDate() == 1 && td.getHours() === 0 && td.getMinutes() === 0 ) {\n\t\t\t\t\t\t// trace(\"YEAR ONLY\");\n\t\t\t\t\t\t_date.startdate.setFullYear(td.getFullYear() - 1);\n\t\t\t\t\t} else if (td.getDate() <= 1 && td.getHours() === 0 && td.getMinutes() === 0) {\n\t\t\t\t\t\t// trace(\"YEAR MONTH\");\n\t\t\t\t\t\t_date.startdate.setMonth(td.getMonth() - 1);\n\t\t\t\t\t} else if (td.getHours() === 0 && td.getMinutes() === 0) {\n\t\t\t\t\t\t// trace(\"YEAR MONTH DAY\");\n\t\t\t\t\t\t_date.startdate.setDate(td.getDate() - 1);\n\t\t\t\t\t} else  if (td.getMinutes() === 0) {\n\t\t\t\t\t\t// trace(\"YEAR MONTH DAY HOUR\");\n\t\t\t\t\t\t_date.startdate.setHours(td.getHours() - 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// trace(\"YEAR MONTH DAY HOUR MINUTE\");\n\t\t\t\t\t\t_date.startdate.setMinutes(td.getMinutes() - 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t_date.uniqueid\t\t= VMM.Util.unique_ID(7);\n\t\t\t\t_date.enddate\t\t= _date.startdate;\n\t\t\t\t_date.precisiondate\t= do_start.precision;\n\t\t\t\t_date.title\t\t\t= data.headline;\n\t\t\t\t_date.headline\t\t= data.headline;\n\t\t\t\t_date.text\t\t\t= data.text;\n\t\t\t\t_date.type\t\t\t= \"start\";\n\t\t\t\t_date.date\t\t\t= VMM.Date.prettyDate(data.startDate, false, _date.precisiondate);\n\t\t\t\t_date.asset\t\t\t= data.asset;\n\t\t\t\t_date.slug\t\t\t= false;\n\t\t\t\t_date.needs_slug\t= false;\n\t\t\t\t_date.fulldate\t\t= _date.startdate.getTime();\n\t\t\t\t\n\t\t\t\tif (config.embed) {\n\t\t\t\t\tVMM.fireEvent(global, config.events.headline, _date.headline);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t_dates.unshift(_date);\n\t\t\t}\n\t\t\t\n\t\t\t/* CUSTOM SORT\n\t\t\t================================================== */\n\t\t\tif (data.type != \"storify\") {\n\t\t\t\t_dates.sort(function(a, b){\n\t\t\t\t\treturn a.fulldate - b.fulldate\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tbuild();\n\t\t}\n\t\t\n\t};\n\n\tVMM.Timeline.Config = {};\n\t\n};\n"
  },
  {
    "path": "source/less/Core/.gitignore",
    "content": "*.DS_Store\n.DS_Store*"
  },
  {
    "path": "source/less/Core/Font/AbrilFatface-Average.less",
    "content": "/*\n\tFONT\n\tPT Serif and PT Sans \n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Abril Fatface', cursive;\n@font-sans:\t\t'Average', serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/Arvo-PTSans.less",
    "content": "/*\n\tFONT\n\tArvo and PT Sans \n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Arvo', serif;\n@font-sans:\t\t'PT Sans', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-serif;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-serif !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/Bevan-PotanoSans.less",
    "content": "/*\n\tFONT\n\tBevan and Potano Sans \n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Bevan', serif;\n@font-sans:\t\t'Pontano Sans', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/BreeSerif-OpenSans.less",
    "content": "/*\n\tFONT\n\tBree Serif, Open Sans \n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Bree Serif', Georgia, serif;\n@font-sans:\t\t'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/DroidSerif-DroidSans.less",
    "content": "/*\n\tFONT\n\tDroid Serif, Droid Sans \n\thttp://www.google.com/webfonts#UsePlace:use/Collection:Droid+Sans:400,700|Droid+Serif:400,700,400italic\n------------------------------------------------------------------------------------------- */\n\n@font-sans:\t\t'Droid Sans', sans-serif;\n@font-serif:\t'Droid Serif', serif;\n\n.vco-storyjs {\n\tfont-family: @font-serif;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp {\n\t\tfont-family: @font-sans !important;\n\t}\n\tblockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-serif !important;\n\t}\n\t\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t\tfont-weight: 700;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/Georgia-Helvetica.less",
    "content": "/*\n\tFONT\n\tDefault \n------------------------------------------------------------------------------------------- */\n\n@font-sans:\t\t\t\"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-serif:\t\t\"Georgia\", Times New Roman, Times, serif;\n\n.vco-storyjs {\n\tfont-family: @font-serif;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container, {\n\t\tfont-family: @font-sans !important;\n\t}\n\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-serif !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}\n"
  },
  {
    "path": "source/less/Core/Font/Lekton-Molengo.less",
    "content": "/*\n\tFONT \n\tLekton and Molengo\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Molengo', sans-serif;\n@font-sans:\t\t'Lekton', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/Lora-Istok.less",
    "content": "/*\n\tFONT \n\tLora and Istok Web\n------------------------------------------------------------------------------------------- */\n@font-serif:\t'Lora', serif;\n@font-sans:\t\t'Istok Web', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-serif;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t\tfont-weight: 700;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/Merriweather-NewsCycle.less",
    "content": "/*\n\tFONT\n\tMerriweather and NewsCycle \n\thttp://www.google.com/webfonts#UsePlace:use/Collection:News+Cycle:400,700|Merriweather:400,700,900\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Merriweather', serif;\n@font-sans:\t\t'News Cycle', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-serif;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\tp {\n\t\tfont-size:16px;\n\t\tline-height:22px;\n\t}\n\t.wikipedia p {\n\t\tfont-size: 14px !important;\n\t\tline-height: 20px !important;\n\t}\n\t\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t\tfont-weight: 900;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/NewsCycle-Merriweather.less",
    "content": "/*\n\tFONT\n\tNewsCycle and Merriweather \n\thttp://www.google.com/webfonts#UsePlace:use/Collection:News+Cycle:400,700|Merriweather:400,700,900\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Merriweather', serif;\n@font-sans:\t\t'News Cycle', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-serif !important;\n\t}\n\tp {\n\t\tfont-size:16px;\n\t\tline-height:22px;\n\t}\n\t.wikipedia p {\n\t\tfont-size: 14px !important;\n\t\tline-height: 20px !important;\n\t}\n\t\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans;\n\t\t\tfont-weight: 900;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/NixieOne-Ledger.less",
    "content": "/*\n\tFONT \n\tNixie One and Ledger\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Nixie One', cursive;\n@font-sans:\t\t'Ledger', serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/PT.less",
    "content": "/*\n\tFONT \n\tPT Sans Narrow, PT Serif and PT Sans\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'PT Serif', serif;\n@font-sans:\t\t'PT Sans', sans-serif;\n@font-headline:\t'PT Sans Narrow', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-serif;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-serif !important;\n\t}\n\tblockquote, blockquote p, .twitter blockquote p {\n\t\tfont-style: italic;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-headline;\n\t\t\tfont-weight: 700;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/PTSerif-PTSans.less",
    "content": "/*\n\tFONT \n\tPT Serif and PT Sans\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'PT Serif', serif;\n@font-sans:\t\t'PT Sans', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-serif;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-serif !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans;\n\t\t\tfont-weight: 700;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/Pacifico-Arimo.less",
    "content": "/*\n\tFONT \n\tPacifico and Arimo\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Pacifico', cursive;\n@font-sans:\t\t'Arimo', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/PlayfairDisplay-Muli.less",
    "content": "/*\n\tFONT \n\tPlayfair Display and Muli\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Playfair Display', serif;\n@font-sans:\t\t'Muli', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/PoiretOne-Molengo.less",
    "content": "/*\n\tFONT \n\tPoiret One and Molengo\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Poiret One', serif;\n@font-sans:\t\t'Molengo', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-serif;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp {\n\t\tfont-family: @font-sans !important;\n\t\tfont-size: 16px !important;\n\t\tline-height:22px !important;\n\t}\n\t.wikipedia p {\n\t\tfont-size: 14px !important;\n\t\tline-height: 20px !important;\n\t}\n\tblockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-serif !important;\n\t}\n\t\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/Rancho-Gudea.less",
    "content": "/*\n\tFONT \n\tRancho and Gudea\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Rancho', cursive;\n@font-sans:\t\t'Gudea', sans-serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font/SansitaOne-Kameron.less",
    "content": "/*\n\tFONT \n\tSansita One and Kameron\n------------------------------------------------------------------------------------------- */\n\n@font-serif:\t'Sansita One', cursive;\n@font-sans:\t\t'Kameron', serif;\n\n.vco-storyjs {\n\tfont-family: @font-sans;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/Font.Default.less",
    "content": "/*\n\tFONT\n\tDefault \n------------------------------------------------------------------------------------------- */\n\n@font-sans:\t\t\t\"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-serif:\t\t\"Georgia\", Times New Roman, Times, serif;\n\n.vco-storyjs {\n\tfont-family: @font-serif;\n\t/*\tHEADERS\n\t------------------------------------------------------------------------------------------- */\n\t.twitter, .vcard, .messege, .credit, .caption, .zoom-in, .zoom-out, .back-home, .time-interval div, .time-interval-major div, .nav-container, {\n\t\tfont-family: @font-sans !important;\n\t}\n\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\tfont-family: @font-sans !important;\n\t}\n\t.timenav, .flag-content, .era {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-sans !important;\n\t\t}\n\t}\n\t/*\tCONTENT\n\t------------------------------------------------------------------------------------------- */\n\tp, blockquote, blockquote p, .twitter blockquote p {\n\t\tfont-family: @font-serif !important;\n\t}\n\t.vco-feature {\n\t\th1, h2, h3, h4, h5, h6 {\n\t\t\tfont-family: @font-serif;\n\t\t}\n\t}\n}\n.timeline-tooltip {\n\tfont-family: @font-sans;\n}"
  },
  {
    "path": "source/less/Core/GFX.less",
    "content": "/*\n\tGFX\n\tIcons etc\n----------------------------------------------------------------- */\n\n/*\tFeature Navigation\n----------------------------------------------------------------- */\n.icon-previous() {\n\theight:24px;\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -160px 0; width: 24px; height: 24px;\n\toverflow:hidden;\n}\n.icon-previous2x() {\n\theight:24px;\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -160px 0; width: 24px; height: 24px;\n\toverflow:hidden;\n}\n\n.icon-next() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -184px 0; width: 24px; height: 24px;\n\theight:24px;\n\toverflow:hidden;\n}\n.icon-next2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -184px 0; width: 24px; height: 24px;\n\theight:24px;\n\toverflow:hidden;\n}\n\n.icon-previous-light() {\n\theight:24px;\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px 0; width: 24px; height: 24px;\n\toverflow:hidden;\n}\n.icon-previous-light2x() {\n\theight:24px;\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px 0; width: 24px; height: 24px;\n\toverflow:hidden;\n}\n\n.icon-next-light() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -232px 0; width: 24px; height: 24px;\n\theight:24px;\n\toverflow:hidden;\n}\n.icon-next-light2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -232px 0; width: 24px; height: 24px;\n\theight:24px;\n\toverflow:hidden;\n}\n\n/*\tTimeNav Navigation\n----------------------------------------------------------------- */\n.icon-zoom-in() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -256px 0; width: 24px; height: 24px;\n}\n.icon-zoom-in2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -256px 0; width: 24px; height: 24px;\n}\n\n.icon-zoom-out() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -280px 0; width: 24px; height: 24px;\n}\n.icon-zoom-out2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -280px 0; width: 24px; height: 24px;\n}\n\n.icon-back-home() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -328px 0; width: 24px; height: 24px;\n}\n.icon-back-home2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -328px 0; width: 24px; height: 24px;\n}\n/*\tTimeNav Navigation Touch\n----------------------------------------------------------------- */\n\n.icon-touch-zoom-in() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -160px; width: 40px; height: 40px;\n}\n.icon-touch-zoom-in2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -160px; width: 40px; height: 40px;\n}\n\n.icon-touch-zoom-out() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -256px -160px; width: 40px; height: 40px;\n}\n.icon-touch-zoom-out2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -256px -160px; width: 40px; height: 40px;\n}\n\n.icon-touch-back-home() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -304px -160px; width: 40px; height: 40px;\n}\n.icon-touch-back-home2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -304px -160px; width: 40px; height: 40px;\n}\n\n.icon-touch-gesture() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -160px -160px; width: 48px; height: 48px;\n}\n.icon-touch-gesture2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -160px -160px; width: 48px; height: 48px;\n}\n/*\tTime Flag\n----------------------------------------------------------------- */\n.time-flag() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: 0 0; width:153px; height: 53px;\n}\n.time-flag2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: 0 0; width:153px; height: 53px;\n}\n\n.time-flag-active() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: 0 -53px; width:153px; height: 53px;\n}\n.time-flag-active2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: 0 -53px; width:153px; height: 53px;\n}\n\n.time-flag-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: 0 -135px; width:153px; height: 26px;\n}\n.time-flag-small2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: 0 -135px; width:153px; height: 26px;\n}\n\n.time-flag-small-active() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: 0 -109px; width:153px; height: 26px;\n}\n.time-flag-small-active2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: 0 -109px; width:153px; height: 26px;\n}\n\n/*\tThumbnail Icons\n----------------------------------------------------------------- */\n.icon-map() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -24px;\n}\n.icon-mappin() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -48px;\n}\n.icon-website() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -232px -24px; \n}\n.icon-document() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -256px -48px;\n}\n.icon-quote() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -232px -48px;\n}\n.icon-plaintext() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -280px -48px;\n}\n.icon-twitter() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -256px -24px;\n}\n.icon-video() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -328px -24px;\n}\n.icon-audio() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -304px -24px;\n}\n.icon-photo() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -280px -24px; \n}\n.icon-link() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -184px -72px; \n}\n.icon-storify() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -328px -96px; \n}\n.icon-wikipedia() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -184px -48px; \n}\n.icon-instagram() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -96px; \n}\n.icon-vine() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -232px -72px; \n}\n.icon-googleplus() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -72px;\n}\n.icon-vimeo() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -328px -48px;\n}\n.icon-youtube() {\n\t//.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -328px -72px; \n}\n\n/*\tThumbnail Icons Small 10px\n----------------------------------------------------------------- */\n.icon-map-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -120px;\n}\n.icon-mappin-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -120px;\n}\n.icon-website-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -232px -120px; \n}\n.icon-document-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -256px -130px;\n}\n.icon-quote-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -232px -130px;\n}\n.icon-plaintext-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -280px -130px;\n}\n.icon-twitter-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -256px -120px;\n}\n.icon-video-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -328px -120px;\n}\n.icon-audio-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -304px -120px;\n}\n.icon-photo-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -280px -120px; \n}\n.icon-link-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -232px -120px; \n}\n.icon-wikipedia-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -184px -120px; \n}\n.icon-instagram-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -96px; \n}\n.icon-googleplus-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -130px;\n}\n.icon-vine-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -160px -120px;\n}\n.icon-vimeo-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -328px -130px;\n}\n.icon-youtube-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -304px -130px; \n}\n.icon-storify-small() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -184px -130px; \n}\n\n/*\tThumbnail Icons (Extra)\n----------------------------------------------------------------- */\n.icon-twitter-inline() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -160px -96px; \n}\n.icon-googleplus-inline() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -208px -96px; \n}\n.icon-storify-inline() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -184px -96px; \n}\n.icon-storify-full() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -280px -96px;\n\twidth:@base-thumb*2;\n\t//height:12px;\n}\n.icon-instagram-full() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -232px -96px;\n\twidth:@base-thumb*2;\n\theight:@base-thumb;\n}\n\n/*\tCurrent Time Indicator\n----------------------------------------------------------------- */\n.icon-currenttime() {\n\t.base-sprite();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -160px -48px;\n\twidth:24px;\n\theight:24px;\n}\n.icon-currenttime2x() {\n\t.base-sprite2x();\n\tbackground-repeat:no-repeat;\n\tbackground-position: -160px -48px;\n\twidth:24px;\n\theight:24px;\n}\n/*\tTime Tics\n----------------------------------------------------------------- */\n.background-time-tic() {\n  \tbackground: @color-background url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAGCAMAAAA8JaR5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBrwkQIABAAHIABkHeR3aAAAAAElFTkSuQmCC);\n}\n\n.background-time-interval() {\n\t//background: @color-base url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAMCAMAAACdvocfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBopJgAADAAbwADHy2qHzAAAAAElFTkSuQmCC);\n\t//background-repeat: no-repeat;\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAMCAMAAACdvocfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBopJgAADAAbwADHy2qHzAAAAAElFTkSuQmCC);\n\t\n}\n.background-time-interval-major() {\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQAQMAAADtUYf0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyOTAzRjI3REIzNDcxMUUxQUQ3QUZCOThEODQ1NDhCNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyOTAzRjI3RUIzNDcxMUUxQUQ3QUZCOThEODQ1NDhCNyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjI5MDNGMjdCQjM0NzExRTFBRDdBRkI5OEQ4NDU0OEI3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjI5MDNGMjdDQjM0NzExRTFBRDdBRkI5OEQ4NDU0OEI3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+DPWNfQAAAANQTFRFzMzMylJEJwAAAAtJREFUCB1jYMAPAAAgAAHDvpOtAAAAAElFTkSuQmCC);\n}\n"
  },
  {
    "path": "source/less/Core/LICENSE",
    "content": "This Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nMozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\"\n    means each individual or legal entity that creates, contributes to\n    the creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n    means the combination of the Contributions of others (if any) used\n    by a Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n    means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n    means Source Code Form to which the initial Contributor has attached\n    the notice in Exhibit A, the Executable Form of such Source Code\n    Form, and Modifications of such Source Code Form, in each case\n    including portions thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n    means\n\n    (a) that the initial Contributor has attached the notice described\n        in Exhibit B to the Covered Software; or\n\n    (b) that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the\n        terms of a Secondary License.\n\n1.6. \"Executable Form\"\n    means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n    means a work that combines Covered Software with other material, in \n    a separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n    means this document.\n\n1.9. \"Licensable\"\n    means having the right to grant, to the maximum extent possible,\n    whether at the time of the initial grant or subsequently, any and\n    all of the rights conveyed by this License.\n\n1.10. \"Modifications\"\n    means any of the following:\n\n    (a) any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered\n        Software; or\n\n    (b) any new file in Source Code Form that contains any Covered\n        Software.\n\n1.11. \"Patent Claims\" of a Contributor\n    means any patent claim(s), including without limitation, method,\n    process, and apparatus claims, in any patent Licensable by such\n    Contributor that would be infringed, but for the grant of the\n    License, by the making, using, selling, offering for sale, having\n    made, import, or transfer of either its Contributions or its\n    Contributor Version.\n\n1.12. \"Secondary License\"\n    means either the GNU General Public License, Version 2.0, the GNU\n    Lesser General Public License, Version 2.1, the GNU Affero General\n    Public License, Version 3.0, or any later versions of those\n    licenses.\n\n1.13. \"Source Code Form\"\n    means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n    means an individual or a legal entity exercising rights under this\n    License. For legal entities, \"You\" includes any entity that\n    controls, is controlled by, or is under common control with You. For\n    purposes of this definition, \"control\" means (a) the power, direct\n    or indirect, to cause the direction or management of such entity,\n    whether by contract or otherwise, or (b) ownership of more than\n    fifty percent (50%) of the outstanding shares or beneficial\n    ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive license:\n\n(a) under intellectual property rights (other than patent or trademark)\n    Licensable by such Contributor to use, reproduce, make available,\n    modify, display, perform, distribute, and otherwise exploit its\n    Contributions, either on an unmodified basis, with Modifications, or\n    as part of a Larger Work; and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n    for sale, have made, import, and otherwise transfer either its\n    Contributions or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in Section 2.1 with respect to any Contribution\nbecome effective for each Contribution on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted under\nthis License. No additional rights or licenses will be implied from the\ndistribution or licensing of Covered Software under this License.\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code that a Contributor has removed from Covered Software;\n    or\n\n(b) for infringements caused by: (i) Your and any other third party's\n    modifications of Covered Software, or (ii) the combination of its\n    Contributions with other software (except as part of its Contributor\n    Version); or\n\n(c) under Patent Claims infringed by Covered Software in the absence of\n    its Contributions.\n\nThis License does not grant any rights in the trademarks, service marks,\nor logos of any Contributor (except as may be necessary to comply with\nthe notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional grants as a result of Your choice to\ndistribute the Covered Software under a subsequent version of this\nLicense (see Section 10.2) or under the terms of a Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach Contributor represents that the Contributor believes its\nContributions are its original creation(s) or it has sufficient rights\nto grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to limit any rights You have under\napplicable copyright doctrines of fair use, fair dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. Distribution of Source Form\n\nAll distribution of Covered Software in Source Code Form, including any\nModifications that You create or to which You contribute, must be under\nthe terms of this License. You must inform recipients that the Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, and how they can obtain a copy of this License. You may not\nattempt to alter or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) such Covered Software must also be made available in Source Code\n    Form, as described in Section 3.1, and You must inform recipients of\n    the Executable Form how they can obtain a copy of such Source Code\n    Form by reasonable means in a timely manner, at a charge no more\n    than the cost of distribution to the recipient; and\n\n(b) You may distribute such Executable Form under the terms of this\n    License, or sublicense it under different terms, provided that the\n    license for the Executable Form does not attempt to limit or alter\n    the recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\nYou may create and distribute a Larger Work under terms of Your choice,\nprovided that You also comply with the requirements of this License for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware with a work governed by one or more Secondary Licenses, and the\nCovered Software is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally distribute such Covered Software\nunder the terms of such Secondary License(s), so that the recipient of\nthe Larger Work may, at their option, further distribute the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. Notices\n\nYou may not remove or alter the substance of any license notices\n(including copyright notices, patent notices, disclaimers of warranty,\nor limitations of liability) contained within the Source Code Form of\nthe Covered Software, except that You may alter any license notices to\nthe extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose to offer, and to charge a fee for, warranty, support,\nindemnity or liability obligations to one or more recipients of Covered\nSoftware. However, You may do so only on Your own behalf, and not on\nbehalf of any Contributor. You must make it absolutely clear that any\nsuch warranty, support, indemnity, or liability obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity or liability terms You offer. You may include additional\ndisclaimers of warranty and limitations of liability specific to any\njurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this\nLicense with respect to some or all of the Covered Software due to\nstatute, judicial order, or regulation then You must: (a) comply with\nthe terms of this License to the maximum extent possible; and (b)\ndescribe the limitations and the code they affect. Such description must\nbe placed in a text file included with all distributions of the Covered\nSoftware under this License. Except to the extent prohibited by statute\nor regulation, such description must be sufficiently detailed for a\nrecipient of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. The rights granted under this License will terminate automatically\nif You fail to comply with any of its terms. However, if You become\ncompliant, then the rights granted under this License from a particular\nContributor are reinstated (a) provisionally, unless and until such\nContributor explicitly and finally terminates Your grants, and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance by some reasonable means prior to 60 days after You have\ncome back into compliance. Moreover, Your grants from a particular\nContributor are reinstated on an ongoing basis if such Contributor\nnotifies You of the non-compliance by some reasonable means, this is the\nfirst time You have received notice of non-compliance with this License\nfrom such Contributor, and You become compliant prior to 30 days after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\ninfringement claim (excluding declaratory judgment actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly or indirectly infringes any patent, then the rights granted to\nYou by any and all Contributors for the Covered Software under Section\n2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\nend user license agreements (excluding distributors and resellers) which\nhave been validly granted by You or Your distributors under this License\nprior to termination shall survive termination.\n\n************************************************************************\n*                                                                      *\n*  6. Disclaimer of Warranty                                           *\n*  -------------------------                                           *\n*                                                                      *\n*  Covered Software is provided under this License on an \"as is\"       *\n*  basis, without warranty of any kind, either expressed, implied, or  *\n*  statutory, including, without limitation, warranties that the       *\n*  Covered Software is free of defects, merchantable, fit for a        *\n*  particular purpose or non-infringing. The entire risk as to the     *\n*  quality and performance of the Covered Software is with You.        *\n*  Should any Covered Software prove defective in any respect, You     *\n*  (not any Contributor) assume the cost of any necessary servicing,   *\n*  repair, or correction. This disclaimer of warranty constitutes an   *\n*  essential part of this License. No use of any Covered Software is   *\n*  authorized under this License except under this disclaimer.         *\n*                                                                      *\n************************************************************************\n\n************************************************************************\n*                                                                      *\n*  7. Limitation of Liability                                          *\n*  --------------------------                                          *\n*                                                                      *\n*  Under no circumstances and under no legal theory, whether tort      *\n*  (including negligence), contract, or otherwise, shall any           *\n*  Contributor, or anyone who distributes Covered Software as          *\n*  permitted above, be liable to You for any direct, indirect,         *\n*  special, incidental, or consequential damages of any character      *\n*  including, without limitation, damages for lost profits, loss of    *\n*  goodwill, work stoppage, computer failure or malfunction, or any    *\n*  and all other commercial damages or losses, even if such party      *\n*  shall have been informed of the possibility of such damages. This   *\n*  limitation of liability shall not apply to liability for death or   *\n*  personal injury resulting from such party's negligence to the       *\n*  extent applicable law prohibits such limitation. Some               *\n*  jurisdictions do not allow the exclusion or limitation of           *\n*  incidental or consequential damages, so this exclusion and          *\n*  limitation may not apply to You.                                    *\n*                                                                      *\n************************************************************************\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace of business and such litigation shall be governed by laws of that\njurisdiction, without reference to its conflict-of-law provisions.\nNothing in this Section shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject\nmatter hereof. If any provision of this License is held to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary to make it enforceable. Any law or regulation which provides\nthat the language of a contract shall be construed against the drafter\nshall not be used to construe this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. New Versions\n\nMozilla Foundation is the license steward. Except as provided in Section\n10.3, no one other than the license steward has the right to modify or\npublish new versions of this License. Each version will be given a\ndistinguishing version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered Software under the terms of the version\nof the License under which You originally received the Covered Software,\nor under the terms of any subsequent version published by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software not governed by this License, and you want to\ncreate a new license for such software, you may create and use a\nmodified version of this License if you rename the license and remove\nany references to the name of the license steward (except to note that\nsuch modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose to distribute Source Code Form that is Incompatible With\nSecondary Licenses under the terms of this version of the License, the\nnotice described in Exhibit B of this License must be attached.\n\n\n-------------------------------------------\n\n"
  },
  {
    "path": "source/less/Core/Mixins.less",
    "content": "/* Mixins.less\n * Snippets of reusable CSS to develop faster and keep code readable\n * ----------------------------------------------------------------- */\n \n// Text Font\n.text-font(@fontsize: 15px) {\n\tfont-size: @fontsize;\n \tline-height: round((@fontsize/100) * 130);\n}\n// Border Radius\n.border-radius(@radius: 5px) {\n \t-webkit-border-radius: @radius;\n \t   -moz-border-radius: @radius;\n \t        border-radius: @radius;\n}\n// User Select\n.user-select(@userselect) {\n \t-webkit-user-select: @userselect;\n \t   -moz-user-select: @userselect;\n \t        user-select: @userselect;\n}\n// Box Shadow\n.box-shadow(@shadow: 1px 1px 7px rgba(0,0,0,.30)) {\n\t-webkit-box-shadow: @shadow;\n\t   -moz-box-shadow: @shadow;\n\t        box-shadow: @shadow;\n}\n// Media Shadow\n.media-shadow(@shadow: 0 1px 3px 0px @color-dark-fourth) {\n\t-webkit-box-shadow: @shadow;\n \t   -moz-box-shadow: @shadow;\n \t        box-shadow: @shadow;\n \tborder: 1px solid;\n \tborder-color: @color-line @color-dark-fourth @color-dark-fourth @color-line;\n}\n// Transform\n.transform(@transform) {\n \t-webkit-transform: @transform;\n \t   -moz-transform: @transform;\n \t    -ms-transform: @transform;\n \t     -o-transform: @transform;\n \t        transform: @transform;\n}\n// Transitions\n.transition(@transition) {\n \t-webkit-transition: @transition;\n \t   -moz-transition: @transition;\n \t    -ms-transition: @transition;\n \t     -o-transition: @transition;\n \t        transition: @transition;\n}\n// Background clipping\n.background-clip(@clip) {\n \t-webkit-background-clip: @clip;\n \t   -moz-background-clip: @clip;\n \t        background-clip: @clip;\n}\n// Opacity\n.opacity(@opacity: 100) {\n \tfilter: e(%(\"alpha(opacity=%d)\", @opacity));\n \t-khtml-opacity: @opacity / 100;\n \t  -moz-opacity: @opacity / 100;\n \t       opacity: @opacity / 100;\n}\n// Hyphens\n.hyphens(@hyphens: auto) {\n \t-webkit-hyphens:@hyphens;\n \t   -moz-hyphens:@hyphens;\n \t    -ms-hyphens:@hyphens;\n \t        hyphens:@hyphens;\n}\n// Clear Fix\n.clearfix() {\n\t*zoom: 1;\n\t&:before,\n\t&:after {\n\t\tdisplay: table;\n\t\tcontent: \"\";\n\t}\n\t&:after {\n\t\tclear: both;\n\t}\n} \n// Reset filters for IE\n.reset-filter() {\n\tfilter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n// Center-align a block level element\n.center-block() {\n\tdisplay: block;\n\tmargin-left: auto;\n\tmargin-right: auto;\n}\n// Button backgrounds\n// ------------------\n.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {\n\t// gradientBar will set the background to a pleasing blend of these, to support IE<=9\n\t.gradientBar(@startColor, @endColor, @textColor, @textShadow);\n\t*background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */\n\t.reset-filter();\n\n\t// in these cases the gradient won't cover the background, so we override\n\t&:hover, &:active, &.active, &.disabled, &[disabled] {\n\t\tcolor: @textColor;\n\t\tbackground-color: @endColor;\n\t\t*background-color: darken(@endColor, 5%);\n\t}\n\n\t// IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves\n\t&:active,\n\t&.active {\n\t\tbackground-color: darken(@endColor, 10%) e(\"\\9\");\n\t}\n}\n// Font Stacks\n#font {\n\t.shorthand(@weight: normal, @size: 14px, @lineHeight: 20px) {\n\t\tfont-size: @size;\n\t\tfont-weight: @weight;\n\t\tline-height: @lineHeight;\n\t}\n\t.sans-serif(@weight: normal, @size: 14px, @lineHeight: 20px) {\n\t\tfont-family: @font-sansserif;\n\t\tfont-size: @size;\n\t\tfont-weight: @weight;\n\t\tline-height: @lineHeight;\n\t}\n\t.font-body(@weight: normal, @size: 14px, @lineHeight: 20px) {\n\t\tfont-family: @fontBody, Helvetica, Arial, sans-serif;\n\t\tfont-size: @size;\n\t\tfont-weight: @weight;\n \t\tline-height: @lineHeight;\n\t}\n\t.font-header(@weight: normal, @size: 14px, @lineHeight: 20px) {\n\t\tfont-family: @fontHeader;\n\t\tfont-size: @size;\n\t\tfont-weight: @weight;\n\t\tline-height: @lineHeight;\n\t}\n\t.serif(@weight: normal, @size: 14px, @lineHeight: 20px) {\n\t\tfont-family: @font-serif;\n\t\tfont-size: @size;\n\t\tfont-weight: @weight;\n\t\tline-height: @lineHeight;\n\t}\n\t.monospace(@weight: normal, @size: 12px, @lineHeight: 20px) {\n\t\tfont-family: \"Monaco\", Courier New, monospace;\n\t\tfont-size: @size;\n\t\tfont-weight: @weight;\n\t\tline-height: @lineHeight;\n\t}\n\n\t.navigation(@weight: normal, @size: 14px, @lineHeight: 20px) {\n\t\tfont-family: @font-sansserif;\n\t    font-size: @size;\n\t    font-weight: @weight;\n\t    line-height: @lineHeight;\n\t  }\n}\n\n// CSS3 Content Columns\n.content-columns(@columnCount, @columnGap: 20px) {\n  -webkit-column-count: @columnCount;\n     -moz-column-count: @columnCount;\n          column-count: @columnCount;\n  -webkit-column-gap: @columnGap;\n     -moz-column-gap: @columnGap;\n          column-gap: @columnGap;\n}\n\n// Add an alphatransparency value to any background or border color (via Elyse Holladay)\n#translucent {\n  .background(@color: @white, @alpha: 1) {\n    background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);\n  }\n  .border(@color: @white, @alpha: 1) {\n    border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);\n    background-clip: padding-box;\n  }\n}\n\n// Gradient Bar Colors for buttons and alerts\n.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {\n\tcolor: @textColor;\n\ttext-shadow: @textShadow;\n\t#gradient > .vertical(@primaryColor, @secondaryColor);\n\tborder-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);\n\tborder-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);\n}\n// Gradients\n#gradient {\n  .horizontal (@startColor: #555, @endColor: #333) {\n    background-color: @endColor;\n    background-repeat: repeat-x;\n    background-image: -khtml-gradient(linear, left top, right top, from(@startColor), to(@endColor)); // Konqueror\n    background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+\n    background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10\n    background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+\n    background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+\n    background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10\n    background-image: linear-gradient(left, @startColor, @endColor); // Le standard\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",@startColor,@endColor)); // IE9 and down\n  }\n  .vertical (@startColor: #555, @endColor: #333) {\n    background-color: @endColor;\n    background-repeat: repeat-x;\n    background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); // Konqueror\n    background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+\n    background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+\n    background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+\n    background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10\n    background-image: linear-gradient(top, @startColor, @endColor); // The standard\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",@startColor,@endColor)); // IE9 and down\n  }\n  .directional (@startColor: #555, @endColor: #333, @deg: 45deg) {\n    background-color: @endColor;\n    background-repeat: repeat-x;\n    background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+\n    background-image: -ms-linear-gradient(@deg, @startColor, @endColor); // IE10\n    background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+\n    background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10\n    background-image: linear-gradient(@deg, @startColor, @endColor); // The standard\n  }\n  .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {\n    background-color: @endColor;\n    background-repeat: no-repeat;\n    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));\n    background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);\n    background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);\n    background-image: -ms-linear-gradient(@startColor, @midColor @colorStop, @endColor);\n    background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);\n    background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",@startColor,@endColor)); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n}"
  },
  {
    "path": "source/less/Core/README.md",
    "content": "StoryJS-Core-CSS\n================\n\nCore CSS for StoryJS (including TimelineJS)\n\nThis Source Code Form is subject to the terms of the Mozilla Public\nLicense, v. 2.0. If a copy of the MPL was not distributed with this\nfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n"
  },
  {
    "path": "source/less/Core/Reset.less",
    "content": "/*\tReset\n------------------------------------------------------------------------------------------- */\n\n.vco-storyjs {\n\n\t/*\tReset tags and common classes\n\t\tDisplay in IE6-9 and FF3\n\t\tBased on: http://github.com/necolas/normalize.css\n\t------------------------------------------------------------------------------------------- */\n\t\n\tdiv * {\n\t\t-webkit-box-sizing:content-box;\n\t\t   -moz-box-sizing:content-box;\n\t\t        box-sizing:content-box;\n\t}\n\t\n\th1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong, \n\tsub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td, \n\t.vco-container, .content-container, .media, .text, .vco-slider, .slider, .date, .title, .messege, .map, .credit, .caption, .vco-feedback, .vco-feature, .toolbar, \n\t.marker, .dot, .line, .flag, .time, .era, .major, .minor, .vco-navigation, .start, .active  {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\tborder: 0;\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tfont-size: 100%;\n\t\tline-height: 1;\n\t\tfont-family: inherit;\n\t\twidth: auto;\n\t\tfloat:none;\n\t}\n\th1, h2, h3, h4, h5, h6 {\n\t\tclear:none;\n\t}\n\ttable { border-collapse: collapse; border-spacing: 0;}\n\tol, ul { list-style: none;}\n\tq:before, q:after, blockquote:before, blockquote:after { content: \"\"; }\n\ta:focus { outline: thin dotted; }\n\ta:hover, a:active { outline: 0;}\n\tarticle, aside, details, figcaption, figure, footer, header, hgroup, nav, section {\n\t\tdisplay: block;\n\t}\n\taudio, canvas, video {\n\t\tdisplay: inline-block;\n\t\t*display: inline;\n\t\t*zoom: 1;\n\t}\n\n\t/*\tPrevents modern browsers from displaying 'audio' without controls\n\t\tBased on: http://github.com/necolas/normalize.css\n\t------------------------------------------------------------------------------------------- */\n\taudio:not([controls]) {\n\t\tdisplay: none;\n\t}\n\tdiv {\n\t\tmax-width:none;\n\t}\n\t\n\t/*\tPrevents sub and sup affecting line-height in all browsers\n\t\tBased on: http://github.com/necolas/normalize.css\n\t------------------------------------------------------------------------------------------- */\n\tsub, sup {\n\t\tfont-size: 75%;\n\t\tline-height: 0;\n\t\tposition: relative;\n\t\tvertical-align: baseline;\n\t}\n\tsup {\n\t\ttop: -0.5em;\n\t}\n\tsub {\n\t\tbottom: -0.25em;\n\t}\n\n\t/*\tImg border in a's and image quality\n\t\tBased on: http://github.com/necolas/normalize.css\n\t------------------------------------------------------------------------------------------- */\n\timg {\n\t\tborder: 0;\n\t\t-ms-interpolation-mode: bicubic;\n\t}\n\n\t/*\tForms\n\t\tBased on: http://github.com/necolas/normalize.css\n\t------------------------------------------------------------------------------------------- */\n\tbutton, input, select, textarea {\n\t  font-size: 100%;\n\t  margin: 0;\n\t  vertical-align: baseline;\n\t  *vertical-align: middle;\n\t}\n\tbutton, input {\n\t  line-height: normal; // FF3/4 have !important on line-height in UA stylesheet\n\t  *overflow: visible; // Inner spacing ie IE6/7\n\t}\n\tbutton::-moz-focus-inner, input::-moz-focus-inner { // Inner padding and border oddities in FF3/4\n\t  border: 0;\n\t  padding: 0;\n\t}\n\tbutton, input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"] {\n\t  cursor: pointer; // Cursors on all buttons applied consistently\n\t  -webkit-appearance: button; // Style clicable inputs in iOS\n\t}\n\tinput[type=\"search\"] { // Appearance in Safari/Chrome\n\t  -webkit-appearance: textfield;\n\t  -webkit-box-sizing: content-box;\n\t     -moz-box-sizing: content-box;\n\t          box-sizing: content-box;\n\t}\n\tinput[type=\"search\"]::-webkit-search-decoration {\n\t  -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5\n\t}\n\ttextarea {\n\t  overflow: auto; // Remove vertical scrollbar in IE6-9\n\t  vertical-align: top; // Readability and alignment cross-browser\n\t}\n}"
  },
  {
    "path": "source/less/Core/Typography.less",
    "content": "/* Typography.less\n * Headings, body text, lists, etc\n * ---------------------------------------------------------------------------------------- */\n \n.vco-storyjs {\n\tfont-size: @base-font;\n\tfont-weight: normal;\n\tline-height: @base-line;\n\t-webkit-font-smoothing: antialiased; /* Fix for webkit rendering */\n\t-webkit-text-size-adjust: 100%;\n\t\n\tp {\n\t\tfont-size: @base-font;\n\t\tfont-weight: normal;\n\t\tline-height: @base-line;\n\t\tmargin-bottom: @base-line;\n\t\tcolor: @color-feature-description;\n\t\t\n\t\tsmall {\n\t\t\tfont-size: @base-font - 3;\n\t\t\tline-height: @base-line - 3;\n\t\t}\n\t}\n\tp:first-child { \n\t\tmargin-top:@base-line;\n\t}\n\t.vco-navigation {\n\t\tp {\n\t\t\tcolor: @color-nav-description;\n\t\t}\n\t}\n\t.vco-feature {\n\t\th3, h4, h5, h6 {\n\t\t\tmargin-bottom: @base-space;\n\t\t}\n\t\tp {\n\t\t\tcolor: @color-feature-description;\n\t\t}\n\t\tblockquote, blockquote p {\n\t\t\tcolor:@color-feature-title;\n\t\t}\n\t}\n\t.date, .title {\n\t\ta {\n\t\t\tcolor: @color-nav-description;\n\t\t}\n\t}\n\t.hyphenate {\n\t\t.hyphens(auto);\n\t\tword-wrap:break-word;\n\t}\n\n\th1, h2, h3, h4, h5, h6 {\n\t\tfont-weight: normal;\n\t\tcolor: @color-feature-title;\n\t\ttext-transform: none;\n\t\ta {\n\t\t\tcolor: @color-nav-description;\n\t\t}\n\t\tsmall {\n\t\t\tcolor: @color-nav-title;\n\t\t}\n\t}\n\th1.date, h2.date, h3.date, h4.date, h5.date, h6.date {\n\t\tfont-weight: bold;\n\t}\n\th2.start {\n\t\t//font-size: 42px;\n\t\t//line-height: 44px;\n\t\tfont-size: 36px;\n\t\tline-height: 38px;\n\t\t\n\t\tmargin-bottom: @base-space;\n\t}\n\th1 {\n\t\tmargin-bottom: @base-space;\n\t\tfont-size: 32px;\n\t\tline-height: 34px;\n\t\tsmall {\n\t\t\tfont-size: 18px;\n\t\t}\n\t}\n\th2 {\n\t\tmargin-bottom: @base-space;\n\t\tfont-size: 28px;\n\t\tline-height: 30px;\n\n\t\tsmall {\n\t\t\tfont-size: 14px;\n\t\t\tline-height: 16px;\n\t\t\t\n\t\t\t//margin-left:5px;\n\t\t}\n\t}\n\th2.date {\n\t\tfont-size: 16px;\n\t\tline-height:18px;\n\t\tmargin-bottom: @base-space/4;\n\t\tcolor:@color-feature-date;\n\t\t\n\t\t//margin-bottom: @base-space;\n\t}\n\th3, h4, h5, h6 {\n\t\tline-height: @base-line * 2;\n\t\t.active {\n\t\t\tcolor: @color-theme;\n\t\t}\n\t}\n\th3 {\n\t\tfont-size: 28px;\n\t\tline-height: 30px;\n\t\t//font-size: 24px;\n\t\t//line-height:26px;\n\t\tsmall {\n\t\t\tfont-size: 14px;\n\t\t}\n\t}\n\th4 {\n\t\tfont-size: 20px;\n\t\tline-height: 22px;\n\t\t//font-size: 16px;\n\t\t//line-height:18px;\n\t\tsmall {\n\t\t\tfont-size: 12px;\n\t\t}\n\t}\n\th5 {\n\t\tfont-size: 16px;\n\t\tline-height:18px;\n\t\t\n\t\t//font-size: 14px;\n\t\t//line-height:16px;\n\t}\n\th6 {\n\t\tfont-size: 13px;\n\t\tline-height:14px;\n\t\ttext-transform: uppercase;\n\t}\n\tstrong {\n\t\tfont-weight:bold;\n\t\tfont-style:inherit;\n\t}\n\tem {\n\t\tfont-style: italic;\n\t\tfont-weight: inherit;\n\t}\n\tQ {\n\t\tquotes: '„' '“';\n\t\tfont-style: italic;\n\t}\n\t\n\t/* BLOCKQUOTES\n\t================================================== */\n\tblockquote, blockquote p {\n\t\tfont-size: @base-font-large;\n\t\tline-height: @base-line-large;\n\t\ttext-align:left;\n\t\tmargin-bottom: 6px;\n\t\tpadding-top: 10px;\n\t\tbackground-color:@white;\n\t\tcolor:@color-feature-title;\n\t\t\n\t}\n\t\n\t/* Caption and Credits\n\t================================================== */\n\t.credit {\n\t\tcolor: @color-credit;\n\t\ttext-align: right;\n\t\tfont-size: 10px;\n\t\tline-height: 10px;\n\t\tdisplay: block;\n\t\tmargin: 0 auto;\n\t\tclear:both;\n\t}\n\t.caption {\n\t\ttext-align:left;\n\t\tmargin-top:5px;\n\t\tcolor: @color-caption;\n\t\tfont-size: 11px;\n\t\tline-height: 14px;\n\t\tclear:both;\n\t}\n\t\n\t\n}\n\n/* Right to Left\n * ---------------------------------------------------------------------------------------- */\n.vco-storyjs.vco-right-to-left {\n\t[dir=rtl] &, &[dir=rtl] {\n\t\tdirection: ltr;\n\t}\n\n\th1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong,\n\tsub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td,   {\n\t\tdirection: rtl;\n\t}\n}\n"
  },
  {
    "path": "source/less/Core/VMM.Core.less",
    "content": "/*\n * VMM StoryJS Core\n * Basic and global styles for generating structural layout\n * ------------------------------------------------------------------------------------------- */\n \n/*\tBASE\n----------------------------------------------------- */\n//\tCSS Reset\n@import \"Reset.less\";\n\n//\tCore variables and mixins\n@import \"Font.Default.less\";\n@import \"Variables.less\";\n@import \"Mixins.less\";\n@import \"GFX.less\";\n@import \"Typography.less\";\n@import \"VMM.Tooltip.less\";\n\n//\tGrid system and page structure\n@import \"VMM.Slider.less\";\n\n\n/* StoryJS Embed\n================================================== */\n.storyjs-embed {\n\tbackground-color: @color-base;\n\tmargin-bottom:20px;\n\tborder: 1px solid @color-line;\n\tpadding-top:20px;\n\tpadding-bottom:20px;\n\tclear:both;\n\t\n\t.border-radius(10px);\n\t.box-shadow(1px 1px 3px rgba(0,0,0,.35));\n}\n.storyjs-embed.full-embed {\n\toverflow:hidden;\n\tborder: 0 !important;\n\tpadding: 0 !important;\n\tmargin: 0 !important;\n\tclear:both;\n\t\n\t.border-radius(0) !important;\n\t.box-shadow(0 0px 0px rgba(0, 0, 0, 0.25)) !important;\n}\n.storyjs-embed.sized-embed {\n\toverflow:hidden;\n\tborder: 1px solid @color-line;\n\tpadding-top:7px;\n\tpadding-bottom:7px;\n\tmargin: 0 !important;\n\tclear:both;\n\t\n\t.box-shadow(0 0px 0px rgba(0, 0, 0, 0.25)) !important;\n}\n\n/* StoryJS\n================================================== */\n.vco-storyjs {\n\twidth: 100%;\n\theight:100%;\n\tpadding:0px;\n\tmargin:0px;\n\tbackground-color:@color-background;\n\tposition: absolute;\n\tz-index:100;\n\tclear:both;\n\toverflow:hidden;\n\t\n\t.vmm-clear:before,\n\t.vmm-clear:after {\n\t\tcontent:\"\";\n\t\tdisplay:table;\n\t}\n\t.vmm-clear:after {\n\t\tclear:both;\n\t}\n\t.vmm-clear {\n\t\t*zoom:1;\n\t}\n\t\n\t/* FEATURE\n\t================================================== */\n\t.vco-feature {\n\t\twidth: 100%;\n\t\t.slider, .vco-slider {\n\t\t\twidth: 100%;\n\t\t\tfloat: left;\n\t\t\tposition: relative;\n\t\t\tz-index:10;\n\t\t\tpadding-top:@base-space;\n\t\t\t.box-shadow();\n\t\t}\n\t}\n\t\n\t/* FEEDBACK\n\t================================================== */\n\t.vco-feedback {\n\t\tposition: absolute;\n\t\tdisplay:table;\n\t\toverflow:hidden;\n\t\ttop:0px;\n\t\tleft:0px;\n\t\tz-index:205;\n\t\twidth: 100%;\n\t\theight:100%;\n\t\t//background-color: @color-base;\n\t}\n\tdiv.vco-loading, div.vco-explainer {\n\t\tdisplay:table;\n\t\ttext-align:center;\n\t\tmin-width: 100px;\n\t\tmargin-top:@base-space;\n\t\theight:100%;\n\t\twidth:100%;\n\t\tbackground-color: @color-background;\n\t\t.vco-loading-container, .vco-explainer-container {\n\t\t\tdisplay:table-cell;\n\t\t\tvertical-align:middle;\n\t\t\t.vco-loading-icon {\n\t\t\t\tdisplay:block;\n\t\t\t\tbackground-repeat:no-repeat;\n\t\t\t\tvertical-align:middle;\n\t\t\t\tmargin-left:auto;\n\t\t\t\tmargin-right:auto;\n\t\t\t\ttext-align:center;\n\t\t\t\t.loading-sprite();\n\t\t\t\twidth:28px;\n\t\t\t\theight:28px;\n\t\t\t}\n\t\t\t.vco-gesture-icon {\n\t\t\t\tdisplay:block;\n\t\t\t\tbackground-repeat:no-repeat;\n\t\t\t\tvertical-align:middle;\n\t\t\t\tmargin-left:auto;\n\t\t\t\tmargin-right:auto;\n\t\t\t\ttext-align:center;\n\t\t\t\t.icon-touch-gesture();\n\t\t\t\twidth:48px;\n\t\t\t\theight:48px;\n\t\t\t}\n\t\t\t.vco-message {\n\t\t\t\tdisplay:block;\n\t\t\t}\n\t\t\t.vco-message, .vco-message p {\n\t\t\t\ttext-align:center;\n\t\t\t\tfont-size: @base-font-small;\n\t\t\t\tline-height:@base-font-small + 2;\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tmargin-top:@base-space/2;\n\t\t\t\tmargin-bottom:@base-space/2;\n\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t}\n\t\t.vco-explainer-container {\n\t\t\t//background-color:@color-dark-second;\n\t\t\t//background-color: fade(@color-dark, 65%);\n\t\t\t\n\t\t}\t\t\t\t\t\n\t}\n\tdiv.vco-explainer {\n\t\tbackground-color: transparent;\n\t\t//height:400px;\n\t\t//margin-top:100px;\n\t\t\n\t}\n\t.vco-bezel {\n\t\tbackground-color:@color-dark-second;\n\t\tbackground-color: fade(@color-dark, 80%);\n\t\t//border: 1px solid fade(@color-base, 50%);\n\t\twidth:80px;\n\t\theight:50px;\n\t\tpadding:50px;\n\t\tpadding-top:25px;\n\t\tpadding: 25px 20px 50px 20px;\n\t\tmargin:auto;\n\t\t.border-radius(10px);\n\t\t.vco-message, .vco-message p {\n\t\t\tcolor: @color-base;\n\t\t\tfont-weight: bold;\n\t\t}\n\t}\n\t/* Container\n\t================================================== */\n\t.vco-container.vco-main {\n\t\tposition: absolute;\n\t\ttop:0px;\n\t\tleft:0px;\n\t\tpadding-bottom:3px;\n\t\t//margin-top:@base-space;\n\t\twidth: auto;\n\t\theight: auto;\n\t\tmargin:0px;\n\t\tclear:both;\n\t}\n\timg, embed, object, video, iframe {\n\t\tmax-width: 100%;\n\t}\n\tiframe {\n\t\t//margin-bottom:5px;\n\t}\n\t\n\t\n\timg {\n\t\tmax-height:100%;\n\t\tborder: 1px solid @color-credit;\n\t}\n\ta {\n\t\tcolor:@color-theme;\n\t\ttext-decoration: none;\n\t}\n\ta:hover {\n\t\tcolor:@color-theme-dark;\n\t\ttext-decoration: underline;\n\t}\n\t\n\t\n\t.vcard {\n\t\tfloat:right;\n\t\tmargin-bottom:@base-space;\n\t\ta {\n\t\t\tcolor: @color-dark-second;\n\t\t}\n\t\ta:hover {\n\t\t\ttext-decoration: none;\n\t\t\t.fn {\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\t\t.fn, .nickname {\n\t\t\t\t\n\t\t\tpadding-left: 42px;\n\t\t}\n\t\t.fn {\n\t\t\tdisplay:block;\n\t\t\tfont-weight: bold;\n\n\t\t}\n\t\t.nickname {\n\t\t\tmargin-top:1px;\n\t\t\tdisplay:block;\n\t\t\tcolor: @color-dark-third;\n\t\t}\n\t\t\t\n\t\t.avatar {\n\t\t\tfloat:left;\n\t\t\tdisplay: block;\n\t\t\twidth: 32px;\n\t\t\theight: 32px;\n\t\t\timg {\n\t\t\t\t-moz-border-radius: 5px;\n\t\t\t\t-webkit-border-radius: 5px;\n\t\t\t\tborder-radius: 5px;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t.thumbnail {\n\t\twidth:@base-thumb;\n\t\theight:@base-thumb;\n\t\toverflow:hidden;\n\t\tfloat:left;\n\t\tmargin:0;\n\t\tmargin-right:1px;\n\t\tmargin-top:6px;\n\t\t\n\t\t//Fixes for bootstrap sites\n\t\tborder:0;\n\t\tpadding:0;\n\t    -webkit-border-radius: 0;\n\t       -moz-border-radius: 0;\n\t            border-radius: 0;\n\t    -webkit-box-shadow: none;\n\t       -moz-box-shadow: none;\n\t            box-shadow: none;\n\t}\n\t// fixes for bootstrap sites\n\ta.thumbnail:hover {\n\t\t-webkit-box-shadow: none;\n\t\t   -moz-box-shadow: none;\n\t\t        box-shadow: none;\n\t}\n\t\n\t.thumbnail.thumb-plaintext {\n\t\t.icon-plaintext();\n\t}\n\t.thumbnail.thumb-quote {\n\t\t.icon-quote();\n\t}\n\t.thumbnail.thumb-document {\n\t\t.icon-document();\n\t}\n\t.thumbnail.thumb-photo {\n\t\t.icon-photo();\n\t\tborder:0;\n\t\timg {\n\t\t\tborder:0px none @color-line !important;\n\t\t}\n\t}\n\t.thumbnail.thumb-twitter {\n\t\t.icon-twitter();\n\t}\n\t.thumbnail.thumb-vimeo {\n\t\t.icon-vimeo();\n\t}\n\t.thumbnail.thumb-vine {\n\t\t.icon-vine();\n\t}\n\t.thumbnail.thumb-youtube {\n\t\t.icon-youtube();\n\t}\n\t.thumbnail.thumb-video {\n\t\t.icon-video();\n\t}\n\t.thumbnail.thumb-audio {\n\t\t.icon-audio();\n\t}\n\t.thumbnail.thumb-map {\n\t\t.icon-mappin();\n\t}\n\t.thumbnail.thumb-website {\n\t\t.icon-website();\n\t}\n\t.thumbnail.thumb-link {\n\t\t.icon-link();\n\t}\n\t.thumbnail.thumb-wikipedia {\n\t\t.icon-wikipedia();\n\t}\n\t.thumbnail.thumb-storify {\n\t\t.icon-storify();\n\t}\n\t.thumbnail.thumb-googleplus {\n\t\t.icon-googleplus();\n\t}\n\tthumbnail.thumb-instagram {\n\t\t.icon-instagram();\n\t}\n\t\n\tthumbnail.thumb-instagram-full {\n\t\t.icon-instagram-full();\n\t}\n\t.thumb-storify-full {\n\t\t//display:inline-block;\n\t\theight:12px;\n\t\t.icon-storify-full();\n\t}\n\t\n\t.thumbnail-inline {\n\t\twidth:16px;\n\t\theight:14px;\n\t\toverflow:hidden;\n\t\tdisplay:inline-block;\n\t\tmargin-right:1px;\n\t\tmargin-left:3px;\n\t\tmargin-top:2px;\n\t\t//float:left;\n\t\t.opacity(50);\n\t}\n\t.twitter {\n\t\t.thumbnail-inline {\n\t\t\t.icon-twitter-inline();\n\t\t}\n\t}\n\t.storify {\n\t\t.thumbnail-inline {\n\t\t\t.icon-storify-inline();\n\t\t}\n\t}\n\t.googleplus {\n\t\t.thumbnail-inline {\n\t\t\t.icon-googleplus-inline();\n\t\t}\n\t}\n\t\n\t\n\t.zFront {\n\t\tz-index:204;\n\t}\n\t\n}\n\n\n/* RETINA\n================================================== */\n@media only screen and (-webkit-min-device-pixel-ratio: 2), \nonly screen and (min-device-pixel-ratio: 2) {\n\t.vco-storyjs {\n\t\tdiv.vco-loading, div.vco-explainer {\n\t\t\t.vco-loading-container, .vco-explainer-container {\n\t\t\t\t.vco-loading-icon {\n\t\t\t\t\t.loading-sprite2x();\n\t\t\t\t}\n\t\t\t\t.vco-gesture-icon {\n\t\t\t\t\t.icon-touch-gesture2x();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\n"
  },
  {
    "path": "source/less/Core/VMM.Slider.less",
    "content": "/*\tSlider\n================================================== */\n\n/* MEDIA QUERIES\n================================================== */\n\n// Mobile and iPhone\n@media only screen and (max-width: 480px), only screen and (max-device-width: 480px) {\n\t.vco-slider {\n\t\t.nav-next, .nav-previous {\n\t\t\tdisplay:none;\n\t\t}\n\t}\n\n}\n\n// BELOW 640px\n@media (max-width: 640px) {\n\n}\n.vco-skinny { \n\t.vco-slider {\n\t\t.slider-item {\n\t\t\t.content {\n\t\t\t\t.layout-text-media {\n\t\t\t\t\t.text {\n\t\t\t\t\t\t.container {\n\t\t\t\t\t\t\ttext-align:center !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\th2, h3 {\n\t\t\t\t\t\tdisplay:block !important;\n\t\t\t\t\t\twidth:100% !important;\n\t\t\t\t\t\ttext-align:center !important;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t.content-container {\n\t\t\t\t\tdisplay:block;\n\t\t\t\t\t.text {\n\t\t\t\t\t\twidth:100%;\n\t\t\t\t\t\tmax-width:100%;\n\t\t\t\t\t\tmin-width:120px;\n\t\t\t\t\t\tdisplay:block;\n\t\t\t\t\t\t.container {\n\t\t\t\t\t\t\tdisplay:block;\n\t\t\t\t\t\t\t-webkit-hyphens:auto;\n\t\t\t\t\t\t\t   -moz-hyphens:auto;\n\t\t\t\t\t\t\t    -ms-hyphens:auto;\n\t\t\t\t\t\t\t        hyphens:auto;\n\t\t\t\t\t\t\tword-wrap:break-word;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t.media {\n\t\t\t\t\t\twidth:100%;\n\t\t\t\t\t\tmin-width:50%;\n\t\t\t\t\t\tfloat: none;\n\t\t\t\t\t\t.media-wrapper {\n\t\t\t\t\t\t\tmargin-left:0px;\n\t\t\t\t\t\t\tmargin-right:0px;\n\t\t\t\t\t\t\twidth:100%;\n\t\t\t\t\t\t\tdisplay:block;\n\t\t\t\t\t\t\t.media-container {\n\t\t\t\t\t\t\t\timg, iframe {\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t.content-container.layout-text {\n\n\t\t\t\t}\n\t\t\t\t.content-container.layout-media {\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n\n.vco-skinny.vco-notouch {\n\t.vco-slider {\n\t\t.nav-previous, .nav-next {\n\t\t\tz-index:203;\n\t\t\t.nav-container {\n\t\t\t\t.date, .title {\n\t\t\t\t\t.opacity(1);\n\t\t\t\t}\n\t\t\t\t.icon {\n\t\t\t\t\t.opacity(15);\n\t\t\t\t\t//.opacity(50);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.nav-previous {\n\t\t\t.icon {\n\t\t\t\t.icon-previous-light();\n\t\t\t\tmargin-left: @base-space - 5;\n\t\t\t}\n\t\t}\n\t\t.nav-next {\n\t\t\t.icon {\n\t\t\t\t.icon-next-light();\n\t\t\t\tmargin-left: @feature-nav-width - @base-space - @feature-nav-icon-wh + 5;\n\t\t\t}\n\t\t}\n\t\t.nav-previous:hover, .nav-next:hover {\n\t\t\tcolor:@color-nav-date !important;\n\t\t\t//text-shadow: #000 1px 1px 2px;\n\t\t\t//text-shadow: #FFF 1px 1px 1px;\n\t\t\tbackground-color:@color-dark-second;\n\t\t\tbackground-color: fade(@color-dark, 65%);\n\t\t\t.border-radius(10px);\n\t\t\t.nav-container {\n\t\t\t\t.icon, .date, .title {\n\t\t\t\t\t.border-radius(10px);\n\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t.opacity(100);\n\t\t\t\t}\n\t\t\t\t.title {\n\t\t\t\t\tpadding-bottom:5px;\n\t\t\t\t}\n\t\t\t\t.date, .title {\n\t\t\t\t\tpadding-left:5px;\n\t\t\t\t\tpadding-right:5px;\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\t\n\t}\n}\n\n/* RETINA\n================================================== */\n@media only screen and (-webkit-min-device-pixel-ratio: 2), \nonly screen and (min-device-pixel-ratio: 2) {\n\t.vco-skinny.vco-notouch {\n\t\t.vco-slider {\n\t\t\t.nav-previous {\n\t\t\t\t.icon {\n\t\t\t\t\t.icon-previous-light2x();\n\t\t\t\t}\n\t\t\t}\n\t\t\t.nav-next {\n\t\t\t\t.icon {\n\t\t\t\t\t.icon-next-light2x();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* SLIDER CONTAINERS \n================================================== */\n.vco-slider {\n\twidth:100%;\n\theight:100%;\n\toverflow:hidden;\n\t.slider-container-mask {\n\t\ttext-align: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\toverflow: hidden;\n\t\t\n\t\t.slider-container {\n\t\t\tposition: absolute;\n\t\t\ttop: 0px;\n\t\t\tleft: -2160px;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\ttext-align: center;\n\t\t\tdisplay: block;\n\t\t\t\n\t\t\t.slider-item-container {\n\t\t\t\t//overflow:hidden;\n\t\t\t\tdisplay:table-cell;\n\t\t\t\tvertical-align:middle;\n\t\t\t}\n\n\t\t}\n\n\t}\n}\n\n/* HOVER ELEMENTS\n================================================== */\n.vco-notouch {\n\t.vco-slider {\n\t\t.nav-previous:hover, .nav-next:hover {\n\t\t\tcolor: @color-dark-second;\n\t\t\tcursor: pointer;\n\t\t}\n\t\t.nav-previous:hover {\n\t\t\t.icon {\n\t\t\t\tmargin-left: @base-space - 5;\n\t\t\t}\n\t\t}\n\t\t.nav-next:hover {\n\t\t\t.icon {\n\t\t\t\tmargin-left: @feature-nav-width - @base-space - @feature-nav-icon-wh + 5;\n\t\t\t}\n\t\t}\n\t\t.slider-item {\n\t\t\t.content {\n\t\t\t\t.content-container {\n\t\t\t\t\t.media {\n\t\t\t\t\t\t.media-container {\n\t\t\t\t\t\t\t.wikipedia {\n\t\t\t\t\t\t\t\th4 a:hover {\n\t\t\t\t\t\t\t\t\tcolor: @color-theme;\n\t\t\t\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t.created-at:hover {\n\t\t\t\t\t\t.opacity(100);\n\t\t\t\t\t}\n\t\t\t\t\t.googleplus {\n\t\t\t\t\t\t.googleplus-content {\n\t\t\t\t\t\t\t.googleplus-attachments {\n\t\t\t\t\t\t\t\ta:hover {\n\t\t\t\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\t\t\t\th5 {\n\t\t\t\t\t\t\t\t\t\ttext-decoration: underline;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t}\n}\n\n/* SLIDER ELEMENTS\n================================================== */\n.vco-slider {\n\timg, embed, object, video, iframe {\n\t\tmax-width: 100%;\n\t}\n}\n\n/* SLIDER NAV\n================================================== */\n.vco-slider {\n\t//position: relative;\n\t\n\t.nav-previous, .nav-next {\n\t\tposition:absolute;\n\t\ttop: 0px;\n\t\twidth: @feature-nav-width; \n\t\tcolor: #DBDBDB;\n\t\tfont-size:@base-font-small;\n\t\t.nav-container {\n\t\t\theight:100px;\n\t\t\twidth:100px;\n\t\t\tposition:absolute;\n\t\t}\n\t\t.icon {\n\t\t\tmargin-top:@feature-nav-icon-wh/2;\n\t\t\tmargin-bottom:@base-space;\n\t\t}\n\t\t.date, .title {\n\t\t\tline-height:14px;\n\t\t\ta {\n\t\t\t\tcolor: @color-nav-description;\n\t\t\t}\n\t\t\tsmall {\n\t\t\t\tdisplay:none;\n\t\t\t}\n\t\t}\n\t\t.date {\n\t\t\tfont-size: @base-font-small + 2;\n\t\t\tline-height: @base-font-small + 2;\n\t\t\t\n\t\t\t//font-size: @base-font;\n\t\t\t//line-height: @base-line;\n\t\t\tfont-weight: bold;\n\t\t\t\n\t\t\ttext-transform: uppercase;\n\t\t\tmargin-bottom:5px;\n\t\t}\n\t\t.title {\n\t\t\tfont-size: @base-font-small;\n\t\t\tline-height: @base-font-small + 2;\n\t\t}\n\t}\n\t\n\t.nav-previous {\n\t\tfloat: left;\n\t\ttext-align:left;\n\t\t.icon {\n\t\t\tmargin-left: @base-space;\n\t\t\t.icon-previous();\n\t\t}\n\t\t.date, .title {\n\t\t\ttext-align:left;\n\t\t\tpadding-left:@base-space;\n\t\t}\n\t}\n\t\n\t.nav-next {\n\t\tfloat: right;\n\t\ttext-align:right;\n\t\t.icon {\n\t\t\tmargin-left: @feature-nav-width - @base-space - @feature-nav-icon-wh;\n\t\t\t.icon-next();\n\t\t}\n\t\t.date, .title {\n\t\t\ttext-align:right;\n\t\t\tpadding-right:@base-space;\n\t\t}\n\t}\n\t\n}\n\n/* RETINA\n================================================== */\n@media only screen and (-webkit-min-device-pixel-ratio: 2), \nonly screen and (min-device-pixel-ratio: 2) {\n\t.vco-slider {\n\t\t.nav-previous {\n\t\t\t.icon {\n\t\t\t\t.icon-previous2x();\n\t\t\t}\n\t\t}\n\t\t.nav-next {\n\t\t\t.icon {\n\t\t\t\t.icon-next2x();\n\t\t\t}\n\t\t}\n\t}\n}\n/* SLIDE CONTENT\n================================================== */\n.vco-slider {\n\t.slider-item {\n\t\tposition:absolute;\n\t\twidth:700px;\n\t\theight:100%;\n\t\tpadding:0px;\n\t\tmargin:0px;\n\t\t//overflow: hidden;\n\t\tdisplay:table;\n\t\t//overflow-x:hidden;\n\t\toverflow-y:auto;\n\t\t\n\t\t.content {\n\t\t\tdisplay:table-cell;\n\t\t\tvertical-align:middle;\n\t\t\t\n\t\t\t/* All Slides\n\t\t\t================================================== */\n\t\t\t.pad-top {\n\t\t\t\t.text {\n\t\t\t\t\t.container {\n\t\t\t\t\t\tpadding-top: @base-space;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.pad-right {\n\t\t\t\t.text {\n\t\t\t\t\t.container {\n\t\t\t\t\t\tpadding-right: @base-space;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.pad-left {\n\t\t\t\t.text {\n\t\t\t\t\t.container {\n\t\t\t\t\t\tpadding-left: @base-space*2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.media.text-media {\n\t\t\t\t\t.media-wrapper {\n\t\t\t\t\t\t.media-container {\n\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\tbackground-color: @white;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t.content-container {\n\t\t\t\tdisplay:table;\n\t\t\t\tvertical-align:middle;\n\t\t\t\t.text {\n\t\t\t\t\twidth:40%;\n\t\t\t\t\tmax-width:50%;\n\t\t\t\t\tmin-width:120px;\n\t\t\t\t\tdisplay:table-cell;\n\t\t\t\t\tvertical-align:middle;\n\t\t\t\t\t.container {\n\t\t\t\t\t\tdisplay:table-cell;\n\t\t\t\t\t\tvertical-align:middle;\n\t\t\t\t\t\ttext-align:left;\n\t\t\t\t\t\tp {\n\t\t\t\t\t\t\t.hyphens(auto);\n\t\t\t\t\t\t\tword-wrap:break-word;\n\t\t\t\t\t\t}\n\t\t\t\t\t\th2.date {\n\t\t\t\t\t\t\tfont-size: @base-font;\n\t\t\t\t\t\t\tline-height: @base-font;\n\t\t\t\t\t\t\t//margin-bottom: @base-space/2;\n\t\t\t\t\t\t\t//color:@color-feature-date;\n\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t.slide-tag {\n\t\t\t\t\t\t\tfont-size: @base-font-small;\n\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\tcolor: @color-base;\n\t\t\t\t\t\t\tbackground-color: lighten(@color-feature-date, 20%);\n\t\t\t\t\t\t\t.border-radius(3px);\n\t\t\t\t\t\t\tvertical-align: baseline;\n\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\t//text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n\t\t\t\t\t\t\tline-height: @base-font-small;\n\t\t\t\t\t\t\tpadding: 1px 3px 1px;\n\t\t\t\t\t\t\tmargin-left:@base-space/2;\n\t\t\t\t\t\t\tmargin-bottom: @base-space/2;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.media {\n\t\t\t\t\twidth:100%;\n\t\t\t\t\tmin-width:50%;\n\t\t\t\t\tfloat: left;\n\t\t\t\t\t.media-wrapper {\n\t\t\t\t\t\tdisplay:inline-block;\n\t\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\t\t.media-container {\n\t\t\t\t\t\t\tdisplay:inline-block;\n\t\t\t\t\t\t\tline-height:0px;\n\t\t\t\t\t\t\tpadding:0px;\n\t\t\t\t\t\t\tmax-height:100%;\n\t\t\t\t\t\t\t//overflow:hidden;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t/* MEDIA SHADOWS AND BORDERS\n\t\t\t\t\t\t\t================================================== */\n\t\t\t\t\t\t\t.media-frame, .media-image img {\n\t\t\t\t\t\t\t\tborder: 1px solid;\n\t\t\t\t\t\t\t\tborder-color: @color-line @color-dark-fourth @color-dark-fourth @color-line;\n\t\t\t\t\t\t\t\tbackground-color: @color-background;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.media-frame iframe {\n\t\t\t\t\t\t\t\tbackground-color: @color-background;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.soundcloud {\n\t\t\t\t\t\t\t\tborder: 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.media-image {\n\t\t\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t.media-shadow {\n\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\tz-index: 1;\n\t\t\t\t\t\t\t\tbackground:@color-background;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.media-shadow:before, .media-shadow:after {\n\t\t\t\t\t\t\t\tz-index: -1;\n\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\tcontent: \"\";\n\t\t\t\t\t\t\t\tbottom: 15px;\n\t\t\t\t\t\t\t\tleft: 10px;\n\t\t\t\t\t\t\t\twidth: 50%;\n\t\t\t\t\t\t\t\ttop: 80%;\n\t\t\t\t\t\t\t\tmax-width:300px;\n\t\t\t\t\t\t\t\tbackground: @color-dark-fourth;\n\t\t\t\t\t\t\t\t.box-shadow(0 15px 10px @color-dark-fourth);\n\t\t\t\t\t\t\t\t.transform(rotate(-2deg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.media-shadow::after {\n\t\t\t\t\t\t\t\t.transform(rotate(2deg));\n\t\t\t\t\t\t\t\tright: 10px;\n\t\t\t\t\t\t\t\tleft: auto;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.plain-text {\n\t\t\t\t\t\t\t\tdisplay:table;\n\t\t\t\t\t\t\t\t.container {\n\t\t\t\t\t\t\t\t\tdisplay:table-cell;\n\t\t\t\t\t\t\t\t\tvertical-align:middle;\n\t\t\t\t\t\t\t\t\tfont-size: @base-font;\n\t\t\t\t\t\t\t\t\tline-height:@base-line;\n\t\t\t\t\t\t\t\t\tcolor: @color-feature-description;\n\t\t\t\t\t\t\t\t\tp {\n\t\t\t\t\t\t\t\t\t\tmargin-bottom:@base-line;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.wikipedia {\n\t\t\t\t\t\t\t\tfont-size: @base-font;\n\t\t\t\t\t\t\t\tline-height: @base-line;\n\t\t\t\t\t\t\t\ttext-align:left;\n\t\t\t\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\t\t\t\tmargin-bottom:@base-space;\n\t\t\t\t\t\t\t\tclear:both;\n\t\t\t\t\t\t\t\t.wiki-source {\n\t\t\t\t\t\t\t\t\tmargin-bottom:@base-space;\n\t\t\t\t\t\t\t\t\tfont-size: 13px;\n\t\t\t\t\t\t\t\t\tline-height: 19px;\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\th4 {\n\t\t\t\t\t\t\t\t\tborder-bottom: 1px solid @color-line;\n\t\t\t\t\t\t\t\t\tmargin-bottom:5px;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\th4 a {\n\t\t\t\t\t\t\t\t\tcolor: @color-feature-title;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tp {\n\t\t\t\t\t\t\t\t\tfont-size: 13px;\n\t\t\t\t\t\t\t\t\tline-height: 19px;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.map {\n\t\t\t\t\t\t\t\tline-height: normal;\n\t\t\t\t\t\t\t\tz-index:200;\n\t\t\t\t\t\t\t\ttext-align:left;\n\t\t\t\t\t\t\t\tbackground-color:@white;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\timg {\n\t\t\t\t\t\t\t\t\tmax-height:none !important;\n\t\t\t\t\t\t\t\t\tmax-width:none !important;\n\t\t\t\t\t\t\t\t\tborder:0;\n\t\t\t\t\t\t\t\t\t.box-shadow(none);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t.google-map {\n\t\t\t\t\t\t\t\t\theight:100%;\n\t\t\t\t\t\t\t\t\twidth:100%;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t.map-attribution {\n\t\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\t\tz-index: 201;\n\t\t\t\t\t\t\t\t\t//right: 0px;\n\t\t\t\t\t\t\t\t\tbottom: 0px;\n\t\t\t\t\t\t\t\t\twidth:100%;\n\t\t\t\t\t\t\t\t\toverflow:hidden;\n\n\t\t\t\t\t\t\t\t\t.attribution-text {\n\t\t\t\t\t\t\t\t\t\theight: 19px;\n\t\t\t\t\t\t\t\t\t\toverflow:hidden;\n\t\t\t\t\t\t\t\t\t\t-webkit-user-select: none;\n\t\t\t\t\t\t\t\t\t\tline-height: 19px;\n\t\t\t\t\t\t\t\t\t\tmargin-right: 60px;\n\t\t\t\t\t\t\t\t\t\tpadding-left: 65px;\n\t\t\t\t\t\t\t\t\t\tfont-family: Arial, sans-serif;\n\t\t\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\t\t\t//font-weight: bold;\n\t\t\t\t\t\t\t\t\t\tcolor: #444;\n\t\t\t\t\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\t\t\t\t\tcolor:@color-base;\n\t\t\t\t\t\t\t\t\t\ttext-shadow:1px 1px 1px @color-dark-second;\n\t\t\t\t\t\t\t\t\t\t//direction: ltr;\n\t\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t\t\ta {\n\t\t\t\t\t\t\t\t\t\t\tcolor:@color-base !important;\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.credit {\n\t\t\t\t\t\t\t\tcolor: @color-credit;\n\t\t\t\t\t\t\t\ttext-align: right;\n\t\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\t\tmargin: 0 auto;\n\t\t\t\t\t\t\t\tmargin-top:6px;\n\t\t\t\t\t\t\t\t.text-font(@base-font-small - 1);\n\t\t\t\t\t\t\t\t//max-height:16px;\n\t\t\t\t\t\t\t\t//overflow:auto;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.caption {\n\t\t\t\t\t\t\t\ttext-align:left;\n\t\t\t\t\t\t\t\tmargin-top:@base-font-small - 1;\n\t\t\t\t\t\t\t\tcolor: @color-caption;\n\t\t\t\t\t\t\t\t.text-font(@base-font-small);\n\t\t\t\t\t\t\t\ttext-rendering: optimizeLegibility;\n\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t//max-height:45px;\n\t\t\t\t\t\t\t\t//overflow-x:hidden;\n\t\t\t\t\t\t\t\t//overflow-y:auto;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.media.text-media {\n\t\t\t\t\t.media-wrapper {\n\t\t\t\t\t\t.media-container {\n\t\t\t\t\t\t\tborder: none;\n\t\t\t\t\t\t\tbackground-color: @white;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.created-at {\n\t\t\t\t\twidth:24px;\n\t\t\t\t\theight:24px;\n\t\t\t\t\toverflow:hidden;\n\t\t\t\t\tmargin-left:@base-space/2;\n\t\t\t\t\tmargin-top:2px;\n\t\t\t\t\tdisplay:inline-block;\n\t\t\t\t\tfloat:right;\n\t\t\t\t\t.opacity(25);\n\t\t\t\t}\n\t\t\t\t.storify {\n\t\t\t\t\t.created-at {\n\t\t\t\t\t\t.icon-storify();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.twitter {\n\t\t\t\t\t.created-at {\n\t\t\t\t\t\t.icon-twitter();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.googleplus {\n\t\t\t\t\t.googleplus-content {\n\t\t\t\t\t\tfont-size: 13px;\n\t\t\t\t\t\tline-height: 19px;\n\t\t\t\t\t\t\n\t\t\t\t\t\tmargin-bottom: 6px;\n\t\t\t\t\t\tpadding-top: 10px;\n\t\t\t\t\t\tbackground-color:@white;\n\t\t\t\t\t\tcolor: @color-feature-description;\n\t\t\t\t\t\tp {\n\t\t\t\t\t\t\tfont-size: 13px;\n\t\t\t\t\t\t\tline-height: 19px;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.googleplus-title {\n\t\t\t\t\t\t\tfont-size: @base-font-large;\n\t\t\t\t\t\t\tline-height: @base-line-large;\n\t\t\t\t\t\t\tmargin-bottom: 6px;\n\t\t\t\t\t\t\tpadding-top: 10px;\n\t\t\t\t\t\t\tbackground-color:@white;\n\t\t\t\t\t\t\tcolor:@color-feature-title;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.googleplus-annotation {\n\t\t\t\t\t\t\tfont-size: @base-font;\n\t\t\t\t\t\t\tline-height: @base-line;\n\t\t\t\t\t\t\tcolor: @color-feature-title;\n\t\t\t\t\t\t\tborder-bottom: 1px solid @color-dark-fifth;\n\t\t\t\t\t\t\tpadding-bottom: @base-space/2;\n\t\t\t\t\t\t\tmargin-bottom: @base-space/2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.googleplus-attachments {\n\t\t\t\t\t\t\tborder-top: 1px solid @color-dark-fifth;\n\t\t\t\t\t\t\tpadding-top: @base-space;\n\t\t\t\t\t\t\tmargin-top: @base-space;\n\t\t\t\t\t\t\tborder-bottom: 1px solid @color-dark-fifth;\n\t\t\t\t\t\t\tpadding-bottom: @base-space;\n\t\t\t\t\t\t\tmargin-bottom: @base-space;\n\t\t\t\t\t\t\t.clearfix();\n\t\t\t\t\t\t\th5 {\n\t\t\t\t\t\t\t\tmargin-bottom:5px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdiv {\n\t\t\t\t\t\t\t\twidth: 50%;\n\t\t\t\t\t\t\t\tpadding-left: @base-space;\n\t\t\t\t\t\t\t\tdisplay:inline-block;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tp {\n\t\t\t\t\t\t\t\t.text-font(@base-font-small);\n\t\t\t\t\t\t\t\tmargin-bottom: 5px;\n\t\t\t\t\t\t\t\t//float:left;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\timg {\n\t\t\t\t\t\t\t\tfloat:left;\n\t\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\t\tbottom: 0;\n\t\t\t\t\t\t\t\tleft: 0;\n\t\t\t\t\t\t\t\tmargin: auto;\n\t\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\t\tright: 0;\n\t\t\t\t\t\t\t\ttop: 0;\n\t\t\t\t\t\t\t\twidth: 40%;\n\t\t\t\t\t\t\t\t//display:inline-block;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t.proflinkPrefix {\n\t\t\t\t\t\tcolor:@color-theme;\n\t\t\t\t\t}\n\t\t\t\t\t.created-at {\n\t\t\t\t\t\t.icon-googleplus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t.twitter, .plain-text-quote, .storify, .googleplus {\n\t\t\t\t\ttext-align:left;\n\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\tmargin-bottom:@base-space;\n\t\t\t\t\tclear:both;\n\t\t\t\t\tblockquote {\n\t\t\t\t\t\t//font-size: @base-font;\n\t\t\t\t\t\t//line-height: @base-line;\n\t\t\t\t\t\tcolor:@color-feature-description;\n\t\t\t\t\t\tp {\n\t\t\t\t\t\t\tfont-size: @base-font-large;\n\t\t\t\t\t\t\tline-height: @base-line-large;\n\t\t\t\t\t\t\tmargin-bottom: 6px;\n\t\t\t\t\t\t\tpadding-top: 10px;\n\t\t\t\t\t\t\tbackground-color:@white;\n\t\t\t\t\t\t\tcolor:@color-feature-title;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.quote-mark {\n\t\t\t\t\t\t\tcolor:@color-dark-third;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t/* Fixes for Twitter's API change\n\t\t\t\t================================================== */\n\t\t\t\t.twitter {\n\t\t\t\t\tblockquote {\n\t\t\t\t\t\tfont-size: @base-font;\n\t\t\t\t\t\tp {\n\t\t\t\t\t\t\tfont-size: @base-font-large;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t/* Text and Media Slides\n\t\t\t================================================== */\n\t\t\t\n\t\t\t.content-container.layout-text-media {\n\t\t\t\t.text-media {\n\t\t\t\t\tborder-top: 1px solid @color-dark-fifth;\n\t\t\t\t\tpadding-top:@base-space;\n\t\t\t\t\tpadding-right:0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t.content-container.layout-text-media.pad-left {\n\t\t\t\t.text-media {\n\t\t\t\t\tpadding-right:@base-space;\n\t\t\t\t\tpadding-top:0;\n\t\t\t\t\tborder-right: 1px solid @color-dark-fifth;\n\t\t\t\t\tborder-top: 0px solid @color-dark-fifth;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Text Only Slides\n\t\t\t================================================== */\n\t\t\t.content-container.layout-text {\n\t\t\t\twidth:100%;\n\t\t\t\t.text {\n\t\t\t\t\twidth:100%;\n\t\t\t\t\tmax-width:100%;\n\t\t\t\t\t.container {\n\t\t\t\t\t\tdisplay:block;\n\t\t\t\t\t\tvertical-align:middle;\n\t\t\t\t\t\ttext-align:left;\n\t\t\t\t\t\tpadding:0px;\n\t\t\t\t\t\twidth: 90%;\n\t\t\t\t\t\ttext-align:left;\n\t\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* Media Only Slides\n\t\t\t================================================== */\n\t\t\t.content-container.layout-media {\n\t\t\t\twidth:100%;\n\t\t\t\t.text {\n\t\t\t\t\twidth:100%;\n\t\t\t\t\theight:100%;\n\t\t\t\t\tmax-width:100%;\n\t\t\t\t\tdisplay:block;\n\t\t\t\t\ttext-align:center;\n\t\t\t\t\t.container {\n\t\t\t\t\t\tdisplay:block;\n\t\t\t\t\t\ttext-align:center;\n\t\t\t\t\t\twidth:100%;\n\t\t\t\t\t\tmargin-left: none;\n\t\t\t\t\t\tmargin-right: none;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.media {\n\t\t\t\t\twidth:100%;\n\t\t\t\t\tmin-width:50%;\n\t\t\t\t\tfloat: none;\n\t\t\t\t\t.media-wrapper {\n\t\t\t\t\t\t//display:block;\n\t\t\t\t\t\t.media-container {\n\t\t\t\t\t\t\tmargin-left: auto;\n\t\t\t\t\t\t\tmargin-right: auto;\n\t\t\t\t\t\t\t//overflow: hidden;\n\t\t\t\t\t\t\tline-height:0px;\n\t\t\t\t\t\t\tpadding:0px;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.twitter, .wikipedia, .googleplus {\n\t\t\t\t\tmax-width:70%;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n"
  },
  {
    "path": "source/less/Core/VMM.Tooltip.less",
    "content": "/*\n * TOOLTIP\n * Styles for tooltip\n * ------------------------------------------------------------------------------------------- */\n\n.timeline-tooltip {\n\tposition: absolute;\n\tz-index: 205;\n\tdisplay: block;\n\tvisibility: visible;\n\tpadding: 5px;\n\t//font-size: 11px;\n\topacity: 0;\n\tfilter: alpha(opacity=0);\n\t\n\tfont-size: @base-font;\n\tfont-weight: bold;\n\tline-height: @base-line;\n\t\n\tfont-size: 12px;\n\tline-height:12px;\n}\n.timeline-tooltip.in {\n\topacity: 0.8;\n\tfilter: alpha(opacity=80);\n}\n.timeline-tooltip.top {\n\tmargin-top: -2px;\n}\n.timeline-tooltip.right {\n\tmargin-left: 2px;\n}\n.timeline-tooltip.bottom {\n\tmargin-top: 2px;\n}\n.timeline-tooltip.left {\n\tmargin-left: -2px;\n}\n.timeline-tooltip.top .timeline-tooltip-arrow {\n\tbottom: 0;\n\tleft: 50%;\n\tmargin-left: -5px;\n\tborder-left: 5px solid transparent;\n\tborder-right: 5px solid transparent;\n\tborder-top: 5px solid #000000;\n}\n.timeline-tooltip.left .timeline-tooltip-arrow {\n\ttop: 50%;\n\tright: 0;\n\tmargin-top: -5px;\n\tborder-top: 5px solid transparent;\n\tborder-bottom: 5px solid transparent;\n\tborder-left: 5px solid #000000;\n}\n.timeline-tooltip.bottom .timeline-tooltip-arrow {\n\ttop: 0;\n\tleft: 50%;\n\tmargin-left: -5px;\n\tborder-left: 5px solid transparent;\n\tborder-right: 5px solid transparent;\n\tborder-bottom: 5px solid #000000;\n}\n.timeline-tooltip.right .timeline-tooltip-arrow {\n\ttop: 50%;\n\tleft: 0;\n\tmargin-top: -5px;\n\tborder-top: 5px solid transparent;\n\tborder-bottom: 5px solid transparent;\n\tborder-right: 5px solid #000000;\n}\n.timeline-tooltip-inner {\n\tmax-width: 200px;\n\tpadding: 3px 8px;\n\tcolor: #ffffff;\n\ttext-align: center;\n\ttext-decoration: none;\n\tbackground-color: #000000;\n\t-webkit-border-radius: 4px;\n\t-moz-border-radius: 4px;\n\tborder-radius: 4px;\n}\n.timeline-tooltip-arrow {\n\tposition: absolute;\n\twidth: 0;\n\theight: 0;\n}\n"
  },
  {
    "path": "source/less/Core/Variables.less",
    "content": "/*\tVARIABLES\n----------------------------------------------------- */\n\n/* COLOR SCHEME\n================================================== */\n@color-theme-dark:\t\t\t\tdarken(@color-theme, 15);\n@color-theme-complement:\t\tspin(@color-theme, 180);\n@color-theme-complement-dark:\tdarken(@color-theme-complement, 15);\n@color-theme-complement-darker:\tdarken(@color-theme-complement, 30);\n\n@color-theme-split1:\t\t\tspin(@color-theme, -158);\n@color-theme-split2:\t\t\tspin(@color-theme, 158);\n\n@color-theme-triad1:\t\t\tspin(@color-theme, -135);\n@color-theme-triad2:\t\t\tspin(@color-theme, 135);\n\n@color-theme-tetrad1:\t\t\tspin(@color-theme, 180);\n@color-theme-tetrad2:\t\t\tspin(@color-theme, 150);\n@color-theme-tetrad3:\t\t\tspin(@color-theme, 30);\n@color-theme-tetrad4:\t\t\tspin(@color-theme, 210);\n@color-theme-tetrad5:\t\t\tspin(@color-theme, -30);\n@color-theme-tetrad6:\t\t\t@color-theme;\n\n@color-theme-tetra1:\t\t\tspin(@color-theme, -90);\n@color-theme-tetra2:\t\t\tspin(@color-theme, 90);\n\n@color-theme-analog1:\t\t\tspin(@color-theme, -22);\n@color-theme-analog2:\t\t\tspin(@color-theme, 22);\n\n@color-background:\t\t\t\t@color-base;\n\n@white:             \t\t\t@color-base;\n\n/* NAVIGATION COLORS\n================================================== */\n@color-nav-date: \t\t\t\t#AAA; // 33%\n@color-nav-description: \t\t@color-dark-fourth; // 40%\n@color-nav-title: \t\t\t\t@color-dark-fourth;\n\n@color-navigation-time: \t\t@color-dark-third; // 60%\n@color-navigation-major-time: \t@color-dark-second; // 80%\n@color-navigation-time-strong: \t@color-dark; // 100%\n\n@era-background: \t\t\t\t#E2E2E2; //#E3E3E3; // 11%\n@era-line:\t\t\t\t\t\t@color-line;\n@era-text:\t\t\t\t\t\t@color-feature-date;\n\n/* FEATURE COLORS\n================================================== */\n@color-feature-date: \t\t\t@color-dark-fourth;\n@color-feature-description: \t@color-dark-third;\n@color-feature-title: \t\t\t@color-dark;\n\n\n@color-caption:\t\t\t\t\t@color-dark-third;\n@color-credit:\t\t\t\t\t@color-dark-fourth;\n\n/* BASE SIZES\n================================================== */\n@base-font-small: \t\t\t\t11px;\n@base-font: \t\t\t\t\t15px;\n@base-font-large:\t\t\t\t24px;\n\n@base-line: \t\t\t\t\t20px;\n@base-line-large: \t\t\t\t32px;\n\n@base-space: \t\t\t\t\t15px;\n@base-thumb: \t\t\t\t\t24px;\n\n\n/* FEATURE SIZES\n================================================== */\n@feature-content-text: \t\t\t200px;\n@feature-content-width: \t\t720px;\n@feature-content-height: \t\t400px;\n@feature-nav-width: \t\t\t100px;\n@feature-nav-height: \t\t\t200px;\n@feature-nav-icon-wh: \t\t\t24px;\n\n/* NAVIGATION SIZES\n================================================== */\n@navigation-height: \t\t\t200px;\n@navigation-time-height: \t\t50px;\n@navigation-content-height: \t@navigation-height - @navigation-time-height;\n@navigation-marker-height:\t\t6px;\n\n"
  },
  {
    "path": "source/less/Theme/Dark.less",
    "content": "/*!\n\tTIMELINE CSS\n\t\n\tDesigned and built by Zach Wise at VeriteCo\n\t\n\tThis Source Code Form is subject to the terms of the Mozilla Public\n\tLicense, v. 2.0. If a copy of the MPL was not distributed with this\n\tfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n\t\n*/\n\n/*\tTHEME DARK\n----------------------------------------------------- */\n\t//GFX\n\t.base-sprite() {\n\t\tbackground-image: url(timeline-dark.png?v3.4);\n\t}\n\t.base-sprite2x() {\n\t\tbackground-image: url(timeline-dark@2x.png?v4.3);\n\t}\n\t.loading-sprite() {\n\t\tbackground-image: url(loading.gif?v3.4);\n\t}\n\t.loading-sprite2x() {\n\t\tbackground-image: url(loading@2x.gif?v3.4);\n\t}\n\t\n\t// COLORS\n\t@color-base:\t\t\t\t\t#1A1A1A;\n\t@color-line: \t\t\t\t\t#333; //#414141;\n\t@color-line-hover: \t\t\t\t#666;\n\t@color-dark:\t\t\t\t\t#FFF;\n\t@color-dark-second: \t\t\t#AAA;\n\t@color-dark-third: \t\t\t\t#AAA;\n\t@color-dark-fourth: \t\t\t#999;\n\t@color-dark-fifth: \t\t\t\t#E3E3E3;\n\t@color-background-dark:\t\t\t#262626;\n\t// COLOR THEME\n\t@color-theme:\t\t\t\t\t#0BD4E3;\n\t\n/*\tBASE\n----------------------------------------------------- */\n\n// CSS CORE\n@import \"../Core/VMM.Core.less\";\n\n// Timeline Specific\n@import \"../VMM.Timeline.TimeNav.less\";\n"
  },
  {
    "path": "source/less/VMM.Timeline.TimeNav.less",
    "content": "/*\n\tNavigation\n\tUI for Navigation\n------------------------------------------------------------------------------------------- */\n\n/* HOVER ELEMENTS\n================================================== */\n.vco-notouch {\n\t.vco-navigation {\n\t\t.vco-toolbar {\n\t\t\t.zoom-in:hover, .zoom-out:hover, .back-home:hover {\n\t\t\t\tcolor: @color-theme;\n\t\t\t\tcursor: pointer;\n\t\t\t\t.opacity(100);\n\t\t\t}\n\t\t}\n\t\t.timenav {\n\t\t\t.content {\n\t\t\t\t.marker.active:hover {\n\t\t\t\t\tcursor: default;\n\t\t\t\t\t.flag, .flag-small {\n\t\t\t\t\t\t.flag-content {\n\t\t\t\t\t\t\th3 {\n\t\t\t\t\t\t\t\tcolor: @color-theme;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\th4 {\n\t\t\t\t\t\t\t\tcolor:@color-nav-title;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.marker:hover {\n\t\t\t\t\t.line {\n\t\t\t\t\t\tz-index:24;\n\t\t\t\t\t\tbackground:@color-nav-title;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.marker {\n\t\t\t\t\t.flag:hover, .flag-small:hover {\n\t\t\t\t\t\tcursor: pointer;\n\t\t\t\t\t\t.flag-content {\n\t\t\t\t\t\t\th3 {\n\t\t\t\t\t\t\t\tcolor:@color-dark-second;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\th4 {\n\t\t\t\t\t\t\t\tcolor:@color-nav-date;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail {\n\t\t\t\t\t\t\t\t.opacity(100);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t.flag:hover {\n\t\t\t\t\t\t.time-flag-active();\n\t\t\t\t\t}\n\t\t\t\t\t.flag-small:hover {\n\t\t\t\t\t\t//.time-flag-small-active();\n\t\t\t\t\t\theight:56px;\n\t\t\t\t\t\t.time-flag-active();\n\t\t\t\t\t\t.flag-content {\n\t\t\t\t\t\t\theight:36px;\n\t\t\t\t\t\t\th3 {\n\t\t\t\t\t\t\t\tmargin-top:5px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t.flag-small.flag-small-last:hover {\n\t\t\t\t\t\t.time-flag-small-active();\n\t\t\t\t\t\theight:26px;\n\t\t\t\t\t\t.flag-content {\n\t\t\t\t\t\t\theight:14px;\n\t\t\t\t\t\t\th3 {\n\t\t\t\t\t\t\t\tmargin-top:4px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t}\n}\n.vco-timeline {\n\t\n\t.vco-navigation {\n\t\tclear:both;\n\t\tcursor:move;\n\t\twidth: 100%;\n\t\theight:@navigation-height;\n\t\tborder-top: 1px solid @color-dark-fifth;\n\t\tposition: relative;\n\t\t.vco-toolbar {\n\t\t\tposition:absolute;\n\t\t\ttop:45px;\n\t\t\tleft:0px;\n\t\t\tz-index:202;\n\t\t\tbackground-color: @color-base; \n\t\t\tborder: 1px solid @color-line;\n\t\t\t.box-shadow(1px 1px 0px rgba(0,0,0,.20));\n\t\t\t.zoom-in, .zoom-out, .back-home {\n\t\t\t\tfont-weight: normal;\n\t\t\t\tfont-size: 10px;\n\t\t\t\tline-height: 20px;\n\t\t\t\ttop: 0px;\n\t\t\t\tz-index:202;\n\t\t\t\twidth: 18px;\n\t\t\t\theight: 18px;\n\t\t\t\tcolor: @color-navigation-major-time;//@color-nav-description;\n\t\t\t\ttext-align:center;\n\t\t\t\tfont-weight: bold;\n\t\t\t\tborder: 1px solid @color-base;\n\t\t\t\tpadding:5px;\n\t\t\t\t.opacity(50);\n\t\t\t}\n\t\t\t.zoom-in {\n\t\t\t\t.icon {\n\t\t\t\t\t.icon-zoom-in();\n\t\t\t\t}\n\t\t\t}\n\t\t\t.zoom-out {\n\t\t\t\t.icon {\n\t\t\t\t\t.icon-zoom-out();\n\t\t\t\t}\n\t\t\t}\n\t\t\t.back-home {\n\t\t\t\t.icon {\n\t\t\t\t\t.icon-back-home();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.vco-toolbar.touch {\n\t\t\t.border-radius(10px);\n\t\t\tbackground-color: transparent;\n\t\t\t.box-shadow(none);\n\t\t\t.zoom-in, .zoom-out, .back-home {\n\t\t\t\t//line-height: 48px;\n\t\t\t\twidth: 40px;\n\t\t\t\theight: 40px;\n\t\t\t\tpadding:5px;\n\t\t\t\tbackground-color: @color-base; \n\t\t\t\tborder: 1px solid @color-line;\n\t\t\t\t.box-shadow(1px 1px 0px rgba(0,0,0,.20));\n\t\t\t\t.border-radius(10px);\n\t\t\t\t.opacity(100);\n\t\t\t\t//.buttonBackground(darken(@color-base, 5%), darken(@color-navigation-major-time, 5%));\n\t\t\t\t//.box-shadow(~\"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)\");\n\t\t\t}\n\n\t\t\t.zoom-in {\n\t\t\t\t.icon {\n\t\t\t\t\t.icon-touch-zoom-in();\n\t\t\t\t}\n\t\t\t}\n\t\t\t.zoom-out {\n\t\t\t\t.icon {\n\t\t\t\t\t.icon-touch-zoom-out();\n\t\t\t\t}\n\t\t\t}\n\t\t\t.back-home {\n\t\t\t\t.icon {\n\t\t\t\t\t.icon-touch-back-home();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t.timenav-background {\n\t\t\tposition:absolute;\n\t\t\tcursor:move;\n\t\t\ttop:0px;\n\t\t\tleft:0px;\n\t\t\theight: @navigation-content-height;\n\t\t\twidth:100%;\n\t\t\tbackground-color:@color-background-dark;\n\t\t\t.timenav-interval-background {\n\t\t\t\tposition:absolute;\n\t\t\t\ttop:@navigation-content-height + 1;\n\t\t\t\tleft:0px;\n\t\t\t\tbackground:@color-base;\n\t\t\t\twidth:100%;\n\t\t\t\theight:@navigation-time-height - 1;\n\t\t\t\t.box-shadow(-1px -1px 7px rgba(0,0,0,.1));\n\t\t\t\t.top-highlight {\n\t\t\t\t\tposition:absolute;\n\t\t\t\t\ttop:-1px;\n\t\t\t\t\tleft:0px;\n\t\t\t\t\tz-index:30;\n\t\t\t\t\twidth:100%;\n\t\t\t\t\theight:1px;\n\t\t\t\t\tbackground:@color-base;\n\t\t\t\t\t.opacity(50);\n\t\t\t\t\t.box-shadow(1px 1px 5px rgba(0,0,0,.20));\n\t\t\t\t}\n\t\t\t}\n\t\t\t.timenav-line {\n\t\t\t\tposition:absolute;\n\t\t\t\ttop: 0px;\n\t\t\t\tleft: 50%;\n\t\t\t\twidth:3px;\n\t\t\t\theight:150px;\n\t\t\t\tbackground-color: @color-theme;\n\t\t\t\t//background-color: @color-background;\n\t\t\t\tz-index:1;\n\t\t\t\t.box-shadow();\n\t\t\t}\n\t\t\t.timenav-indicator {\n\t\t\t\tposition:absolute;\n\t\t\t\ttop: -1px;\n\t\t\t\tleft: 50%;\n\t\t\t\tz-index:202;\n\t\t\t\t.icon-currenttime();\n\t\t\t}\n\t\t\t.timenav-tag {\n\t\t\t\tdiv {\n\t\t\t\t\theight:@navigation-time-height;\n\t\t\t\t\tdisplay:table;\n\t\t\t\t\th3 {\n\t\t\t\t\t\tdisplay:table-cell;\n\t\t\t\t\t\tvertical-align:middle;\n\t\t\t\t\t\tpadding-left:@navigation-time-height + @base-space;\n\t\t\t\t\t\tfont-size:@base-font;\n\t\t\t\t\t\tcolor: darken(@color-background-dark, 10%);\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\ttext-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t.timenav-tag-size-half {\n\t\t\t\theight: @navigation-time-height/2;\n\t\t\t\tdiv {\n\t\t\t\t\theight:@navigation-time-height/2;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.timenav-tag-size-full {\n\t\t\t\theight: @navigation-time-height;\n\t\t\t\tdiv {\n\t\t\t\t\theight:@navigation-time-height;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.timenav-tag-row-2, .timenav-tag-row-4, .timenav-tag-row-6 {\n\t\t\t\tbackground: lighten(@color-background-dark, 3%); \n\t\t\t}\n\t\t\t.timenav-tag-row-1, .timenav-tag-row-3, .timenav-tag-row-5 {\n\t\t\t\tbackground:@color-background-dark;\n\t\t\t}\n\t\t\t\n\t\t}\n\t\t\n\t\t.timenav {\n\t\t\tposition:absolute;\n\t\t\ttop: 0px;\n\t\t\tleft: -250px;\n\t\t\tz-index:1;\n\t\t\t.content {\n\t\t\t\tposition: relative;\n\t\t\t\t.marker.start {\n\t\t\t\t\tdisplay:none;\n\t\t\t\t}\n\t\t\t\t.marker.active {\n\t\t\t\t\t.dot {\n\t\t\t\t\t\tbackground: @color-theme;\n\t\t\t\t\t\tz-index:200;\n\t\t\t\t\t}\n\t\t\t\t\t.line {\n\t\t\t\t\t\tz-index:199;\n\t\t\t\t\t\tbackground: @color-theme;\n\t\t\t\t\t\twidth:1px;\n\t\t\t\t\t\t.event-line {\n\t\t\t\t\t\t\tbackground: @color-theme;\n\t\t\t\t\t\t\t.opacity(75\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t.flag, .flag-small {\n\t\t\t\t\t\tz-index:200;\n\t\t\t\t\t\t.flag-content {\n\t\t\t\t\t\t\theight:36px;\n\t\t\t\t\t\t\th3 {\n\t\t\t\t\t\t\t\tcolor: @color-theme;\n\t\t\t\t\t\t\t\tmargin-top:5px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail {\n\t\t\t\t\t\t\t\t.opacity(100);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t\n\t\t\t\t\t.flag.row1, .flag.row2, .flag.row3, .flag-small.row1, .flag-small.row2, .flag-small.row3 {\n\t\t\t\t\t\tz-index:200;\n\t\t\t\t\t}\n\t\t\t\t\t.flag {\n\t\t\t\t\t\t.time-flag-active();\n\t\t\t\t\t}\n\t\t\t\t\t.flag-small {\n\t\t\t\t\t\t//.time-flag-active();\n\t\t\t\t\t\t//.time-flag-small-active();\n\t\t\t\t\t\t.time-flag-small-active();\n\t\t\t\t\t\theight:26px;\n\t\t\t\t\t\t.flag-content {\n\t\t\t\t\t\t\theight:14px;\n\t\t\t\t\t\t\th3 {\n\t\t\t\t\t\t\t\tmargin-top:4px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.marker {\n\t\t\t\t\tposition:absolute;\n\t\t\t\t\ttop: 0px;\n\t\t\t\t\tleft: 150px;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\t.dot {\n\t\t\t\t\t\tposition:absolute;\n\t\t\t\t\t\ttop: 150px;\n\t\t\t\t\t\tleft: 0px;\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\twidth: @navigation-marker-height;\n\t\t\t\t\t\theight: @navigation-marker-height;\n\t\t\t\t\t\tbackground: @color-dark-second;\n\t\t\t\t\t\t.border-radius((@navigation-marker-height)/2);\n\t\t\t\t\t\tz-index:21;\n\t\t\t\t\t}\n\t\t\t\t\t.line {\n\t\t\t\t\t\tposition:absolute;\n\t\t\t\t\t\ttop: 0px;\n\t\t\t\t\t\tleft: (@navigation-marker-height/2);\n\t\t\t\t\t\twidth:1px;\n\t\t\t\t\t\theight:150px;\n\t\t\t\t\t\tbackground-color: @color-line;\n\t\t\t\t\t\tbackground-color: fade(@color-line, 50%);\n\t\t\t\t\t\t\n\t\t\t\t\t\t.box-shadow(1px 0 0 fade(@color-base, 50%));\n\t\t\t\t\t\t\n\t\t\t\t\t\tz-index:22;\n\t\t\t\t\t\t.event-line {\n\t\t\t\t\t\t\tposition:absolute;\n\t\t\t\t\t\t\tz-index:22;\n\t\t\t\t\t\t\tleft:0px;\n\t\t\t\t\t\t\theight:1px;\n\t\t\t\t\t\t\twidth:1px;\n\t\t\t\t\t\t\tbackground: @color-theme;\n\t\t\t\t\t\t\t.opacity(15);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t.flag, .flag-small {\n\t\t\t\t\t\tposition:absolute;\n\t\t\t\t\t\ttop: 15px;\n\t\t\t\t\t\tleft: (@navigation-marker-height/2);\n\t\t\t\t\t\tpadding:0px;\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\tz-index:23;\n\t\t\t\t\t\twidth:153px;\n\t\t\t\t\t\t.flag-content {\n\t\t\t\t\t\t\tpadding: 0px 7px 2px 6px;\n\t\t\t\t\t\t\toverflow:hidden;\n\t\t\t\t\t\t\th3 {\n\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\tfont-size: @base-font;\n\t\t\t\t\t\t\t\tline-height: @base-line;\n\t\t\t\t\t\t\t\tfont-size: 11px;\n\t\t\t\t\t\t\t\tline-height:11px;\n\t\t\t\t\t\t\t\tcolor:@color-nav-title;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tmargin-bottom:2px;\n\t\t\t\t\t\t\t\tsmall {\n\t\t\t\t\t\t\t\t\tdisplay:none;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\th4 {\n\t\t\t\t\t\t\t\tdisplay:none;\n\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\tfont-size: @base-font;\n\t\t\t\t\t\t\t\tline-height: @base-line;\n\t\t\t\t\t\t\t\tmargin-top:5px;\n\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\tline-height:10px;\n\t\t\t\t\t\t\t\tcolor:@color-nav-date;\n\t\t\t\t\t\t\t\tsmall {\n\t\t\t\t\t\t\t\t\tdisplay:none;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail {\n\t\t\t\t\t\t\t\tmargin-bottom: 15px;\n\t\t\t\t\t\t\t\tmargin-right: 3px;\n\t\t\t\t\t\t\t\t.opacity(50);\n\t\t\t\t\t\t\t\timg {\n\t\t\t\t\t\t\t\t\twidth:@base-thumb - 2;\n\t\t\t\t\t\t\t\t\theight:@base-thumb - 2;\n\t\t\t\t\t\t\t\t\tmax-height:none;\n\t\t\t\t\t\t\t\t\tmax-width:none;\n\t\t\t\t\t\t\t\t\tborder:0;\n\t\t\t\t\t\t\t\t\tborder: 1px solid @color-nav-title;\n\t\t\t\t\t\t\t\t\tpadding:0;\n\t\t\t\t\t\t\t\t\tmargin:0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t.flag {\n\t\t\t\t\t\theight:56px;\n\t\t\t\t\t\t.time-flag();\n\t\t\t\t\t\t.flag-content {\n\t\t\t\t\t\t\theight:36px;\n\t\t\t\t\t\t\th3 {\n\t\t\t\t\t\t\t\tmargin-top:5px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t.flag-small {\n\t\t\t\t\t\theight:26px;\n\t\t\t\t\t\t.time-flag-small();\n\t\t\t\t\t\t.flag-content {\n\t\t\t\t\t\t\theight:14px;\n\t\t\t\t\t\t\th3 {\n\t\t\t\t\t\t\t\tmargin-top:4px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail {\n\t\t\t\t\t\t\t\twidth:16px;\n\t\t\t\t\t\t\t\theight:10px;\n\t\t\t\t\t\t\t\tmargin-right:1px;\n\t\t\t\t\t\t\t\tmargin-top:6px;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-plaintext {\n\t\t\t\t\t\t\t\t.icon-plaintext-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-quote {\n\t\t\t\t\t\t\t\t.icon-quote-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-document {\n\t\t\t\t\t\t\t\t.icon-document-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-photo {\n\t\t\t\t\t\t\t\t.icon-photo-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-twitter {\n\t\t\t\t\t\t\t\t.icon-twitter-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-vimeo {\n\t\t\t\t\t\t\t\t.icon-vimeo-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-vine {\n\t\t\t\t\t\t\t\t.icon-vine-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-youtube {\n\t\t\t\t\t\t\t\t.icon-youtube-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-video {\n\t\t\t\t\t\t\t\t.icon-video-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-audio {\n\t\t\t\t\t\t\t\t.icon-audio-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-map {\n\t\t\t\t\t\t\t\t.icon-mappin-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-website {\n\t\t\t\t\t\t\t\t.icon-website-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-link {\n\t\t\t\t\t\t\t\t.icon-link-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-wikipedia {\n\t\t\t\t\t\t\t\t.icon-wikipedia-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-storify {\n\t\t\t\t\t\t\t\t.icon-storify-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t.thumbnail.thumb-googleplus {\n\t\t\t\t\t\t\t\t.icon-googleplus-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthumbnail.thumb-instagram {\n\t\t\t\t\t\t\t\t.icon-instagram-small();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t.flag.row1 {\n\t\t\t\t\t\tz-index:25;\n\t\t\t\t\t\ttop:48px;\n\t\t\t\t\t}\n\t\t\t\t\t.flag.row2 {\n\t\t\t\t\t\tz-index:24;\n\t\t\t\t\t\ttop:96px;\n\t\t\t\t\t}\n\t\t\t\t\t.flag.row3 {\n\t\t\t\t\t\tz-index:23;\n\t\t\t\t\t\ttop:1px;\n\t\t\t\t\t}\n\t\t\t\t\t.flag-small.row1 {\n\t\t\t\t\t\tz-index:28;\n\t\t\t\t\t\ttop:24px;\n\t\t\t\t\t}\n\t\t\t\t\t.flag-small.row2 {\n\t\t\t\t\t\tz-index:27;\n\t\t\t\t\t\ttop:48px;\n\t\t\t\t\t}\n\t\t\t\t\t.flag-small.row3 {\n\t\t\t\t\t\tz-index:26;\n\t\t\t\t\t\ttop:72px;\n\t\t\t\t\t}\n\t\t\t\t\t.flag-small.row4 {\n\t\t\t\t\t\tz-index:25;\n\t\t\t\t\t\ttop:96px;\n\t\t\t\t\t}\n\t\t\t\t\t.flag-small.row5 {\n\t\t\t\t\t\tz-index:24;\n\t\t\t\t\t\ttop:120px;\n\t\t\t\t\t}\n\t\t\t\t\t.flag-small.row6 {\n\t\t\t\t\t\tz-index:23;\n\t\t\t\t\t\ttop:1px;\n\t\t\t\t\t}\n\t\t\t\t\t.flag.zFront, .flag-small.zFront {\n\t\t\t\t\t\tz-index:201;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\n\t\t\t\t.era {\n\t\t\t\t\tposition:absolute;\n\t\t\t\t\ttop: 138px;\n\t\t\t\t\tleft: 150px;\n\t\t\t\t\theight:12px;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\toverflow:hidden;\n\t\t\t\t\tdiv {\n\t\t\t\t\t\theight:@navigation-time-height;\n\t\t\t\t\t\t//display:table;\n\t\t\t\t\t\twidth:100%;\n\t\t\t\t\t\theight:100%;\n\t\t\t\t\t\t//background: @color-theme;\n\t\t\t\t\t\tline-height:0px;\n\t\t\t\t\t\t//.opacity(10);\n\t\t\t\t\t\t//background-color: fade(@color-theme, 10%);\n\t\t\t\t\t\tbackground: @color-background-dark; // IE8\n\t\t\t\t\t\tbackground: fade(@color-background-dark, 33%);\n\t\t\t\t\t\th3, h4 {\n\t\t\t\t\t\t\t//display:table-cell;\n\t\t\t\t\t\t\t//vertical-align:bottom;\n\t\t\t\t\t\t\t//text-align:center;\n\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\tbottom: 1px;\n\t\t\t\t\t\t\tpadding-left:@base-space;\n\t\t\t\t\t\t\tfont-size:@base-font;\n\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t//text-transform: uppercase;\n\t\t\t\t\t\t\tcolor: fade(@color-theme, 35%);\n\t\t\t\t\t\t\ttext-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.era1 {\n\t\t\t\t\tdiv {\n\t\t\t\t\t\tbackground: @color-theme-tetrad1; // IE8\n\t\t\t\t\t\t.opacity(10);\n\t\t\t\t\t\t//background: fade(@color-theme-tetrad1, 10%);\n\t\t\t\t\t\tborder-left: 1px solid fade(@color-theme-tetrad1, 10%);\n\t\t\t\t\t\tborder-right: 1px solid fade(lighten(@color-theme-tetrad1, 10%), 5%);\n\t\t\t\t\t\th3, h4 {\n\t\t\t\t\t\t\tcolor: fade(@color-theme-tetrad1, 35%);\n\t\t\t\t\t\t\ttext-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.era2 {\n\t\t\t\t\tdiv {\n\t\t\t\t\t\tbackground: @color-theme-tetrad2; // IE8\n\t\t\t\t\t\t.opacity(10);\n\t\t\t\t\t\t//background: fade(@color-theme-tetrad2, 10%);\n\t\t\t\t\t\tborder-left: 1px solid fade(@color-theme-tetrad2, 10%);\n\t\t\t\t\t\tborder-right: 1px solid fade(lighten(@color-theme-tetrad2, 10%), 5%);\n\t\t\t\t\t\th3, h4 {\n\t\t\t\t\t\t\tcolor: fade(@color-theme-tetrad2, 35%);\n\t\t\t\t\t\t\ttext-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.era3 {\n\t\t\t\t\tdiv {\n\t\t\t\t\t\tbackground: @color-theme-tetrad3; // IE8\n\t\t\t\t\t\t.opacity(10);\n\t\t\t\t\t\t//background: fade(@color-theme-tetrad3, 10%);\n\t\t\t\t\t\tborder-left: 1px solid fade(@color-theme-tetrad3, 10%);\n\t\t\t\t\t\tborder-right: 1px solid fade(lighten(@color-theme-tetrad3, 10%), 5%);\n\t\t\t\t\t\th3, h4 {\n\t\t\t\t\t\t\tcolor: fade(@color-theme-tetrad3, 35%);\n\t\t\t\t\t\t\ttext-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.era4 {\n\t\t\t\t\tdiv {\n\t\t\t\t\t\tbackground: @color-theme-tetrad4; // IE8\n\t\t\t\t\t\t.opacity(10);\n\t\t\t\t\t\t//background: fade(@color-theme-tetrad4, 10%);\n\t\t\t\t\t\tborder-left: 1px solid fade(@color-theme-tetrad4, 10%);\n\t\t\t\t\t\tborder-right: 1px solid fade(lighten(@color-theme-tetrad4, 10%), 5%);\n\t\t\t\t\t\th3, h4 {\n\t\t\t\t\t\t\tcolor: fade(@color-theme-tetrad4, 35%);\n\t\t\t\t\t\t\ttext-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.era5 {\n\t\t\t\t\tdiv {\n\t\t\t\t\t\tbackground: @color-theme-tetrad5; // IE8\n\t\t\t\t\t\t.opacity(10);\n\t\t\t\t\t\t//background: fade(@color-theme-tetrad5, 10%);\n\t\t\t\t\t\tborder-left: 1px solid fade(@color-theme-tetrad5, 10%);\n\t\t\t\t\t\tborder-right: 1px solid fade(lighten(@color-theme-tetrad5, 10%), 5%);\n\t\t\t\t\t\th3, h4 {\n\t\t\t\t\t\t\tcolor: fade(@color-theme-tetrad5, 35%);\n\t\t\t\t\t\t\ttext-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.era6 {\n\t\t\t\t\tdiv {\n\t\t\t\t\t\tbackground: @color-theme-tetrad6; // IE8\n\t\t\t\t\t\t.opacity(10);\n\t\t\t\t\t\t//background: fade(@color-theme-tetrad6, 10%);\n\t\t\t\t\t\tborder-left: 1px solid fade(@color-theme-tetrad6, 10%);\n\t\t\t\t\t\tborder-right: 1px solid fade(lighten(@color-theme-tetrad6, 10%), 5%);\n\t\t\t\t\t\th3, h4 {\n\t\t\t\t\t\t\tcolor: fade(@color-theme-tetrad6, 35%);\n\t\t\t\t\t\t\ttext-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t.time {\n\t\t\t\tposition:absolute;\n\t\t\t\tleft:0px;\n\t\t\t\ttop: @navigation-content-height;\n\t\t\t\theight:@navigation-time-height;\n\t\t\t\tbackground-color:@color-background;\n\t\t\t\tline-height: 0px;\n\t\t\t\t.time-interval-minor {\n\t\t\t\t\tmax-width:none;\n\t\t\t\t\theight: @navigation-marker-height;\n\t\t\t\t\t//display:block;\n\t\t\t\t\twhite-space:nowrap;\t\n\t\t\t\t\t//overflow:hidden;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\ttop:-2px;\n\t\t\t\t\tleft:8px;\n\t\t\t\t\tz-index:10;\n\t\t\t\t\t//padding-left:7px;\n\t\t\t\t\t.minor {\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\ttop:2px;\n\t\t\t\t\t\tdisplay:inline-block;\n\t\t\t\t\t\t.background-time-interval();\n\t\t\t\t\t\twidth:100px;\n\t\t\t\t\t\t//width:15px;\n\t\t\t\t\t\theight: @navigation-marker-height;\n\t\t\t\t\t\tbackground-position: center top;\n\t\t\t\t\t\twhite-space:nowrap;\n\t\t\t\t\t\tcolor: @color-navigation-time;\n\t\t\t\t\t\tmargin-top:0px;\n\t\t\t\t\t\tpadding-top:0px;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t.time-interval {\n\t\t\t\t\twhite-space:nowrap;\t\n\t\t\t\t\tposition:absolute;\n\t\t\t\t\ttop: @navigation-marker-height - 1;\n\t\t\t\t\tleft:0px;\t\n\t\t\t\t\t\n\t\t\t\t\tdiv {\n\t\t\t\t\t\t.background-time-interval();\n\t\t\t\t\t\tbackground-position:left top;\n\t\t\t\t\t\tbackground-repeat:no-repeat;\n\t\t\t\t\t\tpadding-top:6px;//@base-space;\n\t\t\t\t\t\tposition:absolute;\n\t\t\t\t\t\theight:3px;//15px;\n\t\t\t\t\t\t//top:-5px;//@base-space;\n\t\t\t\t\t\tleft:0px;\n\t\t\t\t\t\tdisplay:block;\n\t\t\t\t\t\t//width:150px;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\tline-height: @base-line;\n\t\t\t\t\t\t\n\t\t\t\t\t\ttext-transform: uppercase;\n\t\t\t\t\t\ttext-align:left;\n\t\t\t\t\t\ttext-indent: 0px;\n\t\t\t\t\t\twhite-space:nowrap;\n\t\t\t\t\t\tcolor: @color-navigation-time;\n\t\t\t\t\t\tmargin-left:0px;\n\t\t\t\t\t\tmargin-right:0px;\n\t\t\t\t\t\tmargin-top:0px;\n\t\t\t\t\t\tz-index:2;\n\t\t\t\t\t\tstrong {\n\t\t\t\t\t\t\tfont-weight:bold;\n\t\t\t\t\t\t\tcolor:@color-navigation-time-strong;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdiv.era {\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\tpadding-top:0px;\n\t\t\t\t\t\tmargin-top:-3px;\n\t\t\t\t\t\tmargin-left:2px;\n\t\t\t\t\t\tbackground-image: none;\n\t\t\t\t\t}\n\t\t\t\t\t.era1 {\n\t\t\t\t\t\tcolor: @color-theme-tetrad1; // IE8\n\t\t\t\t\t\t.opacity(50);\n\t\t\t\t\t\t//color: fade(@color-theme-tetrad1, 50%);\n\t\t\t\t\t\t//text-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t}\n\t\t\t\t\t.era2 {\n\t\t\t\t\t\tcolor: @color-theme-tetrad2; // IE8\n\t\t\t\t\t\t.opacity(50);\n\t\t\t\t\t\t//color: fade(@color-theme-tetrad2, 50%);\n\t\t\t\t\t\t//text-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t}\n\t\t\t\t\t.era3 {\n\t\t\t\t\t\tcolor: @color-theme-tetrad3; // IE8\n\t\t\t\t\t\t.opacity(50);\n\t\t\t\t\t\t//color: fade(@color-theme-tetrad3, 50%);\n\t\t\t\t\t\t//text-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t}\n\t\t\t\t\t.era4 {\n\t\t\t\t\t\tcolor: @color-theme-tetrad4; // IE8\n\t\t\t\t\t\t.opacity(50);\n\t\t\t\t\t\t//color: fade(@color-theme-tetrad4, 50%);\n\t\t\t\t\t\t//text-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t}\n\t\t\t\t\t.era5 {\n\t\t\t\t\t\tcolor: @color-theme-tetrad5; // IE8\n\t\t\t\t\t\t.opacity(50);\n\t\t\t\t\t\t//color: fade(@color-theme-tetrad5, 50%);\n\t\t\t\t\t\t//text-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t}\n\t\t\t\t\t.era6 {\n\t\t\t\t\t\tcolor: @color-theme-tetrad6; // IE8\n\t\t\t\t\t\t.opacity(50);\n\t\t\t\t\t\t//color: fade(@color-theme-tetrad6, 50%);\n\t\t\t\t\t\t//text-shadow: 0px 1px 1px lighten(@color-background-dark, 30%);\n\t\t\t\t\t}\n\t\t\t\t\t\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t.time-interval-major {\n\t\t\t\t\twhite-space:nowrap;\t\n\t\t\t\t\tposition:absolute;\n\t\t\t\t\ttop: @navigation-marker-height - 1;\n\t\t\t\t\tleft:0px;\t\n\t\t\t\t\t\n\t\t\t\t\tdiv {\n\t\t\t\t\t\t//.background-time-interval();\n\t\t\t\t\t\t.background-time-interval-major();\n\t\t\t\t\t\tbackground-position:left top;\n\t\t\t\t\t\tbackground-repeat:no-repeat;\n\t\t\t\t\t\tpadding-top:@base-space;\n\t\t\t\t\t\tposition:absolute;\n\t\t\t\t\t\theight:@base-space;\n\t\t\t\t\t\t//top:-5px;//@base-space;\n\t\t\t\t\t\tleft:0px;\n\t\t\t\t\t\tdisplay:block;\n\t\t\t\t\t\t//width:150px;\n\n\t\t\t\t\t\t\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\t\tline-height: @base-line;\n\t\t\t\t\t\t\n\t\t\t\t\t\ttext-transform: uppercase;\n\t\t\t\t\t\ttext-align:left;\n\t\t\t\t\t\ttext-indent: 0px;\n\t\t\t\t\t\twhite-space:nowrap;\n\t\t\t\t\t\tcolor: @color-navigation-major-time;\n\t\t\t\t\t\tmargin-left:0px;\n\t\t\t\t\t\tmargin-right:0px;\n\t\t\t\t\t\tmargin-top:1px;\n\t\t\t\t\t\tz-index:5;\n\t\t\t\t\t\tstrong {\n\t\t\t\t\t\t\tfont-weight:bold;\n\t\t\t\t\t\t\tcolor:@color-navigation-time-strong;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\t\t\n\t\t\n\t}\n\t\n}\n\n/* RETINA\n================================================== */\n@media only screen and (-webkit-min-device-pixel-ratio: 2), \nonly screen and (min-device-pixel-ratio: 2) {\n\t.vco-notouch {\n\t\t.vco-navigation {\n\t\t\t.vco-toolbar {\n\t\t\t\t.zoom-in {\n\t\t\t\t\t.icon {\n\t\t\t\t\t\t.icon-zoom-in2x();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.zoom-out {\n\t\t\t\t\t.icon {\n\t\t\t\t\t\t.icon-zoom-out2x();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.back-home {\n\t\t\t\t\t.icon {\n\t\t\t\t\t\t.icon-back-home2x();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.vco-toolbar.touch {\n\t\t\t\t.zoom-in {\n\t\t\t\t\t.icon {\n\t\t\t\t\t\t.icon-touch-zoom-in2x();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.zoom-out {\n\t\t\t\t\t.icon {\n\t\t\t\t\t\t.icon-touch-zoom-out2x();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.back-home {\n\t\t\t\t\t.icon {\n\t\t\t\t\t\t.icon-touch-back-home2x();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.timenav {\n\t\t\t\t.content {\n\t\t\t\t\t.marker {\n\t\t\t\t\t\t.flag:hover {\n\t\t\t\t\t\t\t.time-flag-active2x();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.flag-small:hover {\n\t\t\t\t\t\t\t.time-flag-active2x();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t.flag-small.flag-small-last:hover {\n\t\t\t\t\t\t\t.time-flag-small-active2x();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.timenav-background {\n\t\t\t\t.timenav-indicator {\n\t\t\t\t\t.icon-currenttime2x();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.vco-timeline {\n\t\t.vco-navigation {\n\t\t\t.timenav {\n\t\t\t\t.content {\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "source/less/VMM.Timeline.less",
    "content": "/*!\n\tTIMELINE CSS\n\t\n\tDesigned and built by Zach Wise at VeriteCo\n\t\n\tThis Source Code Form is subject to the terms of the Mozilla Public\n\tLicense, v. 2.0. If a copy of the MPL was not distributed with this\n\tfile, You can obtain one at http://mozilla.org/MPL/2.0/.\n\n*/\n\n/*\tTHEME DEFAULT\n----------------------------------------------------- */\n\t//GFX\n\t.base-sprite() {\n\t\tbackground-image: url(timeline.png?v4.4);\n\t}\n\t.base-sprite2x() {\n\t\tbackground-image: url(timeline@2x.png?v4.4);\n\t\tbackground-size: 352px 260px; \n\t}\n\t.loading-sprite() {\n\t\tbackground-image: url(loading.gif?v3.4);\n\t}\n\t.loading-sprite2x() {\n\t\tbackground-image: url(loading@2x.gif?v3.4);\n\t}\n\t\n\t// COLORS\n\t@color-base:\t\t\t\t\t#FFF;\n\t@color-line: \t\t\t\t\t#CCC;\n\t@color-line-hover: \t\t\t\t#666;\n\t@color-dark:\t\t\t\t\t#000;\n\t@color-dark-second: \t\t\t#333;\n\t@color-dark-third: \t\t\t\t#666;\n\t@color-dark-fourth: \t\t\t#999;\n\t@color-dark-fifth: \t\t\t\t#E3E3E3;\n\t@color-background-dark:\t\t\t#E9E9E9;\n\t\n\t// COLOR THEME\n\t@color-theme:\t\t\t\t\t#08C;\t//#FF3712; //#FF0000;\n\t\n/*\tBASE\n----------------------------------------------------- */\n\n// CSS CORE\n@import \"Core/VMM.Core.less\";\n\n// Timeline Specific\n@import \"VMM.Timeline.TimeNav.less\";\n\n\n/* MEDIA QUERIES\n================================================== */\n\n/* Mobile and iPhone\n================================================== */\n\n/* Non-Retina */\n@media screen and (-webkit-max-device-pixel-ratio: 1) {\n\t\n}\n\n/* Retina */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) {\n\n}\n/* iPhone Portrait\n================================================== */\n@media screen and (max-device-width: 480px) and (orientation:portrait) {\n\t.storyjs-embed.full-embed {\n\t\t/*height:557px;*/\n\t\twidth:100%;\n\t\t.vco-feature {\n\t\t\t/*height:356px;*/\n\t\t}\n\t}\n} \n/* iPhone Landscape\n================================================== */\n@media screen and (max-device-width: 480px) and (orientation:landscape) {\n\t.storyjs-embed.full-embed {\n\t\t/*height:409px !important;*/\n\t\twidth:100%;\n\t\t.vco-feature {\n\t\t\t/*height:208px;*/\n\t\t}\n\t}\n}\n\n/* iPad Portrait */\n@media screen and (min-device-width: 481px) and (orientation:portrait) {\n\t\n}\n\n/* iPad Landscape */\n@media screen and (min-device-width: 481px) and (orientation:landscape) {\n\t\n}\n\n@media (max-width: 480px) {\n\n\t\n}\n\n\n/* Skinny\n================================================== */\n@media only screen and (max-width: 480px) {\n\t.storyjs-embed.full-embed {\n\t\t//max-width: 480px !important;\n\t}\n\t.vco-timeline {\n\t\t//max-width: 480px !important;\n\t\t.vco-slider {\n\t\t\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "tests/test_extra_html.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         debug: true,\n         source: 'test_extra_html.json'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "tests/test_extra_html.json",
    "content": "{\r\n    \"timeline\":\r\n    {\r\n        \"headline\":\"The Amazon effect\",\r\n        \"type\":\"default\",\r\n\t\t\"startDate\":\"2000\",\r\n\t\t\"text\":\"<div style='font-size:16px; font-weight:normal; color:#74736c;'>How Amazon has changed the world of commerce</div><br /><div><img src='_media/smile.png'></div>\",\r\n\t\t\"asset\":\r\n        {\r\n            \"media\":\"\",\r\n            \"credit\":\"\",\r\n            \"caption\":\"\"\r\n        },\r\n        \"date\": [\r\n\t\t{\r\n                \"startDate\":\"2004\",\r\n \t\t    \"headline\":\"How do purchases get from your virtual shopping cart to the doorstep? There are two ways.\",\r\n                \"text\":\"\",\r\n                \"asset\":\r\n                {\r\n                    \"media\":\"https://vine.co/v/b55LOA1dgJU\",\r\n                    \"credit\":\"\",\r\n                    \"caption\":\"\"\r\n                }\r\n                \r\n            },\r\n\r\n\t      {\r\n                \"startDate\":\"2008\",\r\n \t\t    \"headline\":\"Buying a vacuum through <b>Amazon</b>\",\r\n                \"text\":\"\",\r\n                \"asset\":\r\n                {\r\n                    \"media\":\"_media/fulfillment1a.png\",\r\n\t\t\t  \"credit\":\"\",\r\n                    \"caption\":\"The vacuum order is placed, processed and shipped completely by Amazon.\"\r\n                }\r\n            },\r\n\r\n  \t\t{\r\n                \"startDate\":\"2012\",\r\n \t\t    \"headline\":\"Buying a vacuum through an alliance between<br /><b>Amazon and GoVacuum</b>\",\r\n                \"text\":\"\",\r\n                \"asset\":\r\n                {\r\n                    \"media\":\"_media/fulfillment1b.png\",\r\n\t\t\t  \"credit\":\"\",\r\n                    \"caption\":\"The vacuum, originally supplied by GoVacuum, is ordered, processed and shipped by Amazon.\"\r\n                }\r\n            },\r\n\r\n\t      {\r\n                \"startDate\":\"2016\",\r\n \t\t    \"headline\":\"What is the Amazon effect?\",\r\n                \"text\":\"<div style='font-size:20px; line-height:115%; font-weight:normal; color:#74736c;'><div style='font-size:24px; color:#9b164f;'><i>Consumers</i><br/ ></div><div>Amazon and its Marketplace sellers are a one-stop shop for a broad range of merchandise making products easier to find. The best deals are often faster and cheaper than the alternatives.<br/ ><br /><div style='font-size:24px; color:#9b164f;'><i>Amazon</i><br/ ></div><div>By fusing their businesses, both Amazon and independent sellers can attract more customers and improve profit margins. But doing so can create risks for Amazon and third-party sellers.</div>\"\r\n            },\r\n\r\n\t\t{\r\n                \"startDate\":\"2024\",\r\n                \"headline\":\"Amazon.com Fulfillment\",\r\n                \"asset\":\r\n                {\r\n                    \"media\":\"http://interactive.ftdata.co.uk/features/2012-06-01_amazon/pages/receipts.html\"\r\n                }\r\n            }\r\n        ]\r\n    }\r\n}\r\n"
  },
  {
    "path": "tests/test_googlespreadsheet.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         debug: true,\n         source: 'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadFYzRjJPUGktY0NkWXFUWkVIZDNGRHc&amp;output=html'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "tests/test_googlespreadsheet_bc_era_ages_epoch.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         debug: true,\n         source: 'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadHlWbUYwenBTV1hyUGRidU85MnEzQmc&amp;output=html'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "tests/test_googlespreadsheet_biblical_ad.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         debug: true,\n         source: 'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadENlSWZ0Ml9CUXRMVTJGbHZ5UjhDblE&amp;output=html'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "tests/test_googlespreadsheet_minutes.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         debug: true,\n         source: 'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadFBfbkE1Qk42RTFDcjRDdnFndk9DOFE&amp;output=html'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "tests/test_iframe_640.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n    <div style=\"width:640px;\"><iframe src=\"../build/index.html?source=0Agl_Dv6iEbDadHdKcHlHcTB5bzhvbF9iTWwyMmJHdkE&font=Bevan-PotanoSans&maptype=toner&debug=true&lang=en&height=650\" width='100%' height='650' frameborder='0'></iframe></div>\n  </body>\n</html>"
  },
  {
    "path": "tests/test_jsonp.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         debug: true,\n         source: 'example_jsonp.jsonp'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "tests/test_utc_firefox.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Timeline JS Example</title>\n    <meta charset=\"utf-8\">\n    <meta name=\"description\" content=\"TimelineJS example\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <!-- Style-->\n    <style>\n      html, body {\n       height:100%;\n       padding: 0px;\n       margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n      <!-- BEGIN Timeline Embed -->\n      <div id=\"timeline-embed\"></div>\n      <script type=\"text/javascript\">\n        var timeline_config = {\n         width: \"100%\",\n         height: \"100%\",\n         debug: true,\n         source: 'test_utc_firefox.json'\n        }\n      </script>\n      <script type=\"text/javascript\" src=\"../build/js/storyjs-embed.js\"></script>\n      <!-- END Timeline Embed-->\n  </body>\n</html>"
  },
  {
    "path": "tests/test_utc_firefox.json",
    "content": "{\n    \"timeline\": {\n        \"date\": [\n            {\n                \"asset\": {\n                    \"caption\": \"\", \n                    \"media\": \"http://c8226405.myzen.co.uk/wp-content/uploads/2012/09/dummy4.jpg\"\n                }, \n                \"headline\": \"1869\", \n                \"startDate\": \"1869,9,10\", \n\t\t\t\t\"classname\": \"myuniqueclassnamegoeshere\",\n                \"text\": \"<p>Wm. Sugden and Sons Ltd started tailors shop in Cleckheaton</p>\"\n            }, \n            {\n                \"asset\": {\n                    \"caption\": \"\", \n                    \"media\": \"http://c8226405.myzen.co.uk/wp-content/uploads/2012/09/sewingmachine3.jpg\"\n                }, \n                \"headline\": \"1896\", \n                \"startDate\": \"1896,9,10,12,06\", \n                \"text\": \"<p>Starts making shirts in the shop</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1899,9,10\", \n                \"headline\": \"1899\", \n                \"startDate\": \"1899,9,10\", \n                \"text\": \"<p>Shirt business has out grown the shop so moves into a larger factory at Water Lane Mills</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1904,9,10\", \n                \"headline\": \"1904\", \n                \"startDate\": \"1904,9,10\", \n                \"text\": \"<p>Another factory in Barnsley opens</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1911,9,10\", \n                \"headline\": \"1911\", \n                \"startDate\": \"1911,9,10\", \n                \"text\": \"<p>Opens a factory in Wakefield to make workwear and army uniforms</p>\"\n            }, \n            {\n                \"asset\": {\n                    \"caption\": \"\", \n                    \"media\": \"http://c8226405.myzen.co.uk/wp-content/uploads/2012/09/green-shirt3.jpg\"\n                }, \n                \"endDate\": \"1924,9,10\", \n                \"headline\": \"1924\", \n                \"startDate\": \"1924,9,10\", \n                \"text\": \"<p>Moves to a larger factory in Wakefield as product range expands</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1930,9,10\", \n                \"headline\": \"1920-1930\", \n                \"startDate\": \"1920,9,10\", \n                \"text\": \"<p>Acquire two weaving mills in Lancashire and make over five million shirts</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1950,9,10\", \n                \"headline\": \"1950\", \n                \"startDate\": \"1950,9,10\", \n                \"text\": \"<p>Sets up factory in South Yorkshire to manufacture jeans</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1965,9,10\", \n                \"headline\": \"1965\", \n                \"startDate\": \"1965,9,10\", \n                \"text\": \"<p>A bigger factory is needed to accommodate production</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1968,9,10\", \n                \"headline\": \"1968\", \n                \"startDate\": \"1968,9,10\", \n                \"text\": \"<p>Merger with Donner family and Double Two brand</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1990,9,10\", \n                \"headline\": \"1970-1990\", \n                \"startDate\": \"1970,9,10\", \n                \"text\": \"<p>Reputation for quality grows and Topflight brand of workwear is widely sold</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1990,9,10\", \n                \"headline\": \"1990\", \n                \"startDate\": \"1990,9,10\", \n                \"text\": \"<p>Managed Services concept introduced under Threadneedle brand</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"1998,9,10\", \n                \"headline\": \"1998\", \n                \"startDate\": \"1998,9,10\", \n                \"text\": \"<p>John Sugden retires, a new generation of the family takes over</p>\"\n            }, \n            {\n                \"asset\": null, \n                \"endDate\": \"2012,9,10\", \n                \"headline\": \"Present\", \n                \"startDate\": \"2012,9,10\", \n                \"text\": \"<p>Although the business has been reshaped throughout the years, the business still remains a heritage brand and is still an important part of Wakefieldu2019s history</p>\"\n            }\n        ], \n        \"headline\": \"\", \n        \"text\": \"\", \n        \"type\": \"default\"\n    }\n}\n"
  },
  {
    "path": "website/__init__.py",
    "content": ""
  },
  {
    "path": "website/app.py",
    "content": "'''\nMain entrypoint file.  To run:\n\n  $ python serve.py\n\n'''\nfrom flask import Flask\nfrom flask import request\nfrom flask import render_template\nfrom flask import json\nfrom flask import send_from_directory\nimport importlib\nimport traceback\nimport sys\nimport os\n\n#if __name__ == \"__main__\":\n# Add current directory to sys.path\nsite_dir = os.path.dirname(os.path.abspath(__file__))\n         \nif site_dir not in sys.path:\n    sys.path.append(site_dir)\n      \n# Set default FLASK_SETTINGS_MODULE for debug mode\nif not os.environ.get('FLASK_SETTINGS_MODULE', ''):\n    os.environ['FLASK_SETTINGS_MODULE'] = 'core.settings.loc'\n\n# Import settings module for the inject_static_url context processor.\nsettings_module = os.environ.get('FLASK_SETTINGS_MODULE')\n\ntry:\n    importlib.import_module(settings_module)\nexcept ImportError, e:\n    raise ImportError(\n        \"Could not import settings '%s' (Is it on sys.path?): %s\" \\\n        % (settings_module, e))\n\nsettings = sys.modules[settings_module]\n\n\napp = Flask(__name__)\n\nbuild_dir = os.path.join(settings.PROJECT_ROOT, 'build')\nsource_dir = os.path.join(settings.PROJECT_ROOT, 'source')\n\n@app.context_processor\ndef inject_static_url():\n    \"\"\"\n    Inject the variables 'static_url' and 'STATIC_URL' into the templates to\n    avoid hard-coded paths to static files. Grab it from the environment \n    variable STATIC_URL, or use the default. Never has a trailing slash.\n    \"\"\"\n    static_url = settings.STATIC_URL or app.static_url_path\n    if static_url.endswith('/'):\n        static_url = static_url.rstrip('/')\n    return dict(static_url=static_url, STATIC_URL=static_url)\n\n\n@app.route('/build/<path:path>')\ndef catch_build(path):\n    \"\"\"\n    Serve /build/... urls from the build directory\n    \"\"\"\n    return send_from_directory(build_dir, path)    \n\n@app.route('/source/<path:path>')\ndef catch_source(path):\n    \"\"\"\n    Serve /source/... urls from the source directory\n    \"\"\"\n    return send_from_directory(source_dir, path)    \n\n    \n   \n@app.route('/')\n@app.route('/<path:path>')\ndef catch_all(path='index.html', context=None):\n    \"\"\"Catch-all function which serves every URL.\"\"\"\n    context = context or {}\n    if not os.path.splitext(path)[1]:\n        path = os.path.join(path, 'index.html')\n    return render_template(path, **context)\n    \n        \nif __name__ == \"__main__\":\n    import getopt\n    \n    ssl_context = None\n    port = 5000\n    \n    try:\n        opts, args = getopt.getopt(sys.argv[1:], \"sp:\", [\"port=\"])\n        for opt, arg in opts:\n            if opt == '-s':\n                ssl_context = 'adhoc'\n            elif opt in ('-p', '--port'):\n                port = int(arg)\n            else:\n                print 'Usage: app.py [-s]'\n                sys.exit(1)   \n    except getopt.GetoptError:\n        print 'Usage: app.py [-s] [-p port]'\n        sys.exit(1)\n       \n    app.run(host='0.0.0.0', port=5000, debug=True, ssl_context=ssl_context)\n"
  },
  {
    "path": "website/core/__init__.py",
    "content": ""
  },
  {
    "path": "website/core/settings/__init__.py",
    "content": ""
  },
  {
    "path": "website/core/settings/base.py",
    "content": "\"\"\"Common settings and globals.\"\"\"\nimport os\nfrom os.path import abspath, basename, dirname, join, normpath\n\nCORE_ROOT = dirname(dirname(abspath(__file__)))\nPROJECT_ROOT = dirname(dirname(CORE_ROOT))\n"
  },
  {
    "path": "website/core/settings/loc.py",
    "content": "\"\"\"Local settings and globals.\"\"\"\nimport sys\nfrom os.path import normpath, join\nfrom .base import *\n\n# Import secrets -- not needed\n#sys.path.append(\n#    abspath(join(PROJECT_ROOT, '../secrets/TimelineJS/stg'))\n#)\n\n#from secrets import *\n\n# Set static URL\nSTATIC_URL = '/static'"
  },
  {
    "path": "website/static/css/site.css",
    "content": "/* General styles */\n\n/* Layout */\nsection {\n  padding: 20px 0;\n}\nfooter {\n  margin-top: 30px;\n}\n\n/* Navbar */\n.navbar {\n  font-size: 14px;\n}\n\n/* Overview */\n#overview {\n  padding: 40px 0 50px;\n  margin: 0;\n}\n\n  #overview hgroup {\n    text-align: center;\n  }\n  #teaser {\n      display: block;\n      margin: 30px 0 -10px;\n      font-family: sans-serif;\n  }\n  .new {\n      font-style: italic;\n      color: #333;\n      font-weight: bold;\n      margin-right: 3px;\n  }\n\n  #teaser:hover,\n  #teaser:active,\n  #teaser:focus {\n      text-decoration: none;\n      color: #0f9bd1;\n  }\n  #teaser .arrow {\n    border-radius: 20px;\n    background-color: #0f9bd1;\n    color: white;\n    padding: 0px 8px 4px;\n    font-size: 26px;\n    margin-left: 2px;\n    display: inline-block;\n  }\n  #teaser .arrow:before{\n      content: \"»\";\n    display: inline-block;\n  }\n  #body-teaser {\n      color: #333;\n      background: #eee;\n      border-top: solid 1px #d0d0d0;\n      border-bottom: solid 1px #d0d0d0;\n      padding: 30px 60px;\n      margin: 20px 0;\n  }\n  #body-teaser .new { color: #CA5529; }\n/* Timeline */\n#demo {\n  width: 100%;\n  height: 600px;\n}\n\n/* Steps */\n.step {\n    padding-top: 20px;\n    padding-bottom: 40px;\n    margin-bottom: 20px;\n    border-bottom: 4px double #eee;\n}\n.step.last { border: none; }\n\n  \n  .step h2 {\n    margin-top: 0;\n    margin-bottom: 0;\n    color: #ccc;\n    font-size: 100px;\n    line-height: 1em;\n  }\n\n  .step h3 { margin-top: 0; }\n\n.more-options {\n  margin: 20px 0;\n  display: none;\n}\n\n#preview {\n  display: none;\n}\n\n#preview-embed-iframe {\n  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n}\n\n/* Examples */\n#examples h3 { \n  font-size: 16px;\n  line-height: 1.3em;\n}\n\nh2.intro {\n  margin: 20px auto 30px;\n  max-width: 900px;\n  padding: 0 20px;\n  font-size: 36px;\n}\n#examples .row { \n  margin-bottom: 20px;\n}\n\n#examples img {\n  margin-bottom: 10px;\n}\n\n/* Developers */\n#developers .develop {\n  margin-top: 40px;\n  margin-bottom: 40px;\n  text-align: center;\n}\n\n/* Error */\n#error {\n  margin-top: 40px;\n  margin-bottom: 80px;\n  padding-top: 40px;\n  padding-bottom: 40px;\n}\n\n  #error .error {\n    font-size: 36px;\n    line-height: 1.3em;\n    text-align: center;\n    color: red;\n  }\n  \n#mc-embedded-subscribe-form .input-large {\n  width: 260px;\n}  \n\n#font-preview-trigger { margin-left: 10px;}\n"
  },
  {
    "path": "website/static/img/.gitignore",
    "content": ""
  },
  {
    "path": "website/static/js/.gitignore",
    "content": ""
  },
  {
    "path": "website/static/js/main.js",
    "content": "// overcome Timeline's stupid jQuery loading\nvar $blueline = $.noConflict();\n$blueline(document).ready(function() {\n  var $ = $blueline;\n  function navSmartScroll($destination) {\n    var offset = $(\".navbar\").height() || 0,\n        scrollTop = $destination.offset().top - 30;\n    $(\"body,html\").animate({scrollTop: scrollTop}, 350);\n  }\n\n  // Navbar scrollTo\n  $(\".navbar .nav a, [data-scroll='true']\").click(function (e) {\n    var $target = $(this)\n      , href = $target.attr(\"href\")\n      , hash = href.substring(href.lastIndexOf('/') + 1)\n      , $destination = $(hash);\n\n    navSmartScroll($destination);\n\n    return false;\n  });\n\n  // More Options\n  $(\".show-options\").click(function (e) {\n    $(this).hide();\n\n    $(\".more-options\").slideDown();\n\n    return false;\n  });\n \n  $(\"#font-preview-trigger\").popover()\n \n  // Preview\n  $(\"#iframe-preview-button\").click(function () {\n    var $embed = $(\"#preview\");\n\n    $embed.show();\n    $(\"body,html\").animate({scrollTop: $embed.offset().top - 60}, 250);\n  });\n\n\n\n  // Embed Generator\n  updateEmbedCode();\n  $(\"#embed_code\").click(function() { $(this).select(); });\n  $('#embed-width').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-wordpressplugin').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-font').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-height').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-maptype').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-googlemapkey').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-source-url').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-language').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-startatend').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-hashbookmark').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-startatslide').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-startzoomadjust').change(function(evt) { updateEmbedCode(evt); });\n  $('#embed-debug').change(function(evt) { updateEmbedCode(evt); });\n\n  $('.collapse').on('show',function(e) {\n    window.location.hash = \"show-\" + $(this).attr('id');\n  })\n\n  if (window.location.hash.match(/#show-/)) {\n    var $target = $(\"#\" + window.location.hash.substr(6));\n    $target.collapse('show');\n    navSmartScroll($target.prev());\n  }\n});\n"
  },
  {
    "path": "website/static/js/story-timeline.js",
    "content": ""
  },
  {
    "path": "website/static/welcome/welcome.json",
    "content": "\n{ \n\t\"timeline\":\n\t{\n\t\t\"headline\":\"Welcome to TimelineJS\",\n\t\t\"type\":\"default\",\n\t\t\"startDate\":\"1888\",\n\t\t\"text\": \"<p>TimelineJS is an open-source tool that enables you to build visually-rich interactive timelines and is available in 40 languages.</p><p>You're looking at an example of one right now.</p><p>Click on the arrow to the right to learn more.</p>\",\n\t\t\"asset\": {\n\t\t\t\"media\":\"//2.bp.blogspot.com/-dxJbW0CG8Zs/TmkoMA5-cPI/AAAAAAAAAqw/fQpsz9GpFdo/s1600/voyage-dans-la-lune-1902-02-g.jpg\",\n\t\t\t\"credit\":\"\",\n\t\t\t\"caption\":\"\"\n\t\t},\n\t\t\"date\": [\n    \t\t{\n                \"startDate\":\"1851\",\n                \"headline\":\"It's Easy to Make Your Own Timeline\",\n                \"text\":\"The TimelineJS Embed Generator makes it easy to add a timeline to your own site. Just copy our Google Spreadsheet template, add your events as rows in the spreadsheet, and use our <a href='#make'>generator tool</a> to generate the HTML you need to add to your site.\",\n                \"asset\":\n                {\n                    \"media\":\"/static/welcome/step3.png\",\n                    \"credit\":\"\",\n                    \"caption\":\"Screenshot from TimelineJS Embed Generator tool (see below)\"\n                }\n            },\n    \t\t{\n                \"startDate\":\"1871\",\n                \"headline\":\"Illustrate your Timeline with photos, videos, tweets and more.\",\n                \"text\":\"Timeline can automatically pull in photos, videos from YouTube or Vimeo, tweets, wikipedia entries, and many other media types to help tell your story.\",\n                \"asset\":\n                {\n                    \"media\":\"\",\n                    \"credit\":\"\",\n                    \"caption\":\"Screenshot from TimelineJS Embed Generator tool (see below)\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"1899\",\n                \"headline\":\"YouTube video\",\n                \"text\":\"To add a YouTube video, just add a link to it in the media field. No embedding necessary. http://youtu.be/lIvftGgps24\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/lIvftGgps24\",\n                    \"credit\":\"Georges Méliès\",\n                    \"caption\":\"Le portrait mystérieux\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"1902\",\n                \"headline\":\"YouTube with no text\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/7JDaOOw0MEE\",\n                    \"credit\":\"Georges Méliès\",\n                    \"caption\":\"A Trip to the Moon / Le Voyage dans la lune\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"1902\",\n                \"headline\":\"Wikipedia\",\n                \"text\":\"Add a link to a <a href='http://en.wikipedia.org/wiki/A_Trip_to_the_Moon' target='_blank'>Wikipedia entry</a> in the media field to show an excerpt alongside your text.\",\n                \"asset\":\n                {\n                    \"media\":\"http://en.wikipedia.org/wiki/A_Trip_to_the_Moon\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"1950,2,7\",\n                \"headline\":\"Blockquote\",\n                \"text\":\"This is an example of a blockquote. <br/>&lt;blockquote&gt;&ldquo;Just use html blockquotes in the media field.&rdquo;&lt;/blockquote&gt;\",\n                \"asset\":\n                {\n                    \"media\":\"<blockquote>“You have brains in your head. You have feet in your shoes. You can steer yourself in any direction you choose. You're on your own, and you know what you know. And you are the guy who'll decide where to go.”</blockquote>\",\n                    \"credit\":\"Dr. Seuss\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"1960,2,7\",\n                \"headline\":\"Website\",\n                \"text\":\"This is an example of a website. Just paste a link to the site in the media field.\",\n                \"asset\":\n                {\n                    \"media\":\"http://www.w3schools.com/\",\n                    \"credit\":\"w3schools\",\n                    \"caption\":\"http://w3schools.com\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"1979,1,18\",\n                \"headline\":\"Google Map\",\n                \"text\":\"Google Maps are easy too. Just add the link to the map in the media field.\",\n                \"asset\":\n                {\n                    \"media\":\"http://maps.google.com/maps?hl=en&sll=42.05083,-87.674194&sspn=0.020170947570668576,0.036220713642592585&z=15\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n\t\t\t\t\"startDate\":\"1980,1,18\",\n\t\t\t\t\"headline\":\"Google Map with no text\",\n\t\t\t\t\"text\":\"\",\n\t\t\t\t\"asset\":\n                {\n                    \"media\":\"http://maps.google.com/maps?q=chicago&hl=en&sll=41.874961,-87.619054&sspn=0.159263,0.351906&t=t&hnear=Chicago,+Cook,+Illinois&z=11\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"1985,2,7\",\n                \"headline\":\"Flickr\",\n                \"text\":\"To add a Flickr photo, just paste a link to the photo page in the media field. Example: http://www.flickr.com/photos/zachwise/7074630607/\",\n                \"asset\":\n                {\n                    \"media\":\"http://www.flickr.com/photos/zachwise/7074630607/in/photostream/\",\n                    \"credit\":\"Zach Wise\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"1990,2,7\",\n                \"headline\":\"Flickr with no text\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://www.flickr.com/photos/zachwise/7050589957/in/photostream/\",\n                    \"credit\":\"Zach Wise\",\n                    \"caption\":\"March to work.\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2001,2,10\",\n                \"headline\":\"A Tweet\",\n                \"text\":\"To add a tweet, just paste a link to the tweet stats in the media field. Example: http://twitter.com/alykat/status/164184609519697920\",\n                \"asset\":\n                {\n                    \"media\":\"http://twitter.com/alykat/status/164184609519697920\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2002,12,10\",\n                \"headline\":\"Yet Another Tweet\",\n                \"asset\":\n                {\n                    \"media\":\"http://twitter.com/ArjunaSoriano/status/164181156147900416\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,8,23\",\n                \"headline\":\"Vimeo\",\n                \"text\":\"<p>Just add a link to the video in the media field. Example: https://vimeo.com/33211636</p>\",\n                \"asset\":\n                {\n                    \"media\":\"https://vimeo.com/33211636\",\n                    \"credit\":\"Denis Chapon\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,18\",\n                \"headline\":\"SoundCloud \",\n                \"text\":\"Just add a link to the track in the media field.\",\n                \"asset\":\n                {\n                    \"media\":\"http://soundcloud.com/beastieboys/make-some-noise\",\n                    \"credit\":\"\",\n                    \"caption\":\"R.I.P. MCA.\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2013,10,01\",\n                \"headline\":\"Get started!\",\n                \"text\":\"Use the <a href='#make'>generator form</a> to make your first timeline now.\",\n                \"asset\":\n                {\n                    \"media\":\"\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            }\n        ]\n    }\n}"
  },
  {
    "path": "website/templates/_about.html",
    "content": "<section id=\"about\">\n  <h2>About</h2>\n  <div class=\"row\">\n    <!-- Column 1-->\n    <div class=\"span6\">\n      <h4>Document History</h4>\n      <p><span class=\"verite-brand\">Timeline<span class=\"verite-brand-ext\">JS</span></span> can pull in media from different sources. It has built in support for:\n      </p>\n      <p><em>Twitter, Flickr, Google Maps, YouTube, Vimeo, Dailymotion, Wikipedia, SoundCloud and more media types in the future.</em></p>\n      <p>Creating one is as easy as filling in a Google spreadsheet or as detailed as JSON.</p>\n    </div>\n    <div class=\"span6\">\n      <!-- Tips and Tricks-->\n      <h4>Tips and tricks to best utilize <span class=\"verite-brand\">Timeline<span class=\"verite-brand-ext\">JS</span></span>\n      </h4>\n      <ol>\n        <li>Keep it short, and write each event as a part of a larger narrative.</li>\n        <li>Pick stories that have a strong chronological narrative. It does not work well for stories that need to jump around in the timeline.</li>\n        <li>Include events that build up to major occurrences.<em>Not just the major events.</em></li>\n      </ol>\n    </div>\n  </div>\n</section>"
  },
  {
    "path": "website/templates/_demo.html",
    "content": "<!-- Demo -->\n<section id=\"demo\" >\n  <div id=\"timeline-embed\" >\n    <div id=\"timeline\"></div>\n  </div>\n</section>\n\n<script type=\"text/javascript\">\n  var timeline_config = {\n   width: \"100%\",\n   height:  \"100%\",\n   debug: true,\n   source:  'static/welcome/welcome.json',\n   font:  'NewsCycle-Merriweather',\n  };\n</script>\n<!-- build:js https://cdn.knightlab.com/libs/timeline/%(cdn)s/js/storyjs-embed.js -->\n<script type=\"application/javascript\">\n    var embed_path = \"/build/\"\n</script>\n<script type=\"text/javascript\" src=\"/build/js/storyjs-embed.js\"></script>\n<!-- endbuild -->\n"
  },
  {
    "path": "website/templates/_description.html",
    "content": "<!-- Description -->\n<section id=\"description\" class=\"container\">\n  <h2>How it Works</h2>\n  <div class=\"row\">\n    <div class=\"span6\">\n      <p>TimelineJS is an open-source tool that enables anyone to build visually,rich, interactive timelines. Beginners can create a timeline using nothing more than a Google spreadsheet. Experts can use their JSON skills to create custom installations, while keeping TimelineJS's core look and functionality.</p>\n      <h4>Sources</h4>\n      <p>It can pull in media from a variety of sources and has built-in support for Twitter, Flickr, Google Maps, YouTube, Vimeo, Vine, Dailymotion, Wikipedia, SoundCloud and more.</p>\n\n      <h4>Tips &amp; tricks</h4>\n      <ol>\n        <li>Keep it short, and write each event as a part of a larger narrative.</li>\n        <li>Pick stories that have a strong chronological narrative. It does not work well for stories that need to jump around in the timeline.</li>\n        <li>Include events that build up to major occurrences — <em>not just the major events.</em></li>\n      </ol>\n    </div>\n    <div class=\"span6\">\n      <div class=\"well\">\n      <h4>Sign up for updates</h4>\n      <p>Get updates, tips and news by email. No Spam.</p>\n      <!-- MailChimp Signup Form-->\n      <div id=\"mc_embed_signup\">\n        <form id=\"mc-embedded-subscribe-form\" action=\"//northwestern.us2.list-manage.com/subscribe/post?u=ccc3ef81b4c3c762eb7a7d2b4&amp;id=ff5b6c54e5\" method=\"post\" name=\"mc-embedded-subscribe-form\" target=\"_blank\" class=\"validate form-inline\"><span class=\"mc-field-group\">\n            <input id=\"mce-EMAIL\" type=\"email\" value=\"\" name=\"EMAIL\" placeholder=\"Email\" class=\"input-large required email\"></span><span class=\"mc-field-group\">\n          <button id=\"mc-embedded-subscribe\" type=\"submit\" value=\"Subscribe\" name=\"subscribe\" class=\"btn\">Subscribe</button>\n          <div id=\"mce-responses\" class=\"clear\">\n            <div id=\"mce-error-response\" style=\"display: none;\" class=\"response alert alert-error\"></div>\n            <div id=\"mce-success-response\" style=\"display: none;\" class=\"response alert alert-success\"></div>\n          </div>\n          <div class=\"clear\"></div>\n        </form>\n      </div>\n\n      <h4>Stay connected with us on twitter</h4>\n      <p>\n        <iframe allowtransparency=\"true\" frameborder=\"0\" scrolling=\"no\" src=\"//platform.twitter.com/widgets/follow_button.html?screen_name=knightlab&amp;show_count=true\" style=\"width:220px; height:20px;\"></iframe>\n      </p>\n    </div>\n    </div>\n  </div>\n</section>\n"
  },
  {
    "path": "website/templates/_developers.html",
    "content": "<!-- Developers -->\n<section id=\"developers\" class=\"container\">\n  <h2>About the Project</h2>\n  <div class=\"row\">\n    <div class=\"span6\">\n      <p>This project is hosted on <a href=\"https://github.com/NUKnightLab/TimelineJS\" target=\"_blank\">GitHub</a>, the largest code host in the world. We encourage you to contribute to the project and we value your feedback. You can report bugs and discuss features on the <a href=\"https://github.com/NUKnightLab/TimelineJS/issues\" target=\"_blank\">GitHub issues page</a>, or <a href=\"https://knightlab.zendesk.com/anonymous_requests/new\" target=\"_blank\">ask a question</a></p>\n    </div>\n\n    <div class=\"span6\">\n      <p>\n        This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at <a href=\"http://mozilla.org/MPL/2.0/\">http://mozilla.org/MPL/2.0/</a>.\n      </p>\n      <p>\n        Map tiles by <a href=\"http://stamen.com\">Stamen Design</a>, under <a href=\"http://creativecommons.org/licenses/by/3.0\">CC BY 3.0</a>.\n        Data by <a href=\"http://openstreetmap.org\">OpenStreetMap</a>, under <a href=\"http://creativecommons.org/licenses/by-sa/3.0\">CC BY SA</a>.\n      </p>\n    </div>\n  </div>\n</section>\n"
  },
  {
    "path": "website/templates/_examples.html",
    "content": "<section id=\"examples\" class=\"container\">\n  <h2>Examples</h2>\n  <p>Have you made a timeline? <span><a href=\"https://docs.google.com/a/digitalartwork.net/spreadsheet/viewform?formkey=dE5PR01xc2h5cmRySkowLVIzOUVYeUE6MQ#gid=0\" target=\"_blank\">Let us know</a>, and we might feature it here.</span></p>\n\n  <!-- Examples Row 1-->\n  <div class=\"row\">\n\n    <!-- Example-->\n    <div class=\"span3\">\n      <p><a href=\"http://www.lemonde.fr/election-presidentielle-2012/visuel/2012/04/21/chronologie-une-si-longue-campagne-presidentielle_1681661_1471069.html\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_lemonde.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://www.lemonde.fr/election-presidentielle-2012/visuel/2012/04/21/chronologie-une-si-longue-campagne-presidentielle_1681661_1471069.html\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/logos/logo_lemonde.png\" alt=\"Le Monde\"><br/>Chronology of the french presidential race</a></h3>\n    </div>\n\n     <!-- Example-->\n     <div class=\"span3\">\n      <p><a href=\"http://world.time.com/2013/12/05/nelson-mandelas-extraordinary-life-an-interactive-timeline/\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_mandela.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://world.time.com/2013/12/05/nelson-mandelas-extraordinary-life-an-interactive-timeline/\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/logos/logo_time.png\" alt=\"Time\"><br/>Nelson Mandela's Extraordinary Life</a></h3>\n    </div>\n\n    <!-- Example-->\n   <div class=\"span3\">\n      <p> <a href=\"http://www.radiolab.org/blogs/radiolab-blogland/2012/jun/29/color-walk/\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_radiolab-colorwalking.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://www.radiolab.org/blogs/radiolab-blogland/2012/jun/29/color-walk/\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/logos/logo_radiolab.png\" alt=\"Radiolab\"><br/>Color Walking</a></h3>\n    </div>\n\n    <!-- Example-->\n   <div class=\"span3\">\n      <p> <a href=\"http://www.arte.tv/fr/comment-le-progres-nous-aura-t-il-fait-evoluer-en-l-an-42012/6704612,CmC=6704740.html\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_artetv.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://www.arte.tv/fr/comment-le-progres-nous-aura-t-il-fait-evoluer-en-l-an-42012/6704612,CmC=6704740.html\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/logos/logo_arte.png\" alt=\"ARTE.tv\"><br/>Comment le progr&egrave;s nous aura-t-il fait &eacute;voluer en l&#x27;an 42012 ?</a></h3>\n    </div>\n \n  </div>\n\n  <!-- Examples Row 2-->\n  <div class=\"row\">\n      \n    <!-- Example-->\n    <div class=\"span3\">\n      <p> <a href=\"http://www.denverpost.com/breakingnews/ci_21119904\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_denver_shooting.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://www.denverpost.com/breakingnews/ci_21119904\" target=\"_blank\">Denver Post: Aurora, Colorado movie theater shooting</a></h3>\n    </div>\n\n    <!-- Example-->\n    <div class=\"span3\">\n      <p> <a href=\"http://bulger.wbur.org/story/1977/?location=44444\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_bulger.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://bulger.wbur.org/story/1977/?location=44444\" target=\"_blank\">WBUR: Bulger on Trial</a></h3>\n    </div>\n\n   <!-- Example-->\n    <div class=\"span3\">\n      <p> <a href=\"http://www.mysanantonio.com/news/data_central/item/Money-Laundering-8792.php\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_moneylaundering.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://www.mysanantonio.com/news/data_central/item/Money-Laundering-8792.php\" target=\"_blank\">San Antonio Express-News: Money Laundering</a></h3>\n    </div>\n\n   <!-- Example-->\n    <div class=\"span3\">\n      <p> <a href=\"http://america.aljazeera.com/articles/timeline-egypt-inturmoil0.html\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_aljazeera.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://america.aljazeera.com/articles/timeline-egypt-inturmoil0.html\" target=\"_blank\">Al Jazeera: Egypt in Turmoil</a></h3>\n    </div>\n  </div>\n\n  <!-- Examples Row 3-->\n  <div class=\"row\">\n\n  <!-- Example-->\n <div class=\"span3\">\n      <p> <a href=\"http://lafabriquedureel.fr/prometheus.html\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_transmedia.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://lafabriquedureel.fr/prometheus.html\" target=\"_blank\">Marketing transmedia: Prometheus</a></h3>\n    </div>\n\n  <!-- Example-->\n    <div class=\"span3\">\n      <p> <a href=\"http://backtoghana.com/timeline\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_ghana.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://backtoghana.com/timeline\" target=\"_blank\">History of Ghana</a></h3>\n    </div>\n\n    <!-- Example-->\n   <div class=\"span3\">\n      <p> <a href=\"http://bitly.com/IBS1xY\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_akira.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://bitly.com/IBS1xY\" target=\"_blank\">Akira Toriyama's World</a></h3>\n    </div>\n\n   <!-- Example-->\n    <div class=\"span3\">\n      <p> <a href=\"http://tutorialzine.com/2012/04/timeline-portfolio/\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_tutorialzine.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://tutorialzine.com/2012/04/timeline-portfolio/\" target=\"_blank\">Tutorialzine</a></h3>\n    </div>\n\n\n  </div>\n\n  <!-- Examples Row 4-->\n  <div class=\"row\">\n\n    <!-- Example-->\n    <div class=\"span3\">\n      <p> <a href=\"http://media.vol.at/timelines/cain/\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_austrian.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://media.vol.at/timelines/cain/\" target=\"_blank\">Austrian Boy Murdered - www.vol.at</a></h3>\n    </div>\n\n   <!-- Example-->\n     <div class=\"span3\">\n      <p> <a href=\"/examples/houston/\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_houston.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"/examples/houston/\" target=\"_blank\">Whitney Houston 1963 - 2012</a></h3>\n    </div>\n\n    <!-- Example-->\n    <div class=\"span3\">\n      <p> <a href=\"http://www.spokesman.com/timelines/brief-history-hats/\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_hats.jpg\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"http://www.spokesman.com/timelines/brief-history-hats/\" target=\"_blank\">Spokesman-Review: A History of Hats</a></h3>\n    </div>\n\n    <!-- Example-->\n    <div class=\"span3\">\n      <p> <a href=\"/examples/user-interface/\" target=\"_blank\"><img src=\"{{ static_url }}/img/examples/thumbs/thumb_userinterface.png\" class=\"thumbnail\"></a></p>\n      <h3><a href=\"/examples/user-interface/\" target=\"_blank\">Revolutionary User Interfaces</a></h3>\n    </div>\n\n  </div>\n\n  <!-- Examples Row 5-->\n\n    <!-- Example-->\n   \n\n    <!-- Example-->\n   \n\n    <!-- Example-->\n  \n\n    <!-- Example-->\n    \n\n</section>\n"
  },
  {
    "path": "website/templates/_help.html",
    "content": "<section id=\"help\" class=\"container\">\n  <h2>Help</h2>\n  <p>Have a question? Look for it in the FAQ below. No luck there? Try our <a href=\"https://knightlab.zendesk.com/forums/22551396-TimelineJS\" target=\"_blank\">community support forum</a>. You may also find some answers in the old Google group <a href=\"https://groups.google.com/forum/#!forum/verite-timeline\" target=\"_blank\">archive</a>, although it is no longer an active discussion forum. </p>\n  <div class=\"row\">\n    <div class=\"span12\">\n      <div id=\"accordion-faq\" class=\"accordion\">\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-02\" class=\"accordion-toggle collapsed\">What browsers does TimelineJS support?</a></div>\n            <div id=\"faq-02\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\"><p>All modern browsers are supported as well as Internet Explorer 8 and above.</p><p>If you run into problems with IE8, IE9 or IE10 and get a error message saying IE7 is not supported, it may be because you are running the browser in IE7 compatibility mode. Here are <a href=\"http://www.sevenforums.com/tutorials/1196-internet-explorer-compatibility-view-turn-off.html\">directions on how to change the compatibility mode</a>.</p></div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-03\" class=\"accordion-toggle collapsed\">Why is my timeline not displaying or why is it stuck at the parsing data screen?</a></div>\n            <div id=\"faq-03\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">If you&#x27;re using a Google Spreadsheet as your source, make sure your Google spreadsheet is public and published. Also make sure you don&#x27;t have any empty rows in the spreadsheet as this can sometimes cause problems.</div>\n            </div>\n          </div>\n\n<div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-non-flickr-images\" class=\"accordion-toggle collapsed\">Can I use photos that aren’t hosted on Flickr?</a></div>\n            <div id=\"faq-non-flickr-images\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">Yes, but the photos must be publically available online and the URL must end in .jpg, .png, or .gif. Some users have found that uploading images to Dropbox is an easy and convenient way to give them a URL that’s compatible with TimelineJS.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-04\" class=\"accordion-toggle collapsed\">How many entries will work best in TimelineJS?</a></div>\n            <div id=\"faq-04\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">TimelineJS is optimized for 20-30 entries. If you have more entries, you run a risk of slow load times. Test your timeline to make sure you are satisfied. The best remedy for slow load times may be to edit your timeline to include fewer entries or to create a series of smaller timelines. That said, some publications have built  <a href=\"http://blogs.lanacion.com.ar/data/herramientas/todos-los-papas-en-un-timeline-js/\">timelines</a> that have hundreds of entries.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-05\" class=\"accordion-toggle collapsed\">How do I change the height of the timeline?</a></div>\n            <div id=\"faq-05\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">You can change the height using the embed tool above. If you need more control, read the Google Group<a href=\"https://groups.google.com/forum/?fromgroups#!category-topic/verite-timeline/how-to/qSPDO2iJt34%5B1-25%5D\">discussion</a> to learn more.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-06\" class=\"accordion-toggle collapsed\">Can I use audio or video that isn’t on YouTube, SoundCloud, Vimeo, etc?</a></div>\n            <div id=\"faq-06\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\"> Yes. <a href=\"https://groups.google.com/forum/?fromgroups#!category-topic/verite-timeline/how-to/51D-CgbAcg0%5B1-25%5D\">See here.</a></div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-07\" class=\"accordion-toggle collapsed\">Can I change the TimelineJS font?</a></div>\n            <div id=\"faq-07\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">You can change the font using the embed tool above. If you’d like to make modifications that aren’t supported by embed tool you’ll need to dig in to the CSS — <a href=\"https://groups.google.com/forum/?fromgroups#!category-topic/verite-timeline/how-to/EAaBttHnF-g%5B1-25%5D\">here's</a> a discussion that includes a few tips.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-08\" class=\"accordion-toggle collapsed\">How do I hide the bottom timeline?</a></div>\n            <div id=\"faq-08\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">If this is your end goal it may be easier for you to use a slider tool rather than TimelineJS. Here are <a href=\"https://groups.google.com/forum/?fromgroups#!category-topic/verite-timeline/how-to/QyAxN2qLP0Y%5B1-25%5D\">a few</a> <a href=\"https://groups.google.com/forum/?fromgroups#!category-topic/verite-timeline/feature-request/S00FJp9uFds%5B1-25%5D\">ways</a> you can remove the timeline bar.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-09\" class=\"accordion-toggle collapsed\">How do I use TimelineJS with Wordpress?</a></div>\n            <div id=\"faq-09\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\"><p>The TimelineJS  <a href=\"#embed\">iFrame embed method</a> is compatible with WordPress. Some WordPress installs require users who want to paste code in to the HTML view to have an editor or administrator status — if you’re having trouble, make sure that you have sufficient permissions.</p>\n<p>If you don't have the right permissions, try this <a href=\"https://wordpress.org/plugins/knight-lab-timelinejs/\">plugin for Wordpress</a>.</p></div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-10\" class=\"accordion-toggle collapsed\">Why aren&#x27;t there thumbnails on my events?</a></div>\n            <div id=\"faq-10\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">Thumbnails are only shown from Flickr, Youtube, Vimeo etc. That was done for performance reasons. Having a very large image file as a thumbnail really slows down the timeline. Flickr, Youtube etc have actual thumbnail sized images that can be used that don&#x27;t cause performance issues. You can also create your own thumbnails.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-12\" class=\"accordion-toggle collapsed\">Can TimelineJS be set up with time denominators other than calendar dates?</a></div>\n            <div id=\"faq-12\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">Yes. See <a href=\"https://groups.google.com/forum/?hl=en&fromgroups#!category-topic/verite-timeline/hOfQwmzXA30[1-25]\">here for a hacking idea</a>.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-13\" class=\"accordion-toggle collapsed\">Can I change the vertical position of an event in TimelineJS?</a></div>\n            <div id=\"faq-13\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">Yes. See how <a href=\"https://groups.google.com/forum/?fromgroups#!category-topic/verite-timeline/how-to/FB8u56wFAsE\">here</a>.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-14\" class=\"accordion-toggle collapsed\">Why does the timeline not show days, hours, years, etc.?</a></div>\n            <div id=\"faq-14\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">The display of the timeline is dynamic. It chooses a time interval that best matches the number of events there are with the amount of time that is covered.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-what-are-tags\" class=\"accordion-toggle collapsed\">What are tags?</a></div>\n            <div id=\"faq-what-are-tags\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">Tags are essentially categories. You can have up to 6 of them to categorize events on the timeline. The events on the timeline will align with their category row. <em>See the screenshot below</em> <br/><img src=\"{{ static_url }}/img/TimelineJSTags.jpg\"></div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-15\" class=\"accordion-toggle collapsed\">Is it possible to have more than 6 tags?</a></div>\n            <div id=\"faq-15\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">Not at the moment.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-16\" class=\"accordion-toggle collapsed\">Can I change the number of rows on the timeline?</a></div>\n            <div id=\"faq-16\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">The default number of rows is three. If you are using tags and you have more than three tags, the number of rows increases to six.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-17\" class=\"accordion-toggle collapsed\">How can I show only the year or only the month and year for an event in my timeline?</a></div>\n            <div id=\"faq-17\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\"><p>If you’re using the TimelineJS Google spreadsheet template, first make sure the cell you want to modify is set to Plain Text — \"Format > Number > Plain Text.” Then simply enter the year (e.g. 1994) or month and year (e.g. 7/1979). </p>\n<p>Earlier versions of TimelineJS required you to enter a date as January 1 of a given year to do this, but now you should just enter the full year, as explained above.</p></div>\n            </div>\n          </div>\n\n<div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#bc-dates\" class=\"accordion-toggle collapsed\">How do I add B.C. dates?</a></div>\n            <div id=\"bc-dates\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">You can add B.C. dates by using negative years. For example, -100 would be 100 B.C. Be sure to change the formatting of the cell you want to modify to Plain Text — \"Format > Number > Plain Text\".</div>\n            </div>\n          </div>          \n\n<div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-can-i-use-excel\" class=\"accordion-toggle collapsed\">Can I use an Excel spreadsheet instead of Google Spreadsheets?</a></div>\n            <div id=\"faq-can-i-use-excel\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">No. TimelineJS uses Google's API to access the data from the Google Spreadsheet. If you want to start your work in Excel and then copy and paste your data into a Google spreadsheet, that’ll work but the likelihood of errors increases.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-19\" class=\"accordion-toggle collapsed\">Can I use a database as the data source for TimelineJS?</a></div>\n            <div id=\"faq-19\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">Yes. JSON is the best and safest format for feeding information into TimelineJS from a database. Just use your language of choice to create a json file from your database.</div>\n            </div>\n          </div>\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-20\" class=\"accordion-toggle collapsed\">Can my language be added?</a></div>\n            <div id=\"faq-20\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">Yes! Just grab a copy of <a href=\"https://github.com/VeriteCo/StoryJS-Core/blob/master/Language/locale/en.js\">the template</a> and replace the language with the language you want to create. You can find your language&#x27;s <a href=\"http://spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&gid=1\">two letter code</a> here. Save the file and post it to the Google Group or you can do a pull request on GitHub.</div>\n            </div>\n          </div>\n\n          <div class=\"accordion-group\">\n            <div class=\"accordion-heading\"><a data-toggle=\"collapse\" data-parent=\"#accordion-faq\" href=\"#faq-21\" class=\"accordion-toggle collapsed\">How do I include a link in my timeline?</a></div>\n            <div id=\"faq-21\" style=\"height: 0px;\" class=\"accordion-body collapse\">\n              <div class=\"accordion-inner\">You can include a link in the text field using the <a href=\"http://www.w3schools.com/html/html_links.asp\">standard HTML</a> for a hyperlink.</div>\n            </div>\n          </div>\n\n      </div>\n    </div>\n  </div>\n</section>\n"
  },
  {
    "path": "website/templates/_make.html",
    "content": "<!-- Make a Timeline -->\n<section id=\"make\" class=\"container\">\n\n  <div class=\"row\">\n    <div class=\"span12\">\n      <h2>Make a Timeline</h2>\n      <p>TimelineJS works on any site or blog. Make your own in four easy steps. (<a href=\"http://www.youtube.com/watch?v=vAWbm4gF9lU\">video tutorial</a>)</p>\n      <div id=\"body-teaser\">\n        <p><span class=\"new\">New!</span>There's a new version of TimelineJS that is now available for beta testing. TimelineJS 3 is a full rewrite designed to make this popular tool more flexible for authors and developers.</p>\n        <a class=\"btn btn-success\" href=\"https://timeline3.knightlab.com\">Try TimelineJS 3 now »</a>\n      </div>\n  </div>\n\n  <!-- Step 1 -->\n  <div class=\"step row\">\n    <h2 class=\"span1\">1</h2>\n    <div class=\"span11\">\n      <h4>Create your spreadsheet</h4>\n      <p>Build a new Google Spreadsheet using our <a href=\"https://drive.google.com/previewtemplate?id=0AppSVxABhnltdEhzQjQ4MlpOaldjTmZLclQxQWFTOUE&mode=public\" target=\"_blank\" >template</a>. Drop dates, text and links to media into the appropriate columns. <b>Note:</b> Don't change the column headers, don't remove any columns, and don't leave any blank rows in your spreadsheet.</p>\n      <p><a href=\"https://drive.google.com/previewtemplate?id=0AppSVxABhnltdEhzQjQ4MlpOaldjTmZLclQxQWFTOUE&mode=public\" target=\"_blank\" class=\"btn\">Google Spreadsheet Template</a></p>\n    </div>\n  </div>\n\n  <!-- Step 2 -->\n  <div class=\"step row\">\n    <h2 class=\"span1\">2</h2>\n    <div class=\"span11\">\n      <h4>Publish to the web</h4>\n      <div class=\"row\">\n        <div class=\"span5\">\n          <p><img class=\"img-rounded img-polaroid\" src=\"{{ static_url }}/img/make/publish_to_web_small.png\" alt=\"Publish to Web\"></p>\n          <p>Under the File menu, select <em>&ldquo;Publish to the Web.&rdquo;</em></p>\n          <p>In the next window, click the blue \"publish\" button. When asked, \"Are you sure…?\" click OK.</p>\n          <p>Now, copy the URL that appears in the center of the window. You'll use this in the next step.</p>\n        </div>\n        <div class=\"span6\">\n          <p><img class=\"img-rounded img-polaroid\" src=\"{{ static_url }}/img/make/publish_to_web_button_small.png\" alt=\"Publish to Web 2\"></p><p><img class=\"img-rounded img-polaroid\" src=\"{{ static_url }}/img/make/publish_to_web_url_small.png\" alt=\"Publish to Web 3\"></p>\n          \n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- Step 3 -->\n  <form class=\"step row form form-horizontal\">\n    <h2 class=\"span1\">3</h2>\n    <div class=\"span11\">\n      <h4>Copy/paste spreadsheet URL into the generator box below</h4>\n      <div class=\"control-group\">\n        <label class=\"control-label\">Google Spreadsheet URL</label>\n        <div class=\"controls\">\n          <input type=\"text\" id=\"embed-source-url\" class=\"span4\">\n          <p class=\"help-inline\">Make sure you've published it.</p>\n        </div>\n      </div>\n      <!-- Size-->\n      <div class=\"control-group\">\n        <label class=\"control-label\">Size</label>\n        <div class=\"controls\">\n          <div class=\"input-prepend\"><span class=\"add-on\">Width</span>\n            <input type=\"text\" value=\"100%\" placeholder=\"100%\" id=\"embed-width\" class=\"input-mini\">\n          </div>\n          <div class=\"input-prepend\"><span class=\"add-on\">Height</span>\n            <input type=\"text\" value=\"650\" placeholder=\"650\" id=\"embed-height\" class=\"input-mini\">\n          </div>\n        </div>\n      </div>\n\n      <!-- Extra Options -->\n      <p><a class=\"btn show-options\" href=\"#\">More Options <span class=\"caret\"></span></a></p>\n      <div class=\"more-options\">\n        <h4>Customize (Optional)</h4>\n        <!-- Language-->\n          <div class=\"control-group\">\n            <label class=\"control-label\">Language</label>\n            <div class=\"controls\">\n              <select id=\"embed-language\">\n                <option value=\"en\">English</option>\n                <option value=\"en-24hr\">English (24-hour time)</option>\n                <option value=\"af\">Afrikaans</option>\n                <option value=\"ar\">Arabic</option>\n                <option value=\"hy\">Armenian</option>\n                <option value=\"eu\">Basque</option>\n                <option value=\"be\">Belarusian</option>\n                <option value=\"bg\">Bulgarian</option>\n                <option value=\"ca\">Catalan</option>\n                <option value=\"zh-cn\">Chinese</option>\n                <option value=\"hr\">Croatian / Hrvatski</option>\n                <option value=\"cz\">Czech</option>\n                <option value=\"da\">Danish</option>\n                <option value=\"nl\">Dutch</option>\n                <option value=\"eo\">Esperanto</option>\n                <option value=\"et\">Estonian</option>\n                <option value=\"fo\">Faroese</option>\n                <option value=\"fa\">Farsi</option>\n                <option value=\"fi\">Finnish</option>\n                <option value=\"fr\">French</option>\n                <option value=\"fy\">Frisian</option>\n                <option value=\"gl\">Galician</option>\n                <option value=\"ka\">Georgian</option>\n                <option value=\"de\">German / Deutsch</option>\n                <option value=\"el\">Greek</option>\n                <option value=\"he\">Hebrew</option>\n                <option value=\"hi\">Hindi</option>\n                <option value=\"hu\">Hungarian</option>\n                <option value=\"is\">Icelandic</option>\n                <option value=\"id\">Indonesian</option>\n                <option value=\"ga\">Irish</option>\n                <option value=\"it\">Italian</option>\n                <option value=\"ja\">Japanese</option>\n                <option value=\"ko\">Korean</option>\n                <option value=\"lv\">Latvian</option>\n                <option value=\"lt\">Lithuanian</option>\n                <option value=\"lb\">Luxembourgish</option>\n                <option value=\"ms\">Malay</option>\n                <option value=\"ne\">Nepali</option>\n                <option value=\"no\">Norwegian</option>\n                <option value=\"pl\">Polish</option>\n                <option value=\"pt\">Portuguese</option>\n                <option value=\"pt-br\">Portuguese (Brazilian)</option>\n                <option value=\"ro\">Romanian</option>\n                <option value=\"rm\">Romansh</option>\n                <option value=\"ru\">Russian</option>\n                <option value=\"sr-cy\">Serbian - Cyrillic</option>\n                <option value=\"sr\">Serbian - Latin</option>\n                <option value=\"si\">Sinhalese</option>\n                <option value=\"sk\">Slovak</option>\n                <option value=\"sl\">Slovenian</option>\n                <option value=\"es\">Spanish</option>\n                <option value=\"sv\">Swedish</option>\n                <option value=\"tl\">Tagalog</option>\n                <option value=\"ta\">Tamil</option>\n                <option value=\"zh-tw\">Taiwanese</option>\n                <option value=\"te\">Telugu</option>\n                <option value=\"th\">Thai</option>\n                <option value=\"tr\">Turkish</option>\n                <option value=\"uk\">Ukrainian</option>\n              </select>\n            </div>\n          </div>\n          <!-- Map Type-->\n          <div class=\"control-group\">\n            <label class=\"control-label\">Map Type</label>\n            <div class=\"controls\">\n              <select id=\"embed-maptype\">\n                \n                <option value=\"toner\">Stamen Maps: Toner</option>\n                <option value=\"toner-lines\">Stamen Maps: Toner Lines</option>\n                <option value=\"toner-labels\">Stamen Maps: Toner Labels</option>\n                <option value=\"watercolor\">Stamen Maps: Watercolor</option>\n                <option value=\"sterrain\">Stamen Maps: Terrain</option>\n                <option value=\"osm\">OpenStreetMap</option>\n                <option value=\"TERRAIN\">Google Maps: Terrain</option>\n                <option value=\"ROADMAP\">Google Maps: Roadmap</option>\n                <option value=\"HYBRID\">Google Maps: Hybrid</option>\n                <option value=\"SATELLITE\">Google Maps: Satellite</option>\n              </select>\n              <input type=\"text\" placeholder=\"Google Maps API Key\" id=\"embed-googlemapkey\">\n              <p class=\"help-block\">If you are using a Google map type, please enter your <a href=\"https://developers.google.com/places/documentation/#Authentication\" target=\"_blank\">API Key</a>.<!-- <br>\n              Stamen map types are temporarily disabled while we work out a bug. -->\n              </p>\n            </div>\n          </div>\n          <!-- Fonts-->\n          <div class=\"control-group\">\n            <label class=\"control-label\">Fonts</label>\n            <div class=\"controls\">\n              <select id=\"embed-font\">\n                <option value=\"Bevan-PotanoSans\">Bevan & Potano Sans</option>\n                <option value=\"Georgia-Helvetica\">Georgia & Helvetica Neue</option>\n                <option value=\"Merriweather-NewsCycle\">Merriweather & News Cycle</option>\n                <option value=\"NewsCycle-Merriweather\">News Cycle & Merriweather</option>\n                <option value=\"PoiretOne-Molengo\">Poiret One & Molengo</option>\n                <option value=\"Arvo-PTSans\">Arvo & PT Sans</option>\n                <option value=\"PTSerif-PTSans\">PT Serif & PT Sans</option>\n                <option value=\"DroidSerif-DroidSans\">Droid Serif & Droid Sans</option>\n                <option value=\"Lekton-Molengo\">Lekton & Molengo</option>\n                <option value=\"NixieOne-Ledger\">Nixie One & Ledger</option>\n                <option value=\"AbrilFatface-Average\">Abril Fatface & Average</option>\n                <option value=\"PlayfairDisplay-Muli\">Playfair Display & Muli</option>\n                <option value=\"Rancho-Gudea\">Rancho & Gudea</option>\n                <option value=\"BreeSerif-OpenSans\">Bree Serif & Open Sans</option>\n                <option value=\"SansitaOne-Kameron\">Sansita One & Kameron</option>\n                <option value=\"Pacifico-Arimo\">Pacifico & Arimo</option>\n                <option value=\"PT\">PT Sans & PT Narrow & PT Serif</option>\n              </select>\n              <a href=\"#\" onclick=\"return false;\" id=\"font-preview-trigger\" data-toggle=\"popover\" data-placement=\"bottom\" data-html=\"true\" data-content=\"&lt;img src='{{ static_url }}/img/make/font-options.png' alt='Font Option Preview'&gt;\">click to preview font combinations</a>\n          </div>\n          <!-- Wordpress Plugin-->\n          <div class=\"control-group\">\n            <label class=\"control-label\">Misc</label>\n            <div class=\"controls\">\n              <label class=\"checkbox\">\n                <input id=\"embed-wordpressplugin\" type=\"checkbox\" value=\"option1\">Wordpress Plugin<span class=\"help-inline\">Is the embed for the <a href=\"https://github.com/NUKnightLab/TimelineJS-Wordpress-Plugin\" target=\"_blank\">Wordpress Plugin</a>?</span>\n              </label>\n              <!-- Start at End?-->\n              <label class=\"checkbox\">\n                <input id=\"embed-startatend\" type=\"checkbox\" value=\"option1\">Start at the End?<span class=\"help-inline\">The most recent event will be shown first.</span>\n              </label>\n              <!-- Hash Bookmarks-->\n              <label class=\"checkbox\">\n                <input id=\"embed-hashbookmark\" type=\"checkbox\" value=\"option1\">Hash Bookmarks<span class=\"help-inline\">On each slide change, a # will be added to the end of the url in the url bar. These urls are bookmarkable so you can share or return to the same place in the timeline</span>\n              </label>\n              <!-- Debug-->\n              <label class=\"checkbox\">\n                <input id=\"embed-debug\" type=\"checkbox\" value=\"option1\">Debug<span class=\"help-inline\">In debug mode, you will see console logs.</span>\n              </label>\n            </div>\n          </div>\n          <!-- Start Zoom Adjust-->\n          <div class=\"control-group\">\n            <label class=\"control-label\">Adjust the default calculated zoom level</label>\n            <div class=\"controls\">\n              <input id=\"embed-startzoomadjust\" type=\"text\" value=\"0\" placeholder=\"0\" class=\"input-mini\">\n              <p class=\"help-block\">This will tweak the default zoom level. Equivalent to pressing the zoom in or zoom out button the specified number of times. Negative numbers zoom out.</p>\n            </div>\n          </div>\n          <!-- Start at Slide-->\n          <div class=\"control-group\">\n            <label class=\"control-label\">Start at specific slide number?</label>\n            <div class=\"controls\">\n              <div class=\"input-prepend\"><span class=\"add-on\">Slide</span>\n                <input id=\"embed-startatslide\" type=\"text\" value=\"0\" placeholder=\"0\" class=\"input-mini\">\n              </div>\n              <p class=\"help-block\">You can tell TimelineJS to start at a specific slide number</p>\n            </div>\n          </div>\n      </div>\n\n    </div>\n  </form>\n  </div>\n  <!-- Step 4 -->\n  <div class=\"step row last\">\n    <h2 class=\"span1\">4</h2>\n    <div class=\"span11\">\n      <h4>Embed the code into your website</h4>\n      <p>Grab the embed code and paste it on your site where you want your TimelineJS to appear (just like a YouTube video).</p>\n      <textarea readonly=\"readonly\" style=\"width: 100%; height: 160px; min-height: 110px; max-height: 300px; resize: none; font-family: Menlo,Monaco,'Courier New',monospace; font-size: 12px;\" id=\"embed_code\"><iframe src='https://cdn.knightlab.com/libs/timeline/latest/embed/?source=0Agl_Dv6iEbDadHdKcHlHcTB5bzhvbF9iTWwyMmJHdkE&font=Bevan-PotanoSans&maptype=toner&width=600&height=600' width='600' height='600' frameborder='0'></iframe></textarea><br><br>\n      <p><a href=\"#preview-embed\" data-scroll=\"true\" id=\"iframe-preview-button\" class=\"btn btn-primary\">Preview</a> \n      <a href=\"#preview-embed\" data-scroll=\"true\" id=\"preview-embed-link\" target=\"_blank\" class=\"btn\">Link to Preview</a></p>\n    </div>\n  </div>\n\n  <!-- Preview -->\n  <div id=\"preview\" class=\"row\">\n    <div id=\"preview-embed\">\n      <h2>Preview</h2>\n      <div id=\"preview-embed-iframe\" class=\"span12\"></div>\n    </div>\n  </div>\n  \n</section>\n"
  },
  {
    "path": "website/templates/_overview.html",
    "content": "<!-- Overview-->\n<header id=\"overview\" class=\"hero-unit\">\n  <div class=\"row-fluid\">\n    <hgroup class=\"span12\">\n      <h1 class=\"logo-mark xl\">Timeline<span><em>JS</em></span></h1>\n      <h2 class=\"intro\">Beautifully crafted timelines that are easy and intuitive to use.</h2>\n      <a href=\"#make\" class=\"btn btn-large btn-success\" data-scroll=\"true\">Make a timeline now</a>\n      <p><a id=\"teaser\" href=\"http://timeline3.knightlab.com\"><span class=\"new\">New!</span> Try the TimelineJS 3 beta <span class=\"arrow\"></span></a></p>\n    </hgroup>\n  </div>\n</header>\n"
  },
  {
    "path": "website/templates/base.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<!--\n\t88888888888 d8b                        888 d8b                888888   d8888b  \n\t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n\t    888                                888                       888 Y88b\n\t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n\t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n\t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n\t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n\t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n\t                                                                d88P            \n\t                                                              d88P             \n\t                                                            888P              \n -->\n<head>\n    {% block header %}\n    <title>Timeline JS - Beautifully crafted timelines that are easy, and intuitive to use.</title>\n    <meta name=\"description\" content=\"Beautifully crafted timelines that are easy, and intuitive to use.\">\n    {% endblock %}\n\n    <meta charset=\"utf-8\">\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n\t<meta name=\"author\" content=\"Zach Wise\">\n  <!-- \n    meta name=\"viewport\" content=\"initial-scale=1,width=device-width\" \n    someone needs to go through Blueline and fix the small viewport CSS details before we can turn this on.\n  -->\n\t<link rel=\"shortcut icon\" href=\"https://cdn.knightlab.com/libs/blueline/latest/assets/logos/favicon.ico\"> \n    <link href=\"//cloud.webtype.com/css/d4767ecb-457a-4677-8761-72f890add836.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<link rel=\"stylesheet\" href=\"https://cdn.knightlab.com/libs/blueline/latest/css/blueline.min.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"{{ static_url }}/css/site.css\">\n  <!-- Google Analytics: don't mess with this stuff -->\n  <!-- named tracker notes from https://developers.google.com/analytics/devguides/collection/gajs/ -->\n  <!-- multi-domain tracking notes from https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingSite -->\n  <script>\n  var _gaq = _gaq || [];\n  _gaq.push(\n            function() {\n                var pageTracker = _gat._createTracker('UA-27829802-1', 'knightlabTracker');\n             },\n            ['knightlabTracker._setDomainName', 'knightlab.com'] // DON'T CHANGE THIS FOR SUBDOMAINS\n            ['knightlabTracker._setAllowLinker', true], \n            ['knightlabTracker._trackPageview']\n  );\n  (function() {\n    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n  })();\n  </script>\n  <!-- End Google Analytics -->\n</head>\n<body data-spy=\"scroll\" data-target=\".navbar\" data-offset=\"100\">\n\n\t<!-- Nav-->\n\n <div class=\"navbar navbar-fixed-top navbar-inverse\">\n    <div class=\"navbar-inner\">\n      <div class=\"container-fluid\">\n      <a class=\"btn btn-navbar\" data-toggle=\"collapse\" data-target=\".nav-collapse\">\n        <span class=\"icon-bar\"></span>\n        <span class=\"icon-bar\"></span>\n        <span class=\"icon-bar\"></span>\n      </a>\n        <a href=\"#\" class=\"brand\">Timeline JS</a>\n        <div class=\"nav-collapse navbar-responsive-collapse collapse\" style=\"height: 0px;\">\n          <ul class=\"nav\">\n            <li><a href=\"#overview\" data-scroll=\"true\">Overview</a></li>\n            <li><a href=\"#description\" data-scroll=\"true\">Description</a></li>\n            <li><a href=\"#examples\" data-scroll=\"true\">Examples</a></li>\n            <li><a href=\"#help\" data-scroll=\"true\">Help</a></li>\n          </ul>\n          <ul class=\"nav pull-right\">\n            <li class=\"knightlab-tab\"><a data-toggle=\"preheader\" href=\"http://knightlab.northwestern.edu\" title=\"Northwesten University Knight Lab\"><span>Northwestern University Knight Lab</span></a></li>\n            <!--for local testing add: data-target=\"/source/preheader.html\" -->\n          </ul>\n        </div><!-- /.nav-collapse -->\n      </div>\n    </div><!-- /navbar-inner -->\n  </div>\n\t{% block content %}\n\t{% endblock %}\n\t<!-- BEGIN FOOTER -->\n  <footer>\n    <div class=\"clearfix\" id=\"footer\">\n      <div id=\"footer-wrapper\" class=\"row-fluid\">           \n        <div class=\"span4\">\n          <address itemtype=\"http://data-vocabulary.org/Organization\" itemscope=\"\">\n            <span title=\"Knight Lab | Advancing news media innovation through exploration and experimentation.\" class=\"address-name\" itemprop=\"name\">Knight Lab</span>\n            <span itemtype=\"http://data-vocabulary.org/Address\" itemscope=\"\" class=\"address\" itemprop=\"address\">\n              <span class=\"street-address\" itemprop=\"street-address\">1845 Sheridan Road<br>Fisk #109 &amp; #111</span>, \n              <div class=\"address-group\">\n                <span itemprop=\"locality\">Evanston</span>, \n                <span itemprop=\"region\">IL</span>. <span itemprop=\"postal-code\">60208</span><br>\n                <a class=\"map\" target=\"_blank\" href=\"https://maps.google.com/maps?q=1845+Sheridan+Road+Evanston+IL+6020&amp;hl=en&amp;ll=42.050942,-87.673511&amp;spn=0.003059,0.004898&amp;sll=42.050647,-87.674246&amp;sspn=0.012237,0.019591&amp;gl=us&amp;hnear=1845+Sheridan+Rd,+Evanston,+Cook,+Illinois+60201&amp;t=m&amp;z=18&amp;iwloc=A\"><i>+</i> <span>map</span></a>\n                <span class=\"address-country\" itemprop=\"country-name\">United States</span>\n              </div>\n            </span>\n            <span itemtype=\"http://www.data-vocabulary.org/Geo/\" itemscope=\"\" class=\"geo\" itemprop=\"geo\">\n                Latitude: <span itemprop=\"latitude\">42.056893</span>\n                Longitude: <span itemprop=\"longitude\">-87.676735</span>\n            </span>\n            <span class=\"tel\" itemprop=\"tel\">(847) 467-4971</span>\n            <a itemprop=\"url\" href=\"http://knightlab.northwestern.edu\" class=\"url\">Northwestern University Knight Lab | Advancing media innovation through exploration and experimentation.</a> \n          </address>\n          <ul class=\"social\">\n            <li><a target=\"_blank\" title=\"follow @knightlab on twitter\" href=\"http://www.twitter.com/knightlab\"><i class=\"icon-twitter-sign icon-large\"></i></a></li>\n            <li><a target=\"_blank\" title=\"Knight Lab on Facebook\" href=\"https://www.facebook.com/knightlab\"><i class=\"icon-facebook-sign icon-large\"></i></a></li>\n            <li><a title=\"email Knight Lab\" href=\"mailto:Knightlab@northwestern.edu\"><i class=\"icon-sign-blank icon-large iconemail\"></i></a></li>\n            <li><a target=\"_blank\" title=\"Knight Lab on github\" href=\"https://github.com/NUKnightLab/\"><i class=\"icon-github-sign icon-large\"></i></a></li>\n            <li><a target=\"_blank\" title=\"Knight Lab on Tumblr\" href=\"http://knightlab.tumblr.com/\"><i class=\"icon-sign-blank icon-large icontumblr\"></i></a></li>\n          </ul>\n        </div>\n\n        <div class=\"span8\">\n          <ul class=\"logos clearfix\">\n            <li><a title=\"John S. and James L. Knight Foundation\" href=\"http://www.knightfoundation.org/\" class=\"knightfoundation\"><span>John S. and James L. Knight Foundation</span></a></li>\n            <li><a title=\"National Science Foundation\" href=\"http://www.nsf.gov/\" class=\"nsf\"><span>National Science Foundation</span></a></li>\n            <li><a title=\"Robert R. McCormick Foundation\" href=\"http://www.mccormickfoundation.org/\" class=\"mccormickfound\"><span>Robert R. McCormick Foundation</span></a></li>\n            <li><a title=\"Northwestern University\" href=\"http://www.northwestern.edu/\" class=\"northwestern\"><span>Northwestern University</span></a></li>\n            <li><a title=\"McCormick School of Engineering | Northwestern University\" href=\"http://www.mccormick.northwestern.edu/\" class=\"mccormick\"><span>McCormick School of Engineering | Northwestern University</span></a></li>\n            <li><a title=\"Medill School of Journalism | Northwestern University\" href=\"http://www.medill.northwestern.edu\" class=\"medill\"><span>Medill School of Journalism | Northwestern University</span></a></li>\n          </ul>\n          <div class=\"notes\">\n            <p><a target=\"_blank\" href=\"http://www.northwestern.edu/\" title=\"Northwestern University\">Northwestern University</a> Knight Lab is a joint initiative of the <a href=\"http://www.mccormick.northwestern.edu/\">Robert R. McCormick School of Engineering and Applied Science</a> and the<a href=\"http://www.medill.northwestern.edu/\"> Medill School of Journalism, Media, Integrated Marketing Communications</a>.</p>\n            <p>The Lab was launched and is sustained by a grant from the <a href=\"http://www.knightfoundation.org/\">John S. and James L. Knight Foundation</a>, with additional support from the<a href=\"http://www.mccormickfoundation.org/\"> Robert R. McCormick Foundation</a> and the<a href=\"http://www.nsf.gov/\"> National Science Foundation</a>.</p>\n          </div>\n        </div>\n        <div class=\"copyright\">\n          &copy; Copyright 2013 <span title=\"Knight Lab\">Northwestern University</span>\n        </div>\n      </div><!-- end #footer-wrapper -->\n    </div><!-- end #footer -->\n    <div id=\"footer-outer\"></div>\n  </footer>\n  <!-- END FOOTER -->\n\n\t{% block scripts %}\n\t<script src=\"//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js\"></script>\n    <script src=\"https://cdn.knightlab.com/libs/blueline/latest/js/blueline.min.js\"></script>\n\n    <!-- Override -->\n    <script type=\"text/javascript\">\n        var generator_embed_path = \"{{ generator_embed_path }}\";\n    </script>\n    <!-- build:js https://cdn.knightlab.com/libs/timeline/%(cdn)s/js/storyjs-embed-generator.js -->\n    <script type=\"text/javascript\">\n        var generator_embed_path = \"/source/embed/index.html\";\n    </script>\n    <script src=\"/build/js/storyjs-embed-generator.js\"></script>\n    <!-- endbuild -->\n    <script src=\"{{ static_url }}/js/main.js\"></script>\n\t{% endblock %}\n</body>\n</html>\n"
  },
  {
    "path": "website/templates/error.html",
    "content": "{% extends \"base.html\" %}\n{% block content %}\n<script type=\"text/javascript\" charset=\"utf-8\" src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js\"></script>\n\n<script type=\"text/javascript\" charset=\"utf-8\">\n\t$(document).ready(function() {\n\t\t\n\t\t// Add the missing url to the text\n\t\t$(\"#url\").text(window.location.pathname);\n\t\t\n\t\t// Fix the css locations dynamically\n\t\t$(\"head link\").each(function() {\n\t\t\tfor (var i=0; i<window.location.pathname.split(/\\//g).length-2; i++)\n\t\t\t\t$(this).attr(\"href\", \"../\" + $(this).attr(\"href\"));\n\t\t});\n\t\t\n\t})\n</script>\n<section id=\"error\" class=\"background-white\">\n\t<div class=\"container\">\n\t\t<div class=\"row\">\n\t\t\t<p class=\"span12 error\">\n\t\t\t\tSorry the page <b id=\"url\"></b> could not be found on this server.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</section>\n{% endblock %}\n"
  },
  {
    "path": "website/templates/examples/example.json",
    "content": "\n{\n    \"timeline\":\n    {\n        \"headline\":\"Elizabeth Taylor<br/> 1932-2011\",\n\t\t\"startDate\":\"1932\",\n        \"text\":\"<p>The actress,renowned for her beauty, talent and eventful personal life, was one of the last stars left from Hollywood's golden age. A look at some of the milestones in her life.</p><p>This is demo prototype of this timeline tool. The test content orginates from The New York Time's interactive feature <br/><a href='http://www.nytimes.com/interactive/2011/03/23/movies/20110323-ELIZABETH-TAYLOR-TIMELINE.html' onclick = 'void(0)'>Elizabeth Taylor: 1932-2011</a>.</p>\",\n        \"type\":\"default\",\n\t\t\"asset\":\n        {\n            \"media\":\"examples/taylor/born.jpg\",\n            \"credit\":\"\",\n            \"caption\":\"\"\n        },\n\t\t\"date\": [\n            {\n                \"startDate\":\"2011,3,23\",\n                \"headline\":\"Elizabeth Taylor Dies in Los Angeles\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/final.jpg\",\n                    \"credit\":\"\",\n                    \"caption\":\"She died of congestive heart failure at Cedars-Sinai Hospital in Los Angeles.\"\n                },\n                \"tags\":\"Personal life\"\n            },\n            {\n                \"startDate\":\"2004,11,1\",\n                \"headline\":\"Reveals Congestive Heart Failure\",\n                \"text\":\"Ms. Taylor disclosed that she had congestive heart failure,a disorder in which the heart \",\n                \"related\":\"\",\n                \"tags\":\"Personal life\"\n            },\n            {\n                \"startDate\":\"2003,1,1\",\n                \"headline\":\"Retires from Acting\",\n                \"text\":\"Ms. Taylor, whose output steadily decreased beginning in the 1980s, announced her retirement from acting in 2003, saying she preferred to focus on her AIDS charity work.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/retire.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"2002,1,1\",\n                \"headline\":\"Receives Kennedy Center Honor\",\n                \"text\":\"Ms. Taylor received a John F. Kennedy Center Honor in 2002.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/kennedy.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Personal life, Career\"\n            },\n            {\n                \"startDate\":\"1999,12,1\",\n                \"headline\":\"Introducing Dame Elizabeth Taylor\",\n                \"text\":\"Ms. Taylor, a dual citizen of England and the United States, was appointed by Queen Elizabeth II as a Dame Commander of the Order of the British Empire.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/dame.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Personal life, Career\"\n            },\n            {\n                \"startDate\":\"1999,1,1\",\n                \"headline\":\"Named a Top Hollywood Legend by AFI\",\n                \"text\":\"Ms. Taylor was listed seventh on the American Film Institute's list of the greatest American female screen legends.\",\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1991,10,6\",\n                \"headline\":\"Marries Larry Fortensky\",\n\t\t\t\t\"asset\":\n                {\n                    \"media\":\"examples/taylor/fortensky.jpg\",\n                    \"credit\":\"\",\n                    \"caption\":\"Ms. Taylor's eighth and final marriage was to Larry Fortensky\"\n                },\n                \"endDate\":\"1996,10,31\",\n                \"tags\":\"Marriages, Personal life\"\n            },\n            {\n                \"startDate\":\"1987,1,1\",\n                \"headline\":\"Debut of Perfume Line\",\n                \"text\":\"In the 1980s and 1990s, Ms. Taylor arguably became better known for her line of perfumes than her acting. Passion, her first licensed product, was released in 1987. White Diamonds followed in 1991.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/vjVfu8-Wp6s\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1985\",\n                \"headline\":\"AIDS Activism\",\n                \"text\":\"Ms. Taylor has been an energetic activist for AIDS-related causes.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/aids.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"endDate\":\"2011,2,16\",\n                \"tags\":\"Personal life\"\n            },\n            {\n                \"startDate\":\"1981\",\n                \"headline\":\"Makes Broadway Debut\",\n                \"text\":\"Ms. Taylor made her Broadway debut in a revival of \\\"The Little Foxes\\\" by Lillian Hellman.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/broadway.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1976,12,4\",\n                \"headline\":\"Marriage to John W. Warner\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/warner.jpg\",\n                    \"credit\":\"\",\n                    \"caption\":\"Ms. Taylor's seventh marriage\"\n                },\n                \"endDate\":\"1982,11,7\",\n                \"tags\":\"Marriages, Personal life\"\n            },\n            {\n                \"startDate\":\"1975,10,10\",\n                \"headline\":\"Remarries Richard Burton\",\n                \"text\":\"The second installment of the couple's marriage lasted less than 10 months. Ms. Taylor was also linked to Ardeshir Zahedi, the Iranian ambassador to Washington, during this time.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/burton-2.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"endDate\":\"1976,7,29\",\n                \"tags\":\"Marriages, Personal life\"\n            },\n            {\n                \"startDate\":\"1966,1,1\",\n                \"headline\":\"Stars in 'Who's Afraid of Virginia Woolf?'\",\n                \"text\":\"Ms. Taylor won her second Academy Award for arguably her most acclaimed role.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/woolfe.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1964,3,15\",\n                \"headline\":\"Marries Richard Burton\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/burton.jpg\",\n                    \"credit\":\"\",\n                    \"caption\":\"Ms. Taylor left Eddie Fisher and married the actor Richard Burton.\"\n                },\n                \"endDate\":\"1974,6,26\",\n                \"tags\":\"Marriages, Personal life\"\n            },\n            {\n                \"startDate\":\"1963\",\n                \"headline\":\"Stars in 'Cleopatra'\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/NGDyZHlHklo\",\n                    \"credit\":\"\",\n                    \"caption\":\"The opulent production was among the most expensive in cinematic history at the time.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1961,4,17\",\n                \"headline\":\"Wins First Academy Award\",\n                \"text\":\"Ms. Taylor won her first Oscar for her role in \\\"Butterfield 8.\\\"\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/oscar.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1961,1,1\",\n                \"headline\":\"Stars in 'Butterfield 8'\",\n                \"text\":\"One of Ms. Taylor's most acclaimed roles was as a call girl in the 1960 film \\\"Butterfield 8.\\\"\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/butterfield.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"endDate\":\"196002152034\",\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1959,5,12\",\n                \"headline\":\"Marries Eddie Fisher\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/fisher.jpg\",\n                    \"credit\":\"\",\n                    \"caption\":\"Ms. Taylor's fourth marriage.\"\n                },\n                \"endDate\":\"1964,3,6\",\n                \"tags\":\"Marriages\"\n            },\n            {\n                \"startDate\":\"1957\",\n                \"headline\":\"Nominated for an Oscar\",\n                \"text\":\"Ms. Taylor received her first Academy Award nomination with a best lead actress nod for \\\"Raintree County, \\\" but she did not win. She was also nominated for best actress in \\\"Cat on a Hot Tin Roof\\\" (1958); \\\"Suddenly, Last Summer\\\" (1959); \\\"Butterfield 8\\\" (1960); and \\\"Who's Afraid of Virginia Woolf?\\\" (1966).\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/rDk0JtQHc0A\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1957,2,2\",\n                \"headline\":\"Marries Michael Todd\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/todd.jpg\",\n                    \"credit\":\"\",\n                    \"caption\":\"Ms. Taylor married Michael Todd,a film and theater producer.\"\n                },\n                \"endDate\":\"1958,3,22\",\n                \"tags\":\"Marriages, Personal life\"\n            },\n            {\n                \"startDate\":\"1956\",\n                \"headline\":\"Stars in 'Giant'\",\n                \"text\":\"In another acclaimed early performance, Ms. Taylor starred opposite Rock Hudson and James Dean in George Stevens's epic set in Texas.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/giant.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1954\",\n                \"headline\":\"A Ubiquitous Starlet\",\n                \"text\":\"Ms. Taylor's workload increased dramatically after \\\"A Place in the Sun.\\\" In 1954, her busiest year, she appeared in four films: \\\"Beau Brummell\\\"; \\\"Elephant Walk\\\"; \\\"The Last Time I Saw Paris\\\"; and \\\"Rhapsody.\\\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/ebDVU2OjsSw\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1952\",\n                \"headline\":\"Marriage to Michael Wilding\",\n                \"text\":\"Ms. Taylor's second marriage, to Michael Wilding, an actor, also ended in divorce. They had two children: Michael Howard Wilding Jr. and Christopher Edward Wilding.\",\n                \"related\":\"\",\n                \"endDate\":\"1957,1,26\",\n                \"tags\":\"Marriages, Personal life\"\n            },\n            {\n                \"startDate\":\"1951\",\n                \"headline\":\"A Child Star Grows Up\",\n                \"text\":\"In the 1950s Ms. Taylor matured into adult roles and began to be considered one of the most beautiful women in the world. Her first acclaimed screen performance as an adult was as a socialite, opposite Montgomery Clift, in George Stevens's \\\"A Place in the Sun\\\" in 1951.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/sun.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1950,5,6\",\n                \"headline\":\"Marriage to Conrad Hilton Jr.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/hilton.jpg\",\n                    \"credit\":\"\",\n                    \"caption\":\"Ms. Taylor was married eight times to seven men.\"\n                },\n                \"endDate\":\"1951,1,29\",\n                \"tags\":\"Marriages, Personal life\"\n            },\n            {\n                \"startDate\":\"1944\",\n                \"headline\":\"'National Velvet' Makes Her a Star\",\n                \"text\":\"Ms. Taylor became a child star after she played Velvet Brown in MGM's \\\"National Velvet.\",\n                \"asset\":\n                {\n                    \"media\":\"examples/taylor/velvet.jpg\",\n                    \"credit\":\"Robin Weiner\\/Associated Press\",\n                    \"caption\":\"Elizabeth Taylor, with Earvin \\\"Magic\\\" Johnson, at an AIDS fundraiser in 1997.\"\n                },\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1942\",\n                \"headline\":\"Screen Debut\",\n                \"text\":\"Ms. Taylor signed her first movie contract with Universal Pictures in 1941 and made her screen debut, at age 9, the following year in \\\"There's One Born Every Minute.\\\"\\nMs. Taylor signed with Metro-Goldwyn-Mayer later in 1942 after Universal canceled her contract. \\\"Lassie Come Home\\\" (1943) was her first film for MGM; the studio went on to produce most of Ms. Taylor's most notable films.\",\n                \"tags\":\"Career\"\n            },\n            {\n                \"startDate\":\"1932,2,27\",\n                \"headline\":\"Born in London\",\n                \"text\":\"<p>Elizabeth Rosemond Taylor was born in London to American parents, Sara Warmbrodt (the actress Sara Sothern) and Francis Taylor. Ms. Taylor was a dual citizen of England and the United States.\\nIn 1939, when World War II began, the Taylors returned to America and eventually settled in Los Angeles.</p>\",\n                \"tags\":\"Personal life\"\n            }\n        ]\n    }\n}"
  },
  {
    "path": "website/templates/examples/houston/data.json",
    "content": "\n{\n    \"timeline\":  \n  \t{\n        \"headline\":\"Whitney Houston<br/> 1963 - 2012\",\n\t\t\"startDate\":\"1963\",\n        \"text\":\"<p>Houston's voice caught the imagination of the world propelling her to superstardom at an early age becoming one of the most awarded performers of our time. This is a look into the amazing heights she achieved and her personal struggles with substance abuse and a tumultuous marriage.</p>\",\n        \"type\":\"default\",\n\t\t\"asset\":\n        {\n            \"media\":\"http://www.flickr.com/photos/tm_10001/2310475988/\",\n            \"credit\":\"flickr/<a href='http://www.flickr.com/photos/tm_10001/'>tm_10001</a>\",\n            \"caption\":\"Whitney Houston performing on her My Love is Your Love Tour in Hamburg.\"\n        },\n\t\t\"date\": [\n            {\n                \"startDate\":\"1963,8,9\",\n                \"headline\":\"A Musical Heritage\",\n                \"text\":\"<p>Born in New Jersey on August 9th, 1963, Houston grew up surrounded by the music business. Her mother is gospel singer Cissy Houston and her cousins are Dee Dee and Dionne Warwick.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"{{ static_url }}/img/examples/houston/family.jpg\",\n                    \"credit\":\"Cissy Houston photo:<a href='http://www.flickr.com/photos/11447043@N00/418180903/'>Tom Marcello</a><br/><a href='http://commons.wikimedia.org/wiki/File%3ADionne_Warwick_television_special_1969.JPG'>Dionne Warwick: CBS Television via Wikimedia Commons</a>\",\n                    \"caption\":\"Houston's mother and Gospel singer, Cissy Houston (left) and cousin Dionne Warwick.\"\n                }\n            },\n            {\n                \"startDate\":\"1978\",\n                \"headline\":\"First Recording\",\n                \"text\":\"At the age of 15 Houston was featured on Michael Zager's song, Life's a Party.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/fSrO91XO1Ck\",\n                    \"credit\":\"<a href=\\\"http://unidiscmusic.com\\\">Unidisc Music</a>\",\n                    \"caption\":\"\"\n                }\n            },\n             {\n                \"startDate\":\"1978\",\n                \"headline\":\"The Early Years\",\n                \"text\":\"As a teen Houston's credits include background vocals for Jermaine Jackson, Lou Rawls and the Neville Brothers. She also sang on Chaka Khan's, 'I'm Every Woman,' a song which she later remade for the <i>Bodyguard</i> soundtrack which is the bigget selling soundtrack of all time. It sold over 42 million copies worldwide.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/_gvJCCZzmro\",\n                    \"credit\":\"EbonyJet\",\n                    \"caption\":\"A young poised Whitney Houston in an interview with EbonyJet.\"\n                }\n            },\n            {\n                \"startDate\":\"1978\",\n                \"headline\":\"Early Album Credits\",\n                \"text\":\"As a teen Houston's credits include background vocals for Jermaine Jackson, Lou Rawls and the Neville Brothers. She also sang on Chaka Khan's, 'I'm Every Woman,' a song which she later remade for the <i>Bodyguard</i> soundtrack which is the bigget selling soundtrack of all time. It sold over 42 million copies worldwide.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/H7_sqdkaAfo\",\n                    \"credit\":\"Arista Records\",\n                    \"caption\":\"I'm Every Women as performed by Whitney Houston.\"\n                }\n            },\n            {\n                \"startDate\":\"1983\",\n                \"headline\":\"Signed\",\n                \"text\":\"Houston is signed to Arista Records after exec Clive Davis sees her performing on stage with her mother in New York.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/A4jGzNm2yPI\",\n                    \"credit\":\"Sony Music Entertainment\",\n                    \"caption\":\"Whitney Houston and Clive Davis discussing her discovery and her eponymous first album.\"\n                }\n            },\n             {\n                \"startDate\":\"1985\",\n                \"headline\":\"Debut\",\n                \"text\":\"Whitney Houston's self titled first release sold over 12 million copies in the U.S. and included the hit singles 'How Will I Know,' 'You Give Good Love,' 'Saving All My Love For You' and 'Greatest Love of All.'\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/m3-hY-hlhBg\",\n                    \"credit\":\"Arista Records Inc.\",\n                    \"caption\":\"The 'How Will I Know' video showcases the youthful energy that boosted Houston to stardom.\"\n                }\n            },\n            {\n                \"startDate\":\"1986\",\n                \"headline\":\"'The Grammys'\",\n                \"text\":\"In 1986 Houston won her first Grammy for the song Saving All My Love. In total she has won six Grammys, the last of which she won in 1999 for It's Not Right But It's Okay.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/v0XuiMX1XHg\",\n                    \"credit\":\"<a href='http://grammy.org'>The Recording Academy</a>\",\n                    \"caption\":\"Dionne Warwick gleefully announces cousin, Whitney Houston, the winner of the Best Female Pop Vocal Performance for the song Saving All My Love.\"\n                }\n            },\n            {\n                \"startDate\":\"1987\",\n                \"headline\":\"'Whitney'\",\n                \"text\":\"Multiplatinum second album sells more than 20 million copies worldwide. With 'Whitney', Houston became the first female artist to produce four number 1 singles on one album including \\\"I Wanna Dance With Somebody,' 'Didn't We Almost Have It All,' 'So Emotional' and 'Where Do Broken Hearts Go.'\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/eH3giaIzONA\",\n                    \"credit\":\"Arista Records Inc.\",\n                    \"caption\":\"I Wanna Dance With Somebody\"\n                }\n            },\n            {\n                \"startDate\":\"1988\",\n                \"headline\":\"\\\"One Moment In Time\\\"\",\n                \"text\":\"The artist's fame continues to skyrocket as she records the theme song for the Seoul Olympics, 'One Moment In Time.'\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/96aAx0kxVSA\",\n                    \"credit\":\"Arista Records Inc.\",\n                    \"caption\":\"\\\"One Moment In Time\\\" - Theme song to the 1988 Seoul Olympics\"\n                }\n            },\n            {\n                \"startDate\":\"1989\",\n                \"headline\":\"Bobby Brown\",\n                \"text\":\"Houston and Brown first meet at the Soul Train Music Awards. In an interview with Rolling Stone Magazine, Houston admitted that it was not love at first sight. She turned down Brown's first marriage proposal but eventually fell in love with him.\",\n                \"asset\":\n                {\n                    \"media\":\"\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"1991\",\n                \"headline\":\"Super Bowl\",\n                \"text\":\"Houston's national anthem performance captures the hearts and minds of Americans ralllying behind soldiers in the Persian Guf War.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/5Fa09teeaqs\",\n                    \"credit\":\"CNN\",\n                    \"caption\":\"CNN looks back at Houston's iconic performance of the national anthem at Superbowl XXV.\"\n                }\n            },\n            {\n                \"startDate\":\"1992\",\n                \"headline\":\"\\\"The Bodyguard\\\"\",\n                \"text\":\"Houston starred opposite Kevin Costner in the box office hit, The Bodyguard. The soundtrack to the movie sold over 44 million copies worldwide  garnering 3 Grammy's for the artist.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/h9rCobRl-ng\",\n                    \"credit\":\"Arista Records\",\n                    \"caption\":\"\\\"Run To You\\\" from the 1992 \\\"Bodyguard\\\" soundtrack..\"\n                }\n            },\n            {\n                \"startDate\":\"1992\",\n                \"headline\":\"Married Life\",\n                \"text\":\"<p>After three years of courtship, Houston marries New Edition singer Bobby Brown. Their only child Bobbi Kristina Brown was born in 1993.</p><p>In 2003 Brown was charged with domestic violence after police responded to a domestic violence call. Houston and Brown were featured in the reality show, \\\"Being bobby Brown,\\\" and divorced in 2007.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/5cDLZqe735k\",\n                    \"credit\":\"\",\n                    \"caption\":\"Bobby Brown performing \\\"My Prerogrative,\\\" from his \\\"Don't be Cruel\\\" solo album. Bobby Brown first became famous with the R&B group, New Edition.\"\n                }\n            },\n            {\n                \"startDate\":\"2002\",\n                \"headline\":\"Crack is Whack\",\n                \"text\":\"<p>Houston first publicly admitted to drug use in an interview with Diane Sawyer. The singer coined the term \\\"Crack is Whack,\\\" saying that she only used more expensive drugs.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/d/dd/ABC_-_Good_Morning_America_-_Diane_Sawyer.jpg\",\n                    \"credit\":\"flickr/<a href='http://www.flickr.com/photos/23843757@N00/194521206/'>Amanda Benham</a>\",\n                    \"caption\":\"Diane Sawyer \"\n                }\n            },\n            \n            {\n                \"startDate\":\"2004\",\n                \"headline\":\"Rehab\",\n                \"text\":\"<p>Houston entered rehab several times beginning in 2004. She declared herself drug free in an interview with Oprah Winfrey in 2009 but returned to rehab in 2011.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/KLk6mt8FMR0\",\n                    \"credit\":\"CNN\",\n                    \"caption\":\"Addiction expert, Dr. Drew, talks about Whitney's death and her struggle with addiction.\"\n                }\n            },\n            {\n                \"startDate\":\"2005\",\n                \"headline\":\"Being Bobby Brown\",\n                \"text\":\"<p>Being Bobby Brown was a reality show starring Brown and wife Whitney Houston. Houston refused to sign for a second season. A clip of her telling Brown to \\\"Kiss my ass,\\\" became a running gag on The Soup.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"2010\",\n                \"headline\":\"A Rocky Comeback\",\n                \"text\":\"<p>Houston's comeback tour is cut short due to a diminished voice damaged by years of smoking. She was reportedly devastated at her inability to perform like her old self.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"2012,2,11\",\n                \"headline\":\"Whitney Houston<br/> 1963-2012\",\n                \"text\":\"<p>Houston, 48, was discovered dead at the Beverly Hilton Hotel on  on Feb. 11, 2012. She is survived by her daughter, Bobbi Kristina Brown, and mother, Cissy Houston.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/0/0f/Flickr_Whitney_Houston_performing_on_GMA_2009_4.jpg\",\n                    \"credit\":\"<a href='http://commons.wikimedia.org/wiki/File%3AFlickr_Whitney_Houston_performing_on_GMA_2009_4.jpg'>Asterio Tecson</a> via Wikimedia\",\n                    \"caption\":\"Houston, performing on Good Morning America in 2009.\"\n                }\n           \n            }\n        ]\n    }\n}"
  },
  {
    "path": "website/templates/examples/houston/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Whitney Houston, 1963-2012</title>\n    <meta name=\"description\" content=\"Houston&amp;#x27;s voice caught the imagination of the world propelling her to superstardom at an early age becoming one of the most awarded performers of our time.\">\n    <meta charset=\"utf-8\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <!-- Style-->\n    <style>\n      html, body {\n      height:100%;\n      padding: 0px;\n      margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n    <!-- BEGIN Timeline Embed -->\n    <div id=\"timeline-embed\"></div>\n    <script type=\"text/javascript\">\n      var timeline_config = {\n       width: \"100%\",\n       height: \"100%\",\n       source: 'data.json',\n       font:\t'Bevan-PotanoSans'\n      }\n    </script>\n    <!-- build:js https://cdn.knightlab.com/libs/timeline/%(cdn)s/js/storyjs-embed.js -->\n    <script type=\"application/javascript\">\n        var embed_path = \"/build/\"\n    </script>\n    <script type=\"text/javascript\" src=\"/build/js/storyjs-embed.js\"></script>\n    <!-- endbuild -->\n    <!-- END Timeline Embed-->\n    <!-- Analytics-->\n    <script type=\"text/javascript\">\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'UA-537357-19']);\n      _gaq.push(['_trackPageview']);\n      (function() {\n       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n    </script>\n  </body>\n</html>"
  },
  {
    "path": "website/templates/examples/republican/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Republican run-up: the GOP caucuses</title>\n    <meta name=\"description\" content=\"Follow the presidential caucuses and primaries as members of the Republican Party race to become the GOP&amp;#x27;s next presidential nominee.\">\n    <meta charset=\"utf-8\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <!-- Style-->\n    <style>\n      html, body {\n      height:100%;\n      padding: 0px;\n      margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n    <!-- BEGIN Timeline Embed -->\n    <div id=\"timeline-embed\"></div>\n    <script type=\"text/javascript\">\n      var timeline_config = {\n       width: \"100%\",\n       height: \"100%\",\n       source: 'https://docs.google.com/spreadsheet/pub?key=0AkI7kqLi_zZkdGtLemt1VEdFVGZLZWg5M21Qb0V0WUE&amp;output=html',\n       font:\t'PT'\n      }\n    </script>\n    <!-- build:js https://cdn.knightlab.com/libs/timeline/%(cdn)s/js/storyjs-embed.js -->\n    <script type=\"application/javascript\">\n        var embed_path = \"/build/\"\n    </script>\n    <script type=\"text/javascript\" src=\"/build/js/storyjs-embed.js\"></script>\n    <!-- endbuild -->\n    <!-- END Timeline Embed-->\n    <!-- Analytics-->\n    <script type=\"text/javascript\">\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'UA-537357-19']);\n      _gaq.push(['_trackPageview']);\n      (function() {\n       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n    </script>\n  </body>\n</html>"
  },
  {
    "path": "website/templates/examples/shit-people-say/data.json",
    "content": "{\n    \"timeline\":\n    {\n        \"headline\":\"Sh*t People Say\",\n        \"type\":\"default\",\n\t\t\"text\":\"When &quot;Shit Girls Say&quot; was uploaded to YouTube it was picked up by Reddit, the Huffington Post, Mashable etc. In a month, it racked up over 12 million views and has spawned a meme of Sh*t People Say.\",\n\t\t\"startDate\":\"2011,12,12\",\n        \"asset\":\n        {\n            \"media\":\"http://youtu.be/u-yLGIH7W9Y\",\n            \"credit\":\"\",\n            \"caption\":\"Writers & Creators: Kyle Humphrey & Graydon Sheppard\"\n\t\t},\n        \"date\": [\n            {\n                \"startDate\":\"2012,1,26\",\n                \"headline\":\"Sh*t Politicians Say\",\n                \"text\":\"<p>Sh*t Politicians Say landed just hours before Thursday night’s Republican presidential debate and stars actor Joe Leon. In true political fashion, his character rattles off common jargon heard from people running for office.</p><p>Do these ring a bell? Moral fiber, family values, trust me, three-point plan, earmarks, tough question, children are our future, Washington outsider, jobs, my opponent — all sound familiar.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/u4XpeU9erbg\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"2012,1,10\",\n                \"headline\":\"Sh*t Nobody Says\",\n                \"text\":\"<p>Have you ever heard someone say “can I burn a copy of your Nickelback CD?” or “my Bazooka gum still has flavor!” Nobody says that.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/f-x8t0JOnVw\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,26\",\n                \"headline\":\"Sh*t Chicagoans Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/Ofy5gNkKGOo\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,4\",\n                \"headline\":\"Sh*t Broke People Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/zyyalkHjSjo\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\n\t\t\t{\n                \"startDate\":\"2012,1,4\",\n                \"headline\":\"Sh*t Silicon Valley Says\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/BR8zFANeBGQ\",\n                    \"credit\":\"\",\n                    \"caption\":\"written, filmed, and edited by Kate Imbach & Tom Conrad\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,25\",\n                \"headline\":\"Sh*t Vegans Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/OmWFnd-p0Lw\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,23\",\n                \"headline\":\"Sh*t Graphic Designers Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/KsT3QTmsN5Q\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,30\",\n                \"headline\":\"Sh*t Wookiees Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/vJpBCzzcSgA\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,17\",\n                \"headline\":\"Sh*t People Say About Sh*t People Say Videos\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/c9ehQ7vO7c0\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,20\",\n                \"headline\":\"Sh*t Social Media Pros Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/eRQe-BT9g_U\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,11\",\n                \"headline\":\"Sh*t Old People Say About Computers\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/HRmc5uuoUzA\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,11\",\n                \"headline\":\"Sh*t College Freshmen Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/rwozXzo0MZk\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,16\",\n                \"headline\":\"Sh*t Girls Say - Episode 2\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/kbovd-e-hRg\",\n                    \"credit\":\"\",\n                    \"caption\":\"Writers & Creators: Kyle Humphrey & Graydon Sheppard\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,24\",\n                \"headline\":\"Sh*t Girls Say - Episode 3 Featuring Juliette Lewis\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/bDHUhT71JN8\",\n                    \"credit\":\"\",\n                    \"caption\":\"Writers & Creators: Kyle Humphrey & Graydon Sheppard\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,27\",\n                \"headline\":\"Sh*t Web Designers Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/MEOb_meSHhQ\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,12\",\n                \"headline\":\"Sh*t Hipsters Say\",\n                \"text\":\"No meme is complete without a bit of hipster-bashing.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/FUhrSVyu0Kw\",\n                    \"credit\":\"\",\n                    \"caption\":\"Written, Directed, Conceptualized and Performed by Carrie Valentine and Jessica Katz\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,6\",\n                \"headline\":\"Sh*t Cats Say\",\n                \"text\":\"No meme is complete without cats. This had to happen, obviously.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/MUX58Vi-YLg\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2012,1,21\",\n                \"headline\":\"Sh*t Cyclists Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/GMCkuqL9IcM\",\n                    \"credit\":\"\",\n                    \"caption\":\"Video script, production, and editing by Allen Krughoff of Hardcastle Photography\"\n                }\n            },\n\t\t\t{\n                \"startDate\":\"2011,12,30\",\n                \"headline\":\"Sh*t Yogis Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/IMC1_RH_b3k\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n\n\n\n\n\t\t\t{\n                \"startDate\":\"2012,1,18\",\n                \"headline\":\"Sh*t New Yorkers Say\",\n                \"text\":\"\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/yRvJylbSg7o\",\n                    \"credit\":\"\",\n                    \"caption\":\"Directed and Edited by Matt Mayer, Produced by Seth Keim, Written by Eliot Glazer. Featuring Eliot and Ilana Glazer, who are siblings, not married.\"\n                }\n            }\n        ]\n    }\n}"
  },
  {
    "path": "website/templates/examples/shit-people-say/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Sh*t People Say</title>\n    <meta name=\"description\" content=\"Sh*t People Say Timeline\">\n    <meta charset=\"utf-8\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <!-- Style-->\n    <style>\n      html, body {\n      height:100%;\n      padding: 0px;\n      margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n    <!-- BEGIN Timeline Embed -->\n    <div id=\"timeline-embed\"></div>\n    <script type=\"text/javascript\">\n      var timeline_config = {\n       width: \"100%\",\n       height: \"100%\",\n       source: 'data.json',\n       font:\t'Pacifico-Arimo'\n      }\n    </script>\n    <!-- build:js https://cdn.knightlab.com/libs/timeline/%(cdn)s/js/storyjs-embed.js -->\n    <script type=\"application/javascript\">\n        var embed_path = \"/build/\"\n    </script>\n    <script type=\"text/javascript\" src=\"/build/js/storyjs-embed.js\"></script>\n    <!-- endbuild -->\n    <!-- END Timeline Embed-->\n    <!-- Analytics-->\n    <script type=\"text/javascript\">\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'UA-537357-19']);\n      _gaq.push(['_trackPageview']);\n      (function() {\n       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n    </script>\n  </body>\n</html>"
  },
  {
    "path": "website/templates/examples/user-interface/data.json",
    "content": "\n{\n    \"timeline\":  \n  \t{\n        \"headline\":\"Revolutionary User Interfaces\",\n\t\t\"startDate\":\"1600\",\n        \"text\":\"<p>The human computer interface helps to define computing at any one time. As computers have become more mainstream the interfaces have become more intimate. This is the journey of computer technology and how it has come to touch all of our lives.</p>\",\n        \"type\":\"default\",\n\t\t\"asset\":\n        {\n            \"media\":\"{{ static_url }}/img/examples/user-interface/input.png\",\n            \"credit\":\"Arjuna Soriano\",\n            \"caption\":\"From punch cards to multi touch.\"\n    },\n\t\t\"date\": [\n            {\n                \"startDate\":\"1600\",\n                \"headline\":\"The Antikythera\",\n                \"text\":\"In the year 1900, sponge divers discovered the Antikythera Mechanism, a remarkable mechanical computer used to track the cycles of the solar system dated to as early as 89 B.C. There was no input however. All computations were carried out by the intricate system of clockwork like plates and wheels..\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/DiQSHiAYt98\",\n                    \"credit\":\"<a href=\\\"http://www.nature.com/nature/videoarchive/index.html\\\">Nature Video Channel</a>\",\n                    \"caption\":\"\"\n                }\n            },\n     \t\t{\n                \"startDate\":\"1642\",\n                \"headline\":\"Pascal's Calculator\",\n                \"text\":\"<p>Blaise Pascal invented this calculator to help his father reorganize the French tax system. It could add and subtract in one step and multiply and divide by repetition.</p><p>Input was achieved by spinning the little wheels: inspiration for the iPod click wheel?</p>\",\n                \"asset\":\n                {\n                    \"media\":\"{{ static_url }}/img/examples/user-interface/pascaline.jpg\",\n                    \"credit\":\"© 2005 <a href=\\\"http://commons.wikimedia.org/wiki/User:David.Monniaux\\\">David Monniaux</a>  \",\n                    \"caption\":\"This piece is on display at Musée des Arts et Métiers, Paris.\"\n                }\n            },\n     \t\t{\n                \"startDate\":\"1820\",\n                \"headline\":\"Thomas Arithometer\",\n                \"text\":\"This is the first mass-produced calculator that could add, subtract, multiply and divide. Numbers were  input with all of the little knobs and dials and then the handle was twisted to perform the calculation.\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/5/59/Arithmometre.jpg\",\n                    \"credit\":\"By <a href=\\\"http://commons.wikimedia.org/wiki/File%3AArithmometre.jpg\\\">Ezrdr</a>, via Wikimedia Commons\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"1801\",\n                \"headline\":\"Jacquard Loom\",\n                \"text\":\"A loom is not a computer. It is the first machine however to use punch-cards as a means of input into a machine. By changing the arrangement of the holes in the card, the loom would weave different patterns. \",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/2ypE4ZJF7qY\",\n                    \"credit\":\"<a href='http://www.youtube.com/user/FiberMusings'>FiberMusings</a>\",\n                    \"caption\":\"The Jacquard loom is still in use today in modern factories. The punch-cards can be clearly seen being pulled to the top of the loom.\"\n                }\n            },\n            {\n                \"startDate\":\"1833\",\n                \"headline\":\"The Analytical Engine\",\n                \"text\":\"Charles Babbage designed but was never able to produce a working model but it is significant in that it relied upon punched cards for data and programs and would employ a language similar to modern assembly language complete with loops and conditional branching (for the nerds out there).\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/a/a4/Analytical_Engine_%282290032530%29.jpg\",\n                    \"credit\":\"By <a href='http://commons.wikimedia.org/wiki/File%3AAnalytical_Engine_(2290032530).jpg'>Marcin Wichary</a> via Wikimedia Commons\",\n                    \"caption\":\"This modern model of the Analytical Engine is housed at the Science Museum in London.\"\n                }\n            },\n            {\n                \"startDate\":\"1868\",\n                \"headline\":\"The Typewriter\",\n                \"text\":\"Again, not a computer but an important step forward in user interfaces. Invented by Christopher Sholes, An American engineer, the typewriter was layed out in the familiar QWERTY style.\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/9/9a/Sholes_typewriter.jpg\",\n                    \"credit\":\"By George Iles, via Wikimedia Commons\",\n                    \"caption\":\"A prototype of the typewriter with the QWERTY layout clearly visible.\"\n                }\n            },\n            {\n                \"startDate\":\"1890\",\n                \"headline\":\"Herman Hollerith\",\n                \"text\":\"In 1890, Hollerith introduced his tabulating machine to be used in the census. He also later invented a key punch, a machine that punched the holes into cards operated by a keyboard. His company was one of the companies that later merged to form IBM.\",\n                \"asset\":\n                {\n                    \"media\":\"http://youtu.be/UZVEp78b0XI?t=1m54s\",\n                    \"credit\":\"<a href=\\\"http://www.youtube.com/user/clipcafe\\\">clipcafe</a>\",\n                    \"caption\":\"A history of early IBM punch card machines and featuring a Pascal calculator.\"\n                }\n            },\n            {\n                \"startDate\":\"1940\",\n                \"headline\":\"Remote Access Computing\",\n                \"text\":\"George Stibitz demonstrated the Complex Number Calculator (CNC) at Dartmouth College. The astonishing part was that the CNC was in New York City.\",\n                \"asset\":\n                {\n                    \"media\":\"\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"1946\",\n                \"headline\":\"ENIAC\",\n                \"text\":\"Weighing 30 tons, and containing over 18,000 vacuum tubes, the ENIAC was the first truly modern computer. It could be programmed for many complex programs and used an early keyboard as its input.\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/1/16/Classic_shot_of_the_ENIAC.jpg\",\n                    \"credit\":\"U.S. Army photo\",\n                    \"caption\":\"\\\"Cpl. Irwin Goldstein (foreground) sets the switches on one of the ENIAC's function tables at the Moore School of Electrical Engineering.\\\" (Caption via Wikimedia)\"\n                }\n            },\n            {\n                \"startDate\":\"1951\",\n                \"headline\":\"UNICVAC I\",\n                \"text\":\"The Universal Automatic Computer I weighed in at 13 tons and sold for over one million dollars. It was the first mass produced computer, selling 46 units. The massive cockpit of a console featured a keyboard\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/5/55/Museum_of_Science%2C_Boston%2C_MA_-_IMG_3163.JPG\",\n                    \"credit\":\"By Daderot (Own work) [Public domain], via Wikimedia Commons\",\n                    \"caption\":\"Input for the UNIVAC I was via keyboard in this massive input console.\"\n                }\n            },\n            {\n                \"startDate\":\"1964\",\n                \"headline\":\"Multics\",\n                \"text\":\"A collaboration between MIT, Bell Laboratories and General Electric created the Multics system. It was a multi-user, time sharing system that spurred along the use of a new interface, a monitor.\",\n                \"asset\":\n                {\n                    \"media\":\"\",\n                    \"credit\":\"\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"1968\",\n                \"headline\":\"Minicomputer\",\n                \"text\":\"Data General introduces the Nova Minicomputer which served as an inspiration for Steve Wozniak's design of the Apple I.\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/7/7f/Data_General_Nova_SN_1.agr.JPG\",\n                    \"credit\":\"By Arnold Reinhold, via Wikimedia Commons\",\n                    \"caption\":\"The first Data General Nova minicomputer displayed at the Computer History Museum in Silicon Valley.\"\n                }\n            },\n            {\n                \"startDate\":\"1968,12,9\",\n                \"headline\":\"The Mouse\",\n                \"text\":\"Douglas C. Engelbart and his team demonstrated an online system featuring a mouse, hypertext and the first graphical user interface, a \\\"windows\\\" system. The mouse was encased in a wood body and had only one button.\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/f/f0/SRI_Douglas_Engelbart_2008.jpg\",\n                    \"credit\":\"By SRI International, via Wikimedia Commons\",\n                    \"caption\":\"Douglas Engelbart with the first computer mouse prototype.\"\n                }\n            },\n            {\n                \"startDate\":\"1974\",\n                \"headline\":\"Xerox Alto\",\n                \"text\":\"The Xerox Alto was the first workstation with a built in mouse with three buttons.\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/5/5e/Xerox_Alto_mit_Rechner.JPG\",\n                    \"credit\":\"By Joho345, via Wikimedia Commons\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"1976\",\n                \"headline\":\"Apple I\",\n                \"text\":\"Steve Wozniak designed the Apple I, a single-board computer that he and Steve Jobs sold for $500 each. Thus began Apple Inc. and the Personal Computer.\",\n                \"asset\":\n                {\n                    \"media\":\"http://www.flickr.com/photos/euthman/281712899/\",\n                    \"credit\":\"<a href='http://www.flickr.com/photos/euthman/281712899/'>Ed Uthman</a> via Flickr\",\n                    \"caption\":\"An Apple I computer on display at the Smithsonian.\"\n                }\n            },\n            {\n                \"startDate\":\"1976\",\n                \"headline\":\"The Osborne I\",\n                \"text\":\"Weighing 24 pounds and costing under $2,000, the Osborne I was the first portable computer, although you probably couldn't use it in your lap for too long.\",\n                \"asset\":\n                {\n                    \"media\":\"http://www.flickr.com/photos/mightyohm/5333827381/\",\n                    \"credit\":\"<a href='http://www.flickr.com/photos/mightyohm/5333827381/'>Jeff Keyzer</a> via Flickr\",\n                    \"caption\":\"An Apple I computer on display at the Smithsonian.\"\n                }\n            },\n            {\n                \"startDate\":\"1982\",\n                \"headline\":\"Windows 1.0\",\n                \"text\":\"Microsoft unveils what will become the dominant operating system for the next several decades.\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/a/a9/Microsoft_Windows_1.0_page1.jpg\",\n                    \"credit\":\"By Microsoft, via Wikimedia Commons\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"1984\",\n                \"headline\":\"The Macintosh\",\n                \"text\":\"Apple introduced the Macintosh which was the first commercially successful computer with a mouse and a Graphical User Interface. Apple's Think Different Superbowl commercial also plays this year.\",\n                \"asset\":\n                {\n                    \"media\":\"http://www.flickr.com/photos/mwichary/2179402603/\",\n                    \"credit\":\"<a href='http://www.flickr.com/photos/mwichary/2179402603/'>Marcin Wichary</a> via Flickr\",\n                    \"caption\":\"The Original Macintosh with extra external floppy drive.\"\n                }\n            },\n            {\n                \"startDate\":\"1997\",\n                \"headline\":\"The Stylus\",\n                \"text\":\"Personal digital assistants introduce the touch screen with the use of a stylus. Handwriting recognition was hit or miss but some companies developed simplified alphabet input strokes to improve recognition.\",\n                \"asset\":\n                {\n                    \"media\":\"{{ static_url }}/img/examples/user-interface/palm.png\",\n                    \"credit\":\"<a href='http://en.wikipedia.org/wiki/File:Palmpilot5000_eu.png'>Channel R</a> via Wikimedia Commons\",\n                    \"caption\":\"A Palm Pilot.\"\n                }\n            },\n            {\n                \"startDate\":\"2001,10,23\",\n                \"headline\":\"Continuous Scrolling\",\n                \"text\":\"The first iPod introduces the wheel as a user interface. It allowed users to continuously scroll through thousands of songs seemlessly. This interface helped Apple dominate the music player business and eventually the music content business through its iTunes ecosystem.\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/3/35/Ipod_1G.png\",\n                    \"credit\":\"By Rjcflyer@aol.com at en.wikipedia via Wikimedia Commons\",\n                    \"caption\":\"The Original iPod with click wheel user interface.\"\n                }\n            },\n            {\n                \"startDate\":\"2007\",\n                \"headline\":\"Multi Touch\",\n                \"text\":\"Steve Jobs unveils the iPhone and the multi touch interface.\",\n                \"asset\":\n                {\n                    \"media\":\"http://upload.wikimedia.org/wikipedia/commons/4/49/IPhone_at_Macworld_%28angled_view%29.jpg\",\n                    \"credit\":\"By blakeburris, via <a href='http://commons.wikimedia.org/wiki/File:IPhone_at_Macworld_(angled_view).jpg'>Wikimedia Commons</a>\",\n                    \"caption\":\"\"\n                }\n            },\n            {\n                \"startDate\":\"2012\",\n                \"headline\":\"Speech Recognition\",\n                \"text\":\"<p>Speech recognition has been tested and improved upon for years in military cockpits in the U.S. France and U.K. In fact, Siri, the speech recognition engine used in the iPhone 4S was developed first by DARPA, the Defense Advanced Research Projects Agency.</p>\",\n                \"asset\":\n                {\n                    \"media\":\"{{ static_url }}/img/examples/user-interface/4s.jpg\",\n                    \"credit\":\"Apple Inc.\",\n                    \"caption\":\"\"\n                }\n            }\n        ]\n    }\n}"
  },
  {
    "path": "website/templates/examples/user-interface/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\"><!--\n  \t \n  \t88888888888 d8b                        888 d8b                888888   d8888b  \n  \t    888     Y8P                        888 Y8P                   88b d88P  Y88b \n  \t    888                                888                       888 Y88b\n  \t    888     888 88888b d88b     d88b   888 888 88888b     d88b   888   Y888b\n  \t    888     888 888  888  88b d8P  Y8b 888 888 888  88b d8P  Y8b 888      Y88b\n  \t    888     888 888  888  888 88888888 888 888 888  888 88888888 888        888 \n  \t    888     888 888  888  888 Y8b      888 888 888  888 Y8b      88P Y88b  d88P \n  \t    888     888 888  888  888   Y8888  888 888 888  888   Y8888  888   Y8888P\n  \t                                                                d88P            \n  \t                                                              d88P             \n  \t                                                            888P              \n  \t -->\n  <head>\n    <title>Revolutionary User Interfaces</title>\n    <meta name=\"description\" content=\"The human computer interface helps to define computing at any one time.\">\n    <meta charset=\"utf-8\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-touch-fullscreen\" content=\"yes\">\n    <!-- Style-->\n    <style>\n      html, body {\n      height:100%;\n      padding: 0px;\n      margin: 0px;\n      }\n    </style>\n    <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n  </head>\n  <body>\n    <!-- BEGIN Timeline Embed -->\n    <div id=\"timeline-embed\"></div>\n    <script type=\"text/javascript\">\n      var timeline_config = {\n       width: \"100%\",\n       height: \"100%\",\n       source: 'data.json',\n       font:\t'SansitaOne-Kameron'\n      }\n    </script>\n    <!-- build:js https://cdn.knightlab.com/libs/timeline/%(cdn)s/js/storyjs-embed.js -->\n    <script type=\"application/javascript\">\n        var embed_path = \"/build/\"\n    </script>\n    <script type=\"text/javascript\" src=\"/build/js/storyjs-embed.js\"></script>\n    <!-- endbuild -->\n    <!-- END Timeline Embed-->\n    <!-- Analytics-->\n    <script type=\"text/javascript\">\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'UA-537357-19']);\n      _gaq.push(['_trackPageview']);\n      (function() {\n       var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n       ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n       var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n    </script>\n  </body>\n</html>"
  },
  {
    "path": "website/templates/index.html",
    "content": "{% extends \"base.html\" %}\n\n{% block content %}\n  {% include \"_overview.html\" %}\n  {% include \"_demo.html\" %}\n  {% include \"_description.html\" %}\n  {% include \"_make.html\" %}\n  {% include \"_examples.html\" %}\n  {% include \"_help.html\" %}\n  {% include \"_developers.html\" %}\n{% endblock %}"
  }
]