", "timenav-tag");
- VMM.Lib.addClass(tag_element, "timenav-tag-row-" + (k+1));
- VMM.appendElement(tag_element, "
");
- }
-
- }
-
-
-
- // CREATE ERAS
- for(var j = 0; j < eras.length; j++) {
-
- var era = {
- content: VMM.appendAndGetElement($content, "
", "era"),
- startdate: VMM.Util.parseDate(eras[j].startDate),
- enddate: VMM.Util.parseDate(eras[j].endDate),
- title: eras[j].headline,
- uniqueid: VMM.Util.unique_ID(4),
- color: eras[j].color
- };
-
- VMM.Lib.attr(era.content, "id", era.uniqueid);
- VMM.Lib.css(era.content, "background", era.color);
- VMM.appendElement(era.content, "
" + VMM.Util.unlinkify(era.title) + "
");
-
- era_markers.push(era);
-
- }
-
- }
-
- };
-
-}
-
-/***********************************************
- Begin VMM.Timeline.DataObj.js
-***********************************************/
-
-/* TIMELINE SOURCE DATA PROCESSOR
-================================================== */
-
-if(typeof VMM.Timeline != 'undefined' && typeof VMM.Timeline.DataObj == 'undefined') {
-
- VMM.Timeline.DataObj = {
-
- data_obj: {},
-
- model_array: [],
-
- getData: function(raw_data) {
- VMM.Timeline.DataObj.data_obj = {};
- data = VMM.Timeline.DataObj.data_obj;
-
- if (type.of(raw_data) == "object") {
- trace("DATA SOURCE: JSON OBJECT");
- VMM.Timeline.DataObj.parseJSON(raw_data);
- } else if (type.of(raw_data) == "string") {
- if (raw_data.match("%23")) {
- trace("DATA SOURCE: TWITTER SEARCH");
- VMM.Timeline.DataObj.model_Tweets.getData("%23medill");
-
- } else if ( raw_data.match("spreadsheet") ) {
- VMM.fireEvent(global, VMM.Timeline.Config.events.messege, VMM.Timeline.Config.language.messages.loading_timeline);
- trace("DATA SOURCE: GOOGLE SPREADSHEET");
- VMM.Timeline.DataObj.model_GoogleSpreadsheet.getData(raw_data);
-
- } else {
- VMM.fireEvent(global, VMM.Timeline.Config.events.messege, VMM.Timeline.Config.language.messages.loading_timeline);
- trace("DATA SOURCE: JSON");
- trace("raw data" + raw_data);
- VMM.getJSON(raw_data, VMM.Timeline.DataObj.parseJSON);
- }
- } else if (type.of(raw_data) == "html") {
- trace("DATA SOURCE: HTML");
- VMM.Timeline.DataObj.parseHTML(raw_data);
- } else {
- trace("DATA SOURCE: UNKNOWN");
- }
-
- },
-
- parseHTML: function(d) {
- trace("parseHTML");
- trace("WARNING: THIS IS STILL ALPHA AND WILL NOT WORK WITH ID's other than #timeline");
- var _data_obj = VMM.Timeline.DataObj.data_template_obj;
-
- /* Timeline start slide
- ================================================== */
- if (VMM.Lib.find("#timeline section", "time")[0]) {
- _data_obj.timeline.startDate = VMM.Lib.html(VMM.Lib.find("#timeline section", "time")[0]);
- _data_obj.timeline.headline = VMM.Lib.html(VMM.Lib.find("#timeline section", "h2"));
- _data_obj.timeline.text = VMM.Lib.html(VMM.Lib.find("#timeline section", "article"));
-
- var found_main_media = false;
-
- if (VMM.Lib.find("#timeline section", "figure img").length != 0) {
- found_main_media = true;
- _data_obj.timeline.asset.media = VMM.Lib.attr(VMM.Lib.find("#timeline section", "figure img"), "src");
- } else if (VMM.Lib.find("#timeline section", "figure a").length != 0) {
- found_main_media = true;
- _data_obj.timeline.asset.media = VMM.Lib.attr(VMM.Lib.find("#timeline section", "figure a"), "href");
- } else {
- //trace("NOT FOUND");
- }
-
- if (found_main_media) {
- if (VMM.Lib.find("#timeline section", "cite").length != 0) {
- _data_obj.timeline.asset.credit = VMM.Lib.html(VMM.Lib.find("#timeline section", "cite"));
- }
- if (VMM.Lib.find(this, "figcaption").length != 0) {
- _data_obj.timeline.asset.caption = VMM.Lib.html(VMM.Lib.find("#timeline section", "figcaption"));
- }
- }
- }
-
- /* Timeline Date Slides
- ================================================== */
- VMM.Lib.each("#timeline li", function(i, elem){
-
- var valid_date = false;
-
- var _date = {
- "type":"default",
- "startDate":"",
- "headline":"",
- "text":"",
- "asset":
- {
- "media":"",
- "credit":"",
- "caption":""
- },
- "tags":"Optional"
- };
-
- if (VMM.Lib.find(this, "time") != 0) {
-
- valid_date = true;
-
- _date.startDate = VMM.Lib.html(VMM.Lib.find(this, "time")[0]);
-
- if (VMM.Lib.find(this, "time")[1]) {
- _date.endDate = VMM.Lib.html(VMM.Lib.find(this, "time")[1]);
- }
-
- _date.headline = VMM.Lib.html(VMM.Lib.find(this, "h3"));
-
- _date.text = VMM.Lib.html(VMM.Lib.find(this, "article"));
-
- var found_media = false;
- if (VMM.Lib.find(this, "figure img").length != 0) {
- found_media = true;
- _date.asset.media = VMM.Lib.attr(VMM.Lib.find(this, "figure img"), "src");
- } else if (VMM.Lib.find(this, "figure a").length != 0) {
- found_media = true;
- _date.asset.media = VMM.Lib.attr(VMM.Lib.find(this, "figure a"), "href");
- } else {
- //trace("NOT FOUND");
- }
-
- if (found_media) {
- if (VMM.Lib.find(this, "cite").length != 0) {
- _date.asset.credit = VMM.Lib.html(VMM.Lib.find(this, "cite"));
- }
- if (VMM.Lib.find(this, "figcaption").length != 0) {
- _date.asset.caption = VMM.Lib.html(VMM.Lib.find(this, "figcaption"));
- }
- }
-
- trace(_date);
- _data_obj.timeline.date.push(_date);
-
- }
-
- });
-
- VMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, _data_obj);
-
- },
-
- parseJSON: function(d) {
- if (d.timeline.type == "default") {
-
- trace("DATA SOURCE: JSON STANDARD TIMELINE");
- VMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, d);
-
- } else if (d.timeline.type == "twitter") {
-
- trace("DATA SOURCE: JSON TWEETS");
- VMM.Timeline.DataObj.model_Tweets.buildData(d);
-
- } else {
-
- trace("DATA SOURCE: UNKNOWN JSON");
- trace(type.of(d.timeline));
-
- };
- },
-
- /* MODEL OBJECTS
- New Types of Data can be formatted for the timeline here
- ================================================== */
-
- model_Tweets: {
-
- type: "twitter",
-
- buildData: function(raw_data) {
- VMM.bindEvent(global, VMM.Timeline.DataObj.model_Tweets.onTwitterDataReady, "TWEETSLOADED");
- VMM.ExternalAPI.twitter.getTweets(raw_data.timeline.tweets);
- },
-
- getData: function(raw_data) {
- VMM.bindEvent(global, VMM.Timeline.DataObj.model_Tweets.onTwitterDataReady, "TWEETSLOADED");
- VMM.ExternalAPI.twitter.getTweetSearch(raw_data);
- },
-
- onTwitterDataReady: function(e, d) {
- var _data_obj = VMM.Timeline.DataObj.data_template_obj;
-
- for(var i = 0; i < d.tweetdata.length; i++) {
-
- var _date = {
- "type":"tweets",
- "startDate":"",
- "headline":"",
- "text":"",
- "asset":
- {
- "media":"",
- "credit":"",
- "caption":""
- },
- "tags":"Optional"
- };
- // pass in the 'created_at' string returned from twitter //
- // stamp arrives formatted as Tue Apr 07 22:52:51 +0000 2009 //
-
- //var twit_date = VMM.ExternalAPI.twitter.parseTwitterDate(d.tweetdata[i].raw.created_at);
- //trace(twit_date);
-
- _date.startDate = d.tweetdata[i].raw.created_at;
-
- if (type.of(d.tweetdata[i].raw.from_user_name)) {
- _date.headline = d.tweetdata[i].raw.from_user_name + " (
" + "@" + d.tweetdata[i].raw.from_user + ")" ;
- } else {
- _date.headline = d.tweetdata[i].raw.user.name + " (
" + "@" + d.tweetdata[i].raw.user.screen_name + ")" ;
- }
-
- _date.asset.media = d.tweetdata[i].content;
- _data_obj.timeline.date.push(_date);
-
- };
-
- VMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, _data_obj);
- }
- },
-
- model_GoogleSpreadsheet: {
- // TEMPLATE CAN BE FOUND HERE
- // https://docs.google.com/previewtemplate?id=0AppSVxABhnltdEhzQjQ4MlpOaldjTmZLclQxQWFTOUE&mode=public
- type: "google spreadsheet",
-
-
- getData: function(raw_data) {
-
- var _key = VMM.Util.getUrlVars(raw_data)["key"];
- var _url = "https://spreadsheets.google.com/feeds/list/" + _key + "/od6/public/values?alt=json";
-
- VMM.getJSON(_url, VMM.Timeline.DataObj.model_GoogleSpreadsheet.buildData);
- },
-
- buildData: function(d) {
- VMM.fireEvent(global, VMM.Timeline.Config.events.messege, "Parsing Data");
- var _data_obj = VMM.Timeline.DataObj.data_template_obj;
-
- for(var i = 0; i < d.feed.entry.length; i++) {
- var dd = d.feed.entry[i];
-
- if (dd.gsx$titleslide.$t.match("start")) {
- _data_obj.timeline.startDate = dd.gsx$startdate.$t;
- _data_obj.timeline.headline = dd.gsx$headline.$t;
- _data_obj.timeline.asset.media = dd.gsx$media.$t;
- _data_obj.timeline.asset.caption = dd.gsx$mediacaption.$t;
- _data_obj.timeline.asset.credit = dd.gsx$mediacredit.$t;
- _data_obj.timeline.text = dd.gsx$text.$t;
- _data_obj.timeline.type = "google spreadsheet";
- } else {
- var _date = {
- "type": "google spreadsheet",
- "startDate": dd.gsx$startdate.$t,
- "endDate": dd.gsx$enddate.$t,
- "headline": dd.gsx$headline.$t,
- "text": dd.gsx$text.$t,
- "asset": {
- "media": dd.gsx$media.$t,
- "credit": dd.gsx$mediacredit.$t,
- "caption": dd.gsx$mediacaption.$t
- },
- "tags": "Optional"
- };
- if (dd.gsx$tag.$t) {
- _date.tag = dd.gsx$tag.$t;
- trace("TAG " + _date.tag);
- }
- _data_obj.timeline.date.push(_date);
- }
- };
-
- VMM.fireEvent(global, VMM.Timeline.Config.events.data_ready, _data_obj);
-
- }
-
- },
-
- /* TEMPLATE OBJECTS
- ================================================== */
- data_template_obj: { "timeline": { "headline":"", "description":"", "asset": { "media":"", "credit":"", "caption":"" }, "date": [] } },
- date_obj: {"startDate":"2012,2,2,11,30", "headline":"", "text":"", "asset": {"media":"http://youtu.be/vjVfu8-Wp6s", "credit":"", "caption":"" }, "tags":"Optional"}
-
- };
-
-}
diff --git a/vendor/timeline/LICENSE b/vendor/timeline/LICENSE
new file mode 100644
index 00000000..d061c361
--- /dev/null
+++ b/vendor/timeline/LICENSE
@@ -0,0 +1,365 @@
+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 http://mozilla.org/MPL/2.0/.
+
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+ means each individual or legal entity that creates, contributes to
+ the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+ means the combination of the Contributions of others (if any) used
+ by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+ means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+ means Source Code Form to which the initial Contributor has attached
+ the notice in Exhibit A, the Executable Form of such Source Code
+ Form, and Modifications of such Source Code Form, in each case
+ including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+ means
+
+ (a) that the initial Contributor has attached the notice described
+ in Exhibit B to the Covered Software; or
+
+ (b) that the Covered Software was made available under the terms of
+ version 1.1 or earlier of the License, but not also under the
+ terms of a Secondary License.
+
+1.6. "Executable Form"
+ means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+ means a work that combines Covered Software with other material, in
+ a separate file or files, that is not Covered Software.
+
+1.8. "License"
+ means this document.
+
+1.9. "Licensable"
+ means having the right to grant, to the maximum extent possible,
+ whether at the time of the initial grant or subsequently, any and
+ all of the rights conveyed by this License.
+
+1.10. "Modifications"
+ means any of the following:
+
+ (a) any file in Source Code Form that results from an addition to,
+ deletion from, or modification of the contents of Covered
+ Software; or
+
+ (b) any new file in Source Code Form that contains any Covered
+ Software.
+
+1.11. "Patent Claims" of a Contributor
+ means any patent claim(s), including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by such
+ Contributor that would be infringed, but for the grant of the
+ License, by the making, using, selling, offering for sale, having
+ made, import, or transfer of either its Contributions or its
+ Contributor Version.
+
+1.12. "Secondary License"
+ means either the GNU General Public License, Version 2.0, the GNU
+ Lesser General Public License, Version 2.1, the GNU Affero General
+ Public License, Version 3.0, or any later versions of those
+ licenses.
+
+1.13. "Source Code Form"
+ means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, "You" includes any entity that
+ controls, is controlled by, or is under common control with You. For
+ purposes of this definition, "control" means (a) the power, direct
+ or indirect, to cause the direction or management of such entity,
+ whether by contract or otherwise, or (b) ownership of more than
+ fifty percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or
+ as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+ for sale, have made, import, and otherwise transfer either its
+ Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+ or
+
+(b) for infringements caused by: (i) Your and any other third party's
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+ its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+ Form, as described in Section 3.1, and You must inform recipients of
+ the Executable Form how they can obtain a copy of such Source Code
+ Form by reasonable means in a timely manner, at a charge no more
+ than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+ License, or sublicense it under different terms, provided that the
+ license for the Executable Form does not attempt to limit or alter
+ the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+* *
+* 6. Disclaimer of Warranty *
+* ------------------------- *
+* *
+* Covered Software is provided under this License on an "as is" *
+* basis, without warranty of any kind, either expressed, implied, or *
+* statutory, including, without limitation, warranties that the *
+* Covered Software is free of defects, merchantable, fit for a *
+* particular purpose or non-infringing. The entire risk as to the *
+* quality and performance of the Covered Software is with You. *
+* Should any Covered Software prove defective in any respect, You *
+* (not any Contributor) assume the cost of any necessary servicing, *
+* repair, or correction. This disclaimer of warranty constitutes an *
+* essential part of this License. No use of any Covered Software is *
+* authorized under this License except under this disclaimer. *
+* *
+************************************************************************
+
+************************************************************************
+* *
+* 7. Limitation of Liability *
+* -------------------------- *
+* *
+* Under no circumstances and under no legal theory, whether tort *
+* (including negligence), contract, or otherwise, shall any *
+* Contributor, or anyone who distributes Covered Software as *
+* permitted above, be liable to You for any direct, indirect, *
+* special, incidental, or consequential damages of any character *
+* including, without limitation, damages for lost profits, loss of *
+* goodwill, work stoppage, computer failure or malfunction, or any *
+* and all other commercial damages or losses, even if such party *
+* shall have been informed of the possibility of such damages. This *
+* limitation of liability shall not apply to liability for death or *
+* personal injury resulting from such party's negligence to the *
+* extent applicable law prohibits such limitation. Some *
+* jurisdictions do not allow the exclusion or limitation of *
+* incidental or consequential damages, so this exclusion and *
+* limitation may not apply to You. *
+* *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+
+-------------------------------------------
+
+Map tiles by [Stamen Design](http://stamen.com "Stamen Design"), under
+[CC BY 3.0](http://creativecommons.org/licenses/by/3.0 "CC BY 3.0").
+Data by [OpenStreetMap](http://openstreetmap.org "OpenStreetMap"),
+under [CC BY SA](http://creativecommons.org/licenses/by-sa/3.0 "CC BY SA").
diff --git a/vendor/timeline/README b/vendor/timeline/README
new file mode 100644
index 00000000..50f93da3
--- /dev/null
+++ b/vendor/timeline/README
@@ -0,0 +1 @@
+Verite TimelineJS v2.25
diff --git a/vendor/timeline/css/loading.gif b/vendor/timeline/css/loading.gif
new file mode 100644
index 00000000..d3eef2d6
Binary files /dev/null and b/vendor/timeline/css/loading.gif differ
diff --git a/vendor/timeline/css/timeline.css b/vendor/timeline/css/timeline.css
new file mode 100644
index 00000000..88e46824
--- /dev/null
+++ b/vendor/timeline/css/timeline.css
@@ -0,0 +1,284 @@
+.vco-storyjs{}.vco-storyjs div *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}
+.vco-storyjs h1,.vco-storyjs h2,.vco-storyjs h3,.vco-storyjs h4,.vco-storyjs h5,.vco-storyjs h6,.vco-storyjs p,.vco-storyjs blockquote,.vco-storyjs pre,.vco-storyjs a,.vco-storyjs abbr,.vco-storyjs acronym,.vco-storyjs address,.vco-storyjs cite,.vco-storyjs code,.vco-storyjs del,.vco-storyjs dfn,.vco-storyjs em,.vco-storyjs img,.vco-storyjs q,.vco-storyjs s,.vco-storyjs samp,.vco-storyjs small,.vco-storyjs strike,.vco-storyjs strong,.vco-storyjs sub,.vco-storyjs sup,.vco-storyjs tt,.vco-storyjs var,.vco-storyjs dd,.vco-storyjs dl,.vco-storyjs dt,.vco-storyjs li,.vco-storyjs ol,.vco-storyjs ul,.vco-storyjs fieldset,.vco-storyjs form,.vco-storyjs label,.vco-storyjs legend,.vco-storyjs button,.vco-storyjs table,.vco-storyjs caption,.vco-storyjs tbody,.vco-storyjs tfoot,.vco-storyjs thead,.vco-storyjs tr,.vco-storyjs th,.vco-storyjs td,.vco-storyjs .vco-container,.vco-storyjs .content-container,.vco-storyjs .media,.vco-storyjs .text,.vco-storyjs .vco-slider,.vco-storyjs .slider,.vco-storyjs .date,.vco-storyjs .title,.vco-storyjs .messege,.vco-storyjs .map,.vco-storyjs .credit,.vco-storyjs .caption,.vco-storyjs .vco-feedback,.vco-storyjs .vco-feature,.vco-storyjs .toolbar,.vco-storyjs .marker,.vco-storyjs .dot,.vco-storyjs .line,.vco-storyjs .flag,.vco-storyjs .time,.vco-storyjs .era,.vco-storyjs .major,.vco-storyjs .minor,.vco-storyjs .vco-navigation,.vco-storyjs .start,.vco-storyjs .active{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;width:auto;float:none;}
+.vco-storyjs h1,.vco-storyjs h2,.vco-storyjs h3,.vco-storyjs h4,.vco-storyjs h5,.vco-storyjs h6{clear:none;}
+.vco-storyjs table{border-collapse:collapse;border-spacing:0;}
+.vco-storyjs ol,.vco-storyjs ul{list-style:none;}
+.vco-storyjs q:before,.vco-storyjs q:after,.vco-storyjs blockquote:before,.vco-storyjs blockquote:after{content:"";}
+.vco-storyjs a:focus{outline:thin dotted;}
+.vco-storyjs a:hover,.vco-storyjs a:active{outline:0;}
+.vco-storyjs article,.vco-storyjs aside,.vco-storyjs details,.vco-storyjs figcaption,.vco-storyjs figure,.vco-storyjs footer,.vco-storyjs header,.vco-storyjs hgroup,.vco-storyjs nav,.vco-storyjs section{display:block;}
+.vco-storyjs audio,.vco-storyjs canvas,.vco-storyjs video{display:inline-block;*display:inline;*zoom:1;}
+.vco-storyjs audio:not([controls]){display:none;}
+.vco-storyjs div{max-width:none;}
+.vco-storyjs sub,.vco-storyjs sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}
+.vco-storyjs sup{top:-0.5em;}
+.vco-storyjs sub{bottom:-0.25em;}
+.vco-storyjs img{border:0;-ms-interpolation-mode:bicubic;}
+.vco-storyjs button,.vco-storyjs input,.vco-storyjs select,.vco-storyjs textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;}
+.vco-storyjs button,.vco-storyjs input{line-height:normal;*overflow:visible;}
+.vco-storyjs button::-moz-focus-inner,.vco-storyjs input::-moz-focus-inner{border:0;padding:0;}
+.vco-storyjs button,.vco-storyjs input[type="button"],.vco-storyjs input[type="reset"],.vco-storyjs input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
+.vco-storyjs input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}
+.vco-storyjs input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}
+.vco-storyjs textarea{overflow:auto;vertical-align:top;}
+.vco-storyjs{font-family:"Georgia",Times New Roman,Times,serif;}.vco-storyjs .twitter,.vco-storyjs .vcard,.vco-storyjs .messege,.vco-storyjs .credit,.vco-storyjs .caption,.vco-storyjs .zoom-in,.vco-storyjs .zoom-out,.vco-storyjs .back-home,.vco-storyjs .time-interval div,.vco-storyjs .time-interval-major div,.vco-storyjs .nav-container{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif !important;}
+.vco-storyjs h1.date,.vco-storyjs h2.date,.vco-storyjs h3.date,.vco-storyjs h4.date,.vco-storyjs h5.date,.vco-storyjs h6.date{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif !important;}
+.vco-storyjs .timenav h1,.vco-storyjs .flag-content h1,.vco-storyjs .era h1,.vco-storyjs .timenav h2,.vco-storyjs .flag-content h2,.vco-storyjs .era h2,.vco-storyjs .timenav h3,.vco-storyjs .flag-content h3,.vco-storyjs .era h3,.vco-storyjs .timenav h4,.vco-storyjs .flag-content h4,.vco-storyjs .era h4,.vco-storyjs .timenav h5,.vco-storyjs .flag-content h5,.vco-storyjs .era h5,.vco-storyjs .timenav h6,.vco-storyjs .flag-content h6,.vco-storyjs .era h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif !important;}
+.vco-storyjs p,.vco-storyjs blockquote,.vco-storyjs blockquote p,.vco-storyjs .twitter blockquote p{font-family:"Georgia",Times New Roman,Times,serif !important;}
+.vco-storyjs .vco-feature h1,.vco-storyjs .vco-feature h2,.vco-storyjs .vco-feature h3,.vco-storyjs .vco-feature h4,.vco-storyjs .vco-feature h5,.vco-storyjs .vco-feature h6{font-family:"Georgia",Times New Roman,Times,serif;}
+.timeline-tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;}
+.thumbnail{background-image:url(timeline.png?v4.4);}
+@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.thumbnail{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;}}.vco-storyjs{font-size:15px;font-weight:normal;line-height:20px;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;}.vco-storyjs p{font-size:15px;font-weight:normal;line-height:20px;margin-bottom:20px;color:#666666;}.vco-storyjs p small{font-size:12px;line-height:17px;}
+.vco-storyjs p:first-child{margin-top:20px;}
+.vco-storyjs .vco-navigation p{color:#999999;}
+.vco-storyjs .vco-feature h3,.vco-storyjs .vco-feature h4,.vco-storyjs .vco-feature h5,.vco-storyjs .vco-feature h6{margin-bottom:15px;}
+.vco-storyjs .vco-feature p{color:#666666;}
+.vco-storyjs .vco-feature blockquote,.vco-storyjs .vco-feature blockquote p{color:#000000;}
+.vco-storyjs .date a,.vco-storyjs .title a{color:#999999;}
+.vco-storyjs .hyphenate{-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word;}
+.vco-storyjs h1,.vco-storyjs h2,.vco-storyjs h3,.vco-storyjs h4,.vco-storyjs h5,.vco-storyjs h6{font-weight:normal;color:#000000;text-transform:none;}.vco-storyjs h1 a,.vco-storyjs h2 a,.vco-storyjs h3 a,.vco-storyjs h4 a,.vco-storyjs h5 a,.vco-storyjs h6 a{color:#999999;}
+.vco-storyjs h1 small,.vco-storyjs h2 small,.vco-storyjs h3 small,.vco-storyjs h4 small,.vco-storyjs h5 small,.vco-storyjs h6 small{color:#999999;}
+.vco-storyjs h1.date,.vco-storyjs h2.date,.vco-storyjs h3.date,.vco-storyjs h4.date,.vco-storyjs h5.date,.vco-storyjs h6.date{font-weight:bold;}
+.vco-storyjs h2.start{font-size:36px;line-height:38px;margin-bottom:15px;}
+.vco-storyjs h1{margin-bottom:15px;font-size:32px;line-height:34px;}.vco-storyjs h1 small{font-size:18px;}
+.vco-storyjs h2{margin-bottom:15px;font-size:28px;line-height:30px;}.vco-storyjs h2 small{font-size:14px;line-height:16px;}
+.vco-storyjs h2.date{font-size:16px;line-height:18px;margin-bottom:3.75px;color:#999999;}
+.vco-storyjs h3,.vco-storyjs h4,.vco-storyjs h5,.vco-storyjs h6{line-height:40px;}.vco-storyjs h3 .active,.vco-storyjs h4 .active,.vco-storyjs h5 .active,.vco-storyjs h6 .active{color:#0088cc;}
+.vco-storyjs h3{font-size:28px;line-height:30px;}.vco-storyjs h3 small{font-size:14px;}
+.vco-storyjs h4{font-size:20px;line-height:22px;}.vco-storyjs h4 small{font-size:12px;}
+.vco-storyjs h5{font-size:16px;line-height:18px;}
+.vco-storyjs h6{font-size:13px;line-height:14px;text-transform:uppercase;}
+.vco-storyjs strong{font-weight:bold;font-style:inherit;}
+.vco-storyjs em{font-style:italic;font-weight:inherit;}
+.vco-storyjs Q{quotes:'„' '“';font-style:italic;}
+.vco-storyjs blockquote,.vco-storyjs blockquote p{font-size:24px;line-height:32px;text-align:left;margin-bottom:6px;padding-top:10px;background-color:#ffffff;color:#000000;}
+.vco-storyjs .credit{color:#999999;text-align:right;font-size:10px;line-height:10px;display:block;margin:0 auto;clear:both;}
+.vco-storyjs .caption{text-align:left;margin-top:5px;color:#666666;font-size:11px;line-height:14px;clear:both;}
+.vco-storyjs.vco-right-to-left h1,.vco-storyjs.vco-right-to-left h2,.vco-storyjs.vco-right-to-left h3,.vco-storyjs.vco-right-to-left h4,.vco-storyjs.vco-right-to-left h5,.vco-storyjs.vco-right-to-left h6,.vco-storyjs.vco-right-to-left p,.vco-storyjs.vco-right-to-left blockquote,.vco-storyjs.vco-right-to-left pre,.vco-storyjs.vco-right-to-left a,.vco-storyjs.vco-right-to-left abbr,.vco-storyjs.vco-right-to-left acronym,.vco-storyjs.vco-right-to-left address,.vco-storyjs.vco-right-to-left cite,.vco-storyjs.vco-right-to-left code,.vco-storyjs.vco-right-to-left del,.vco-storyjs.vco-right-to-left dfn,.vco-storyjs.vco-right-to-left em,.vco-storyjs.vco-right-to-left img,.vco-storyjs.vco-right-to-left q,.vco-storyjs.vco-right-to-left s,.vco-storyjs.vco-right-to-left samp,.vco-storyjs.vco-right-to-left small,.vco-storyjs.vco-right-to-left strike,.vco-storyjs.vco-right-to-left strong,.vco-storyjs.vco-right-to-left sub,.vco-storyjs.vco-right-to-left sup,.vco-storyjs.vco-right-to-left tt,.vco-storyjs.vco-right-to-left var,.vco-storyjs.vco-right-to-left dd,.vco-storyjs.vco-right-to-left dl,.vco-storyjs.vco-right-to-left dt,.vco-storyjs.vco-right-to-left li,.vco-storyjs.vco-right-to-left ol,.vco-storyjs.vco-right-to-left ul,.vco-storyjs.vco-right-to-left fieldset,.vco-storyjs.vco-right-to-left form,.vco-storyjs.vco-right-to-left label,.vco-storyjs.vco-right-to-left legend,.vco-storyjs.vco-right-to-left button,.vco-storyjs.vco-right-to-left table,.vco-storyjs.vco-right-to-left caption,.vco-storyjs.vco-right-to-left tbody,.vco-storyjs.vco-right-to-left tfoot,.vco-storyjs.vco-right-to-left thead,.vco-storyjs.vco-right-to-left tr,.vco-storyjs.vco-right-to-left th,.vco-storyjs.vco-right-to-left td{direction:rtl;}
+.timeline-tooltip{position:absolute;z-index:205;display:block;visibility:visible;padding:5px;opacity:0;filter:alpha(opacity=0);font-size:15px;font-weight:bold;line-height:20px;font-size:12px;line-height:12px;}
+.timeline-tooltip.in{opacity:0.8;filter:alpha(opacity=80);}
+.timeline-tooltip.top{margin-top:-2px;}
+.timeline-tooltip.right{margin-left:2px;}
+.timeline-tooltip.bottom{margin-top:2px;}
+.timeline-tooltip.left{margin-left:-2px;}
+.timeline-tooltip.top .timeline-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
+.timeline-tooltip.left .timeline-tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
+.timeline-tooltip.bottom .timeline-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
+.timeline-tooltip.right .timeline-tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
+.timeline-tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
+.timeline-tooltip-arrow{position:absolute;width:0;height:0;}
+@media only screen and (max-width:480px),only screen and (max-device-width:480px){.vco-slider .nav-next,.vco-slider .nav-previous{display:none;}}@media (max-width:640px){}.vco-skinny .vco-slider .slider-item .content .layout-text-media .text .container{text-align:center !important;}
+.vco-skinny .vco-slider .slider-item .content .layout-text-media h2,.vco-skinny .vco-slider .slider-item .content .layout-text-media h3{display:block !important;width:100% !important;text-align:center !important;}
+.vco-skinny .vco-slider .slider-item .content .content-container{display:block;}.vco-skinny .vco-slider .slider-item .content .content-container .text{width:100%;max-width:100%;min-width:120px;display:block;}.vco-skinny .vco-slider .slider-item .content .content-container .text .container{display:block;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word;}
+.vco-skinny .vco-slider .slider-item .content .content-container .media{width:100%;min-width:50%;float:none;}.vco-skinny .vco-slider .slider-item .content .content-container .media .media-wrapper{margin-left:0px;margin-right:0px;width:100%;display:block;}
+.vco-skinny.vco-notouch .vco-slider .nav-previous,.vco-skinny.vco-notouch .vco-slider .nav-next{z-index:203;}.vco-skinny.vco-notouch .vco-slider .nav-previous .nav-container .date,.vco-skinny.vco-notouch .vco-slider .nav-next .nav-container .date,.vco-skinny.vco-notouch .vco-slider .nav-previous .nav-container .title,.vco-skinny.vco-notouch .vco-slider .nav-next .nav-container .title{filter:alpha(opacity=1);-khtml-opacity:0.01;-moz-opacity:0.01;opacity:0.01;}
+.vco-skinny.vco-notouch .vco-slider .nav-previous .nav-container .icon,.vco-skinny.vco-notouch .vco-slider .nav-next .nav-container .icon{filter:alpha(opacity=15);-khtml-opacity:0.15;-moz-opacity:0.15;opacity:0.15;}
+.vco-skinny.vco-notouch .vco-slider .nav-previous .icon{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-208px 0;width:24px;height:24px;overflow:hidden;margin-left:10px;}
+.vco-skinny.vco-notouch .vco-slider .nav-next .icon{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-232px 0;width:24px;height:24px;overflow:hidden;margin-left:66px;}
+.vco-skinny.vco-notouch .vco-slider .nav-previous:hover,.vco-skinny.vco-notouch .vco-slider .nav-next:hover{color:#aaaaaa !important;background-color:#333333;background-color:rgba(0, 0, 0, 0.65);-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;}.vco-skinny.vco-notouch .vco-slider .nav-previous:hover .nav-container .icon,.vco-skinny.vco-notouch .vco-slider .nav-next:hover .nav-container .icon,.vco-skinny.vco-notouch .vco-slider .nav-previous:hover .nav-container .date,.vco-skinny.vco-notouch .vco-slider .nav-next:hover .nav-container .date,.vco-skinny.vco-notouch .vco-slider .nav-previous:hover .nav-container .title,.vco-skinny.vco-notouch .vco-slider .nav-next:hover .nav-container .title{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;font-weight:bold;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;}
+.vco-skinny.vco-notouch .vco-slider .nav-previous:hover .nav-container .title,.vco-skinny.vco-notouch .vco-slider .nav-next:hover .nav-container .title{padding-bottom:5px;}
+.vco-skinny.vco-notouch .vco-slider .nav-previous:hover .nav-container .date,.vco-skinny.vco-notouch .vco-slider .nav-next:hover .nav-container .date,.vco-skinny.vco-notouch .vco-slider .nav-previous:hover .nav-container .title,.vco-skinny.vco-notouch .vco-slider .nav-next:hover .nav-container .title{padding-left:5px;padding-right:5px;}
+@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.vco-skinny.vco-notouch .vco-slider .nav-previous .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-208px 0;width:24px;height:24px;overflow:hidden;} .vco-skinny.vco-notouch .vco-slider .nav-next .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-232px 0;width:24px;height:24px;overflow:hidden;}}.vco-slider{width:100%;height:100%;overflow:hidden;}.vco-slider .slider-container-mask{text-align:center;width:100%;height:100%;overflow:hidden;}.vco-slider .slider-container-mask .slider-container{position:absolute;top:0px;left:-2160px;width:100%;height:100%;text-align:center;display:block;}.vco-slider .slider-container-mask .slider-container .slider-item-container{display:table-cell;vertical-align:middle;}
+.vco-notouch .vco-slider .nav-previous:hover,.vco-notouch .vco-slider .nav-next:hover{color:#333333;cursor:pointer;}
+.vco-notouch .vco-slider .nav-previous:hover .icon{margin-left:10px;}
+.vco-notouch .vco-slider .nav-next:hover .icon{margin-left:66px;}
+.vco-notouch .vco-slider .slider-item .content .content-container .media .media-container .wikipedia h4 a:hover{color:#0088cc;text-decoration:none;}
+.vco-notouch .vco-slider .slider-item .content .content-container .created-at:hover{filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;}
+.vco-notouch .vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments a:hover{text-decoration:none;}.vco-notouch .vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments a:hover h5{text-decoration:underline;}
+.vco-slider img,.vco-slider embed,.vco-slider object,.vco-slider video,.vco-slider iframe{max-width:100%;}
+.vco-slider .nav-previous,.vco-slider .nav-next{position:absolute;top:0px;width:100px;color:#DBDBDB;font-size:11px;}.vco-slider .nav-previous .nav-container,.vco-slider .nav-next .nav-container{height:100px;width:100px;position:absolute;}
+.vco-slider .nav-previous .icon,.vco-slider .nav-next .icon{margin-top:12px;margin-bottom:15px;}
+.vco-slider .nav-previous .date,.vco-slider .nav-next .date,.vco-slider .nav-previous .title,.vco-slider .nav-next .title{line-height:14px;}.vco-slider .nav-previous .date a,.vco-slider .nav-next .date a,.vco-slider .nav-previous .title a,.vco-slider .nav-next .title a{color:#999999;}
+.vco-slider .nav-previous .date small,.vco-slider .nav-next .date small,.vco-slider .nav-previous .title small,.vco-slider .nav-next .title small{display:none;}
+.vco-slider .nav-previous .date,.vco-slider .nav-next .date{font-size:13px;line-height:13px;font-weight:bold;text-transform:uppercase;margin-bottom:5px;}
+.vco-slider .nav-previous .title,.vco-slider .nav-next .title{font-size:11px;line-height:13px;}
+.vco-slider .nav-previous{float:left;text-align:left;}.vco-slider .nav-previous .icon{margin-left:15px;background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-160px 0;width:24px;height:24px;overflow:hidden;}
+.vco-slider .nav-previous .date,.vco-slider .nav-previous .title{text-align:left;padding-left:15px;}
+.vco-slider .nav-next{float:right;text-align:right;}.vco-slider .nav-next .icon{margin-left:61px;background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-184px 0;width:24px;height:24px;overflow:hidden;}
+.vco-slider .nav-next .date,.vco-slider .nav-next .title{text-align:right;padding-right:15px;}
+@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.vco-slider .nav-previous .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-160px 0;width:24px;height:24px;overflow:hidden;} .vco-slider .nav-next .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-184px 0;width:24px;height:24px;overflow:hidden;}}.vco-slider .slider-item{position:absolute;width:700px;height:100%;padding:0px;margin:0px;display:table;overflow-y:auto;}.vco-slider .slider-item .content{display:table-cell;vertical-align:middle;}.vco-slider .slider-item .content .pad-top .text .container{padding-top:15px;}
+.vco-slider .slider-item .content .pad-right .text .container{padding-right:15px;}
+.vco-slider .slider-item .content .pad-left .text .container{padding-left:30px;}
+.vco-slider .slider-item .content .pad-left .media.text-media .media-wrapper .media-container{border:none;background-color:#ffffff;}
+.vco-slider .slider-item .content .content-container{display:table;vertical-align:middle;}.vco-slider .slider-item .content .content-container .text{width:40%;max-width:50%;min-width:120px;display:table-cell;vertical-align:middle;}.vco-slider .slider-item .content .content-container .text .container{display:table-cell;vertical-align:middle;text-align:left;}.vco-slider .slider-item .content .content-container .text .container p{-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto;word-wrap:break-word;}
+.vco-slider .slider-item .content .content-container .text .container h2.date{font-size:15px;line-height:15px;font-weight:normal;}
+.vco-slider .slider-item .content .content-container .text .container .slide-tag{font-size:11px;font-weight:bold;color:#ffffff;background-color:#cccccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:baseline;white-space:nowrap;line-height:11px;padding:1px 3px 1px;margin-left:7.5px;margin-bottom:7.5px;}
+.vco-slider .slider-item .content .content-container .media{width:100%;min-width:50%;float:left;}.vco-slider .slider-item .content .content-container .media .media-wrapper{display:inline-block;margin-left:auto;margin-right:auto;}.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container{display:inline-block;line-height:0px;padding:0px;max-height:100%;}.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .media-frame,.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .media-image img{border:1px solid;border-color:#cccccc #999999 #999999 #cccccc;background-color:#ffffff;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .media-frame iframe{background-color:#ffffff;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .soundcloud{border:0;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .media-image{display:inline-block;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .media-shadow{position:relative;z-index:1;background:#ffffff;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .media-shadow:before,.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .media-shadow:after{z-index:-1;position:absolute;content:"";bottom:15px;left:10px;width:50%;top:80%;max-width:300px;background:#999999;-webkit-box-shadow:0 15px 10px #999999;-moz-box-shadow:0 15px 10px #999999;box-shadow:0 15px 10px #999999;-webkit-transform:rotate(-2deg);-moz-transform:rotate(-2deg);-ms-transform:rotate(-2deg);-o-transform:rotate(-2deg);transform:rotate(-2deg);}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .media-shadow::after{-webkit-transform:rotate(2deg);-moz-transform:rotate(2deg);-ms-transform:rotate(2deg);-o-transform:rotate(2deg);transform:rotate(2deg);right:10px;left:auto;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .plain-text{display:table;}.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .plain-text .container{display:table-cell;vertical-align:middle;font-size:15px;line-height:20px;color:#666666;}.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .plain-text .container p{margin-bottom:20px;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia{font-size:15px;line-height:20px;text-align:left;margin-left:auto;margin-right:auto;margin-bottom:15px;clear:both;}.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia .wiki-source{margin-bottom:15px;font-size:13px;line-height:19px;font-style:italic;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia h4{border-bottom:1px solid #cccccc;margin-bottom:5px;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia h4 a{color:#000000;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .wikipedia p{font-size:13px;line-height:19px;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .map{line-height:normal;z-index:200;text-align:left;background-color:#ffffff;}.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .map img{max-height:none !important;max-width:none !important;border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .map .google-map{height:100%;width:100%;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .map .map-attribution{position:absolute;z-index:201;bottom:0px;width:100%;overflow:hidden;}.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .map .map-attribution .attribution-text{height:19px;overflow:hidden;-webkit-user-select:none;line-height:19px;margin-right:60px;padding-left:65px;font-family:Arial,sans-serif;font-size:10px;color:#444;white-space:nowrap;color:#ffffff;text-shadow:1px 1px 1px #333333;text-align:center;}.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .map .map-attribution .attribution-text a{color:#ffffff !important;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .credit{color:#999999;text-align:right;display:block;margin:0 auto;margin-top:6px;font-size:10px;line-height:13px;}
+.vco-slider .slider-item .content .content-container .media .media-wrapper .media-container .caption{text-align:left;margin-top:10px;color:#666666;font-size:11px;line-height:14px;text-rendering:optimizeLegibility;word-wrap:break-word;}
+.vco-slider .slider-item .content .content-container .media.text-media .media-wrapper .media-container{border:none;background-color:#ffffff;}
+.vco-slider .slider-item .content .content-container .created-at{width:24px;height:24px;overflow:hidden;margin-left:7.5px;margin-top:2px;display:inline-block;float:right;filter:alpha(opacity=25);-khtml-opacity:0.25;-moz-opacity:0.25;opacity:0.25;}
+.vco-slider .slider-item .content .content-container .storify .created-at{background-repeat:no-repeat;background-position:-328px -96px;}
+.vco-slider .slider-item .content .content-container .twitter .created-at{background-repeat:no-repeat;background-position:-256px -24px;}
+.vco-slider .slider-item .content .content-container .googleplus .googleplus-content{font-size:13px;line-height:19px;margin-bottom:6px;padding-top:10px;background-color:#ffffff;color:#666666;}.vco-slider .slider-item .content .content-container .googleplus .googleplus-content p{font-size:13px;line-height:19px;}
+.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-title{font-size:24px;line-height:32px;margin-bottom:6px;padding-top:10px;background-color:#ffffff;color:#000000;}
+.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-annotation{font-size:15px;line-height:20px;color:#000000;border-bottom:1px solid #e3e3e3;padding-bottom:7.5px;margin-bottom:7.5px;}
+.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments{border-top:1px solid #e3e3e3;padding-top:15px;margin-top:15px;border-bottom:1px solid #e3e3e3;padding-bottom:15px;margin-bottom:15px;*zoom:1;}.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments:before,.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments:after{display:table;content:"";}
+.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments:after{clear:both;}
+.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments h5{margin-bottom:5px;}
+.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments div{width:50%;padding-left:15px;display:inline-block;}
+.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments p{font-size:11px;line-height:14px;margin-bottom:5px;}
+.vco-slider .slider-item .content .content-container .googleplus .googleplus-content .googleplus-attachments img{float:left;display:block;bottom:0;left:0;margin:auto;position:relative;right:0;top:0;width:40%;}
+.vco-slider .slider-item .content .content-container .googleplus .proflinkPrefix{color:#0088cc;}
+.vco-slider .slider-item .content .content-container .googleplus .created-at{background-repeat:no-repeat;background-position:-208px -72px;}
+.vco-slider .slider-item .content .content-container .twitter,.vco-slider .slider-item .content .content-container .plain-text-quote,.vco-slider .slider-item .content .content-container .storify,.vco-slider .slider-item .content .content-container .googleplus{text-align:left;margin-left:auto;margin-right:auto;margin-bottom:15px;clear:both;}.vco-slider .slider-item .content .content-container .twitter blockquote,.vco-slider .slider-item .content .content-container .plain-text-quote blockquote,.vco-slider .slider-item .content .content-container .storify blockquote,.vco-slider .slider-item .content .content-container .googleplus blockquote{color:#666666;}.vco-slider .slider-item .content .content-container .twitter blockquote p,.vco-slider .slider-item .content .content-container .plain-text-quote blockquote p,.vco-slider .slider-item .content .content-container .storify blockquote p,.vco-slider .slider-item .content .content-container .googleplus blockquote p{font-size:24px;line-height:32px;margin-bottom:6px;padding-top:10px;background-color:#ffffff;color:#000000;}
+.vco-slider .slider-item .content .content-container .twitter blockquote .quote-mark,.vco-slider .slider-item .content .content-container .plain-text-quote blockquote .quote-mark,.vco-slider .slider-item .content .content-container .storify blockquote .quote-mark,.vco-slider .slider-item .content .content-container .googleplus blockquote .quote-mark{color:#666666;}
+.vco-slider .slider-item .content .content-container .twitter blockquote{font-size:15px;}.vco-slider .slider-item .content .content-container .twitter blockquote p{font-size:24px;}
+.vco-slider .slider-item .content .content-container.layout-text-media .text-media{border-top:1px solid #e3e3e3;padding-top:15px;padding-right:0;}
+.vco-slider .slider-item .content .content-container.layout-text-media.pad-left .text-media{padding-right:15px;padding-top:0;border-right:1px solid #e3e3e3;border-top:0px solid #e3e3e3;}
+.vco-slider .slider-item .content .content-container.layout-text{width:100%;}.vco-slider .slider-item .content .content-container.layout-text .text{width:100%;max-width:100%;}.vco-slider .slider-item .content .content-container.layout-text .text .container{display:block;vertical-align:middle;padding:0px;width:90%;text-align:left;margin-left:auto;margin-right:auto;}
+.vco-slider .slider-item .content .content-container.layout-media{width:100%;}.vco-slider .slider-item .content .content-container.layout-media .text{width:100%;height:100%;max-width:100%;display:block;text-align:center;}.vco-slider .slider-item .content .content-container.layout-media .text .container{display:block;text-align:center;width:100%;margin-left:none;margin-right:none;}
+.vco-slider .slider-item .content .content-container.layout-media .media{width:100%;min-width:50%;float:none;}.vco-slider .slider-item .content .content-container.layout-media .media .media-wrapper .media-container{margin-left:auto;margin-right:auto;line-height:0px;padding:0px;}
+.vco-slider .slider-item .content .content-container.layout-media .twitter,.vco-slider .slider-item .content .content-container.layout-media .wikipedia,.vco-slider .slider-item .content .content-container.layout-media .googleplus{max-width:70%;}
+.storyjs-embed{background-color:#ffffff;margin-bottom:20px;border:1px solid #cccccc;padding-top:20px;padding-bottom:20px;clear:both;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-box-shadow:1px 1px 3px rgba(0, 0, 0, 0.35);-moz-box-shadow:1px 1px 3px rgba(0, 0, 0, 0.35);box-shadow:1px 1px 3px rgba(0, 0, 0, 0.35);}
+.storyjs-embed.full-embed{overflow:hidden;border:0 !important;padding:0 !important;margin:0 !important;clear:both;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;-webkit-box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;-moz-box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;}
+.storyjs-embed.sized-embed{overflow:hidden;border:1px solid #cccccc;padding-top:7px;padding-bottom:7px;margin:0 !important;clear:both;-webkit-box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;-moz-box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;box-shadow:0 0px 0px rgba(0, 0, 0, 0.25) !important;}
+.vco-storyjs{width:100%;height:100%;padding:0px;margin:0px;background-color:#ffffff;position:absolute;z-index:100;clear:both;overflow:hidden;}.vco-storyjs .vmm-clear:before,.vco-storyjs .vmm-clear:after{content:"";display:table;}
+.vco-storyjs .vmm-clear:after{clear:both;}
+.vco-storyjs .vmm-clear{*zoom:1;}
+.vco-storyjs .vco-feature{width:100%;}.vco-storyjs .vco-feature .slider,.vco-storyjs .vco-feature .vco-slider{width:100%;float:left;position:relative;z-index:10;padding-top:15px;-webkit-box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);}
+.vco-storyjs .vco-feedback{position:absolute;display:table;overflow:hidden;top:0px;left:0px;z-index:205;width:100%;height:100%;}
+.vco-storyjs div.vco-loading,.vco-storyjs div.vco-explainer{display:table;text-align:center;min-width:100px;margin-top:15px;height:100%;width:100%;background-color:#ffffff;}.vco-storyjs div.vco-loading .vco-loading-container,.vco-storyjs div.vco-explainer .vco-loading-container,.vco-storyjs div.vco-loading .vco-explainer-container,.vco-storyjs div.vco-explainer .vco-explainer-container{display:table-cell;vertical-align:middle;}.vco-storyjs div.vco-loading .vco-loading-container .vco-loading-icon,.vco-storyjs div.vco-explainer .vco-loading-container .vco-loading-icon,.vco-storyjs div.vco-loading .vco-explainer-container .vco-loading-icon,.vco-storyjs div.vco-explainer .vco-explainer-container .vco-loading-icon{display:block;background-repeat:no-repeat;vertical-align:middle;margin-left:auto;margin-right:auto;text-align:center;background-image:url(loading.gif?v3.4);width:28px;height:28px;}
+.vco-storyjs div.vco-loading .vco-loading-container .vco-gesture-icon,.vco-storyjs div.vco-explainer .vco-loading-container .vco-gesture-icon,.vco-storyjs div.vco-loading .vco-explainer-container .vco-gesture-icon,.vco-storyjs div.vco-explainer .vco-explainer-container .vco-gesture-icon{display:block;vertical-align:middle;margin-left:auto;margin-right:auto;text-align:center;background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-160px -160px;width:48px;height:48px;}
+.vco-storyjs div.vco-loading .vco-loading-container .vco-message,.vco-storyjs div.vco-explainer .vco-loading-container .vco-message,.vco-storyjs div.vco-loading .vco-explainer-container .vco-message,.vco-storyjs div.vco-explainer .vco-explainer-container .vco-message{display:block;}
+.vco-storyjs div.vco-loading .vco-loading-container .vco-message,.vco-storyjs div.vco-explainer .vco-loading-container .vco-message,.vco-storyjs div.vco-loading .vco-explainer-container .vco-message,.vco-storyjs div.vco-explainer .vco-explainer-container .vco-message,.vco-storyjs div.vco-loading .vco-loading-container .vco-message p,.vco-storyjs div.vco-explainer .vco-loading-container .vco-message p,.vco-storyjs div.vco-loading .vco-explainer-container .vco-message p,.vco-storyjs div.vco-explainer .vco-explainer-container .vco-message p{text-align:center;font-size:11px;line-height:13px;text-transform:uppercase;margin-top:7.5px;margin-bottom:7.5px;}
+.vco-storyjs div.vco-explainer{background-color:transparent;}
+.vco-storyjs .vco-bezel{background-color:#333333;background-color:rgba(0, 0, 0, 0.8);width:80px;height:50px;padding:50px;padding-top:25px;padding:25px 20px 50px 20px;margin:auto;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;}.vco-storyjs .vco-bezel .vco-message,.vco-storyjs .vco-bezel .vco-message p{color:#ffffff;font-weight:bold;}
+.vco-storyjs .vco-container.vco-main{position:absolute;top:0px;left:0px;padding-bottom:3px;width:auto;height:auto;margin:0px;clear:both;}
+.vco-storyjs img,.vco-storyjs embed,.vco-storyjs object,.vco-storyjs video,.vco-storyjs iframe{max-width:100%;}
+.vco-storyjs img{max-height:100%;border:1px solid #999999;}
+.vco-storyjs a{color:#0088cc;text-decoration:none;}
+.vco-storyjs a:hover{color:#005580;text-decoration:underline;}
+.vco-storyjs .vcard{float:right;margin-bottom:15px;}.vco-storyjs .vcard a{color:#333333;}
+.vco-storyjs .vcard a:hover{text-decoration:none;}.vco-storyjs .vcard a:hover .fn{text-decoration:underline;}
+.vco-storyjs .vcard .fn,.vco-storyjs .vcard .nickname{padding-left:42px;}
+.vco-storyjs .vcard .fn{display:block;font-weight:bold;}
+.vco-storyjs .vcard .nickname{margin-top:1px;display:block;color:#666666;}
+.vco-storyjs .vcard .avatar{float:left;display:block;width:32px;height:32px;}.vco-storyjs .vcard .avatar img{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}
+.vco-storyjs .thumbnail{width:24px;height:24px;overflow:hidden;float:left;margin:0;margin-right:1px;margin-top:6px;border:0;padding:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
+.vco-storyjs a.thumbnail:hover{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
+.vco-storyjs .thumbnail.thumb-plaintext{background-repeat:no-repeat;background-position:-280px -48px;}
+.vco-storyjs .thumbnail.thumb-quote{background-repeat:no-repeat;background-position:-232px -48px;}
+.vco-storyjs .thumbnail.thumb-document{background-repeat:no-repeat;background-position:-256px -48px;}
+.vco-storyjs .thumbnail.thumb-photo{background-repeat:no-repeat;background-position:-280px -24px;border:0;}.vco-storyjs .thumbnail.thumb-photo img{border:0px none #cccccc !important;}
+.vco-storyjs .thumbnail.thumb-twitter{background-repeat:no-repeat;background-position:-256px -24px;}
+.vco-storyjs .thumbnail.thumb-vimeo{background-repeat:no-repeat;background-position:-328px -48px;}
+.vco-storyjs .thumbnail.thumb-vine{background-repeat:no-repeat;background-position:-232px -72px;}
+.vco-storyjs .thumbnail.thumb-youtube{background-repeat:no-repeat;background-position:-328px -72px;}
+.vco-storyjs .thumbnail.thumb-video{background-repeat:no-repeat;background-position:-328px -24px;}
+.vco-storyjs .thumbnail.thumb-audio{background-repeat:no-repeat;background-position:-304px -24px;}
+.vco-storyjs .thumbnail.thumb-map{background-repeat:no-repeat;background-position:-208px -48px;}
+.vco-storyjs .thumbnail.thumb-website{background-repeat:no-repeat;background-position:-232px -24px;}
+.vco-storyjs .thumbnail.thumb-link{background-repeat:no-repeat;background-position:-184px -72px;}
+.vco-storyjs .thumbnail.thumb-wikipedia{background-repeat:no-repeat;background-position:-184px -48px;}
+.vco-storyjs .thumbnail.thumb-storify{background-repeat:no-repeat;background-position:-328px -96px;}
+.vco-storyjs .thumbnail.thumb-googleplus{background-repeat:no-repeat;background-position:-208px -72px;}
+.vco-storyjs thumbnail.thumb-instagram{background-repeat:no-repeat;background-position:-208px -96px;}
+.vco-storyjs thumbnail.thumb-instagram-full{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-232px -96px;width:48px;height:24px;}
+.vco-storyjs .thumb-storify-full{height:12px;background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-280px -96px;width:48px;}
+.vco-storyjs .thumbnail-inline{width:16px;height:14px;overflow:hidden;display:inline-block;margin-right:1px;margin-left:3px;margin-top:2px;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
+.vco-storyjs .twitter .thumbnail-inline{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-160px -96px;}
+.vco-storyjs .storify .thumbnail-inline{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-184px -96px;}
+.vco-storyjs .googleplus .thumbnail-inline{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-208px -96px;}
+.vco-storyjs .zFront{z-index:204;}
+@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.vco-storyjs div.vco-loading .vco-loading-container .vco-loading-icon,.vco-storyjs div.vco-explainer .vco-loading-container .vco-loading-icon,.vco-storyjs div.vco-loading .vco-explainer-container .vco-loading-icon,.vco-storyjs div.vco-explainer .vco-explainer-container .vco-loading-icon{background-image:url(loading@2x.gif?v3.4);} .vco-storyjs div.vco-loading .vco-loading-container .vco-gesture-icon,.vco-storyjs div.vco-explainer .vco-loading-container .vco-gesture-icon,.vco-storyjs div.vco-loading .vco-explainer-container .vco-gesture-icon,.vco-storyjs div.vco-explainer .vco-explainer-container .vco-gesture-icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-160px -160px;width:48px;height:48px;}}.vco-notouch .vco-navigation .vco-toolbar .zoom-in:hover,.vco-notouch .vco-navigation .vco-toolbar .zoom-out:hover,.vco-notouch .vco-navigation .vco-toolbar .back-home:hover{color:#0088cc;cursor:pointer;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;}
+.vco-notouch .vco-navigation .timenav .content .marker.active:hover{cursor:default;}.vco-notouch .vco-navigation .timenav .content .marker.active:hover .flag .flag-content h3,.vco-notouch .vco-navigation .timenav .content .marker.active:hover .flag-small .flag-content h3{color:#0088cc;}
+.vco-notouch .vco-navigation .timenav .content .marker.active:hover .flag .flag-content h4,.vco-notouch .vco-navigation .timenav .content .marker.active:hover .flag-small .flag-content h4{color:#999999;}
+.vco-notouch .vco-navigation .timenav .content .marker:hover .line{z-index:24;background:#999999;}
+.vco-notouch .vco-navigation .timenav .content .marker .flag:hover,.vco-notouch .vco-navigation .timenav .content .marker .flag-small:hover{cursor:pointer;}.vco-notouch .vco-navigation .timenav .content .marker .flag:hover .flag-content h3,.vco-notouch .vco-navigation .timenav .content .marker .flag-small:hover .flag-content h3{color:#333333;}
+.vco-notouch .vco-navigation .timenav .content .marker .flag:hover .flag-content h4,.vco-notouch .vco-navigation .timenav .content .marker .flag-small:hover .flag-content h4{color:#aaaaaa;}
+.vco-notouch .vco-navigation .timenav .content .marker .flag:hover .flag-content .thumbnail,.vco-notouch .vco-navigation .timenav .content .marker .flag-small:hover .flag-content .thumbnail{filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;}
+.vco-notouch .vco-navigation .timenav .content .marker .flag:hover{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:0 -53px;width:153px;height:53px;}
+.vco-notouch .vco-navigation .timenav .content .marker .flag-small:hover{height:56px;background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:0 -53px;width:153px;height:53px;}.vco-notouch .vco-navigation .timenav .content .marker .flag-small:hover .flag-content{height:36px;}.vco-notouch .vco-navigation .timenav .content .marker .flag-small:hover .flag-content h3{margin-top:5px;}
+.vco-notouch .vco-navigation .timenav .content .marker .flag-small.flag-small-last:hover{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:0 -109px;width:153px;height:26px;}.vco-notouch .vco-navigation .timenav .content .marker .flag-small.flag-small-last:hover .flag-content{height:14px;}.vco-notouch .vco-navigation .timenav .content .marker .flag-small.flag-small-last:hover .flag-content h3{margin-top:4px;}
+.vco-timeline .vco-navigation{clear:both;cursor:move;width:100%;height:200px;border-top:1px solid #e3e3e3;position:relative;}.vco-timeline .vco-navigation .vco-toolbar{position:absolute;top:45px;left:0px;z-index:202;background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:1px 1px 0px rgba(0, 0, 0, 0.2);-moz-box-shadow:1px 1px 0px rgba(0, 0, 0, 0.2);box-shadow:1px 1px 0px rgba(0, 0, 0, 0.2);}.vco-timeline .vco-navigation .vco-toolbar .zoom-in,.vco-timeline .vco-navigation .vco-toolbar .zoom-out,.vco-timeline .vco-navigation .vco-toolbar .back-home{font-weight:normal;font-size:10px;line-height:20px;top:0px;z-index:202;width:18px;height:18px;color:#333333;text-align:center;font-weight:bold;border:1px solid #ffffff;padding:5px;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
+.vco-timeline .vco-navigation .vco-toolbar .zoom-in .icon{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-256px 0;width:24px;height:24px;}
+.vco-timeline .vco-navigation .vco-toolbar .zoom-out .icon{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-280px 0;width:24px;height:24px;}
+.vco-timeline .vco-navigation .vco-toolbar .back-home .icon{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-328px 0;width:24px;height:24px;}
+.vco-timeline .vco-navigation .vco-toolbar.touch{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;background-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}.vco-timeline .vco-navigation .vco-toolbar.touch .zoom-in,.vco-timeline .vco-navigation .vco-toolbar.touch .zoom-out,.vco-timeline .vco-navigation .vco-toolbar.touch .back-home{width:40px;height:40px;padding:5px;background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:1px 1px 0px rgba(0, 0, 0, 0.2);-moz-box-shadow:1px 1px 0px rgba(0, 0, 0, 0.2);box-shadow:1px 1px 0px rgba(0, 0, 0, 0.2);-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;}
+.vco-timeline .vco-navigation .vco-toolbar.touch .zoom-in .icon{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-208px -160px;width:40px;height:40px;}
+.vco-timeline .vco-navigation .vco-toolbar.touch .zoom-out .icon{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-256px -160px;width:40px;height:40px;}
+.vco-timeline .vco-navigation .vco-toolbar.touch .back-home .icon{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-304px -160px;width:40px;height:40px;}
+.vco-timeline .vco-navigation .timenav-background{position:absolute;cursor:move;top:0px;left:0px;height:150px;width:100%;background-color:#e9e9e9;}.vco-timeline .vco-navigation .timenav-background .timenav-interval-background{position:absolute;top:151px;left:0px;background:#ffffff;width:100%;height:49px;-webkit-box-shadow:-1px -1px 7px rgba(0, 0, 0, 0.1);-moz-box-shadow:-1px -1px 7px rgba(0, 0, 0, 0.1);box-shadow:-1px -1px 7px rgba(0, 0, 0, 0.1);}.vco-timeline .vco-navigation .timenav-background .timenav-interval-background .top-highlight{position:absolute;top:-1px;left:0px;z-index:30;width:100%;height:1px;background:#ffffff;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;-webkit-box-shadow:1px 1px 5px rgba(0, 0, 0, 0.2);-moz-box-shadow:1px 1px 5px rgba(0, 0, 0, 0.2);box-shadow:1px 1px 5px rgba(0, 0, 0, 0.2);}
+.vco-timeline .vco-navigation .timenav-background .timenav-line{position:absolute;top:0px;left:50%;width:3px;height:150px;background-color:#0088cc;z-index:1;-webkit-box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);box-shadow:1px 1px 7px rgba(0, 0, 0, 0.3);}
+.vco-timeline .vco-navigation .timenav-background .timenav-indicator{position:absolute;top:-1px;left:50%;z-index:202;background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-160px -48px;width:24px;height:24px;}
+.vco-timeline .vco-navigation .timenav-background .timenav-tag div{height:50px;display:table;}.vco-timeline .vco-navigation .timenav-background .timenav-tag div h3{display:table-cell;vertical-align:middle;padding-left:65px;font-size:15px;color:#d0d0d0;font-weight:bold;text-shadow:0px 1px 1px #ffffff;}
+.vco-timeline .vco-navigation .timenav-background .timenav-tag-size-half{height:25px;}.vco-timeline .vco-navigation .timenav-background .timenav-tag-size-half div{height:25px;}
+.vco-timeline .vco-navigation .timenav-background .timenav-tag-size-full{height:50px;}.vco-timeline .vco-navigation .timenav-background .timenav-tag-size-full div{height:50px;}
+.vco-timeline .vco-navigation .timenav-background .timenav-tag-row-2,.vco-timeline .vco-navigation .timenav-background .timenav-tag-row-4,.vco-timeline .vco-navigation .timenav-background .timenav-tag-row-6{background:#f1f1f1;}
+.vco-timeline .vco-navigation .timenav-background .timenav-tag-row-1,.vco-timeline .vco-navigation .timenav-background .timenav-tag-row-3,.vco-timeline .vco-navigation .timenav-background .timenav-tag-row-5{background:#e9e9e9;}
+.vco-timeline .vco-navigation .timenav{position:absolute;top:0px;left:-250px;z-index:1;}.vco-timeline .vco-navigation .timenav .content{position:relative;}.vco-timeline .vco-navigation .timenav .content .marker.start{display:none;}
+.vco-timeline .vco-navigation .timenav .content .marker.active .dot{background:#0088cc;z-index:200;}
+.vco-timeline .vco-navigation .timenav .content .marker.active .line{z-index:199;background:#0088cc;width:1px;}.vco-timeline .vco-navigation .timenav .content .marker.active .line .event-line{background:#0088cc;filter:alpha(opacity=75);-khtml-opacity:0.75;-moz-opacity:0.75;opacity:0.75;}
+.vco-timeline .vco-navigation .timenav .content .marker.active .flag,.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small{z-index:200;}.vco-timeline .vco-navigation .timenav .content .marker.active .flag .flag-content,.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small .flag-content{height:36px;}.vco-timeline .vco-navigation .timenav .content .marker.active .flag .flag-content h3,.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small .flag-content h3{color:#0088cc;margin-top:5px;}
+.vco-timeline .vco-navigation .timenav .content .marker.active .flag .flag-content .thumbnail,.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small .flag-content .thumbnail{filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;}
+.vco-timeline .vco-navigation .timenav .content .marker.active .flag.row1,.vco-timeline .vco-navigation .timenav .content .marker.active .flag.row2,.vco-timeline .vco-navigation .timenav .content .marker.active .flag.row3,.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small.row1,.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small.row2,.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small.row3{z-index:200;}
+.vco-timeline .vco-navigation .timenav .content .marker.active .flag{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:0 -53px;width:153px;height:53px;}
+.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:0 -109px;width:153px;height:26px;}.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small .flag-content{height:14px;}.vco-timeline .vco-navigation .timenav .content .marker.active .flag-small .flag-content h3{margin-top:4px;}
+.vco-timeline .vco-navigation .timenav .content .marker{position:absolute;top:0px;left:150px;display:block;}.vco-timeline .vco-navigation .timenav .content .marker .dot{position:absolute;top:150px;left:0px;display:block;width:6px;height:6px;background:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;z-index:21;}
+.vco-timeline .vco-navigation .timenav .content .marker .line{position:absolute;top:0px;left:3px;width:1px;height:150px;background-color:#cccccc;background-color:rgba(204, 204, 204, 0.5);-webkit-box-shadow:1px 0 0 rgba(255, 255, 255, 0.5);-moz-box-shadow:1px 0 0 rgba(255, 255, 255, 0.5);box-shadow:1px 0 0 rgba(255, 255, 255, 0.5);z-index:22;}.vco-timeline .vco-navigation .timenav .content .marker .line .event-line{position:absolute;z-index:22;left:0px;height:1px;width:1px;background:#0088cc;filter:alpha(opacity=15);-khtml-opacity:0.15;-moz-opacity:0.15;opacity:0.15;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag,.vco-timeline .vco-navigation .timenav .content .marker .flag-small{position:absolute;top:15px;left:3px;padding:0px;display:block;z-index:23;width:153px;}.vco-timeline .vco-navigation .timenav .content .marker .flag .flag-content,.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content{padding:0px 7px 2px 6px;overflow:hidden;}.vco-timeline .vco-navigation .timenav .content .marker .flag .flag-content h3,.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content h3{font-weight:bold;font-size:15px;line-height:20px;font-size:11px;line-height:11px;color:#999999;margin-bottom:2px;}.vco-timeline .vco-navigation .timenav .content .marker .flag .flag-content h3 small,.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content h3 small{display:none;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag .flag-content h4,.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content h4{display:none;font-weight:normal;font-size:15px;line-height:20px;margin-top:5px;font-size:10px;line-height:10px;color:#aaaaaa;}.vco-timeline .vco-navigation .timenav .content .marker .flag .flag-content h4 small,.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content h4 small{display:none;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag .flag-content .thumbnail,.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail{margin-bottom:15px;margin-right:3px;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}.vco-timeline .vco-navigation .timenav .content .marker .flag .flag-content .thumbnail img,.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail img{width:22px;height:22px;max-height:none;max-width:none;border:0;border:1px solid #999999;padding:0;margin:0;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag{height:56px;background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:0 0;width:153px;height:53px;}.vco-timeline .vco-navigation .timenav .content .marker .flag .flag-content{height:36px;}.vco-timeline .vco-navigation .timenav .content .marker .flag .flag-content h3{margin-top:5px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:0 -135px;width:153px;height:26px;}.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content{height:14px;}.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content h3{margin-top:4px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail{width:16px;height:10px;margin-right:1px;margin-top:6px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-plaintext{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-280px -130px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-quote{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-232px -130px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-document{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-256px -130px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-photo{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-280px -120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-twitter{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-256px -120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-vimeo{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-328px -130px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-vine{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-160px -120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-youtube{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-304px -130px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-video{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-328px -120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-audio{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-304px -120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-map{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-208px -120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-website{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-232px -120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-link{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-232px -120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-wikipedia{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-184px -120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-storify{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-184px -130px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content .thumbnail.thumb-googleplus{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-208px -130px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small .flag-content thumbnail.thumb-instagram{background-image:url(timeline.png?v4.4);background-repeat:no-repeat;background-position:-208px -96px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag.row1{z-index:25;top:48px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag.row2{z-index:24;top:96px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag.row3{z-index:23;top:1px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small.row1{z-index:28;top:24px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small.row2{z-index:27;top:48px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small.row3{z-index:26;top:72px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small.row4{z-index:25;top:96px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small.row5{z-index:24;top:120px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag-small.row6{z-index:23;top:1px;}
+.vco-timeline .vco-navigation .timenav .content .marker .flag.zFront,.vco-timeline .vco-navigation .timenav .content .marker .flag-small.zFront{z-index:201;}
+.vco-timeline .vco-navigation .timenav .content .era{position:absolute;top:138px;left:150px;height:12px;display:block;overflow:hidden;}.vco-timeline .vco-navigation .timenav .content .era div{height:50px;width:100%;height:100%;line-height:0px;background:#e9e9e9;background:rgba(233, 233, 233, 0.33);}.vco-timeline .vco-navigation .timenav .content .era div h3,.vco-timeline .vco-navigation .timenav .content .era div h4{position:absolute;bottom:1px;padding-left:15px;font-size:15px;font-weight:bold;color:rgba(0, 136, 204, 0.35);text-shadow:0px 1px 1px #ffffff;}
+.vco-timeline .vco-navigation .timenav .content .era1 div{background:#cc4400;filter:alpha(opacity=10);-khtml-opacity:0.1;-moz-opacity:0.1;opacity:0.1;border-left:1px solid rgba(204, 68, 0, 0.1);border-right:1px solid rgba(255, 85, 0, 0.05);}.vco-timeline .vco-navigation .timenav .content .era1 div h3,.vco-timeline .vco-navigation .timenav .content .era1 div h4{color:rgba(204, 68, 0, 0.35);text-shadow:0px 1px 1px #ffffff;}
+.vco-timeline .vco-navigation .timenav .content .era2 div{background:#cc0022;filter:alpha(opacity=10);-khtml-opacity:0.1;-moz-opacity:0.1;opacity:0.1;border-left:1px solid rgba(204, 0, 34, 0.1);border-right:1px solid rgba(255, 0, 43, 0.05);}.vco-timeline .vco-navigation .timenav .content .era2 div h3,.vco-timeline .vco-navigation .timenav .content .era2 div h4{color:rgba(204, 0, 34, 0.35);text-shadow:0px 1px 1px #ffffff;}
+.vco-timeline .vco-navigation .timenav .content .era3 div{background:#0022cc;filter:alpha(opacity=10);-khtml-opacity:0.1;-moz-opacity:0.1;opacity:0.1;border-left:1px solid rgba(0, 34, 204, 0.1);border-right:1px solid rgba(0, 43, 255, 0.05);}.vco-timeline .vco-navigation .timenav .content .era3 div h3,.vco-timeline .vco-navigation .timenav .content .era3 div h4{color:rgba(0, 34, 204, 0.35);text-shadow:0px 1px 1px #ffffff;}
+.vco-timeline .vco-navigation .timenav .content .era4 div{background:#ccaa00;filter:alpha(opacity=10);-khtml-opacity:0.1;-moz-opacity:0.1;opacity:0.1;border-left:1px solid rgba(204, 170, 0, 0.1);border-right:1px solid rgba(255, 213, 0, 0.05);}.vco-timeline .vco-navigation .timenav .content .era4 div h3,.vco-timeline .vco-navigation .timenav .content .era4 div h4{color:rgba(204, 170, 0, 0.35);text-shadow:0px 1px 1px #ffffff;}
+.vco-timeline .vco-navigation .timenav .content .era5 div{background:#00ccaa;filter:alpha(opacity=10);-khtml-opacity:0.1;-moz-opacity:0.1;opacity:0.1;border-left:1px solid rgba(0, 204, 170, 0.1);border-right:1px solid rgba(0, 255, 213, 0.05);}.vco-timeline .vco-navigation .timenav .content .era5 div h3,.vco-timeline .vco-navigation .timenav .content .era5 div h4{color:rgba(0, 204, 170, 0.35);text-shadow:0px 1px 1px #ffffff;}
+.vco-timeline .vco-navigation .timenav .content .era6 div{background:#0088cc;filter:alpha(opacity=10);-khtml-opacity:0.1;-moz-opacity:0.1;opacity:0.1;border-left:1px solid rgba(0, 136, 204, 0.1);border-right:1px solid rgba(0, 170, 255, 0.05);}.vco-timeline .vco-navigation .timenav .content .era6 div h3,.vco-timeline .vco-navigation .timenav .content .era6 div h4{color:rgba(0, 136, 204, 0.35);text-shadow:0px 1px 1px #ffffff;}
+.vco-timeline .vco-navigation .timenav .time{position:absolute;left:0px;top:150px;height:50px;background-color:#ffffff;line-height:0px;}.vco-timeline .vco-navigation .timenav .time .time-interval-minor{max-width:none;height:6px;white-space:nowrap;position:absolute;top:-2px;left:8px;z-index:10;}.vco-timeline .vco-navigation .timenav .time .time-interval-minor .minor{position:relative;top:2px;display:inline-block;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAMCAMAAACdvocfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBopJgAADAAbwADHy2qHzAAAAAElFTkSuQmCC);width:100px;height:6px;background-position:center top;white-space:nowrap;color:#666666;margin-top:0px;padding-top:0px;}
+.vco-timeline .vco-navigation .timenav .time .time-interval{white-space:nowrap;position:absolute;top:5px;left:0px;}.vco-timeline .vco-navigation .timenav .time .time-interval div{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAMCAMAAACdvocfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRFzMzM////040VdgAAAAJ0Uk5T/wDltzBKAAAAEklEQVR42mJgYAQCBopJgAADAAbwADHy2qHzAAAAAElFTkSuQmCC);background-position:left top;background-repeat:no-repeat;padding-top:6px;position:absolute;height:3px;left:0px;display:block;font-weight:normal;font-size:10px;line-height:20px;text-transform:uppercase;text-align:left;text-indent:0px;white-space:nowrap;color:#666666;margin-left:0px;margin-right:0px;margin-top:0px;z-index:2;}.vco-timeline .vco-navigation .timenav .time .time-interval div strong{font-weight:bold;color:#000000;}
+.vco-timeline .vco-navigation .timenav .time .time-interval div.era{font-weight:bold;padding-top:0px;margin-top:-3px;margin-left:2px;background-image:none;}
+.vco-timeline .vco-navigation .timenav .time .time-interval .era1{color:#cc4400;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
+.vco-timeline .vco-navigation .timenav .time .time-interval .era2{color:#cc0022;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
+.vco-timeline .vco-navigation .timenav .time .time-interval .era3{color:#0022cc;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
+.vco-timeline .vco-navigation .timenav .time .time-interval .era4{color:#ccaa00;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
+.vco-timeline .vco-navigation .timenav .time .time-interval .era5{color:#00ccaa;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
+.vco-timeline .vco-navigation .timenav .time .time-interval .era6{color:#0088cc;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
+.vco-timeline .vco-navigation .timenav .time .time-interval-major{white-space:nowrap;position:absolute;top:5px;left:0px;}.vco-timeline .vco-navigation .timenav .time .time-interval-major div{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQAQMAAADtUYf0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyOTAzRjI3REIzNDcxMUUxQUQ3QUZCOThEODQ1NDhCNyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyOTAzRjI3RUIzNDcxMUUxQUQ3QUZCOThEODQ1NDhCNyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjI5MDNGMjdCQjM0NzExRTFBRDdBRkI5OEQ4NDU0OEI3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjI5MDNGMjdDQjM0NzExRTFBRDdBRkI5OEQ4NDU0OEI3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+DPWNfQAAAANQTFRFzMzMylJEJwAAAAtJREFUCB1jYMAPAAAgAAHDvpOtAAAAAElFTkSuQmCC);background-position:left top;background-repeat:no-repeat;padding-top:15px;position:absolute;height:15px;left:0px;display:block;font-weight:bold;font-size:12px;line-height:20px;text-transform:uppercase;text-align:left;text-indent:0px;white-space:nowrap;color:#333333;margin-left:0px;margin-right:0px;margin-top:1px;z-index:5;}.vco-timeline .vco-navigation .timenav .time .time-interval-major div strong{font-weight:bold;color:#000000;}
+@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.vco-notouch .vco-navigation .vco-toolbar .zoom-in .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-256px 0;width:24px;height:24px;} .vco-notouch .vco-navigation .vco-toolbar .zoom-out .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-280px 0;width:24px;height:24px;} .vco-notouch .vco-navigation .vco-toolbar .back-home .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-328px 0;width:24px;height:24px;} .vco-notouch .vco-navigation .vco-toolbar.touch .zoom-in .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-208px -160px;width:40px;height:40px;} .vco-notouch .vco-navigation .vco-toolbar.touch .zoom-out .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-256px -160px;width:40px;height:40px;} .vco-notouch .vco-navigation .vco-toolbar.touch .back-home .icon{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-304px -160px;width:40px;height:40px;} .vco-notouch .vco-navigation .timenav .content .marker .flag:hover{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:0 -53px;width:153px;height:53px;} .vco-notouch .vco-navigation .timenav .content .marker .flag-small:hover{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:0 -53px;width:153px;height:53px;} .vco-notouch .vco-navigation .timenav .content .marker .flag-small.flag-small-last:hover{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:0 -109px;width:153px;height:26px;} .vco-notouch .vco-navigation .timenav-background .timenav-indicator{background-image:url(timeline@2x.png?v4.4);background-size:352px 260px;background-repeat:no-repeat;background-position:-160px -48px;width:24px;height:24px;}}@media screen and (-webkit-max-device-pixel-ratio:1){}@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){}@media screen and (max-device-width:480px) and (orientation:portrait){.storyjs-embed.full-embed{height:557px !important;width:320px !important;}.storyjs-embed.full-embed .vco-feature{height:356px !important;}}@media screen and (max-device-width:480px) and (orientation:landscape){.storyjs-embed.full-embed{height:409px !important;width:480px !important;}.storyjs-embed.full-embed .vco-feature{height:208px !important;}}@media screen and (min-device-width:481px) and (orientation:portrait){}@media screen and (min-device-width:481px) and (orientation:landscape){}@media (max-width:480px){}@media only screen and (max-width:480px){}
diff --git a/vendor/timeline/css/timeline.png b/vendor/timeline/css/timeline.png
new file mode 100644
index 00000000..857d0d19
Binary files /dev/null and b/vendor/timeline/css/timeline.png differ
diff --git a/vendor/timeline/css/timeline@2x.png b/vendor/timeline/css/timeline@2x.png
new file mode 100644
index 00000000..41b4eb25
Binary files /dev/null and b/vendor/timeline/css/timeline@2x.png differ
diff --git a/vendor/timeline/js/timeline.js b/vendor/timeline/js/timeline.js
new file mode 100644
index 00000000..4c7745aa
--- /dev/null
+++ b/vendor/timeline/js/timeline.js
@@ -0,0 +1,10015 @@
+/*!
+ TimelineJS
+ Version 2.17
+ Designed and built by Zach Wise at VéritéCo
+
+ 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 http://mozilla.org/MPL/2.0/.
+
+*/
+
+/* **********************************************
+ Begin VMM.StoryJS.License.js
+********************************************** */
+
+/*!
+ StoryJS
+ Designed and built by Zach Wise at VéritéCo
+
+ 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 http://mozilla.org/MPL/2.0/.
+*/
+
+/* **********************************************
+ Begin VMM.js
+********************************************** */
+
+/**
+ * VéritéCo JS Core
+ * Designed and built by Zach Wise at VéritéCo zach@verite.co
+
+ * 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 http://mozilla.org/MPL/2.0/.
+
+*/
+
+
+/* Simple JavaScript Inheritance
+ By John Resig http://ejohn.org/
+ MIT Licensed.
+================================================== */
+(function() {
+ var initializing = false,
+ fnTest = /xyz/.test(function() {
+ xyz;
+ }) ? /\b_super\b/: /.*/;
+ // The base Class implementation (does nothing)
+ this.Class = function() {};
+
+ // Create a new Class that inherits from this class
+ Class.extend = function(prop) {
+ var _super = this.prototype;
+
+ // Instantiate a base class (but only create the instance,
+ // don't run the init constructor)
+ initializing = true;
+ var prototype = new this();
+ initializing = false;
+
+ // Copy the properties over onto the new prototype
+ for (var name in prop) {
+ // Check if we're overwriting an existing function
+ prototype[name] = typeof prop[name] == "function" &&
+ typeof _super[name] == "function" && fnTest.test(prop[name]) ?
+ (function(name, fn) {
+ return function() {
+ var tmp = this._super;
+
+ // Add a new ._super() method that is the same method
+ // but on the super-class
+ this._super = _super[name];
+
+ // The method only need to be bound temporarily, so we
+ // remove it when we're done executing
+ var ret = fn.apply(this, arguments);
+ this._super = tmp;
+
+ return ret;
+ };
+ })(name, prop[name]) :
+ prop[name];
+ }
+
+ // The dummy class constructor
+ function Class() {
+ // All construction is actually done in the init method
+ if (!initializing && this.init)
+ this.init.apply(this, arguments);
+ }
+
+ // Populate our constructed prototype object
+ Class.prototype = prototype;
+
+ // Enforce the constructor to be what we expect
+ Class.prototype.constructor = Class;
+
+ // And make this class extendable
+ Class.extend = arguments.callee;
+
+ return Class;
+ };
+})();
+
+/* Access to the Global Object
+ access the global object without hard-coding the identifier window
+================================================== */
+var global = (function () {
+ return this || (1,eval)('this');
+}());
+
+/* VMM
+================================================== */
+if (typeof VMM == 'undefined') {
+
+ /* Main Scope Container
+ ================================================== */
+ //var VMM = {};
+ var VMM = Class.extend({});
+
+ /* Debug
+ ================================================== */
+ VMM.debug = true;
+
+ /* Master Config
+ ================================================== */
+
+ VMM.master_config = ({
+
+ init: function() {
+ return this;
+ },
+
+ sizes: {
+ api: {
+ width: 0,
+ height: 0
+ }
+ },
+
+ vp: "Pellentesque nibh felis, eleifend id, commodo in, interdum vitae, leo",
+
+ api_keys_master: {
+ flickr: "RAIvxHY4hE/Elm5cieh4X5ptMyDpj7MYIxziGxi0WGCcy1s+yr7rKQ==",
+ //google: "jwNGnYw4hE9lmAez4ll0QD+jo6SKBJFknkopLS4FrSAuGfIwyj57AusuR0s8dAo=",
+ google: "uQKadH1VMlCsp560gN2aOiMz4evWkl1s34yryl3F/9FJOsn+/948CbBUvKLN46U=",
+ twitter: ""
+ },
+
+ timers: {
+ api: 7000
+ },
+
+ api: {
+ pushques: []
+
+ },
+
+ twitter: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ },
+
+ flickr: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ },
+
+ youtube: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ },
+
+ vimeo: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ },
+
+ vine: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ },
+
+ webthumb: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ },
+
+ googlemaps: {
+ active: false,
+ map_active: false,
+ places_active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ },
+
+ googledocs: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ },
+
+ googleplus: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ },
+
+ wikipedia: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: [],
+ tries: 0
+ },
+
+ soundcloud: {
+ active: false,
+ array: [],
+ api_loaded: false,
+ que: []
+ }
+
+ }).init();
+
+ //VMM.createElement(tag, value, cName, attrs, styles);
+ VMM.createElement = function(tag, value, cName, attrs, styles) {
+
+ var ce = "";
+
+ if (tag != null && tag != "") {
+
+ // TAG
+ ce += "<" + tag;
+ if (cName != null && cName != "") {
+ ce += " class='" + cName + "'";
+ };
+
+ if (attrs != null && attrs != "") {
+ ce += " " + attrs;
+ };
+
+ if (styles != null && styles != "") {
+ ce += " style='" + styles + "'";
+ };
+
+ ce += ">";
+
+ if (value != null && value != "") {
+ ce += value;
+ }
+
+ // CLOSE TAG
+ ce = ce + "" + tag + ">";
+ }
+
+ return ce;
+
+ };
+
+ VMM.createMediaElement = function(media, caption, credit) {
+
+ var ce = "";
+
+ var _valid = false;
+
+ ce += "
";
+
+ return ce;
+
+ };
+
+ // Hide URL Bar for iOS and Android by Scott Jehl
+ // https://gist.github.com/1183357
+
+ VMM.hideUrlBar = function () {
+ var win = window,
+ doc = win.document;
+
+ // If there's a hash, or addEventListener is undefined, stop here
+ if( !location.hash || !win.addEventListener ){
+
+ //scroll to 1
+ window.scrollTo( 0, 1 );
+ var scrollTop = 1,
+
+ //reset to 0 on bodyready, if needed
+ bodycheck = setInterval(function(){
+ if( doc.body ){
+ clearInterval( bodycheck );
+ scrollTop = "scrollTop" in doc.body ? doc.body.scrollTop : 1;
+ win.scrollTo( 0, scrollTop === 1 ? 0 : 1 );
+ }
+ }, 15 );
+
+ win.addEventListener( "load", function(){
+ setTimeout(function(){
+ //reset to hide addr bar at onload
+ win.scrollTo( 0, scrollTop === 1 ? 0 : 1 );
+ }, 0);
+ }, false );
+ }
+ };
+
+
+}
+
+/* Trace (console.log)
+================================================== */
+function trace( msg ) {
+ if (VMM.debug) {
+ if (window.console) {
+ console.log(msg);
+ } else if ( typeof( jsTrace ) != 'undefined' ) {
+ jsTrace.send( msg );
+ } else {
+ //alert(msg);
+ }
+ }
+}
+
+/* Array Remove - By John Resig (MIT Licensed)
+ http://ejohn.org/blog/javascript-array-remove/
+================================================== */
+Array.prototype.remove = function(from, to) {
+ var rest = this.slice((to || from) + 1 || this.length);
+ this.length = from < 0 ? this.length + from : from;
+ return this.push.apply(this, rest);
+}
+
+/* Extending Date to include Week
+================================================== */
+Date.prototype.getWeek = function() {
+ var onejan = new Date(this.getFullYear(),0,1);
+ return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
+}
+
+/* Extending Date to include Day of Year
+================================================== */
+Date.prototype.getDayOfYear = function() {
+ var onejan = new Date(this.getFullYear(),0,1);
+ return Math.ceil((this - onejan) / 86400000);
+}
+
+/* A MORE SPECIFIC TYPEOF();
+// http://rolandog.com/archives/2007/01/18/typeof-a-more-specific-typeof/
+================================================== */
+// type.of()
+var is={
+ Null:function(a){return a===null;},
+ Undefined:function(a){return a===undefined;},
+ nt:function(a){return(a===null||a===undefined);},
+ Function:function(a){return(typeof(a)==="function")?a.constructor.toString().match(/Function/)!==null:false;},
+ String:function(a){return(typeof(a)==="string")?true:(typeof(a)==="object")?a.constructor.toString().match(/string/i)!==null:false;},
+ Array:function(a){return(typeof(a)==="object")?a.constructor.toString().match(/array/i)!==null||a.length!==undefined:false;},
+ Boolean:function(a){return(typeof(a)==="boolean")?true:(typeof(a)==="object")?a.constructor.toString().match(/boolean/i)!==null:false;},
+ Date:function(a){return(typeof(a)==="date")?true:(typeof(a)==="object")?a.constructor.toString().match(/date/i)!==null:false;},
+ HTML:function(a){return(typeof(a)==="object")?a.constructor.toString().match(/html/i)!==null:false;},
+ Number:function(a){return(typeof(a)==="number")?true:(typeof(a)==="object")?a.constructor.toString().match(/Number/)!==null:false;},
+ Object:function(a){return(typeof(a)==="object")?a.constructor.toString().match(/object/i)!==null:false;},
+ RegExp:function(a){return(typeof(a)==="function")?a.constructor.toString().match(/regexp/i)!==null:false;}
+};
+var type={
+ of:function(a){
+ for(var i in is){
+ if(is[i](a)){
+ return i.toLowerCase();
+ }
+ }
+ }
+};
+
+
+
+
+
+/* **********************************************
+ Begin VMM.Library.js
+********************************************** */
+
+/* * LIBRARY ABSTRACTION
+================================================== */
+if(typeof VMM != 'undefined') {
+
+ VMM.smoothScrollTo = function(elem, duration, ease) {
+ if( typeof( jQuery ) != 'undefined' ){
+ var _ease = "easein",
+ _duration = 1000;
+
+ if (duration != null) {
+ if (duration < 1) {
+ _duration = 1;
+ } else {
+ _duration = Math.round(duration);
+ }
+
+ }
+
+ if (ease != null && ease != "") {
+ _ease = ease;
+ }
+
+ if (jQuery(window).scrollTop() != VMM.Lib.offset(elem).top) {
+ VMM.Lib.animate('html,body', _duration, _ease, {scrollTop: VMM.Lib.offset(elem).top})
+ }
+
+ }
+
+ };
+
+ VMM.attachElement = function(element, content) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).html(content);
+ }
+
+ };
+
+ VMM.appendElement = function(element, content) {
+
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).append(content);
+ }
+
+ };
+
+ VMM.getHTML = function(element) {
+ var e;
+ if( typeof( jQuery ) != 'undefined' ){
+ e = jQuery(element).html();
+ return e;
+ }
+
+ };
+
+ VMM.getElement = function(element, p) {
+ var e;
+ if( typeof( jQuery ) != 'undefined' ){
+ if (p) {
+ e = jQuery(element).parent().get(0);
+
+ } else {
+ e = jQuery(element).get(0);
+ }
+ return e;
+ }
+
+ };
+
+ VMM.bindEvent = function(element, the_handler, the_event_type, event_data) {
+ var e;
+ var _event_type = "click";
+ var _event_data = {};
+
+ if (the_event_type != null && the_event_type != "") {
+ _event_type = the_event_type;
+ }
+
+ if (_event_data != null && _event_data != "") {
+ _event_data = event_data;
+ }
+
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).bind(_event_type, _event_data, the_handler);
+
+ //return e;
+ }
+
+ };
+
+ VMM.unbindEvent = function(element, the_handler, the_event_type) {
+ var e;
+ var _event_type = "click";
+ var _event_data = {};
+
+ if (the_event_type != null && the_event_type != "") {
+ _event_type = the_event_type;
+ }
+
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).unbind(_event_type, the_handler);
+
+ //return e;
+ }
+
+ };
+
+ VMM.fireEvent = function(element, the_event_type, the_data) {
+ var e;
+ var _event_type = "click";
+ var _data = [];
+
+ if (the_event_type != null && the_event_type != "") {
+ _event_type = the_event_type;
+ }
+ if (the_data != null && the_data != "") {
+ _data = the_data;
+ }
+
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).trigger(_event_type, _data);
+
+ //return e;
+ }
+
+ };
+
+ VMM.getJSON = function(url, data, callback) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery.ajaxSetup({
+ timeout: 3000
+ });
+ /* CHECK FOR IE
+ ================================================== */
+ if ( VMM.Browser.browser == "Explorer" && parseInt(VMM.Browser.version, 10) >= 7 && window.XDomainRequest) {
+ trace("IE JSON");
+ var ie_url = url;
+ if (ie_url.match('^http://')){
+ return jQuery.getJSON(ie_url, data, callback);
+ } else if (ie_url.match('^https://')) {
+ ie_url = ie_url.replace("https://","http://");
+ return jQuery.getJSON(ie_url, data, callback);
+ } else {
+ return jQuery.getJSON(url, data, callback);
+ }
+
+ } else {
+ return jQuery.getJSON(url, data, callback);
+
+ }
+ }
+ }
+
+ VMM.parseJSON = function(the_json) {
+ if( typeof( jQuery ) != 'undefined' ){
+ return jQuery.parseJSON(the_json);
+ }
+ }
+
+ // ADD ELEMENT AND RETURN IT
+ VMM.appendAndGetElement = function(append_to_element, tag, cName, content) {
+ var e,
+ _tag = "
",
+ _class = "",
+ _content = "",
+ _id = "";
+
+ if (tag != null && tag != "") {
+ _tag = tag;
+ }
+
+ if (cName != null && cName != "") {
+ _class = cName;
+ }
+
+ if (content != null && content != "") {
+ _content = content;
+ }
+
+ if( typeof( jQuery ) != 'undefined' ){
+
+ e = jQuery(tag);
+
+ e.addClass(_class);
+ e.html(_content);
+
+ jQuery(append_to_element).append(e);
+
+ }
+
+ return e;
+
+ };
+
+ VMM.Lib = {
+
+ init: function() {
+ return this;
+ },
+
+ hide: function(element, duration) {
+ if (duration != null && duration != "") {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).hide(duration);
+ }
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).hide();
+ }
+ }
+
+ },
+
+ remove: function(element) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).remove();
+ }
+ },
+
+ detach: function(element) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).detach();
+ }
+ },
+
+ append: function(element, value) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).append(value);
+ }
+ },
+
+ prepend: function(element, value) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).prepend(value);
+ }
+ },
+
+ show: function(element, duration) {
+ if (duration != null && duration != "") {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).show(duration);
+ }
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).show();
+ }
+ }
+
+ },
+
+ load: function(element, callback_function, event_data) {
+ var _event_data = {elem:element}; // return element by default
+ if (_event_data != null && _event_data != "") {
+ _event_data = event_data;
+ }
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).load(_event_data, callback_function);
+ }
+ },
+
+ addClass: function(element, cName) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).addClass(cName);
+ }
+ },
+
+ removeClass: function(element, cName) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).removeClass(cName);
+ }
+ },
+
+ attr: function(element, aName, value) {
+ if (value != null && value != "") {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).attr(aName, value);
+ }
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ return jQuery(element).attr(aName);
+ }
+ }
+ },
+
+ prop: function(element, aName, value) {
+ if (typeof jQuery == 'undefined' || !/[1-9]\.[3-9].[1-9]/.test(jQuery.fn.jquery)) {
+ VMM.Lib.attribute(element, aName, value);
+ } else {
+ jQuery(element).prop(aName, value);
+ }
+ },
+
+ attribute: function(element, aName, value) {
+
+ if (value != null && value != "") {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).attr(aName, value);
+ }
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ return jQuery(element).attr(aName);
+ }
+ }
+ },
+
+ visible: function(element, show) {
+ if (show != null) {
+ if( typeof( jQuery ) != 'undefined' ){
+ if (show) {
+ jQuery(element).show(0);
+ } else {
+ jQuery(element).hide(0);
+ }
+ }
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ if ( jQuery(element).is(':visible')){
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+ },
+
+ css: function(element, prop, value) {
+
+ if (value != null && value != "") {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).css(prop, value);
+ }
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ return jQuery(element).css(prop);
+ }
+ }
+ },
+
+ cssmultiple: function(element, propval) {
+
+ if( typeof( jQuery ) != 'undefined' ){
+ return jQuery(element).css(propval);
+ }
+ },
+
+ offset: function(element) {
+ var p;
+ if( typeof( jQuery ) != 'undefined' ){
+ p = jQuery(element).offset();
+ }
+ return p;
+ },
+
+ position: function(element) {
+ var p;
+ if( typeof( jQuery ) != 'undefined' ){
+ p = jQuery(element).position();
+ }
+ return p;
+ },
+
+ width: function(element, s) {
+ if (s != null && s != "") {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).width(s);
+ }
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ return jQuery(element).width();
+ }
+ }
+ },
+
+ height: function(element, s) {
+ if (s != null && s != "") {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).height(s);
+ }
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ return jQuery(element).height();
+ }
+ }
+ },
+
+ toggleClass: function(element, cName) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).toggleClass(cName);
+ }
+ },
+
+ each:function(element, return_function) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).each(return_function);
+ }
+
+ },
+
+ html: function(element, str) {
+ var e;
+ if( typeof( jQuery ) != 'undefined' ){
+ e = jQuery(element).html();
+ return e;
+ }
+
+ if (str != null && str != "") {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).html(str);
+ }
+ } else {
+ var e;
+ if( typeof( jQuery ) != 'undefined' ){
+ e = jQuery(element).html();
+ return e;
+ }
+ }
+
+ },
+
+ find: function(element, selec) {
+ if( typeof( jQuery ) != 'undefined' ){
+ return jQuery(element).find(selec);
+ }
+ },
+
+ stop: function(element) {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).stop();
+ }
+ },
+
+ delay_animate: function(delay, element, duration, ease, att, callback_function) {
+ if (VMM.Browser.device == "mobile" || VMM.Browser.device == "tablet") {
+ var _tdd = Math.round((duration/1500)*10)/10,
+ __duration = _tdd + 's';
+
+ VMM.Lib.css(element, '-webkit-transition', 'all '+ __duration + ' ease');
+ VMM.Lib.css(element, '-moz-transition', 'all '+ __duration + ' ease');
+ VMM.Lib.css(element, '-o-transition', 'all '+ __duration + ' ease');
+ VMM.Lib.css(element, '-ms-transition', 'all '+ __duration + ' ease');
+ VMM.Lib.css(element, 'transition', 'all '+ __duration + ' ease');
+ VMM.Lib.cssmultiple(element, _att);
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ jQuery(element).delay(delay).animate(att, {duration:duration, easing:ease} );
+ }
+ }
+
+ },
+
+ animate: function(element, duration, ease, att, que, callback_function) {
+
+ var _ease = "easein",
+ _que = false,
+ _duration = 1000,
+ _att = {};
+
+ if (duration != null) {
+ if (duration < 1) {
+ _duration = 1;
+ } else {
+ _duration = Math.round(duration);
+ }
+
+ }
+
+ if (ease != null && ease != "") {
+ _ease = ease;
+ }
+
+ if (que != null && que != "") {
+ _que = que;
+ }
+
+
+ if (att != null) {
+ _att = att
+ } else {
+ _att = {opacity: 0}
+ }
+
+
+ if (VMM.Browser.device == "mobile" || VMM.Browser.device == "tablet") {
+
+ var _tdd = Math.round((_duration/1500)*10)/10,
+ __duration = _tdd + 's';
+
+ _ease = " cubic-bezier(0.33, 0.66, 0.66, 1)";
+ //_ease = " ease-in-out";
+ for (x in _att) {
+ if (Object.prototype.hasOwnProperty.call(_att, x)) {
+ trace(x + " to " + _att[x]);
+ VMM.Lib.css(element, '-webkit-transition', x + ' ' + __duration + _ease);
+ VMM.Lib.css(element, '-moz-transition', x + ' ' + __duration + _ease);
+ VMM.Lib.css(element, '-o-transition', x + ' ' + __duration + _ease);
+ VMM.Lib.css(element, '-ms-transition', x + ' ' + __duration + _ease);
+ VMM.Lib.css(element, 'transition', x + ' ' + __duration + _ease);
+ }
+ }
+
+ VMM.Lib.cssmultiple(element, _att);
+
+ } else {
+ if( typeof( jQuery ) != 'undefined' ){
+ if (callback_function != null && callback_function != "") {
+ jQuery(element).animate(_att, {queue:_que, duration:_duration, easing:_ease, complete:callback_function} );
+ } else {
+ jQuery(element).animate(_att, {queue:_que, duration:_duration, easing:_ease} );
+ }
+ }
+ }
+
+ }
+
+ }
+}
+
+if( typeof( jQuery ) != 'undefined' ){
+
+ /* XDR AJAX EXTENTION FOR jQuery
+ https://github.com/jaubourg/ajaxHooks/blob/master/src/ajax/xdr.js
+ ================================================== */
+ (function( jQuery ) {
+ if ( window.XDomainRequest ) {
+ jQuery.ajaxTransport(function( s ) {
+ if ( s.crossDomain && s.async ) {
+ if ( s.timeout ) {
+ s.xdrTimeout = s.timeout;
+ delete s.timeout;
+ }
+ var xdr;
+ return {
+ send: function( _, complete ) {
+ function callback( status, statusText, responses, responseHeaders ) {
+ xdr.onload = xdr.onerror = xdr.ontimeout = jQuery.noop;
+ xdr = undefined;
+ complete( status, statusText, responses, responseHeaders );
+ }
+ xdr = new XDomainRequest();
+ xdr.open( s.type, s.url );
+ xdr.onload = function() {
+ callback( 200, "OK", { text: xdr.responseText }, "Content-Type: " + xdr.contentType );
+ };
+ xdr.onerror = function() {
+ callback( 404, "Not Found" );
+ };
+ if ( s.xdrTimeout ) {
+ xdr.ontimeout = function() {
+ callback( 0, "timeout" );
+ };
+ xdr.timeout = s.xdrTimeout;
+ }
+ xdr.send( ( s.hasContent && s.data ) || null );
+ },
+ abort: function() {
+ if ( xdr ) {
+ xdr.onerror = jQuery.noop();
+ xdr.abort();
+ }
+ }
+ };
+ }
+ });
+ }
+ })( jQuery );
+
+ /* jQuery Easing v1.3
+ http://gsgd.co.uk/sandbox/jquery/easing/
+ ================================================== */
+ jQuery.easing['jswing'] = jQuery.easing['swing'];
+
+ jQuery.extend( jQuery.easing, {
+ def: 'easeOutQuad',
+ swing: function (x, t, b, c, d) {
+ //alert(jQuery.easing.default);
+ return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
+ },
+ easeInExpo: function (x, t, b, c, d) {
+ return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+ },
+ easeOutExpo: function (x, t, b, c, d) {
+ return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+ },
+ easeInOutExpo: function (x, t, b, c, d) {
+ if (t==0) return b;
+ if (t==d) return b+c;
+ if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+ return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+ },
+ easeInQuad: function (x, t, b, c, d) {
+ return c*(t/=d)*t + b;
+ },
+ easeOutQuad: function (x, t, b, c, d) {
+ return -c *(t/=d)*(t-2) + b;
+ },
+ easeInOutQuad: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t + b;
+ return -c/2 * ((--t)*(t-2) - 1) + b;
+ }
+ });
+}
+
+
+/* **********************************************
+ Begin VMM.Browser.js
+********************************************** */
+
+/* * DEVICE AND BROWSER DETECTION
+================================================== */
+if(typeof VMM != 'undefined' && typeof VMM.Browser == 'undefined') {
+
+ VMM.Browser = {
+ init: function () {
+ this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
+ this.version = this.searchVersion(navigator.userAgent)
+ || this.searchVersion(navigator.appVersion)
+ || "an unknown version";
+ this.OS = this.searchString(this.dataOS) || "an unknown OS";
+ this.device = this.searchDevice(navigator.userAgent);
+ this.orientation = this.searchOrientation(window.orientation);
+ },
+ searchOrientation: function(orientation) {
+ var orient = "";
+ if ( orientation == 0 || orientation == 180) {
+ orient = "portrait";
+ } else if ( orientation == 90 || orientation == -90) {
+ orient = "landscape";
+ } else {
+ orient = "normal";
+ }
+ return orient;
+ },
+ searchDevice: function(d) {
+ var device = "";
+ if (d.match(/Android/i) || d.match(/iPhone|iPod/i)) {
+ device = "mobile";
+ } else if (d.match(/iPad/i)) {
+ device = "tablet";
+ } else if (d.match(/BlackBerry/i) || d.match(/IEMobile/i)) {
+ device = "other mobile";
+ } else {
+ device = "desktop";
+ }
+ return device;
+ },
+ searchString: function (data) {
+ for (var i=0;i
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' hh:MM TT",
+ full_long_small_date: "hh:MM TT'
mmm d',' yyyy''"
+ },
+
+ month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
+ day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ day_abbr: ["Sun.", "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."],
+ hour: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
+ hour_suffix: ["am"],
+
+ //B.C.
+ bc_format: {
+ 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: "dddd', 'h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "dddd',' mmm d',' yyyy 'at' hh:MM TT",
+ full_long_small_date: "hh:MM TT'
'dddd',' mmm d',' yyyy''"
+ },
+
+ setLanguage: function(lang) {
+ trace("SET DATE LANGUAGE");
+ VMM.Date.dateformats = lang.dateformats;
+ VMM.Date.month = lang.date.month;
+ VMM.Date.month_abbr = lang.date.month_abbr;
+ VMM.Date.day = lang.date.day;
+ VMM.Date.day_abbr = lang.date.day_abbr;
+ dateFormat.i18n.dayNames = lang.date.day_abbr.concat(lang.date.day);
+ dateFormat.i18n.monthNames = lang.date.month_abbr.concat(lang.date.month);
+ },
+
+ parse: function(d, precision) {
+ "use strict";
+ var date,
+ date_array,
+ time_array,
+ time_parse,
+ p = {
+ year: false,
+ month: false,
+ day: false,
+ hour: false,
+ minute: false,
+ second: false,
+ millisecond: false
+ };
+
+ if (type.of(d) == "date") {
+ trace("DEBUG THIS, ITs A DATE");
+ date = d;
+ } else {
+ date = new Date(0, 0, 1, 0, 0, 0, 0);
+
+ if ( d.match(/,/gi) ) {
+ date_array = d.split(",");
+ for(var i = 0; i < date_array.length; i++) {
+ date_array[i] = parseInt(date_array[i], 10);
+ }
+ if (date_array[0]) {
+ date.setFullYear(date_array[0]);
+ p.year = true;
+ }
+ if (date_array[1]) {
+ date.setMonth(date_array[1] - 1);
+ p.month = true;
+ }
+ if (date_array[2]) {
+ date.setDate(date_array[2]);
+ p.day = true;
+ }
+ if (date_array[3]) {
+ date.setHours(date_array[3]);
+ p.hour = true;
+ }
+ if (date_array[4]) {
+ date.setMinutes(date_array[4]);
+ p.minute = true;
+ }
+ if (date_array[5]) {
+ date.setSeconds(date_array[5]);
+ p.second = true;
+ }
+ if (date_array[6]) {
+ date.setMilliseconds(date_array[6]);
+ p.millisecond = true;
+ }
+ } else if (d.match("/")) {
+ if (d.match(" ")) {
+
+ time_parse = d.split(" ");
+ if (d.match(":")) {
+ time_array = time_parse[1].split(":");
+ if (time_array[0] >= 0 ) {
+ date.setHours(time_array[0]);
+ p.hour = true;
+ }
+ if (time_array[1] >= 0) {
+ date.setMinutes(time_array[1]);
+ p.minute = true;
+ }
+ if (time_array[2] >= 0) {
+ date.setSeconds(time_array[2]);
+ p.second = true;
+ }
+ if (time_array[3] >= 0) {
+ date.setMilliseconds(time_array[3]);
+ p.millisecond = true;
+ }
+ }
+ date_array = time_parse[0].split("/");
+ } else {
+ date_array = d.split("/");
+ }
+ if (date_array[2]) {
+ date.setFullYear(date_array[2]);
+ p.year = true;
+ }
+ if (date_array[0] >= 0) {
+ date.setMonth(date_array[0] - 1);
+ p.month = true;
+ }
+ if (date_array[1] >= 0) {
+ if (date_array[1].length > 2) {
+ date.setFullYear(date_array[1]);
+ p.year = true;
+ } else {
+ date.setDate(date_array[1]);
+ p.day = true;
+ }
+ }
+ } else if (d.match("now")) {
+ var now = new Date();
+
+ date.setFullYear(now.getFullYear());
+ p.year = true;
+
+ date.setMonth(now.getMonth());
+ p.month = true;
+
+ date.setDate(now.getDate());
+ p.day = true;
+
+ if (d.match("hours")) {
+ date.setHours(now.getHours());
+ p.hour = true;
+ }
+ if (d.match("minutes")) {
+ date.setHours(now.getHours());
+ date.setMinutes(now.getMinutes());
+ p.hour = true;
+ p.minute = true;
+ }
+ if (d.match("seconds")) {
+ date.setHours(now.getHours());
+ date.setMinutes(now.getMinutes());
+ date.setSeconds(now.getSeconds());
+ p.hour = true;
+ p.minute = true;
+ p.second = true;
+ }
+ if (d.match("milliseconds")) {
+ date.setHours(now.getHours());
+ date.setMinutes(now.getMinutes());
+ date.setSeconds(now.getSeconds());
+ date.setMilliseconds(now.getMilliseconds());
+ p.hour = true;
+ p.minute = true;
+ p.second = true;
+ p.millisecond = true;
+ }
+ } else if (d.length <= 8) {
+ p.year = true;
+ date.setFullYear(parseInt(d, 10));
+ date.setMonth(0);
+ date.setDate(1);
+ date.setHours(0);
+ date.setMinutes(0);
+ date.setSeconds(0);
+ date.setMilliseconds(0);
+ } else if (d.match("T")) {
+ if (navigator.userAgent.match(/MSIE\s(?!9.0)/)) {
+ // IE 8 < Won't accept dates with a "-" in them.
+ time_parse = d.split("T");
+ if (d.match(":")) {
+ time_array = time_parse[1].split(":");
+ if (time_array[0] >= 1) {
+ date.setHours(time_array[0]);
+ p.hour = true;
+ }
+ if (time_array[1] >= 1) {
+ date.setMinutes(time_array[1]);
+ p.minute = true;
+ }
+ if (time_array[2] >= 1) {
+ date.setSeconds(time_array[2]);
+ p.second = true;
+ }
+ if (time_array[3] >= 1) {
+ date.setMilliseconds(time_array[3]);
+ p.millisecond = true;
+ }
+ }
+ date_array = time_parse[0].split("-");
+ if (date_array[0]) {
+ date.setFullYear(date_array[0]);
+ p.year = true;
+ }
+ if (date_array[1] >= 0) {
+ date.setMonth(date_array[1] - 1);
+ p.month = true;
+ }
+ if (date_array[2] >= 0) {
+ date.setDate(date_array[2]);
+ p.day = true;
+ }
+
+ } else {
+ date = new Date(Date.parse(d));
+ p.year = true;
+ p.month = true;
+ p.day = true;
+ p.hour = true;
+ p.minute = true;
+ p.second = true;
+ p.millisecond = true;
+ }
+ } else {
+ p.year = true;
+ p.month = true;
+ p.day = true;
+ p.hour = true;
+ p.minute = true;
+ p.second = true;
+ p.millisecond = true;
+ date = new Date(
+ parseInt(d.slice(0,4), 10),
+ parseInt(d.slice(4,6), 10) - 1,
+ parseInt(d.slice(6,8), 10),
+ parseInt(d.slice(8,10), 10),
+ parseInt(d.slice(10,12), 10)
+ );
+ }
+
+ }
+
+ if (precision != null && precision != "") {
+ return {
+ date: date,
+ precision: p
+ };
+ } else {
+ return date;
+ }
+ },
+
+
+
+ prettyDate: function(d, is_abbr, p, d2) {
+ var _date,
+ _date2,
+ format,
+ bc_check,
+ is_pair = false,
+ bc_original,
+ bc_number,
+ bc_string;
+
+ if (d2 != null && d2 != "" && typeof d2 != 'undefined') {
+ is_pair = true;
+ trace("D2 " + d2);
+ }
+
+
+ if (type.of(d) == "date") {
+
+ if (type.of(p) == "object") {
+ if (p.millisecond || p.second || p.minute) {
+ // YEAR MONTH DAY HOUR MINUTE
+ if (is_abbr){
+ format = VMM.Date.dateformats.time_no_seconds_short;
+ } else {
+ format = VMM.Date.dateformats.time_no_seconds_small_date;
+ }
+ } else if (p.hour) {
+ // YEAR MONTH DAY HOUR
+ if (is_abbr) {
+ format = VMM.Date.dateformats.time_no_seconds_short;
+ } else {
+ format = VMM.Date.dateformats.time_no_seconds_small_date;
+ }
+ } else if (p.day) {
+ // YEAR MONTH DAY
+ if (is_abbr) {
+ format = VMM.Date.dateformats.full_short;
+ } else {
+ format = VMM.Date.dateformats.full;
+ }
+ } else if (p.month) {
+ // YEAR MONTH
+ if (is_abbr) {
+ format = VMM.Date.dateformats.month_short;
+ } else {
+ format = VMM.Date.dateformats.month;
+ }
+ } else if (p.year) {
+ format = VMM.Date.dateformats.year;
+ } else {
+ format = VMM.Date.dateformats.year;
+ }
+
+ } else {
+
+ if (d.getMonth() === 0 && d.getDate() == 1 && d.getHours() === 0 && d.getMinutes() === 0 ) {
+ // YEAR ONLY
+ format = VMM.Date.dateformats.year;
+ } else if (d.getDate() <= 1 && d.getHours() === 0 && d.getMinutes() === 0) {
+ // YEAR MONTH
+ if (is_abbr) {
+ format = VMM.Date.dateformats.month_short;
+ } else {
+ format = VMM.Date.dateformats.month;
+ }
+ } else if (d.getHours() === 0 && d.getMinutes() === 0) {
+ // YEAR MONTH DAY
+ if (is_abbr) {
+ format = VMM.Date.dateformats.full_short;
+ } else {
+ format = VMM.Date.dateformats.full;
+ }
+ } else if (d.getMinutes() === 0) {
+ // YEAR MONTH DAY HOUR
+ if (is_abbr) {
+ format = VMM.Date.dateformats.time_no_seconds_short;
+ } else {
+ format = VMM.Date.dateformats.time_no_seconds_small_date;
+ }
+ } else {
+ // YEAR MONTH DAY HOUR MINUTE
+ if (is_abbr){
+ format = VMM.Date.dateformats.time_no_seconds_short;
+ } else {
+ format = VMM.Date.dateformats.full_long;
+ }
+ }
+ }
+
+ _date = dateFormat(d, format, false);
+ //_date = "Jan"
+ bc_check = _date.split(" ");
+
+ // BC TIME SUPPORT
+ for(var i = 0; i < bc_check.length; i++) {
+ if ( parseInt(bc_check[i], 10) < 0 ) {
+ trace("YEAR IS BC");
+ bc_original = bc_check[i];
+ bc_number = Math.abs( parseInt(bc_check[i], 10) );
+ bc_string = bc_number.toString() + " B.C.";
+ _date = _date.replace(bc_original, bc_string);
+ }
+ }
+
+
+ if (is_pair) {
+ _date2 = dateFormat(d2, format, false);
+ bc_check = _date2.split(" ");
+ // BC TIME SUPPORT
+ for(var j = 0; j < bc_check.length; j++) {
+ if ( parseInt(bc_check[j], 10) < 0 ) {
+ trace("YEAR IS BC");
+ bc_original = bc_check[j];
+ bc_number = Math.abs( parseInt(bc_check[j], 10) );
+ bc_string = bc_number.toString() + " B.C.";
+ _date2 = _date2.replace(bc_original, bc_string);
+ }
+ }
+
+ }
+ } else {
+ trace("NOT A VALID DATE?");
+ trace(d);
+ }
+
+ if (is_pair) {
+ return _date + " — " + _date2;
+ } else {
+ return _date;
+ }
+ }
+
+ }).init();
+
+ /*
+ * Date Format 1.2.3
+ * (c) 2007-2009 Steven Levithan
+ * MIT license
+ *
+ * Includes enhancements by Scott Trenda
+ * and Kris Kowal
+ *
+ * Accepts a date, a mask, or a date and a mask.
+ * Returns a formatted version of the given date.
+ * The date defaults to the current date/time.
+ * The mask defaults to dateFormat.masks.default.
+ */
+
+ var dateFormat = function () {
+ var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
+ timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
+ timezoneClip = /[^-+\dA-Z]/g,
+ pad = function (val, len) {
+ val = String(val);
+ len = len || 2;
+ while (val.length < len) val = "0" + val;
+ return val;
+ };
+
+ // Regexes and supporting functions are cached through closure
+ return function (date, mask, utc) {
+ var dF = dateFormat;
+
+ // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
+ if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
+ mask = date;
+ date = undefined;
+ }
+
+ // Passing date through Date applies Date.parse, if necessary
+ // Caused problems in IE
+ // date = date ? new Date(date) : new Date;
+ if (isNaN(date)) {
+ trace("invalid date " + date);
+ //return "";
+ }
+
+ mask = String(dF.masks[mask] || mask || dF.masks["default"]);
+
+ // Allow setting the utc argument via the mask
+ if (mask.slice(0, 4) == "UTC:") {
+ mask = mask.slice(4);
+ utc = true;
+ }
+
+ var _ = utc ? "getUTC" : "get",
+ d = date[_ + "Date"](),
+ D = date[_ + "Day"](),
+ m = date[_ + "Month"](),
+ y = date[_ + "FullYear"](),
+ H = date[_ + "Hours"](),
+ M = date[_ + "Minutes"](),
+ s = date[_ + "Seconds"](),
+ L = date[_ + "Milliseconds"](),
+ o = utc ? 0 : date.getTimezoneOffset(),
+ flags = {
+ d: d,
+ dd: pad(d),
+ ddd: dF.i18n.dayNames[D],
+ dddd: dF.i18n.dayNames[D + 7],
+ m: m + 1,
+ mm: pad(m + 1),
+ mmm: dF.i18n.monthNames[m],
+ mmmm: dF.i18n.monthNames[m + 12],
+ yy: String(y).slice(2),
+ yyyy: y,
+ h: H % 12 || 12,
+ hh: pad(H % 12 || 12),
+ H: H,
+ HH: pad(H),
+ M: M,
+ MM: pad(M),
+ s: s,
+ ss: pad(s),
+ l: pad(L, 3),
+ L: pad(L > 99 ? Math.round(L / 10) : L),
+ t: H < 12 ? "a" : "p",
+ tt: H < 12 ? "am" : "pm",
+ T: H < 12 ? "A" : "P",
+ TT: H < 12 ? "AM" : "PM",
+ Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
+ o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
+ S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
+ };
+
+ return mask.replace(token, function ($0) {
+ return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
+ });
+ };
+ }();
+
+ // Some common format strings
+ dateFormat.masks = {
+ "default": "ddd mmm dd yyyy HH:MM:ss",
+ shortDate: "m/d/yy",
+ mediumDate: "mmm d, yyyy",
+ longDate: "mmmm d, yyyy",
+ fullDate: "dddd, mmmm d, yyyy",
+ shortTime: "h:MM TT",
+ mediumTime: "h:MM:ss TT",
+ longTime: "h:MM:ss TT Z",
+ isoDate: "yyyy-mm-dd",
+ isoTime: "HH:MM:ss",
+ isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
+ isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
+ };
+
+ // Internationalization strings
+ dateFormat.i18n = {
+ dayNames: [
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
+ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
+ ],
+ monthNames: [
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
+ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
+ ]
+ };
+
+ // For convenience...
+ Date.prototype.format = function (mask, utc) {
+ return dateFormat(this, mask, utc);
+ };
+
+}
+
+/* **********************************************
+ Begin VMM.Util.js
+********************************************** */
+
+/* * Utilities and Useful Functions
+================================================== */
+if(typeof VMM != 'undefined' && typeof VMM.Util == 'undefined') {
+
+ VMM.Util = ({
+
+ init: function() {
+ return this;
+ },
+
+ /* * CORRECT PROTOCOL (DOES NOT WORK)
+ ================================================== */
+ correctProtocol: function(url) {
+ var loc = (window.parent.location.protocol).toString(),
+ prefix = "",
+ the_url = url.split("://", 2);
+
+ if (loc.match("http")) {
+ prefix = loc;
+ } else {
+ prefix = "https";
+ }
+
+ return prefix + "://" + the_url[1];
+
+ },
+
+ /* * MERGE CONFIG
+ ================================================== */
+ mergeConfig: function(config_main, config_to_merge) {
+ var x;
+ for (x in config_to_merge) {
+ if (Object.prototype.hasOwnProperty.call(config_to_merge, x)) {
+ config_main[x] = config_to_merge[x];
+ }
+ }
+ return config_main;
+ },
+
+ /* * GET OBJECT ATTRIBUTE BY INDEX
+ ================================================== */
+ getObjectAttributeByIndex: function(obj, index) {
+ if(typeof obj != 'undefined') {
+ var i = 0;
+ for (var attr in obj){
+ if (index === i){
+ return obj[attr];
+ }
+ i++;
+ }
+ return "";
+ } else {
+ return "";
+ }
+
+ },
+
+ /* * ORDINAL
+ ================================================== */
+ ordinal: function(n) {
+ return ["th","st","nd","rd"][(!( ((n%10) >3) || (Math.floor(n%100/10)==1)) ) * (n%10)];
+ },
+
+ /* * RANDOM BETWEEN
+ ================================================== */
+ //VMM.Util.randomBetween(1, 3)
+ randomBetween: function(min, max) {
+ return Math.floor(Math.random() * (max - min + 1) + min);
+ },
+
+ /* * AVERAGE
+ * http://jsfromhell.com/array/average
+ * var x = VMM.Util.average([2, 3, 4]);
+ * VMM.Util.average([2, 3, 4]).mean
+ ================================================== */
+ average: function(a) {
+ var r = {mean: 0, variance: 0, deviation: 0}, t = a.length;
+ for(var m, s = 0, l = t; l--; s += a[l]);
+ for(m = r.mean = s / t, l = t, s = 0; l--; s += Math.pow(a[l] - m, 2));
+ return r.deviation = Math.sqrt(r.variance = s / t), r;
+ },
+
+ /* * CUSTOM SORT
+ ================================================== */
+ customSort: function(a, b) {
+ var a1= a, b1= b;
+ if(a1== b1) return 0;
+ return a1> b1? 1: -1;
+ },
+
+ /* * Remove Duplicates from Array
+ ================================================== */
+ deDupeArray: function(arr) {
+ var i,
+ len=arr.length,
+ out=[],
+ obj={};
+
+ for (i=0;i h) {
+ _fit.height = h;
+ //_fit.width = Math.round((w / ratio_w) * ratio_h);
+ _fit.width = Math.round((h / ratio_h) * ratio_w);
+
+ if (_fit.width > w) {
+ trace("FIT: DIDN'T FIT!!! ")
+ }
+ }
+
+ return _fit;
+
+ },
+ r16_9: function(w,h) {
+ //VMM.Util.ratio.r16_9(w, h) // Returns corresponding number
+ if (w !== null && w !== "") {
+ return Math.round((h / 16) * 9);
+ } else if (h !== null && h !== "") {
+ return Math.round((w / 9) * 16);
+ }
+ },
+ r4_3: function(w,h) {
+ if (w !== null && w !== "") {
+ return Math.round((h / 4) * 3);
+ } else if (h !== null && h !== "") {
+ return Math.round((w / 3) * 4);
+ }
+ }
+ },
+
+ doubledigit: function(n) {
+ return (n < 10 ? '0' : '') + n;
+ },
+
+ /* * Returns a truncated segement of a long string of between min and max words. If possible, ends on a period (otherwise goes to max).
+ ================================================== */
+ truncateWords: function(s, min, max) {
+
+ if (!min) min = 30;
+ if (!max) max = min;
+
+ var initial_whitespace_rExp = /^[^A-Za-z0-9\'\-]+/gi;
+ var left_trimmedStr = s.replace(initial_whitespace_rExp, "");
+ var words = left_trimmedStr.split(" ");
+
+ var result = [];
+
+ min = Math.min(words.length, min);
+ max = Math.min(words.length, max);
+
+ for (var i = 0; i$&")
+ .replace(pseudoUrlPattern, "$1$2")
+ .replace(emailAddressPattern, "$1");
+ },
+
+ linkify_with_twitter: function(text,targets,is_touch) {
+
+ // http://, https://, ftp://
+ var urlPattern = /\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|]/gim;
+ var 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;
+ var url_replace = '$1$4$7$10$13$2$5$8$11$14$3$6$9$12';
+
+ // www. sans http:// or https://
+ var pseudoUrlPattern = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
+ function replaceURLWithHTMLLinks(text) {
+ var exp = /(\b(https?|ftp|file):\/\/([-A-Z0-9+&@#%?=~_|!:,.;]*)([-A-Z0-9+&@#%?\/=~_|!:,.;]*)[-A-Z0-9+&@#\/%=~_|])/ig;
+ return text.replace(exp, "$3");
+ }
+ // Email addresses
+ var emailAddressPattern = /(([a-zA-Z0-9_\-\.]+)@[a-zA-Z_]+?(?:\.[a-zA-Z]{2,6}))+/gim;
+
+ //var twitterHandlePattern = /(@([\w]+))/g;
+ var twitterHandlePattern = /\B@([\w-]+)/gm;
+ var twitterSearchPattern = /(#([\w]+))/g;
+
+ return text
+ //.replace(urlPattern, "$&")
+ .replace(url_pattern, url_replace)
+ .replace(pseudoUrlPattern, "$1$2")
+ .replace(emailAddressPattern, "$1")
+ .replace(twitterHandlePattern, "@$1");
+
+ // TURN THIS BACK ON TO AUTOMAGICALLY LINK HASHTAGS TO TWITTER SEARCH
+ //.replace(twitterSearchPattern, "$1");
+ },
+
+ linkify_wikipedia: function(text) {
+
+ var urlPattern = /]*>(.*?)<\/i>/gim;
+ return text
+ .replace(urlPattern, "$&")
+ .replace(/]*>/gim, "")
+ .replace(/<\/i>/gim, "")
+ .replace(/]*>/gim, "")
+ .replace(/<\/b>/gim, "");
+ },
+
+ /* * Turns plain text links into real links
+ ================================================== */
+ // VMM.Util.unlinkify();
+ unlinkify: function(text) {
+ if(!text) return text;
+ text = text.replace(/]*>/i,"");
+ text = text.replace(/<\/a>/i, "");
+ return text;
+ },
+
+ untagify: function(text) {
+ if (!text) {
+ return text;
+ }
+ text = text.replace(/<\s*\w.*?>/g,"");
+ return text;
+ },
+
+ /* * TK
+ ================================================== */
+ nl2br: function(text) {
+ return text.replace(/(\r\n|[\r\n]|\\n|\\r)/g,"
");
+ },
+
+ /* * Generate a Unique ID
+ ================================================== */
+ // VMM.Util.unique_ID(size);
+ unique_ID: function(size) {
+
+ var getRandomNumber = function(range) {
+ return Math.floor(Math.random() * range);
+ };
+
+ var getRandomChar = function() {
+ var chars = "abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
+ return chars.substr( getRandomNumber(62), 1 );
+ };
+
+ var randomID = function(size) {
+ var str = "";
+ for(var i = 0; i < size; i++) {
+ str += getRandomChar();
+ }
+ return str;
+ };
+
+ return randomID(size);
+ },
+ /* * Tells you if a number is even or not
+ ================================================== */
+ // VMM.Util.isEven(n)
+ isEven: function(n){
+ return (n%2 === 0) ? true : false;
+ },
+ /* * Get URL Variables
+ ================================================== */
+ // var somestring = VMM.Util.getUrlVars(str_url)["varname"];
+ getUrlVars: function(string) {
+
+ var str = string.toString();
+
+ if (str.match('&')) {
+ str = str.replace("&", "&");
+ } else if (str.match('&')) {
+ str = str.replace("&", "&");
+ } else if (str.match('&')) {
+ str = str.replace("&", "&");
+ }
+
+ var vars = [], hash;
+ var hashes = str.slice(str.indexOf('?') + 1).split('&');
+ for(var i = 0; i < hashes.length; i++) {
+ hash = hashes[i].split('=');
+ vars.push(hash[0]);
+ vars[hash[0]] = hash[1];
+ }
+
+
+ return vars;
+ },
+
+ /* * Cleans up strings to become real HTML
+ ================================================== */
+ toHTML: function(text) {
+
+ text = this.nl2br(text);
+ text = this.linkify(text);
+
+ return text.replace(/\s\s/g," ");
+ },
+
+ /* * Returns text strings as CamelCase
+ ================================================== */
+ toCamelCase: function(s,forceLowerCase) {
+
+ if(forceLowerCase !== false) forceLowerCase = true;
+
+ var sps = ((forceLowerCase) ? s.toLowerCase() : s).split(" ");
+
+ for(var i=0; i 1 ? '.' + x[1] : '';
+ var rgx = /(\d+)(\d{3})/;
+ while (rgx.test(x1)) {
+ x1 = x1.replace(rgx, '$1' + ',' + '$2');
+ }
+ return x1 + x2;
+ },
+ /* * Transform text to Title Case
+ ================================================== */
+ toTitleCase: function(t){
+ if ( VMM.Browser.browser == "Explorer" && parseInt(VMM.Browser.version, 10) >= 7) {
+ return t.replace("_", "%20");
+ } else {
+ var __TitleCase = {
+ __smallWords: ['a', 'an', 'and', 'as', 'at', 'but','by', 'en', 'for', 'if', 'in', 'of', 'on', 'or','the', 'to', 'v[.]?', 'via', 'vs[.]?'],
+
+ init: function() {
+ this.__smallRE = this.__smallWords.join('|');
+ this.__lowerCaseWordsRE = new RegExp('\\b(' + this.__smallRE + ')\\b', 'gi');
+ this.__firstWordRE = new RegExp('^([^a-zA-Z0-9 \\r\\n\\t]*)(' + this.__smallRE + ')\\b', 'gi');
+ this.__lastWordRE = new RegExp('\\b(' + this.__smallRE + ')([^a-zA-Z0-9 \\r\\n\\t]*)$', 'gi');
+ },
+
+ toTitleCase: function(string) {
+ var line = '';
+
+ var split = string.split(/([:.;?!][ ]|(?:[ ]|^)["“])/);
+
+ for (var i = 0; i < split.length; ++i) {
+ var s = split[i];
+
+ s = s.replace(/\b([a-zA-Z][a-z.'’]*)\b/g,this.__titleCaseDottedWordReplacer);
+
+ // lowercase the list of small words
+ s = s.replace(this.__lowerCaseWordsRE, this.__lowerReplacer);
+
+ // if the first word in the title is a small word then capitalize it
+ s = s.replace(this.__firstWordRE, this.__firstToUpperCase);
+
+ // if the last word in the title is a small word, then capitalize it
+ s = s.replace(this.__lastWordRE, this.__firstToUpperCase);
+
+ line += s;
+ }
+
+ // special cases
+ line = line.replace(/ V(s?)\. /g, ' v$1. ');
+ line = line.replace(/(['’])S\b/g, '$1s');
+ line = line.replace(/\b(AT&T|Q&A)\b/ig, this.__upperReplacer);
+
+ return line;
+ },
+
+ __titleCaseDottedWordReplacer: function (w) {
+ return (w.match(/[a-zA-Z][.][a-zA-Z]/)) ? w : __TitleCase.__firstToUpperCase(w);
+ },
+
+ __lowerReplacer: function (w) { return w.toLowerCase() },
+
+ __upperReplacer: function (w) { return w.toUpperCase() },
+
+ __firstToUpperCase: function (w) {
+ var split = w.split(/(^[^a-zA-Z0-9]*[a-zA-Z0-9])(.*)$/);
+ if (split[1]) {
+ split[1] = split[1].toUpperCase();
+ }
+
+ return split.join('');
+
+
+ }
+ };
+
+ __TitleCase.init();
+
+ t = t.replace(/_/g," ");
+ t = __TitleCase.toTitleCase(t);
+
+ return t;
+
+ }
+
+ }
+
+ }).init();
+}
+
+/* **********************************************
+ Begin LazyLoad.js
+********************************************** */
+
+/*jslint browser: true, eqeqeq: true, bitwise: true, newcap: true, immed: true, regexp: false */
+
+/*
+LazyLoad makes it easy and painless to lazily load one or more external
+JavaScript or CSS files on demand either during or after the rendering of a web
+page.
+
+Supported browsers include Firefox 2+, IE6+, Safari 3+ (including Mobile
+Safari), Google Chrome, and Opera 9+. Other browsers may or may not work and
+are not officially supported.
+
+Visit https://github.com/rgrove/lazyload/ for more info.
+
+Copyright (c) 2011 Ryan Grove
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the 'Software'), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+@module lazyload
+@class LazyLoad
+@static
+@version 2.0.3 (git)
+*/
+
+LazyLoad = (function (doc) {
+ // -- Private Variables ------------------------------------------------------
+
+ // User agent and feature test information.
+ var env,
+
+ // Reference to the element (populated lazily).
+ head,
+
+ // Requests currently in progress, if any.
+ pending = {},
+
+ // Number of times we've polled to check whether a pending stylesheet has
+ // finished loading. If this gets too high, we're probably stalled.
+ pollCount = 0,
+
+ // Queued requests.
+ queue = {css: [], js: []},
+
+ // Reference to the browser's list of stylesheets.
+ styleSheets = doc.styleSheets;
+
+ // -- Private Methods --------------------------------------------------------
+
+ /**
+ Creates and returns an HTML element with the specified name and attributes.
+
+ @method createNode
+ @param {String} name element name
+ @param {Object} attrs name/value mapping of element attributes
+ @return {HTMLElement}
+ @private
+ */
+ function createNode(name, attrs) {
+ var node = doc.createElement(name), attr;
+
+ for (attr in attrs) {
+ if (attrs.hasOwnProperty(attr)) {
+ node.setAttribute(attr, attrs[attr]);
+ }
+ }
+
+ return node;
+ }
+
+ /**
+ Called when the current pending resource of the specified type has finished
+ loading. Executes the associated callback (if any) and loads the next
+ resource in the queue.
+
+ @method finish
+ @param {String} type resource type ('css' or 'js')
+ @private
+ */
+ function finish(type) {
+ var p = pending[type],
+ callback,
+ urls;
+
+ if (p) {
+ callback = p.callback;
+ urls = p.urls;
+
+ urls.shift();
+ pollCount = 0;
+
+ // If this is the last of the pending URLs, execute the callback and
+ // start the next request in the queue (if any).
+ if (!urls.length) {
+ callback && callback.call(p.context, p.obj);
+ pending[type] = null;
+ queue[type].length && load(type);
+ }
+ }
+ }
+
+ /**
+ Populates the env variable with user agent and feature test
+ information.
+
+ @method getEnv
+ @private
+ */
+ function getEnv() {
+ var ua = navigator.userAgent;
+
+ env = {
+ // True if this browser supports disabling async mode on dynamically
+ // created script nodes. See
+ // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order
+ async: doc.createElement('script').async === true
+ };
+
+ (env.webkit = /AppleWebKit\//.test(ua))
+ || (env.ie = /MSIE/.test(ua))
+ || (env.opera = /Opera/.test(ua))
+ || (env.gecko = /Gecko\//.test(ua))
+ || (env.unknown = true);
+ }
+
+ /**
+ Loads the specified resources, or the next resource of the specified type
+ in the queue if no resources are specified. If a resource of the specified
+ type is already being loaded, the new request will be queued until the
+ first request has been finished.
+
+ When an array of resource URLs is specified, those URLs will be loaded in
+ parallel if it is possible to do so while preserving execution order. All
+ browsers support parallel loading of CSS, but only Firefox and Opera
+ support parallel loading of scripts. In other browsers, scripts will be
+ queued and loaded one at a time to ensure correct execution order.
+
+ @method load
+ @param {String} type resource type ('css' or 'js')
+ @param {String|Array} urls (optional) URL or array of URLs to load
+ @param {Function} callback (optional) callback function to execute when the
+ resource is loaded
+ @param {Object} obj (optional) object to pass to the callback function
+ @param {Object} context (optional) if provided, the callback function will
+ be executed in this object's context
+ @private
+ */
+ function load(type, urls, callback, obj, context) {
+ var _finish = function () { finish(type); },
+ isCSS = type === 'css',
+ nodes = [],
+ i, len, node, p, pendingUrls, url;
+
+ env || getEnv();
+
+ if (urls) {
+ // If urls is a string, wrap it in an array. Otherwise assume it's an
+ // array and create a copy of it so modifications won't be made to the
+ // original.
+ urls = typeof urls === 'string' ? [urls] : urls.concat();
+
+ // Create a request object for each URL. If multiple URLs are specified,
+ // the callback will only be executed after all URLs have been loaded.
+ //
+ // Sadly, Firefox and Opera are the only browsers capable of loading
+ // scripts in parallel while preserving execution order. In all other
+ // browsers, scripts must be loaded sequentially.
+ //
+ // All browsers respect CSS specificity based on the order of the link
+ // elements in the DOM, regardless of the order in which the stylesheets
+ // are actually downloaded.
+ if (isCSS || env.async || env.gecko || env.opera) {
+ // Load in parallel.
+ queue[type].push({
+ urls : urls,
+ callback: callback,
+ obj : obj,
+ context : context
+ });
+ } else {
+ // Load sequentially.
+ for (i = 0, len = urls.length; i < len; ++i) {
+ queue[type].push({
+ urls : [urls[i]],
+ callback: i === len - 1 ? callback : null, // callback is only added to the last URL
+ obj : obj,
+ context : context
+ });
+ }
+ }
+ }
+
+ // If a previous load request of this type is currently in progress, we'll
+ // wait our turn. Otherwise, grab the next item in the queue.
+ if (pending[type] || !(p = pending[type] = queue[type].shift())) {
+ return;
+ }
+
+ head || (head = doc.head || doc.getElementsByTagName('head')[0]);
+ pendingUrls = p.urls;
+
+ for (i = 0, len = pendingUrls.length; i < len; ++i) {
+ url = pendingUrls[i];
+
+ if (isCSS) {
+ node = env.gecko ? createNode('style') : createNode('link', {
+ href: url,
+ rel : 'stylesheet'
+ });
+ } else {
+ node = createNode('script', {src: url});
+ node.async = false;
+ }
+
+ node.className = 'lazyload';
+ node.setAttribute('charset', 'utf-8');
+
+ if (env.ie && !isCSS) {
+ node.onreadystatechange = function () {
+ if (/loaded|complete/.test(node.readyState)) {
+ node.onreadystatechange = null;
+ _finish();
+ }
+ };
+ } else if (isCSS && (env.gecko || env.webkit)) {
+ // Gecko and WebKit don't support the onload event on link nodes.
+ if (env.webkit) {
+ // In WebKit, we can poll for changes to document.styleSheets to
+ // figure out when stylesheets have loaded.
+ p.urls[i] = node.href; // resolve relative URLs (or polling won't work)
+ pollWebKit();
+ } else {
+ // In Gecko, we can import the requested URL into a