",
+ _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;
+ }
+ });
+}
diff --git a/source/js/Core/Core/VMM.LoadLib.js b/source/js/Core/Core/VMM.LoadLib.js
new file mode 100644
index 0000000..9f44ad4
--- /dev/null
+++ b/source/js/Core/Core/VMM.LoadLib.js
@@ -0,0 +1,49 @@
+/*
+ LoadLib
+ Designed and built by Zach Wise digitalartwork.net
+*/
+
+/* * CodeKit Import
+ * http://incident57.com/codekit/
+================================================== */
+// @codekit-prepend "../Library/LazyLoad.js";
+
+LoadLib = (function (doc) {
+ var loaded = [];
+
+ function isLoaded(url) {
+
+ var i = 0,
+ has_loaded = false;
+
+ for (i = 0; i < loaded.length; i++) {
+ if (loaded[i] == url) {
+ has_loaded = true;
+ }
+ }
+
+ if (has_loaded) {
+ return true;
+ } else {
+ loaded.push(url);
+ return false;
+ }
+
+ }
+
+ return {
+
+ css: function (urls, callback, obj, context) {
+ if (!isLoaded(urls)) {
+ LazyLoad.css(urls, callback, obj, context);
+ }
+ },
+
+ js: function (urls, callback, obj, context) {
+ if (!isLoaded(urls)) {
+ LazyLoad.js(urls, callback, obj, context);
+ }
+ }
+ };
+
+})(this.document);
diff --git a/source/js/Core/Core/VMM.Util.js b/source/js/Core/Core/VMM.Util.js
new file mode 100644
index 0000000..c0610e5
--- /dev/null
+++ b/source/js/Core/Core/VMM.Util.js
@@ -0,0 +1,478 @@
+/* * 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();
+}
\ No newline at end of file
diff --git a/source/js/Core/Core/VMM.js b/source/js/Core/Core/VMM.js
new file mode 100644
index 0000000..186cf0e
--- /dev/null
+++ b/source/js/Core/Core/VMM.js
@@ -0,0 +1,382 @@
+/**
+ * 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();
+ }
+ }
+ }
+};
+
+
+
diff --git a/source/js/Core/Embed/Embed.LoadLib.js b/source/js/Core/Embed/Embed.LoadLib.js
new file mode 100644
index 0000000..e8ea8ea
--- /dev/null
+++ b/source/js/Core/Embed/Embed.LoadLib.js
@@ -0,0 +1,50 @@
+/*
+ LoadLib
+ Designed and built by Zach Wise http://zachwise.com/
+ Extends LazyLoad
+*/
+
+/* * CodeKit Import
+ * http://incident57.com/codekit/
+================================================== */
+// @codekit-prepend "../Library/LazyLoad.js";
+
+LoadLib = (function (doc) {
+ var loaded = [];
+
+ function isLoaded(url) {
+
+ var i = 0,
+ has_loaded = false;
+
+ for (i = 0; i < loaded.length; i++) {
+ if (loaded[i] == url) {
+ has_loaded = true;
+ }
+ }
+
+ if (has_loaded) {
+ return true;
+ } else {
+ loaded.push(url);
+ return false;
+ }
+
+ }
+
+ return {
+
+ css: function (urls, callback, obj, context) {
+ if (!isLoaded(urls)) {
+ LazyLoad.css(urls, callback, obj, context);
+ }
+ },
+
+ js: function (urls, callback, obj, context) {
+ if (!isLoaded(urls)) {
+ LazyLoad.js(urls, callback, obj, context);
+ }
+ }
+ };
+
+})(this.document);
diff --git a/source/js/Core/Embed/Embed.js b/source/js/Core/Embed/Embed.js
new file mode 100644
index 0000000..5427591
--- /dev/null
+++ b/source/js/Core/Embed/Embed.js
@@ -0,0 +1,355 @@
+//StoryJS Embed Loader
+// Provide a bootstrap method for instantiating a timeline. On page load, check the definition of these window scoped variables in this order: [url_config, timeline_config, storyjs_config, config]. As soon as one of these is found to be defined with type 'object,' it will be used to automatically instantiate a timeline.
+
+/* CodeKit Import
+ http://incident57.com/codekit/
+================================================== */
+// @codekit-prepend "Embed.LoadLib.js";
+
+var WebFontConfig;
+
+if(typeof embed_path == 'undefined' || typeof embed_path == 'undefined') {
+ // REPLACE WITH YOUR BASEPATH IF YOU WANT OTHERWISE IT WILL TRY AND FIGURE IT OUT
+ var embed_path = getEmbedScriptPath("storyjs-embed.js").split("js/")[0];
+}
+
+function getEmbedScriptPath(scriptname) {
+ var scriptTags = document.getElementsByTagName('script'),
+ script_path = "",
+ script_path_end = "";
+ for(var i = 0; i < scriptTags.length; i++) {
+ if (scriptTags[i].src.match(scriptname)) {
+ script_path = scriptTags[i].src;
+ }
+ }
+ if (script_path != "") {
+ script_path_end = "/"
+ }
+ return script_path.split('?')[0].split('/').slice(0, -1).join('/') + script_path_end;
+}
+
+/* CHECK TO SEE IF A CONFIG IS ALREADY DEFINED (FOR EASY EMBED)
+================================================== */
+(function() {
+ if (typeof url_config == 'object') {
+ createStoryJS(url_config);
+ } else if (typeof timeline_config == 'object') {
+ createStoryJS(timeline_config);
+ } else if (typeof storyjs_config == 'object') {
+ createStoryJS(storyjs_config);
+ } else if (typeof config == 'object') {
+ createStoryJS(config);
+ } else {
+ // No existing config. Call createStoryJS(your_config) manually with a config
+ }
+})();
+
+/* CREATE StoryJS Embed
+================================================== */
+function createStoryJS(c, src) {
+ /* VARS
+ ================================================== */
+ var storyjs_embedjs, t, te, x,
+ isCDN = false,
+ js_version = "2.24",
+ jquery_version_required = "1.7.1",
+ jquery_version = "",
+ ready = {
+ timeout: "",
+ checks: 0,
+ finished: false,
+ js: false,
+ css: false,
+ jquery: false,
+ has_jquery: false,
+ language: false,
+ font: {
+ css: false,
+ js: false
+ }
+ },
+ path = {
+ base: embed_path,
+ css: embed_path + "css/",
+ js: embed_path + "js/",
+ locale: embed_path + "js/locale/",
+ jquery: "//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js",
+ font: {
+ google: false,
+ css: embed_path + "css/themes/font/",
+ js: "//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js"
+ }
+ },
+ storyjs_e_config = {
+ version: js_version,
+ debug: false,
+ type: 'timeline',
+ id: 'storyjs',
+ embed_id: 'timeline-embed',
+ embed: true,
+ width: '100%',
+ height: '100%',
+ source: 'https://docs.google.com/spreadsheet/pub?key=0Agl_Dv6iEbDadFYzRjJPUGktY0NkWXFUWkVIZDNGRHc&output=html',
+ lang: 'en',
+ font: 'default',
+ css: path.css + 'timeline.css?'+js_version,
+ js: '',
+ api_keys: {
+ google: "",
+ flickr: "",
+ twitter: ""
+ },
+ gmap_key: ""
+ },
+ font_presets = [
+ { name: "Merriweather-NewsCycle", google: [ 'News+Cycle:400,700:latin', 'Merriweather:400,700,900:latin' ] },
+ { name: "NewsCycle-Merriweather", google: [ 'News+Cycle:400,700:latin', 'Merriweather:300,400,700:latin' ] },
+ { name: "PoiretOne-Molengo", google: [ 'Poiret+One::latin', 'Molengo::latin' ] },
+ { name: "Arvo-PTSans", google: [ 'Arvo:400,700,400italic:latin', 'PT+Sans:400,700,400italic:latin' ] },
+ { name: "PTSerif-PTSans", google: [ 'PT+Sans:400,700,400italic:latin', 'PT+Serif:400,700,400italic:latin' ] },
+ { name: "PT", google: [ 'PT+Sans+Narrow:400,700:latin', 'PT+Sans:400,700,400italic:latin', 'PT+Serif:400,700,400italic:latin' ] },
+ { name: "DroidSerif-DroidSans", google: [ 'Droid+Sans:400,700:latin', 'Droid+Serif:400,700,400italic:latin' ] },
+ { name: "Lekton-Molengo", google: [ 'Lekton:400,700,400italic:latin', 'Molengo::latin' ] },
+ { name: "NixieOne-Ledger", google: [ 'Nixie+One::latin', 'Ledger::latin' ] },
+ { name: "AbrilFatface-Average", google: [ 'Average::latin', 'Abril+Fatface::latin' ] },
+ { name: "PlayfairDisplay-Muli", google: [ 'Playfair+Display:400,400italic:latin', 'Muli:300,400,300italic,400italic:latin' ] },
+ { name: "Rancho-Gudea", google: [ 'Rancho::latin', 'Gudea:400,700,400italic:latin' ] },
+ { name: "Bevan-PotanoSans", google: [ 'Bevan::latin', 'Pontano+Sans::latin' ] },
+ { name: "BreeSerif-OpenSans", google: [ 'Bree+Serif::latin', 'Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800:latin' ] },
+ { name: "SansitaOne-Kameron", google: [ 'Sansita+One::latin', 'Kameron:400,700:latin' ] },
+ { name: "Lora-Istok", google: [ 'Lora:400,700,400italic,700italic:latin', 'Istok+Web:400,700,400italic,700italic:latin' ] },
+ { name: "Pacifico-Arimo", google: [ 'Pacifico::latin', 'Arimo:400,700,400italic,700italic:latin' ] }
+ ];
+
+ /* BUILD CONFIG
+ ================================================== */
+ if (typeof c == 'object') {
+ for (x in c) {
+ if (Object.prototype.hasOwnProperty.call(c, x)) {
+ storyjs_e_config[x] = c[x];
+ }
+ }
+ }
+
+ if (typeof src != 'undefined') {
+ storyjs_e_config.source = src;
+ }
+
+ /* CDN VERSION?
+ ================================================== */
+ if (typeof url_config == 'object') {
+ isCDN = true;
+
+ /* IS THE SOURCE GOOGLE SPREADSHEET WITH JUST THE KEY?
+ ================================================== */
+ if (storyjs_e_config.source.match("docs.google.com") || storyjs_e_config.source.match("json") || storyjs_e_config.source.match("storify") ) {
+
+ } else {
+ storyjs_e_config.source = "https://docs.google.com/spreadsheet/pub?key=" + storyjs_e_config.source + "&output=html";
+ }
+
+ }
+
+ /* DETERMINE TYPE
+ ================================================== */
+ // Check for old installs still using the old method of language
+ if (storyjs_e_config.js.match("locale")) {
+ storyjs_e_config.lang = storyjs_e_config.js.split("locale/")[1].replace(".js", "");
+ storyjs_e_config.js = path.js + 'timeline-min.js?' + js_version;
+ }
+
+ if (storyjs_e_config.js.match("/")) {
+
+ } else {
+ storyjs_e_config.css = path.css + storyjs_e_config.type + ".css?" + js_version;
+
+ // Use unminified js file if in debug mode
+ storyjs_e_config.js = path.js + storyjs_e_config.type;
+ if (storyjs_e_config.debug) {
+ storyjs_e_config.js += ".js?" + js_version;
+ } else {
+ storyjs_e_config.js += "-min.js?" + js_version;
+ }
+
+ storyjs_e_config.id = "storyjs-" + storyjs_e_config.type;
+ }
+
+ /* PREPARE LANGUAGE
+ ================================================== */
+ if (storyjs_e_config.lang.match("/")) {
+ path.locale = storyjs_e_config.lang;
+ } else {
+ path.locale = path.locale + storyjs_e_config.lang + ".js?" + js_version;
+ }
+
+
+ /* PREPARE
+ ================================================== */
+ createEmbedDiv();
+
+ /* Load CSS
+ ================================================== */
+ LoadLib.css(storyjs_e_config.css, onloaded_css);
+
+ /* Load FONT
+ ================================================== */
+ if (storyjs_e_config.font == "default") {
+ ready.font.js = true;
+ ready.font.css = true;
+ } else {
+ // FONT CSS
+ var fn;
+ if (storyjs_e_config.font.match("/")) {
+ fn = storyjs_e_config.font.split(".css")[0].split("/");
+ path.font.name = fn[fn.length -1];
+ path.font.css = storyjs_e_config.font;
+ } else {
+ path.font.name = storyjs_e_config.font;
+ path.font.css = path.font.css + storyjs_e_config.font + ".css?" + js_version;
+ }
+ LoadLib.css(path.font.css, onloaded_font_css);
+
+ // FONT GOOGLE JS
+ for(var i = 0; i < font_presets.length; i++) {
+ if (path.font.name == font_presets[i].name) {
+ path.font.google = true;
+ WebFontConfig = {google: { families: font_presets[i].google }};
+ }
+ }
+
+ if (path.font.google) {
+ LoadLib.js(path.font.js, onloaded_font_js);
+ } else {
+ ready.font.js = true;
+ }
+
+ }
+
+ /* Load jQuery
+ ================================================== */
+ try {
+ ready.has_jquery = jQuery;
+ ready.has_jquery = true;
+ if (ready.has_jquery) {
+ var jquery_version = parseFloat(jQuery.fn.jquery);
+ if (jquery_version < parseFloat(jquery_version_required) ) {
+ //console.log("NOT THE REQUIRED VERSION OF JQUERY, LOADING THE REQUIRED VERSION");
+ //console.log("YOU HAVE VERSION " + jQuery.fn.jquery + ", JQUERY VERSION " + jquery_version_required + " OR ABOVE NEEDED");
+ ready.jquery = false;
+ } else {
+ ready.jquery = true;
+ }
+ }
+ } catch(err) {
+ ready.jquery = false;
+ }
+ if (!ready.jquery) {
+ LoadLib.js(path.jquery, onloaded_jquery);
+ } else {
+ onloaded_jquery();
+ }
+
+ /* On Loaded
+ ================================================== */
+
+ function onloaded_jquery() {
+ LoadLib.js(storyjs_e_config.js, onloaded_js);
+ }
+ function onloaded_js() {
+ ready.js = true;
+ if (storyjs_e_config.lang != "en") {
+ LazyLoad.js(path.locale, onloaded_language);
+ } else {
+ ready.language = true;
+ }
+ onloaded_check();
+ }
+ function onloaded_language() {
+ ready.language = true;
+ onloaded_check();
+ }
+ function onloaded_css() {
+ ready.css = true;
+ onloaded_check();
+ }
+ function onloaded_font_css() {
+ ready.font.css = true;
+ onloaded_check();
+ }
+ function onloaded_font_js() {
+ ready.font.js = true;
+ onloaded_check();
+ }
+ function onloaded_check() {
+ if (ready.checks > 40) {
+ return;
+ alert("Error Loading Files");
+ } else {
+ ready.checks++;
+ if (ready.js && ready.css && ready.font.css && ready.font.js && ready.language) {
+ if (!ready.finished) {
+ ready.finished = true;
+ buildEmbed();
+ }
+ } else {
+ ready.timeout = setTimeout('onloaded_check_again();', 250);
+ }
+ }
+ };
+ this.onloaded_check_again = function() {
+ onloaded_check();
+ };
+
+ /* Build Timeline
+ ================================================== */
+ function createEmbedDiv() {
+ var embed_classname = "storyjs-embed";
+
+ t = document.createElement('div');
+
+ if (storyjs_e_config.embed_id != "") {
+ te = document.getElementById(storyjs_e_config.embed_id);
+ } else {
+ te = document.getElementById("timeline-embed");
+ }
+
+ te.appendChild(t);
+ t.setAttribute("id", storyjs_e_config.id);
+
+ if (storyjs_e_config.width.toString().match("%") ) {
+ te.style.width = storyjs_e_config.width.split("%")[0] + "%";
+ } else {
+ storyjs_e_config.width = storyjs_e_config.width - 2;
+ te.style.width = (storyjs_e_config.width) + 'px';
+ }
+
+ if (storyjs_e_config.height.toString().match("%")) {
+ te.style.height = storyjs_e_config.height;
+ embed_classname += " full-embed";
+ te.style.height = storyjs_e_config.height.split("%")[0] + "%";
+
+ } else if (storyjs_e_config.width.toString().match("%")) {
+ embed_classname += " full-embed";
+ storyjs_e_config.height = storyjs_e_config.height - 16;
+ te.style.height = (storyjs_e_config.height) + 'px';
+ }else {
+ embed_classname += " sized-embed";
+ storyjs_e_config.height = storyjs_e_config.height - 16;
+ te.style.height = (storyjs_e_config.height) + 'px';
+ }
+
+ te.setAttribute("class", embed_classname);
+ te.setAttribute("className", embed_classname);
+ t.style.position = 'relative';
+ }
+
+ function buildEmbed() {
+ VMM.debug = storyjs_e_config.debug;
+ storyjs_embedjs = new VMM.Timeline(storyjs_e_config.id);
+ storyjs_embedjs.init(storyjs_e_config);
+ if (isCDN) {
+ VMM.bindEvent(global, onHeadline, "HEADLINE");
+ }
+ }
+
+}
diff --git a/source/js/Core/LICENSE b/source/js/Core/LICENSE
new file mode 100644
index 0000000..dfb076f
--- /dev/null
+++ b/source/js/Core/LICENSE
@@ -0,0 +1,361 @@
+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.
+
+
+-------------------------------------------
+
diff --git a/source/js/Core/Language/VMM.Language.js b/source/js/Core/Language/VMM.Language.js
new file mode 100644
index 0000000..3c7f8a0
--- /dev/null
+++ b/source/js/Core/Language/VMM.Language.js
@@ -0,0 +1,37 @@
+/* DEFAULT LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined' && typeof VMM.Language == 'undefined') {
+ VMM.Language = {
+ lang: "en",
+ api: {
+ wikipedia: "en"
+ },
+ date: {
+ 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."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Loading Timeline... ",
+ return_to_title: "Return to Title",
+ expand_timeline: "Expand Timeline",
+ contract_timeline: "Contract Timeline",
+ wikipedia: "From Wikipedia, the free encyclopedia",
+ loading_content: "Loading Content",
+ loading: "Loading"
+ }
+ }
+};
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/af.js b/source/js/Core/Language/locale/af.js
new file mode 100644
index 0000000..f40c86f
--- /dev/null
+++ b/source/js/Core/Language/locale/af.js
@@ -0,0 +1,38 @@
+/* Afrikaans LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "af",
+ api: {
+ wikipedia: "af"
+ },
+ date: {
+ month: ["Januarie", "Februarie", "Maart", "April", "Mei", "Junie", "Julie", "Augustus", "September", "Oktober", "November", "Desember"],
+ month_abbr: ["Jan.", "Feb.", "Maart", "April", "Mei", "Junei", "Julie", "Aug.", "Sept.", "Okt.", "Nov.", "Des."],
+ day: ["Sondag","Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag"],
+ day_abbr: ["Son.","Maan.", "Dins.", "Woen.", "Don.", "Vry.", "Sat."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''",
+ full_long: "d mmm',' yyyy 'om' HH:MM",
+ full_long_small_date: "HH:MM'
d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Die tydlyn laai... ",
+ return_to_title: "Begin voor",
+ expand_timeline: "Rek die tydlyn",
+ contract_timeline: "Krimp die tydlyn",
+ wikipedia: "Van Wikipedia, die gratis ensiklopedie",
+ loading_content: "Die inhoud laai",
+ loading: "Aan't laai"
+ }
+ }
+}
+
diff --git a/source/js/Core/Language/locale/ar.js b/source/js/Core/Language/locale/ar.js
new file mode 100644
index 0000000..46068a3
--- /dev/null
+++ b/source/js/Core/Language/locale/ar.js
@@ -0,0 +1,38 @@
+/* Arabic LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "ar",
+ right_to_left: true,
+ api: {
+ wikipedia: "ar"
+ },
+ date: {
+ month: ["كانون الثاني", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"],
+ month_abbr: ["كانون الثاني", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"],
+ day: ["الأحد","الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"],
+ day_abbr: ["الأحد","الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "h:MM:SS TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' hh:MM TT",
+ full_long_small_date: "hh:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "جاري التحميل... ",
+ return_to_title: "العودة",
+ expand_timeline: "تكبير العرض",
+ contract_timeline: "الاتفاقية",
+ wikipedia: "من ويكيبيديا, الموسوعة الحرة",
+ loading_content: "تحميل المحتوى",
+ loading: "تحميل"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/bg.js b/source/js/Core/Language/locale/bg.js
new file mode 100644
index 0000000..435d339
--- /dev/null
+++ b/source/js/Core/Language/locale/bg.js
@@ -0,0 +1,37 @@
+/* Bulgarian LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "bg",
+ api: {
+ wikipedia: "bg"
+ },
+ date: {
+ month: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"],
+ month_abbr: ["Ян.", "Фев.", "Март", "Апр.", "Май", "Юни", "Юли", "Авг.", "Септ.", "Окт.", "Ноем.", "Дек."],
+ day: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"],
+ day_abbr: ["Нед.", "Пон.", "Вт.", "Ср.", "Четв.", "Пет.", "Съб."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "h:MM:SS TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'd mmmm yyyy''",
+ full_long: "d mmm yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT'
d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Зареждане... ",
+ return_to_title: "В началото",
+ expand_timeline: "Разширяване",
+ contract_timeline: "Свиване",
+ wikipedia: "От Уикипедия, свободната енциклопедия",
+ loading_content: "Съдържанието се зарежда",
+ loading: "Зарежда се"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/ca.js b/source/js/Core/Language/locale/ca.js
new file mode 100644
index 0000000..08940a3
--- /dev/null
+++ b/source/js/Core/Language/locale/ca.js
@@ -0,0 +1,37 @@
+/* Catalan LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "ca",
+ api: {
+ wikipedia: "ca"
+ },
+ date: {
+ month: ['Gener','Febrer','Març','Abril','Maig','Juny','Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
+ month_abbr: ['Gen','Feb','Mar','Abr','Mai','Jun','Jul','Ago','Set','Oct','Nov','Des'],
+ day: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
+ day_abbr: ['Dg.','Dl.','Dt.','Dc.','Dj.','Dv.','Ds.']
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "''d mmmm yyyy'' HH:MM",
+ full_long: "dddd',' d mmm yyyy HH:MM",
+ full_long_small_date: "HH:MM'
d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Carregant cronologia...",
+ return_to_title: "Tornar al títol",
+ expand_timeline: "Ampliar la cronologia",
+ contract_timeline: "Reduir la cronologia",
+ wikipedia: "Des de Wikipedia, l'enciclopèdia lliure",
+ loading_content: "Carregant contingut",
+ loading: "Carregant"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/cz.js b/source/js/Core/Language/locale/cz.js
new file mode 100644
index 0000000..528883f
--- /dev/null
+++ b/source/js/Core/Language/locale/cz.js
@@ -0,0 +1,37 @@
+/* Czech LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "cz",
+ api: {
+ wikipedia: "cs"
+ },
+ date: {
+ month: ["ledna", "února", "března", "dubna", "května", "června", "července", "srpna", "září", "října", "listopadu", "prosince"],
+ month_abbr: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čen", "Čec", "Srp", "Zář", "Říj", "Lis", "Pro"],
+ day: ["neděle","pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota"],
+ day_abbr: ["Ne","Po", "Út", "St", "Čt", "Pá", "So"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d. mmm ",
+ full: "d. mmmm yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd. mmmm yyyy''",
+ full_long: "dddd d. mmm yyyy 'v' HH:MM",
+ full_long_small_date: "HH:MM'
dddd d. mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Načítám časovou osu... ",
+ return_to_title: "Zpět na začátek",
+ expand_timeline: "Rozbalit časovou osu",
+ contract_timeline: "Sbalit časovou osu",
+ wikipedia: "Zdroj: otevřená encyklopedie Wikipedia",
+ loading_content: "Nahrávám obsah",
+ loading: "Nahrávám"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/da.js b/source/js/Core/Language/locale/da.js
new file mode 100644
index 0000000..d737f29
--- /dev/null
+++ b/source/js/Core/Language/locale/da.js
@@ -0,0 +1,37 @@
+/* Danish LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "da",
+ api: {
+ wikipedia: "da"
+ },
+ date: {
+ month: ["januar", "februar", "marts", "april", "maj", "juni", "juli", "august", "september", "oktober", "november", "december"],
+ month_abbr: ["jan.", "feb.", "mar.", "apr.", "maj.", "jun.", "jul.", "aug.", "sep.", "okt.", "nov.", "dec."],
+ day: ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"],
+ day_abbr: ["sø.", "ma.", "ti.", "on.", "to.", "fr.", "lø."],
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d. mmm",
+ full: "d. mmmm',' yyyy",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd. mmmm',' yyyy''",
+ full_long: "dddd',' d. mmm',' yyyy 'um' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d. mmm yyyy''",
+ },
+ messages: {
+ loading_timeline: "Henter tidslinie...",
+ return_to_title: "Tilbage til titel",
+ expand_timeline: "Udvid tidslinien",
+ contract_timeline: "Træk tidslinien sammen",
+ wikipedia: "Fra Wikipedia",
+ loading_content: "Henter indhold",
+ loading: "Henter"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/de.js b/source/js/Core/Language/locale/de.js
new file mode 100644
index 0000000..4183f6f
--- /dev/null
+++ b/source/js/Core/Language/locale/de.js
@@ -0,0 +1,37 @@
+/* German / Deutsch LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "de",
+ api: {
+ wikipedia: "de"
+ },
+ date: {
+ month: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
+ month_abbr: ["Jan.", "Feb.", "März", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."],
+ day: ["Sonntag","Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
+ day_abbr: ["So.","Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d. mmm",
+ full: "d. mmmm yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd. mmmm yyyy''",
+ full_long: "dddd',' d. mmm yyyy 'um' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d. mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Chronologie wird geladen...",
+ return_to_title: "Zurück zum Anfang",
+ expand_timeline: "Chronologie vergrößern",
+ contract_timeline: "Chronologie verkleinern",
+ wikipedia: "Wikipedia, Die freie Enzyklopädie",
+ loading_content: "Loading",
+ loading: "Loading"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/el.js b/source/js/Core/Language/locale/el.js
new file mode 100644
index 0000000..50a5a0d
--- /dev/null
+++ b/source/js/Core/Language/locale/el.js
@@ -0,0 +1,37 @@
+/* Greek LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "en",
+ api: {
+ wikipedia: "en"
+ },
+ date: {
+ month: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"],
+ month_abbr: ["Ιαν.", "Φεβ.", "Μαρ.", "Απρ.", "Μαη", "Ιουν.", "Ιουλ.", "Αύγ.", "Σεπτ.", "Οκτ.", "Νοεμ.", "Δεκ."],
+ day: ["Κυριακή","Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"],
+ day_abbr: ["Κυρ.","Δευ.", "Τρίτη.", "Τετ.", "Πεμπ.", "Παρ.", "Σαβ."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "h:MM:SS TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Φόρτωση Timeline... ",
+ return_to_title: "Επιστροφή στον Τίτλο",
+ expand_timeline: "Μεγέθυνση",
+ contract_timeline: "Contract Timeline",
+ wikipedia: "From Wikipedia, the free encyclopedia",
+ loading_content: "Φόρτωση Περιεχομένου",
+ loading: "Γίνεται Φόρτωση"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/en-24hr.js b/source/js/Core/Language/locale/en-24hr.js
new file mode 100644
index 0000000..0026079
--- /dev/null
+++ b/source/js/Core/Language/locale/en-24hr.js
@@ -0,0 +1,37 @@
+/* English LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "en",
+ api: {
+ wikipedia: "en"
+ },
+ date: {
+ 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."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM TT",
+ time_no_seconds_small_date: "HH:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' HH:MM TT",
+ full_long_small_date: "HH:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Loading Timeline... ",
+ return_to_title: "Return to Title",
+ expand_timeline: "Expand Timeline",
+ contract_timeline: "Contract Timeline",
+ wikipedia: "From Wikipedia, the free encyclopedia",
+ loading_content: "Loading Content",
+ loading: "Loading"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/en.js b/source/js/Core/Language/locale/en.js
new file mode 100644
index 0000000..2a1e937
--- /dev/null
+++ b/source/js/Core/Language/locale/en.js
@@ -0,0 +1,37 @@
+/* English LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "en",
+ api: {
+ wikipedia: "en"
+ },
+ date: {
+ 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."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Loading Timeline... ",
+ return_to_title: "Return to Title",
+ expand_timeline: "Expand Timeline",
+ contract_timeline: "Contract Timeline",
+ wikipedia: "From Wikipedia, the free encyclopedia",
+ loading_content: "Loading Content",
+ loading: "Loading"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/es.js b/source/js/Core/Language/locale/es.js
new file mode 100644
index 0000000..40d8dc2
--- /dev/null
+++ b/source/js/Core/Language/locale/es.js
@@ -0,0 +1,37 @@
+/* Spanish LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "es",
+ api: {
+ wikipedia: "es"
+ },
+ date: {
+ month: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
+ month_abbr: ["Ene.", "Feb.", "Mar.", "Abr.", "May.", "Jun.", "Jul.", "Ago.", "Sep.", "Oct.", "Nov.", "Dic."],
+ day: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"],
+ day_abbr: ["Dom.", "Lun.", "Mar.", "Mié.", "Jue.", "Vie.", "Sáb."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "''d mmmm yyyy'' HH:MM",
+ full_long: "dddd',' d mmm yyyy HH:MM",
+ full_long_small_date: "HH:MM'
d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Cronología esta cargando",
+ return_to_title: "Volver al título",
+ expand_timeline: "Enlargar la cronología",
+ contract_timeline: "Reducir la cronología",
+ wikipedia: "Desde Wikipedia, la enciclopedia libre",
+ loading_content: "cargando",
+ loading: "cargando"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/eu.js b/source/js/Core/Language/locale/eu.js
new file mode 100644
index 0000000..6679c1e
--- /dev/null
+++ b/source/js/Core/Language/locale/eu.js
@@ -0,0 +1,38 @@
+/* Basque/ Euskara LANGUAGE
+================================================== */
+if (typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "eu",
+ api: {
+ wikipedia: "eu"
+ },
+ date: {
+ month: ["Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua"],
+ month_abbr: ["Urt.", "Ots.", "Mar.", "Api.", "Mai.", "Eka.", "Uzt.", "Abu.", "Ira.", "Urr.", "Aza.", "Abe."],
+ day: ["Igandea", "Astelehena", "Asteartea", "Asteazkena", "Osteguna", "Ostirala", "Larunbata"],
+ day_abbr: ["Iga.", "Asl.", "Asr.", "Asz.", "Osg.", "Osr.", "Lar."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "yyyy'(e)ko' mmmm",
+ full_short: "mmm'-'d",
+ full: "yyyy'(e)ko' mmmm'k' d",
+ time_short: "h:MM:SS TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'yyyy'-'mmm'-'d'",
+ full_long: "yyyy'(e)ko' mmmm'ren' d'(e)an,' hh:MM TT'(r)etan'",
+ full_long_small_date: "hh:MM TT'
'yyyy'-'mmm'-'d'"
+ },
+ messages: {
+ loading_timeline: "Kronologia kargatzen...",
+ return_to_title: "Titulura itzuli",
+ expand_timeline: "Handiago ikusi",
+ contract_timeline: "Txikiago ikusi",
+ wikipedia: "Wikipedia entziklopedia libretik",
+ loading_content: "Edukia kargatzen",
+ loading: "Kargatzen"
+ }
+ }
+}
+
diff --git a/source/js/Core/Language/locale/fi.js b/source/js/Core/Language/locale/fi.js
new file mode 100644
index 0000000..07f7435
--- /dev/null
+++ b/source/js/Core/Language/locale/fi.js
@@ -0,0 +1,37 @@
+/* Finnish LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "fi",
+ api: {
+ wikipedia: "fi"
+ },
+ date: {
+ month: ["tammikuuta", "helmikuuta", "maaliskuuta", "huhtikuuta", "toukokuuta", "kesäkuuta", "heinäkuuta", "elokuuta", "syyskuuta", "lokakuuta", "marraskuuta", "joulukuuta"],
+ month_abbr: ["tammi", "helmi", "maalis", "huhti", "touko", "kesä", "heinä", "elo", "syys", "loka", "marras", "joulu"],
+ day: ["sunnuntai","maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauauntai"],
+ day_abbr: ["su","ma", "ti", "ke", "to", "pe", "la"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d. mmm",
+ full: "d. mmmm yyyy",
+ time_short: "h:MM:SS TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'd. mmmm yyyy''",
+ full_long: "mmm d yyyy 'klo' h:MM TT",
+ full_long_small_date: "h:MM TT'
d. mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Ladataan aikajanaa… ",
+ return_to_title: "Takaisin etusivulle",
+ expand_timeline: "Laajenna aikajanaa",
+ contract_timeline: "Tiivistä aikajanaa",
+ wikipedia: "Wikipediasta",
+ loading_content: "Ladataan sisältöä",
+ loading: "Ladataan"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/fo.js b/source/js/Core/Language/locale/fo.js
new file mode 100644
index 0000000..f81e27d
--- /dev/null
+++ b/source/js/Core/Language/locale/fo.js
@@ -0,0 +1,37 @@
+/* Faroese LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "fo",
+ api: {
+ wikipedia: "fo"
+ },
+ date: {
+ month: ["januar", "februar", "mars", "aprÌl", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember"],
+ month_abbr: ["jan.", "febr.", "mars", "aprÌl", "mai", "juni", "juli", "aug.", "sept.", "okt.", "nov.", "des."],
+ day: ["sunnudagur","m·nadagur", "t˝sdagur", "mikudagur", "hÛsdagur", "frÌggjadagur", "leygardagur"],
+ day_abbr: ["sun.","m·n.", "t˝s.", "mik.", "hÛs.", "frÌ.", "ley."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d'.' mmm",
+ full: "d'.' mmmm yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd'.' mmmm yyyy''",
+ full_long: "d'.' mmmm yyyy 'klokkan' HH:MM",
+ full_long_small_date: "HH:MM'
'd'.' mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Lesur inn tíðarrás...",
+ return_to_title: "Víðka tíðarrás...",
+ expand_timeline: "Minka tíðarrás...",
+ contract_timeline: "Minka tíðarrás",
+ wikipedia: "Fr· Wikipedia",
+ loading_content: "Lesur inn tilfar",
+ loading: "Lesur inn"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/fr.js b/source/js/Core/Language/locale/fr.js
new file mode 100644
index 0000000..a8e503a
--- /dev/null
+++ b/source/js/Core/Language/locale/fr.js
@@ -0,0 +1,38 @@
+/* French LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "fr",
+ api: {
+ wikipedia: "fr"
+ },
+ date: {
+ month: ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"],
+ month_abbr: ["janv.", "févr.", "mars", "avril", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "dec."],
+ day: ["Dimanche","Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
+ day_abbr: ["Dim.","Lu.", "Ma.", "Me.", "Jeu.", "Vend.", "Sam."],
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''",
+ full_long: "dddd',' d mmm yyyy 'à' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Chargement de la frise en cours... ",
+ return_to_title: "Retour à la page d'accueil",
+ expand_timeline: "Elargir la frise",
+ contract_timeline: "Réduire la frise",
+ wikipedia: "Extrait de Wikipedia, l'encyclopédie libre",
+ loading_content: "Chargement",
+ loading: "Chargement"
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/gl.js b/source/js/Core/Language/locale/gl.js
new file mode 100644
index 0000000..034ad3b
--- /dev/null
+++ b/source/js/Core/Language/locale/gl.js
@@ -0,0 +1,37 @@
+/* Galician LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "gl",
+ api: {
+ wikipedia: "gl"
+ },
+ date: {
+ month: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"],
+ month_abbr: ["Xan.", "Feb.", "Mar.", "Abr.", "Mai.", "Xuñ.", "Xul.", "Ago.", "Set.", "Out.", "Nov.", "Dec."],
+ day: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"],
+ day_abbr: ["Dom.", "Lun.", "Mar.", "Mér.", "Xov.", "Ven.", "Sáb."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''",
+ full_long: "dddd',' d mmm yyyy 'um' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Cronoloxía esta cargando",
+ return_to_title: "Volver ao título",
+ expand_timeline: "Alongar a cronoloxía",
+ contract_timeline: "Acurtar a cronoloxía",
+ wikipedia: "Dende Wikipedia, a enciclopedia libre",
+ loading_content: "cargando",
+ loading: "cargando"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/he.js b/source/js/Core/Language/locale/he.js
new file mode 100644
index 0000000..d7d31a2
--- /dev/null
+++ b/source/js/Core/Language/locale/he.js
@@ -0,0 +1,38 @@
+/* Hebrew (beta) LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "he",
+ right_to_left: true,
+ api: {
+ wikipedia: "he"
+ },
+ date: {
+ month: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
+ month_abbr: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
+ day: ["ראשון","שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
+ day_abbr: ["יום א'","יום ב'", "יום ג'", "יום ד'", "יום ה'", "יום ו'", "שבת"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm,' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "d' mmm,' yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "טוען את ציר הזמן... ",
+ return_to_title: "חזור לכותרת",
+ expand_timeline: "הרחב את ציר הזמן",
+ contract_timeline: "צמצם את ציר הזמן",
+ wikipedia: "מויקיפדיה, האינציקלופדיה החופשית",
+ loading_content: "התוכן בטעינה...",
+ loading: "טוען..."
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/hu.js b/source/js/Core/Language/locale/hu.js
new file mode 100644
index 0000000..90dce30
--- /dev/null
+++ b/source/js/Core/Language/locale/hu.js
@@ -0,0 +1,37 @@
+/* Hungarian LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "hu",
+ api: {
+ wikipedia: "hu"
+ },
+ date: {
+ month: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"],
+ month_abbr: ["Jan.", "Febr.", "Márc", "Ápr.", "Máj.", "Jún.", "Júl.", "Aug.", "Szept.", "Okt.", "Nov.", "Dec."],
+ day: ["Vasárnap","Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat"],
+ day_abbr: ["Vas.","Hétfő", "Kedd", "Szer.", "Csüt.", "Pén.", "Szom."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "yyyy mmmm",
+ full_short: "mmm d",
+ full: "yyyy mmmm d",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM '
'yyyy mmmm d''",
+ full_long: "yyyy mmm d',' HH:MM",
+ full_long_small_date: "HH:MM '
yyyy mmm d''"
+ },
+ messages: {
+ loading_timeline: "Az idővonal betöltése... ",
+ return_to_title: "Vissza a címhez",
+ expand_timeline: "Nagyítás",
+ contract_timeline: "Kicsinyítés",
+ wikipedia: "A Wikipédiából, a szabad enciklopédiából",
+ loading_content: "Tartalom betöltése",
+ loading: "Betöltés"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/hy.js b/source/js/Core/Language/locale/hy.js
new file mode 100644
index 0000000..8c31aa3
--- /dev/null
+++ b/source/js/Core/Language/locale/hy.js
@@ -0,0 +1,37 @@
+/* Armenian LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "hy",
+ api: {
+ wikipedia: "hy"
+ },
+ date: {
+ month: ["Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"],
+ month_abbr: ["Հնվ.", "Փետ.", "Մար", "Ապր", "Մայ", "Հուն", "Հուլ", "Օգս.", "Սեպ.", "Հոկ.", "Նոյ.", "Դեկ."],
+ day: ["Կիրակի","Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"],
+ day_abbr: ["Կի.","Եկ.", "Եք.", "Չո.", "Հի.", "Ու.", "Շա."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm',' yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "H:MM",
+ time_no_seconds_small_date: "H:MM'
'd mmmm',' yyyy''",
+ full_long: "d mmm',' yyyy 'at' H:MM",
+ full_long_small_date: "H:MM '
d mmm',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Ժամանակագրությունը բեռնվում է... ",
+ return_to_title: "Վերադառնալ վերնագրին",
+ expand_timeline: "Լայնացնել ժամանակագրությունը",
+ contract_timeline: "Նեղացնել ժամանակագրությունը",
+ wikipedia: "Ըստ Վիքիպեդիա ազատ հանրագիտարանի",
+ loading_content: "Բովանդակությունը բեռնվում է",
+ loading: "Բեռնում"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/id.js b/source/js/Core/Language/locale/id.js
new file mode 100644
index 0000000..778ec6b
--- /dev/null
+++ b/source/js/Core/Language/locale/id.js
@@ -0,0 +1,37 @@
+/* Indonesian LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "id",
+ api: {
+ wikipedia: "id"
+ },
+ date: {
+ month: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
+ month_abbr: ["Jan.", "Feb.", "Maret", "April", "Mei", "Juni", "July", "Agus.", "Sept.", "Okt.", "Nov.", "Des."],
+ day: ["Ahad","Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"],
+ day_abbr: ["Ahad","Sen.", "Sel.", "Rabu", "Kamis", "Jum.", "Sab."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:SS",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''",
+ full_long: "dddd',' d mmm yyyy 'pukul' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Memuat Timeline... ",
+ return_to_title: "Kembali ke Judul",
+ expand_timeline: "Kembangkan Timeline",
+ contract_timeline: "Ciutkan Timeline",
+ wikipedia: "dari Wikipedia, ensiklopedia bebas",
+ loading_content: "Memuat Isi",
+ loading: "Memuat"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/is.js b/source/js/Core/Language/locale/is.js
new file mode 100644
index 0000000..ca0bb1f
--- /dev/null
+++ b/source/js/Core/Language/locale/is.js
@@ -0,0 +1,38 @@
+/* Icelandic LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "is",
+ api: {
+ wikipedia: "is"
+ },
+ date: {
+ month: ["janúar", "febrúar", "mars", "apríl", "maí", "júní", "júlí", "ágúst", "september", "október", "nóvember", "desember"],
+ month_abbr: ["jan.", "feb.", "mars", "apríl", "maí", "júní", "júlí", "ágúst", "sept.", "okt.", "nóv.", "des."],
+ day: ["sunnudagur", "mánudagur", "þriðjudagur", "miðvikudagur", "fimmtudagur", "föstudagur", "laugardagur"],
+ day_abbr: ["sun.","mán.", "þri.", "mið.", "fim.", "fös.", "lau."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "h:MM:SS TT",
+ time_no_seconds_short: "hh:MM TT",
+ time_no_seconds_small_date: "hh: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''"
+ },
+ messages: {
+ loading_timeline: "Raða upp tímalínu... ",
+ return_to_title: "Til baka á forsíðu",
+ expand_timeline: "Stækka tímalínu",
+ contract_timeline: "Minnka tímalínu",
+ wikipedia: "From Wikipedia, the free encyclopedia",
+ loading_content: "Raða",
+ loading: "Raða"
+
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/it.js b/source/js/Core/Language/locale/it.js
new file mode 100644
index 0000000..475d1db
--- /dev/null
+++ b/source/js/Core/Language/locale/it.js
@@ -0,0 +1,38 @@
+/* Italian LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "it",
+ api: {
+ wikipedia: "it"
+ },
+ date: {
+ month: ["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],
+ month_abbr: ["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],
+ day: ["Domenica","Lunedi","Martedi","Mercoledi","Giovedi","Venerdi","Sabato"],
+ day_abbr: ["Dom.","Lun.","Mar.","Mer.","Gio.","Ven.","Sab."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''",
+ full_long: "dddd',' d mmm yyyy 'um' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Loading Timeline... ",
+ return_to_title: "Return to Title",
+ expand_timeline: "Expand Timeline",
+ contract_timeline: "Contract Timeline",
+ wikipedia: "Wikipedia, L’enciclopedia libera",
+ loading_content: "Loading Content",
+ loading: "Loading"
+
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/iw.js b/source/js/Core/Language/locale/iw.js
new file mode 100644
index 0000000..8963181
--- /dev/null
+++ b/source/js/Core/Language/locale/iw.js
@@ -0,0 +1,39 @@
+/* Hebrew (beta) LANGUAGE
+================================================== */
+trace("Language code 'iw' for Hebrew is deprecated. Use 'he' instead.")
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "iw",
+ right_to_left: true,
+ api: {
+ wikipedia: "he"
+ },
+ date: {
+ month: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
+ month_abbr: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"],
+ day: ["ראשון","שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"],
+ day_abbr: ["יום א'","יום ב'", "יום ג'", "יום ד'", "יום ה'", "יום ו'", "שבת"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm,' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "d' mmm,' yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "טוען את ציר הזמן... ",
+ return_to_title: "חזור לכותרת",
+ expand_timeline: "הרחב את ציר הזמן",
+ contract_timeline: "צמצם את ציר הזמן",
+ wikipedia: "מויקיפדיה, האינציקלופדיה החופשית",
+ loading_content: "התוכן בטעינה...",
+ loading: "טוען..."
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/ja.js b/source/js/Core/Language/locale/ja.js
new file mode 100644
index 0000000..858693e
--- /dev/null
+++ b/source/js/Core/Language/locale/ja.js
@@ -0,0 +1,38 @@
+/* Japanese LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "ja",
+ api: {
+ wikipedia: "ja"
+ },
+ date: {
+ month: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
+ month_abbr: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
+ day: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"],
+ day_abbr: ["日", "月", "火", "水", "木", "金", "土"]
+ },
+ dateformats: {
+ year: "yyyy年",
+ month_short: "mmm",
+ month: "yyyy年 m月d日 (ddd)",
+ full_short: "yyyy年m月d日",
+ full: "yyyy年 m月d日 (ddd)",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'yyyy年m月d日''",
+ full_long: "yyyy年m月d日 H時M分s秒",
+ full_long_small_date: "HH:MM:ss'
'yyyy年m月d日''"
+ },
+ messages: {
+ loading_timeline: "タイムラインをロードしています…",
+ return_to_title: "タイトルへ戻ります",
+ expand_timeline: "タイムラインを展開します",
+ contract_timeline: "タイムラインを縮めます",
+ wikipedia: "出典:フリー百科事典『ウィキペディア(Wikipedia)』",
+ loading_content: "コンテンツをロードしています",
+ loading: "ローディング"
+
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/ka.js b/source/js/Core/Language/locale/ka.js
new file mode 100644
index 0000000..c4ba4ee
--- /dev/null
+++ b/source/js/Core/Language/locale/ka.js
@@ -0,0 +1,37 @@
+/* Georgian LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "ka",
+ api: {
+ wikipedia: "ka"
+ },
+ date: {
+ month: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომბერი", "ნოემბერი", "დეკემბერი"],
+ month_abbr: ["იან.", "თებ.", "მარტი", "აპრ", "მაი.", "ივნ.", "ივლ.", "აგვ.", "სექ.", "ოქტ.", "ნოე.", "დეკ."],
+ day: ["კვირა","ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"],
+ day_abbr: ["კვ.","ორ.", "სამ.", "ოთხ.", "ხუთ.", "პარ.", "შაბ."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "იტვირთება თაიმლაინი... ",
+ return_to_title: "დაბრუნდი თავში",
+ expand_timeline: "გაშალე თაიმლაინი",
+ contract_timeline: "Contract Timeline",
+ wikipedia: "თავისუფალი ენციკლოპედია Wikipedia-დან",
+ loading_content: "შინაარსის ჩამოტვირთვა",
+ loading: "ჩამოტვირთვა"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/ko.js b/source/js/Core/Language/locale/ko.js
new file mode 100644
index 0000000..478cdb9
--- /dev/null
+++ b/source/js/Core/Language/locale/ko.js
@@ -0,0 +1,38 @@
+/* Korean LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "ko",
+ api: {
+ wikipedia: "ko"
+ },
+ date: {
+ month: ["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],
+ month_abbr: ["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],
+ day: ["일요일" , "월요일" , "화요일" , "수요일" , "목요일" , "금요일" , "토요일"],
+ day_abbr: ["일" , "월" , "화" , "수" , "목" , "금" , "토"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "yyyy mmm",
+ full_short: "mmm d",
+ full: "yyyy mmm d ",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'yyyy mmm d''",
+ full_long: "dddd',' d mmm yyyy 'um' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd','yyyy mmm d''"
+ },
+ messages: {
+ loading_timeline: "타임라인을 불러오고 있습니다.... ",
+ return_to_title: "첫화면으로",
+ expand_timeline: "타임라인 확대",
+ contract_timeline: "타임라인 축소",
+ wikipedia: "출처: 위키피디아, 우리 모두의 백과사전",
+ loading_content: "내용을 불러오고 있습니다.",
+ loading: "불러오는중"
+
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/lb.js b/source/js/Core/Language/locale/lb.js
new file mode 100644
index 0000000..f194790
--- /dev/null
+++ b/source/js/Core/Language/locale/lb.js
@@ -0,0 +1,37 @@
+/* Luxembourgish LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+VMM.Language = {
+lang: "lb",
+api: {
+wikipedia: "lb"
+},
+date: {
+month: ["Januar", "Februar", "Mäerz", "Abrëll", "Mee", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
+month_abbr: ["Jan.", "Feb.", "Mäe.", "Abr.", "Mee", "Jun.", "Jul", "Aug.", "Sept.", "Okt.", "Nov.", "Dez."],
+day: ["Sonndeg","Méindeg", "Dënschdeg", "Mëttwoch", "Donneschden", "Freiden", "Samschden"],
+day_abbr: ["Son.","Méi.", "Dë.", "Më.", "Do.", "Fr.", "Sa."]
+},
+dateformats: {
+year: "yyyy",
+month_short: "mmm",
+month: "mmmm yyyy",
+full_short: "mmm d",
+full: "d'.' mmmm yyyy",
+time_short: "hh:MM:ss",
+time_no_seconds_short: "hh:MM",
+time_no_seconds_small_date: "h:MM TT'
'd'.' mmmm yyyy''",
+full_long: "d'.' mmm yyyy 'um' hh:MM TT",
+full_long_small_date: "hh:MM'
d'.' mmm yyyy''"
+},
+messages: {
+loading_timeline: "Timeline gëtt gelueden... ",
+return_to_title: "Zeréck zum Titel",
+expand_timeline: "Timeline vergréisseren",
+contract_timeline: "Timeline verklengeren",
+wikipedia: "Vu Wikipedia, der fräier Enzyklopedie",
+loading_content: "Inhalt lued",
+loading: "Lued"
+}
+}
+}
diff --git a/source/js/Core/Language/locale/lv.js b/source/js/Core/Language/locale/lv.js
new file mode 100644
index 0000000..1125f74
--- /dev/null
+++ b/source/js/Core/Language/locale/lv.js
@@ -0,0 +1,37 @@
+/* Latvian LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "lv",
+ api: {
+ wikipedia: "lv"
+ },
+ date: {
+ month: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"],
+ month_abbr: ["Jan.", "Feb.", "Mar.", "Apr.", "Mai.", "Jūn.", "Jūl.", "Aug.", "Sep.", "Okt.", "Nov.", "Dec."],
+ day: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"],
+ day_abbr: ["Sun.", "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "d. mmmm',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "HH:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' hh:MM TT",
+ full_long_small_date: "hh:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Ielādējas grafiks... ",
+ return_to_title: "Atgriezties uz sākumu",
+ expand_timeline: "Izvērst grafiku",
+ contract_timeline: "Sašaurināt grafiku",
+ wikipedia: "No Wikipedia, brīvās enciklopēdijas",
+ loading_content: "Ielādējas saturs",
+ loading: "Ielādējas"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/nl.js b/source/js/Core/Language/locale/nl.js
new file mode 100644
index 0000000..7b5d44f
--- /dev/null
+++ b/source/js/Core/Language/locale/nl.js
@@ -0,0 +1,38 @@
+/* Dutch LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "nl",
+ api: {
+ wikipedia: "nl"
+ },
+ date: {
+ month: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"],
+ month_abbr: ["jan", "febr", "maa", "apr", "mei", "juni", "juli", "aug", "sept", "okt", "nov", "dec"],
+ day: ["zondag","maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"],
+ day_abbr: ["zo","ma", "di", "wo", "do", "vr", "za"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''",
+ full_long: "dddd',' d mmm yyyy 'om' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "Tijdlijn laden ... ",
+ return_to_title: "Terug naar het begin",
+ expand_timeline: "Tijdlijn uitzoomen",
+ contract_timeline: "Tijdlijn inzoomen",
+ wikipedia: "From Wikipedia, the free encyclopedia",
+ loading_content: "Inhoud laden",
+ loading: "Laden"
+
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/no.js b/source/js/Core/Language/locale/no.js
new file mode 100644
index 0000000..4bc16e7
--- /dev/null
+++ b/source/js/Core/Language/locale/no.js
@@ -0,0 +1,37 @@
+/* Norwegian LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "no",
+ api: {
+ wikipedia: "no"
+ },
+ date: {
+ month: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"],
+ month_abbr: ["Jan.", "Feb.", "Mars", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sep.", "Okt.", "Nov.", "Des."],
+ day: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"],
+ day_abbr: ["Søn.", "Man.", "Tir.", "Ons.", "Tor.", "Fre.", "Lør."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d. mmm",
+ full: "d. mmmm',' yyyy",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd. mmmm',' yyyy''",
+ full_long: "dddd',' d. mmm',' yyyy 'kl.' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d. mmm',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Laster timeline... ",
+ return_to_title: "Tilbake til tittel",
+ expand_timeline: "Utvid timeline",
+ contract_timeline: "Krymp timeline",
+ wikipedia: "Fra Wikipedia, den frie encyklopedi",
+ loading_content: "Laster innhold",
+ loading: "Laster"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/pl.js b/source/js/Core/Language/locale/pl.js
new file mode 100644
index 0000000..9ece89f
--- /dev/null
+++ b/source/js/Core/Language/locale/pl.js
@@ -0,0 +1,37 @@
+/* Polish LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "pl",
+ api: {
+ wikipedia: "pl"
+ },
+ date: {
+ month: ["Stycznia", "Lutego", "Marca", "Kwietnia", "Maja", "Czerwca", "Lipca", "Sierpnia", "Września", "Października", "Listopada", "Grudnia"],
+ month_abbr: ["Sty.", "Lut.", "Mar.", "Kwi.", "Maj.", "Cze.", "Lip.", "Sie.", "Wrz.", "Paź.", "Lis.", "Gru."],
+ day: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"],
+ day_abbr: ["Nie.", "Pon.", "Wto.", "Śro.", "Czw.", "Pią.", "Sob."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''",
+ full_long: "dddd',' d mmm yyyy 'um' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''"
+ },
+ messages:{
+ loading_timeline: "Ładowanie Timeline... ",
+ return_to_title: "Wróć do tytułu",
+ expand_timeline: "Powiększ Timeline",
+ contract_timeline: "Zmniejsz Timeline",
+ wikipedia: "Z Wikipedii, wolnej encyklopedii",
+ loading_content: "Ładowanie zawartości",
+ loading: "Ładowanie"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/pt-br.js b/source/js/Core/Language/locale/pt-br.js
new file mode 100644
index 0000000..88a3892
--- /dev/null
+++ b/source/js/Core/Language/locale/pt-br.js
@@ -0,0 +1,38 @@
+/* Brazilian Portuguese LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "pt-br",
+ api: {
+ wikipedia: "pt"
+ },
+ date: {
+ month: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
+ month_abbr: ["Jan.", "Fev.", "Mar.", "Abr.", "Mai.", "Jun.", "Jul.", "Ago.", "Set.", "Out.", "Nov.", "Dez."],
+ day: ["Domingo","Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
+ day_abbr: ["Dom.","Seg.", "Ter.", "Qua.", "Qui.", "Sex.", "Sáb."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm 'de' yyyy",
+ full_short: "d 'de' mmm",
+ full: "d 'de' mmmm',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "hh:MM TT",
+ time_no_seconds_small_date: "hh:MM TT'
'd 'de' mmmm',' yyyy''",
+ full_long: "dddd',' d 'de' mmm',' yyyy 'às' hh:MM TT",
+ full_long_small_date: "hh:MM TT'
'dddd',' d 'de' mmm',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Carregando Timeline... ",
+ return_to_title: "Voltar para o título",
+ expand_timeline: "Expandir Timeline",
+ contract_timeline: "Contrair Timeline",
+ wikipedia: "Wikipedia, A enciclopédia livre",
+ loading_content: "Carregando Conteúdo",
+ loading: "Carregando"
+
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/pt.js b/source/js/Core/Language/locale/pt.js
new file mode 100644
index 0000000..eea6d24
--- /dev/null
+++ b/source/js/Core/Language/locale/pt.js
@@ -0,0 +1,37 @@
+/* Portuguese LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "pt",
+ api: {
+ wikipedia: "pt"
+ },
+ date: {
+ month: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
+ month_abbr: ["Jan", "Fev", "Mar", "Abr", "Maio", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
+ day: ["Domingo","Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sabado"],
+ day_abbr: ["Dom","Seg", "Ter", "Qua", "Qui", "Sex", "Sab"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' hh:MM TT",
+ full_long_small_date: "hh:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "A carregar a timeline... ",
+ return_to_title: "Voltar ao Título",
+ expand_timeline: "Expandir Timeline",
+ contract_timeline: "Colapsar Timeline",
+ wikipedia: "Wikipedia, A enciclopedia Livre.",
+ loading_content: "A carregar o conteúdo",
+ loading: "A carregar"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/ru.js b/source/js/Core/Language/locale/ru.js
new file mode 100644
index 0000000..10447fc
--- /dev/null
+++ b/source/js/Core/Language/locale/ru.js
@@ -0,0 +1,37 @@
+/* Russian LANGUAGE
+ ================================================== */
+if (typeof VMM != "undefined") {
+ VMM.Language = {
+ lang:"ru",
+ api:{
+ wikipedia:"ru"
+ },
+ date:{
+ month:["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
+ month_abbr:["Янв.", "Фев.", "Март", "Апр.", "Май", "Июнь", "Июль", "Авг.", "Сент.", "Окт.", "Нояб.", "Дек."],
+ day:["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
+ day_abbr:["Вск.", "Пн.", "Вт.", "Ср.", "Чт.", "Пт.", "Сб."]
+ },
+ dateformats:{
+ year:"yyyy",
+ month_short:"mmm",
+ month:"mmmm yyyy",
+ full_short:"mmm d",
+ full:"mmmm d',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short:"h:MM TT",
+ time_no_seconds_small_date:"h:MM TT'
'mmmm d',' yyyy''",
+ full_long:"mmm d',' yyyy 'at' hh:MM TT",
+ full_long_small_date:"hh:MM TT'
mmm d',' yyyy''"
+ },
+ messages:{
+ loading_timeline:"Загрузка... ",
+ return_to_title:"Вернуться к заголовку",
+ expand_timeline:"Увеличить",
+ contract_timeline:"Уменьшить",
+ wikipedia:"Из Wikipedia",
+ loading_content:"Загрузка контента",
+ loading: "Загрузка"
+ }
+ }
+};
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/si.js b/source/js/Core/Language/locale/si.js
new file mode 100644
index 0000000..9384e35
--- /dev/null
+++ b/source/js/Core/Language/locale/si.js
@@ -0,0 +1,34 @@
+/* Sinhalese LANGUAGE
+================================================== */
+typeof VMM != "undefined" && (VMM.Language = {
+ lang: "si",
+ api: {
+ wikipedia: "si"
+ },
+ date: {
+ month: ["ජනවාරි", "පෙබරවාරි", "මාර්තු", "අප්රේල්", "මැයි", "ජූනි", "ජූලි", "අගෝස්තු", "සැප්තැම්බර්", "ඔක්තෝම්බර්", "නොවැම්බර්", "දෙසැම්බර්"],
+ month_abbr: ["ජන.", "පෙබ.", "මාර්තු", "අප්රේල්", "මැයි", "ජුනි", "ජුලි", "අගෝ.", "සැප්.", "ඔක්.", "නොවැ.", "දෙසැ."],
+ day: ["ඉරිදා", "සදුදා", "අගහරුවදා", "බදාදා", "බ්රහස්පතින්දා", "සිකුරාදා", "සෙනසුරාදා"],
+ day_abbr: ["ඉරි.", "සදු.", "අග.", "බදා.", "බ්රහස්.", "සිකු.", "සෙන."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "කාල රේඛාව ලෝඩ් වෙමින්... ",
+ return_to_title: "නැවත මාතෘකාවට",
+ expand_timeline: "කාල රේඛාව විහිදන්න",
+ contract_timeline: "කාල රේඛාව අකුලන්න",
+ wikipedia: "විකිපීඩියා, නිදහස් විශ්වකෝෂය වෙතින්",
+ loading_content: "අන්තර්ගතය ලෝඩ් වෙමින්",
+ loading: "ලෝඩ් වෙමින්"
+ }
+});
diff --git a/source/js/Core/Language/locale/sk.js b/source/js/Core/Language/locale/sk.js
new file mode 100644
index 0000000..65a0420
--- /dev/null
+++ b/source/js/Core/Language/locale/sk.js
@@ -0,0 +1,35 @@
+/* Slovak LANGUAGE
+================================================== */
+typeof VMM != "undefined" && (VMM.Language = {
+ lang: "sk",
+ api: {
+ wikipedia: "sk"
+ },
+ date: {
+ month: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
+ month_abbr: ["Jan.", "Feb.", "Marec", "Apríl", "Máj", "Jún", "Júl", "Aug.", "Sept.", "Okt.", "Nov.", "Dec."],
+ day: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"],
+ day_abbr: ["Ned.", "Pon.", "Uto.", "Str.", "Štv.", "Pia.", "Sob."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "d. mmmm',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' hh:MM TT",
+ full_long_small_date: "hh:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Načítam časovú os... ",
+ return_to_title: "Späť na úvod",
+ expand_timeline: "Zväčšiť časovú os",
+ contract_timeline: "Zmenšiť časovú os",
+ wikipedia: "Z Wikipedie, encyklopédie zadarmo",
+ loading_content: "Načítam obsah",
+ loading: "Načítanie"
+ }
+});
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/sl.js b/source/js/Core/Language/locale/sl.js
new file mode 100644
index 0000000..0055afd
--- /dev/null
+++ b/source/js/Core/Language/locale/sl.js
@@ -0,0 +1,37 @@
+/* Slovenian LANGUAGE SLOVENIAN
+================================================== */
+if (typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "sl",
+ api: {
+ wikipedia: "sl"
+ },
+ date: {
+ month: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"],
+ month_abbr: ["Jan.", "Feb.", "Marec", "April", "Maj", "Junij", "July", "Avg.", "Sept.", "Okt.", "Nov.", "Dec."],
+ day: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Čertek", "Petek", "Sobota"],
+ day_abbr: ["Ned.", "Pon.", "Tor.", "Sre.", "Čet.", "Pet.", "Sob."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM",
+ time_no_seconds_small_date: "h:MM' 'd mmmm' 'yyyy",
+ full_long: "d mmm yyyy 'ob' hh:MM",
+ full_long_small_date: "hh:MM' d mmm yyyy"
+ },
+ messages: {
+ loading_timeline: "Nalagam časovni trak... ",
+ return_to_title: "Nazaj na naslov",
+ expand_timeline: "Razširi časovni trak",
+ contract_timeline: "Pokrči časovni trak",
+ wikipedia: "Vir Wikipedija",
+ loading_content: "Nalaganje vsebine",
+ loading: "Nalaganje"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/sr-cy.js b/source/js/Core/Language/locale/sr-cy.js
new file mode 100644
index 0000000..393cf45
--- /dev/null
+++ b/source/js/Core/Language/locale/sr-cy.js
@@ -0,0 +1,38 @@
+/* Serbian (Cyrillic) LANGUAGE
+================================================== */
+if (typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "рп",
+ api: {
+ wikipedia: "рп"
+ },
+ date: {
+ month: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
+ month_abbr: ["Јан.", "Феб.", "Март", "Апр.", "Мај", "Јун", "Јул", "Авг.", "Сеп.", "Окт.", "Нов.", "Дец."],
+ day: ["Недеља", "Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"],
+ day_abbr: ["Нед.", "Пон.", "Уто.", "Сре.", "Чет.", "Пет.", "Суб."]
+ },
+ dateformats: {
+ year: "yyyy.",
+ month_short: "mmm",
+ month: "mmmm yyyy.",
+ full_short: "d. mmm",
+ full: "d. mmmm yyyy.",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd. mmmm yyyy.''",
+ full_long: "d. mmm yyyy. 'u' HH:MM",
+ full_long_small_date: "HH:MM'
d. mmm yyyy.''"
+ },
+ messages: {
+ loading_timeline: "Учитавање... ",
+ return_to_title: "Почетак",
+ expand_timeline: "Увећај",
+ contract_timeline: "Умањи",
+ wikipedia: "Из Википедије, слободне енциклопедије",
+ loading_content: "Садржај се учитава",
+ loading: "Учитава се"
+ }
+ }
+}
+
diff --git a/source/js/Core/Language/locale/sr.js b/source/js/Core/Language/locale/sr.js
new file mode 100644
index 0000000..c48f291
--- /dev/null
+++ b/source/js/Core/Language/locale/sr.js
@@ -0,0 +1,38 @@
+/* Serbian (Latin) LANGUAGE
+================================================== */
+if (typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "sr",
+ api: {
+ wikipedia: "sr"
+ },
+ date: {
+ month: ["januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
+ month_abbr: ["Jan.", "Feb.", "Mart", "Apr.", "Maj", "Jun", "Jul", "Avg.", "Sep.", "Okt.", "Nov.", "Dec."],
+ day: ["Nedelja", "Ponedeljak", "Utorak", "Sreda", "Četvratk", "Petak", "Subota"],
+ day_abbr: ["Ned.", "Pon.", "Uto.", "Sre.", "Čet.", "Pet.", "Sub."]
+ },
+ dateformats: {
+ year: "yyyy.",
+ month_short: "mmm",
+ month: "mmmm yyyy.",
+ full_short: "d. mmm",
+ full: "d. mmmm yyyy.",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd. mmmm yyyy.''",
+ full_long: "d. mmm yyyy. 'u' HH:MM",
+ full_long_small_date: "HH:MM'
d. mmm yyyy.''"
+ },
+ messages: {
+ loading_timeline: "Učitavanje... ",
+ return_to_title: "Početak",
+ expand_timeline: "Uvećaj",
+ contract_timeline: "Umanji",
+ wikipedia: "Iz Vikipedije, slobodne enciklopedije",
+ loading_content: "Sadržaj se učitava",
+ loading: "Učitava se"
+ }
+ }
+}
+
diff --git a/source/js/Core/Language/locale/sv.js b/source/js/Core/Language/locale/sv.js
new file mode 100644
index 0000000..2c79316
--- /dev/null
+++ b/source/js/Core/Language/locale/sv.js
@@ -0,0 +1,37 @@
+/* Swedish LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "sv",
+ api: {
+ wikipedia: "sv"
+ },
+ date: {
+ month: ["januari", "februari", "mars", "april", "maj", "juni", "juli", "augusti", "september", "oktober", "november", "december"],
+ month_abbr: ["jan", "febr", "mars", "april", "maj", "juni", "juli", "aug", "sept", "okt", "nov", "dec"],
+ day: ["söndag","måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag"],
+ day_abbr: ["sön","mån", "tis", "ons", "tors", "fre", "lör"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm',' yyyy",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "H:MM",
+ time_no_seconds_small_date: "H:MM'
'd mmmm',' yyyy''",
+ full_long: "d mmm',' yyyy 'vid' H:MM",
+ full_long_small_date: "H:MM'
d mmm',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Laddar tidslinje... ",
+ return_to_title: "Tillbaka till start",
+ expand_timeline: "Förstora tidslinje",
+ contract_timeline: "Förminska tidslinje",
+ wikipedia: "Från Wikipedia, den fria encyklopedin",
+ loading_content: "Laddar innehåll",
+ loading: "Laddar"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/ta.js b/source/js/Core/Language/locale/ta.js
new file mode 100644
index 0000000..4b5319b
--- /dev/null
+++ b/source/js/Core/Language/locale/ta.js
@@ -0,0 +1,37 @@
+/* Tamil LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "ta",
+ api: {
+ wikipedia: "ta"
+ },
+ date: {
+ month: ["ஜனவரி", "பெப்ரவரி", "மார்ச்", "ஏப்ரல்", "மே", "ஜுன்", "ஜுலை", "ஆகஸ்ட்", "செப்டம்பர்", "ஒக்டோபர்", "நவம்பர்", "டிசம்பர்"],
+ month_abbr: ["ஜன.", "பெப்.", "மார்ச்", "ஏப்ரல்", "மே", "ஜுன்", "ஜுலை", "ஆகஸ்ட்", "செப்ட்.", "ஒக்டோ.", "நவம்பர்", "டிசம்பர்"],
+ day: ["ஞாயிறு","திங்கள்", "செவ்வாய்", "புதன்", "வியாழன்", "வெள்ளி", "சனி"],
+ day_abbr: ["ஞா","தி", "செ", "பு", "வி", "வெ", "சனி"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' hh:MM TT",
+ full_long_small_date: "hh:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "நேரக்கோடு தரவேறுகிறது.... ",
+ return_to_title: "தலைப்பிற்குச் செல்ல",
+ expand_timeline: "நேரக்கோட்டை விரிக்க",
+ contract_timeline: "நேரக்கோட்டை சுருக்க",
+ wikipedia: "கட்டற்ற கலைக்களஞ்சியம், விக்கிப்பீடியாவிலிருந்து",
+ loading_content: "உள்ளடக்கம் தரவேறுகிறது...",
+ loading: "தரவேறுகிறது"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/tl.js b/source/js/Core/Language/locale/tl.js
new file mode 100644
index 0000000..75488be
--- /dev/null
+++ b/source/js/Core/Language/locale/tl.js
@@ -0,0 +1,37 @@
+/* Tagalog LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "tl",
+ api: {
+ wikipedia: "tl"
+ },
+ date: {
+ month: ["Enemo", "Pebrero", "Marso", "Abril", "Mayo", "Hunyo", "Hulyo", "Agosto", "Setyembre", "Oktubre", "Nobyembre", "Disyembre"],
+ month_abbr: ["Ene.", "Peb.", "Mar.", "Abr.", "Mayo", "Hun.", "Hul.", "Ago.", "Set.", "Okt.", "Nob.", "Dis."],
+ day: ["Linggo", "Lunes", "Martes", "Miyerkules", "Huwebes", "Biyernes", "Sabado"],
+ day_abbr: ["Li.","L.", "M.", "Mi.", "H.", "B.", "S."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_seconds_small_date: "h:MM TT'
'mmmm d',' yyyy''",
+ full_long: "mmm d',' yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT'
mmm d',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Loading Timeline... ",
+ return_to_title: "Return to Title",
+ expand_timeline: "Expand Timeline",
+ contract_timeline: "Contract Timeline",
+ wikipedia: "Mula sa Wikipedia, ang malayang ensiklopedya",
+ loading_content: "Loading Content",
+ loading: "Loading"
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/tr.js b/source/js/Core/Language/locale/tr.js
new file mode 100644
index 0000000..7efe89c
--- /dev/null
+++ b/source/js/Core/Language/locale/tr.js
@@ -0,0 +1,37 @@
+/* Turkish LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "tr",
+ api: {
+ wikipedia: "tr"
+ },
+ date: {
+ month: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
+ month_abbr: ["Oca.", "Şub.", "Mar.", "Nis.", "May.", "Haz.", "Tem.", "Ağu.", "Eyl.", "Eki.", "Kas.", "Ara."],
+ day: ["Pazar","Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"],
+ day_abbr: ["Paz.","Pzt.", "Sal.", "Çar.", "Per.", "Cum.", "Cts."]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm',' yyyy",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "H:MM",
+ time_no_seconds_small_date: "H:MM'
'd mmmm',' yyyy''",
+ full_long: "d mmm',' yyyy 'at' H:MM",
+ full_long_small_date: "H:MM '
d mmm',' yyyy''"
+ },
+ messages: {
+ loading_timeline: "Zaman Çizelgesi Yükleniyor... ",
+ return_to_title: "Başlığa Dön",
+ expand_timeline: "Zaman Çizelgesini Genişlet",
+ contract_timeline: "Zaman Çizelgesini Daralt",
+ wikipedia: "Wikipedia'dan, özgür ansiklopedi",
+ loading_content: "İçerik Yükleniyor",
+ loading: "Yükleniyor"
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/js/Core/Language/locale/zh-cn.js b/source/js/Core/Language/locale/zh-cn.js
new file mode 100644
index 0000000..f99408b
--- /dev/null
+++ b/source/js/Core/Language/locale/zh-cn.js
@@ -0,0 +1,38 @@
+/* Chinese LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "zh-cn",
+ api: {
+ wikipedia: "zh"
+ },
+ date: {
+ month: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+ month_abbr: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+ day: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
+ day_abbr: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]
+ },
+ dateformats: {
+ year: "yyyy年",
+ month_short: "mmm",
+ month: "yyyy年 mmmm",
+ full_short: "mmm d",
+ full: "yyyy年mmmm d日",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'yyyy年mmmm d日''",
+ full_long: "dddd',' yyyy年 mmm d日'um' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' yyyy年 mmm d日''"
+ },
+ messages: {
+ loading_timeline: "加载时间线... ",
+ return_to_title: "回到开头",
+ expand_timeline: "伸展时间",
+ contract_timeline: "缩短时间",
+ wikipedia: "来自维基百科,自由的百科全书",
+ loading_content: "正在加载内容",
+ loading: "加载中"
+
+ }
+ }
+}
diff --git a/source/js/Core/Language/locale/zh-tw.js b/source/js/Core/Language/locale/zh-tw.js
new file mode 100644
index 0000000..80979f2
--- /dev/null
+++ b/source/js/Core/Language/locale/zh-tw.js
@@ -0,0 +1,38 @@
+/* Taiwanese LANGUAGE
+================================================== */
+if(typeof VMM != 'undefined') {
+ VMM.Language = {
+ lang: "zh-tw",
+ api: {
+ wikipedia: "zh"
+ },
+ date: {
+ month: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+ month_abbr: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+ day: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
+ day_abbr: ["週日", "週一", "週二", "週三", "週四", "週五", "週六"]
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "d mmm",
+ full: "d mmmm yyyy",
+ time_short: "HH:MM:ss",
+ time_no_seconds_short: "HH:MM",
+ time_no_seconds_small_date: "HH:MM'
'd mmmm yyyy''",
+ full_long: "dddd',' d mmm yyyy 'um' HH:MM",
+ full_long_small_date: "HH:MM'
'dddd',' d mmm yyyy''"
+ },
+ messages: {
+ loading_timeline: "載入時間線... ",
+ return_to_title: "回到開頭",
+ expand_timeline: "展開時間",
+ contract_timeline: "縮短時間",
+ wikipedia: "擷取自維基百科, 自由之百科全書",
+ loading_content: "載入內容",
+ loading: "載入中"
+
+ }
+ }
+}
diff --git a/source/js/Core/Library/AES.js b/source/js/Core/Library/AES.js
new file mode 100644
index 0000000..958a31a
--- /dev/null
+++ b/source/js/Core/Library/AES.js
@@ -0,0 +1,463 @@
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+/* AES implementation in JavaScript (c) Chris Veness 2005-2011 */
+/* - see http://csrc.nist.gov/publications/PubsFIPS.html#197 */
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+var Aes = {}; // Aes namespace
+
+/**
+ * AES Cipher function: encrypt 'input' state with Rijndael algorithm
+ * applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage
+ *
+ * @param {Number[]} input 16-byte (128-bit) input state array
+ * @param {Number[][]} w Key schedule as 2D byte-array (Nr+1 x Nb bytes)
+ * @returns {Number[]} Encrypted output state array
+ */
+Aes.cipher = function(input, w) { // main Cipher function [§5.1]
+ var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
+ var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys
+
+ var state = [[],[],[],[]]; // initialise 4xNb byte-array 'state' with input [§3.4]
+ for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i];
+
+ state = Aes.addRoundKey(state, w, 0, Nb);
+
+ for (var round=1; round 6 && i%Nk == 4) {
+ temp = Aes.subWord(temp);
+ }
+ for (var t=0; t<4; t++) w[i][t] = w[i-Nk][t] ^ temp[t];
+ }
+
+ return w;
+}
+
+/*
+ * ---- remaining routines are private, not called externally ----
+ */
+
+Aes.subBytes = function(s, Nb) { // apply SBox to state S [§5.1.1]
+ for (var r=0; r<4; r++) {
+ for (var c=0; c>> i*8) & 0xff;
+ for (var i=0; i<2; i++) counterBlock[i+2] = (nonceRnd >>> i*8) & 0xff;
+ for (var i=0; i<4; i++) counterBlock[i+4] = (nonceSec >>> i*8) & 0xff;
+
+ // and convert it to a string to go on the front of the ciphertext
+ var ctrTxt = '';
+ for (var i=0; i<8; i++) ctrTxt += String.fromCharCode(counterBlock[i]);
+
+ // generate key schedule - an expansion of the key into distinct Key Rounds for each round
+ var keySchedule = Aes.keyExpansion(key);
+
+ var blockCount = Math.ceil(plaintext.length/blockSize);
+ var ciphertxt = new Array(blockCount); // ciphertext as array of strings
+
+ for (var b=0; b>> c*8) & 0xff;
+ for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8)
+
+ var cipherCntr = Aes.cipher(counterBlock, keySchedule); // -- encrypt counter block --
+
+ // block size is reduced on final block
+ var blockLength = b>> c*8) & 0xff;
+ for (var c=0; c<4; c++) counterBlock[15-c-4] = (((b+1)/0x100000000-1) >>> c*8) & 0xff;
+
+ var cipherCntr = Aes.cipher(counterBlock, keySchedule); // encrypt counter block
+
+ var plaintxtByte = new Array(ciphertext[b].length);
+ for (var i=0; i 0) { while (c++ < 3) { pad += '='; plain += '\0'; } }
+ // note: doing padding here saves us doing special-case packing for trailing 1 or 2 chars
+
+ for (c=0; c>18 & 0x3f;
+ h2 = bits>>12 & 0x3f;
+ h3 = bits>>6 & 0x3f;
+ h4 = bits & 0x3f;
+
+ // use hextets to index into code string
+ e[c/3] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
+ }
+ coded = e.join(''); // join() is far faster than repeated string concatenation in IE
+
+ // replace 'A's from padded nulls with '='s
+ coded = coded.slice(0, coded.length-pad.length) + pad;
+
+ return coded;
+}
+
+/**
+ * Decode string from Base64, as defined by RFC 4648 [http://tools.ietf.org/html/rfc4648]
+ * (instance method extending String object). As per RFC 4648, newlines are not catered for.
+ *
+ * @param {String} str The string to be decoded from base-64
+ * @param {Boolean} [utf8decode=false] Flag to indicate whether str is Unicode string to be decoded
+ * from UTF8 after conversion from base64
+ * @returns {String} decoded string
+ */
+Base64.decode = function(str, utf8decode) {
+ utf8decode = (typeof utf8decode == 'undefined') ? false : utf8decode;
+ var o1, o2, o3, h1, h2, h3, h4, bits, d=[], plain, coded;
+ var b64 = Base64.code;
+
+ coded = utf8decode ? str.decodeUTF8() : str;
+
+
+ for (var c=0; c>>16 & 0xff;
+ o2 = bits>>>8 & 0xff;
+ o3 = bits & 0xff;
+
+ d[c/4] = String.fromCharCode(o1, o2, o3);
+ // check for padding
+ if (h4 == 0x40) d[c/4] = String.fromCharCode(o1, o2);
+ if (h3 == 0x40) d[c/4] = String.fromCharCode(o1);
+ }
+ plain = d.join(''); // join() is far faster than repeated string concatenation in IE
+
+ return utf8decode ? plain.decodeUTF8() : plain;
+}
+
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+/* Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple */
+/* single-byte character encoding (c) Chris Veness 2002-2011 */
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+var Utf8 = {}; // Utf8 namespace
+
+/**
+ * Encode multi-byte Unicode string into utf-8 multiple single-byte characters
+ * (BMP / basic multilingual plane only)
+ *
+ * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars
+ *
+ * @param {String} strUni Unicode string to be encoded as UTF-8
+ * @returns {String} encoded string
+ */
+Utf8.encode = function(strUni) {
+ // use regular expressions & String.replace callback function for better efficiency
+ // than procedural approaches
+ var strUtf = strUni.replace(
+ /[\u0080-\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz
+ function(c) {
+ var cc = c.charCodeAt(0);
+ return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); }
+ );
+ strUtf = strUtf.replace(
+ /[\u0800-\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz
+ function(c) {
+ var cc = c.charCodeAt(0);
+ return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); }
+ );
+ return strUtf;
+}
+
+/**
+ * Decode utf-8 encoded string back into multi-byte Unicode characters
+ *
+ * @param {String} strUtf UTF-8 string to be decoded back to Unicode
+ * @returns {String} decoded string
+ */
+Utf8.decode = function(strUtf) {
+ // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!
+ var strUni = strUtf.replace(
+ /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars
+ function(c) { // (note parentheses for precence)
+ var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f);
+ return String.fromCharCode(cc); }
+ );
+ strUni = strUni.replace(
+ /[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars
+ function(c) { // (note parentheses for precence)
+ var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f;
+ return String.fromCharCode(cc); }
+ );
+ return strUni;
+}
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
\ No newline at end of file
diff --git a/source/js/Core/Library/LazyLoad.js b/source/js/Core/Library/LazyLoad.js
new file mode 100644
index 0000000..b03d815
--- /dev/null
+++ b/source/js/Core/Library/LazyLoad.js
@@ -0,0 +1,391 @@
+/*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