{"version":3,"sources":["jsdelivr-header.js","/npm/34rth-javascript-core-oo@1.4.18/bin/oo.js"],"names":[],"mappings":"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","file":"/npm/34rth-javascript-core-oo@1.4.18/bin/oo.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/34rth-javascript-core-oo@1.4.18/bin/oo.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nif(!require) var require = function(path, module){return module};\n\n/*\n * earth.core.object powers the OOP facilities of the library.\n * Thanks to John Resig and Dean Edwards for inspiration!\n */\n\nvar earth = {\n    core:{\n        object : function () {}\n    }\n};\n\nearth.core.object.prototype.__id__ = 'earth.core.object';\n\n/**\n  * When extending:\n  *     STATICS\n  *     statics is a convenience property that injects specified object properties as the static properties of the object:\n  *\n  *     var my_object = earth.core.object.extend({\n  *       statics:{\n  *         foo:5\n  *       }\n  *       this.add = function(obj){\n  *         this.cache.push(obj)\n  *       }\n  *     });\n  *     my_instance = new my_object();\n  *\n  *     OR\n  *\n  *     var my_object = earth.core.object.extend(new function(){\n  *       this.statics = {};\n  *       this.statics.foo = 5;\n  *\n  *       this.add = function(obj){\n  *         this.cache.push(obj);\n  *       };\n  *     });\n  *\n  *     console.log(my_object.foo); -> 5\n  *     console.log(my_instance.constructor.foo); -> 5\n  *\n  *     console.log(my_object.statics.foo -> TypeError \n  *     console.log(my_instance.foo) -> undefined\n  *     console.log(my_instance.statics.foo); -> TypeError\n  *     \n  *     OPTIONS\n  *     options is a special property that unlike other objects that you pass to extend will be merged with the parent one instead of overriding it completely, which makes managing configuration of objects and default values convenient:\n  *\n  *     var Myobject = L.object.extend({\n  *       options: {\n  *         myOption1: 'foo',\n  *         myOption2: 'bar'\n  *       }\n  *     });\n  *\n  *     var MyChildobject = Myobject.extend({\n  *       options: {\n  *         myOption1: 'baz',\n  *         myOption3: 5\n  *       }\n  *     });\n  *\n  *     var a = new MyChildobject();\n  *     a.options.myOption1; // 'baz'\n  *     a.options.myOption2; // 'bar'\n  *     a.options.myOption3; // 5\n  */\nearth.core.object.extend = function (skeleton, options) {\n  if(skeleton instanceof Function) skeleton = new skeleton(this.prototype);\n  var options = options?options:{};\n  options.sugar = (options.sugar!==false)?true:false;\n\n  var base = this;\n  var derived = null;\n\n  if(options.sugar){\n    derived = function(){\n      if(this.__complex_member_variables__){\n        var l = this.__complex_member_variables__.length;\n        for(var i = 0; i<l; i++){\n        \tthis[this.__complex_member_variables__[i]] =  earth.core.utils.clone(this[this.__complex_member_variables__[i]], true);\n        }\n      }\n      this.__init.apply(this, arguments);\n      if(this.__init_hooks__) this.__call_init_hooks__();\n    };\n  }else{\n    derived = skeleton.__init||function(){};\n  }\n  derived.prototype = earth.core.utils.create(base.prototype); \n  derived.prototype.__init = derived.prototype.__init || function(){};\n\n  if(skeleton.__id__ && Object.defineProperty) Object.defineProperty(derived, \"name\", { value:(skeleton.__id__ || '').replace(/\\W/g, '_')});\n\n  //inherit parent's statics\n  for (var i in this) {\n    if (this.hasOwnProperty(i) && i !== 'prototype'){ \n      derived[i] = this[i];\n    }\n  }\n  \n  //init hooks definition so mixins won't propagete init hooks to parents (if this is not defined before including mixin aspects __init_hooks of parent class will be used\n  // add method for calling all init hooks\n  derived.prototype.__call_init_hooks__ = function () {\n    if (this.__init_hooks_called__) { return; }\n    derived.prototype.__init_hooks__ = (derived.prototype.__init_hooks__)?derived.prototype.__init_hooks__:[];\n    \n    if (base.prototype.__call_init_hooks__) {\n      base.prototype.__call_init_hooks__.call(this);\n    }\n\n    for (var i = 0, len = derived.prototype.__init_hooks__.length; i < len; i++) {\n      if(!(base.prototype.__init_hooks__ && base.prototype.__init_hooks__[i] == derived.prototype.__init_hooks__[i])) derived.prototype.__init_hooks__[i].call(this, base.prototype);\n    }\n\n    this.__init_hooks_called__ = true;\n  };\n\n  // mix static skeleton into the object\n  if(skeleton.statics) {\n    derived = earth.core.utils.extend(derived, skeleton.statics);\n    delete skeleton.statics;\n  }\n\n  //mix includes into the prototype, i.e. aspects of mixins\n  if (skeleton.includes) {\n    if(skeleton.includes instanceof Array){\n      var index,len;\n      for(index = 0,len=skeleton.includes.length;index<len;index++){\n        derived.include(skeleton.includes[index]);\n      }\n    }else{\n      derived.include(skeleton.includes);\n    }\n    delete skeleton.includes;\n  }\n  \n  // merge options\n  if(derived.prototype.options) {\n    derived.prototype.options = earth.core.utils.extend(earth.core.utils.create(derived.prototype.options), skeleton.options);\n  }\n\t\n  // mix given skeleton into the prototype\n  derived.prototype = earth.core.utils.extend(derived.prototype, skeleton); \n\t// very slow this.super implementation\n  if(options.super){\n\t  for (var name in skeleton) {\n      if(typeof skeleton[name] === 'function'){\n        if(base.prototype[name]){\n          derived.prototype[name] = (function(name, fn){\n            return function() {\n              this.super = base.prototype[name];\n              return fn.apply(this, arguments);\n            };\n          })(name, skeleton[name]);\n        }\n  \t\t} \n  \t}\n  }\n\n  //checking for complex values in prototype\n  var complex_members = [];\n  for(var p in derived.prototype){\n    if(typeof derived.prototype[p] === 'object' && derived.prototype[p] !== null){\n      switch(p){\n        case '__init_hooks__':\n        case '__complex_member_variables__':\n          break;\n        default:\n          complex_members.push(p);\n          break;\n      }\n    }else if(typeof derived.prototype[p] === 'function'  && base.prototype[p] && derived.prototype[p] != base.prototype[p]){\n      switch(p){\n        case '__call_init_hooks__':\n          break;\n        default:\n         // derived.prototype[p].base = base.prototype[p];\n          break;\n      }\n    }\n  }\n\n  if(complex_members.length > 0){\n    var __id__ = derived.prototype.hasOwnProperty('__id__')?derived.prototype.__id__:('Child of ' + derived.prototype.__id__);\n    console.info(__id__ + ': implements complex objects as a member variables (' + complex_members.join(', ') + ').');\n    if(options.complex_member_variables===undefined){//i.e. if implementer is potentially not aware of consequences, warn with consequences\n      console.warn(__id__ + ': Complex member cloning will be enforced. If you would like to avoid this behaviour, please initiate the member variable in the constructor (__init) or set complex_member_variable to false. The consequence of setting complex_members_variables to false is that complex members will be shared across all instances and modifying a complex member variable will result in the change being visible in all other instances.');\n    }\n    //setting the complex member variable if complex member variables have not been explicitly set to false\n    derived.prototype.__complex_member_variables__ = (true && (options.complex_member_variables!== false))?complex_members:false;\n  }\n\n  return derived;\n};\n\n// method for adding properties to prototype\nearth.core.object.include = function(props){\n  if(!earth.core.mixin){console.error('Mixins (class earth.core.mixin) are not defined');return false;}\n  if(!props){console.error('Trying to include non-existing object as a mixin');return false;}\n  if(!props instanceof earth.core.mixin){console.warn('Trying to include a non Mixin object');}\n\n  //include static properties\n  for(var prop in props){\n    //we are not overwriting the extend method as mixins have a different extend method!\n    if( \n      prop != 'extend' &&\n      prop != 'superclass' &&\n      prop != 'prototype' &&\n      prop != 'add_init_hook'\n    ){\n      if(this[prop]){\n        console.warn('Static method/property ' + prop + ' is shadowed/overwritten in ' + this.prototype.__id__ + ' by ' + props.prototype.__id__ + '. This might lead to unforseen behaviour. Inherit method is keeping the original to allow for local static extension/shadowing.');\n      }else{\n        this[prop] = props[prop];\n      }\n    }\n  }\n\n  // include prototype methods\n  var props = (props.prototype)?props.prototype:function(){};\n  //we wanna know what the leaf methods/properties are\n  var this_props = Object.keys(this.prototype);\n  //TODO: implement indexed array (k => v) to avoid naming conflicts between mixings. this way mixins can be ID'd/labeled and the respective function names prefixed\n  while(props){\n    for(var prop in props){\n      switch(prop){\n        case '__init_hooks__':\n          for(var hook in props[prop]){\n            this.add_init_hook(props[prop][hook]);\n          }\n          break;\n        case 'options':\n          this.prototype.options = earth.core.utils.extend(props[prop], this.prototype.options);\n          break;\n        case 'constructor':\n        case '__init':\n        case '__id__'://custom ID for each class/object\n          //do nothing\n          break;\n        default:\n          //if the prototype already has this method and since we're propagating upwards, we do not overwrite the respective property, otherwise we would be overwriting child methods/properties (shadowing) with parent methods/properties.\n          if(this.prototype[prop]){\n            //we only log/warn in case it's not an inherited method, but an explicitly defined method/property -> otherwise we'll run in the risk of having many warnings up the inheritance chain of mixins.\n            if(this_props.indexOf(prop)!= -1){\n              console.error('Instance method/property ' + prop + ' is shadowed/overwritten by mixin. This might lead to unforseen behaviour. Inherit method is using the local method/function to allow for local instance extension/shadowing.');\n            }\n          }else{\n            this.prototype[prop] = props[prop];\n          }\n      }\n    }\n    props = (props.prototype)?props.prototype:props.__proto__;\n  }\n  return true;\n};\n\n\n// merge new default options to the object\nearth.core.object.merge_options = function(options){\n  this.prototype.options = earth.core.utils.extend(this.prototype.options, options);\n};\n\n// add a constructor hook\nearth.core.object.add_init_hook = function (fn) { // (Function) || (String, args...)\n  var args = Array.prototype.slice.call(arguments, 1);\n\n  var init = typeof fn === 'function' ? fn : function () {\n    this[fn].apply(this, args);\n  };\n\n  this.prototype.__init_hooks__ = this.prototype.__init_hooks__ || [];\n  this.prototype.__init_hooks__.push(init);\n};\n\nearth.core.object.prototype.equals = function(obj){\n    return (obj === this);\n};\n\"use strict\";\nearth.core.utils = new (function(){\n  this.__id__ = 'earth.core.utils';\n\n  this.timeouts = [];\n  this.intervals = [];\n\n  this.set_timeout = function(id, f, timeout, immediate, callback){\n    if(this.timeouts[id]) clearTimeout(this.timeouts[id]);\n    this.timeouts[id] = setTimeout(function(){\n      f(id);\n      if(callback) callback(id, f);\n    }, timeout);\n  \n    if(immediate) f();\n  };\n  \n  this.clear_timeout = function(id){\n    if(this.timeouts[id]) clearTimeout(this.timeouts[id]);\n  };\n\n  this.set_interval = function(id, f, interval, immediate, callback){\n    var count = 0;\n    if(immediate){f(0); count++;}\n    if(this.intervals[id]) clearInterval(this.intervals[id]);\n    this.intervals[id] = setInterval(function(){\n      f(id, count++);\n      if(callback) callback(id, count++, f);\n    }, interval);\n  };\n  \n  this.clear_interval = function(id){\n    if(this.intervals[id]) clearInterval(this.intervals[id]);\n  };\n\n  this.stop_propagation = function(e){\n    (e.originalEvent.stopPropagation) ? e.originalEvent.stopPropagation() : e.originalEvent.cancelBubble=true ;\n    (e.originalEvent.preDefault) ? e.originalEvent.preDefault() : e.originalEvent.returnValue = false;\n  };\n\n  /** \n    * extend an object with properties of one or more other objects\n    */\n  this.extend = function (dest) {\n    var i, j, len, src;\n    var complex = false;\n    for (j = 1, len = arguments.length; j < len; j++) {\n      src = arguments[j];\n      for (i in src) {\n        dest[i] = src[i];\n      }\n    }\n    return dest;\n  };\n  \n  /**\n    * create an object from a given prototypv\n    */\n  this.create = (function () {\n    function F() {};\n    return function (prototype) {\n      F.prototype = prototype;\n      return new F();\n    };\n  })();\n\n  this.merge_array = function(arr1, arr2){\n    return $.extend(true, {}, arr2, arr1);\n  };\n  \n  /**\n    * bind a function to be called with a given context\n    */\n  this.bind = function (fn, obj) {\n    var slice = Array.prototype.slice;\n\n    if (fn.bind) {\n      return fn.bind.apply(fn, slice.call(arguments, 1));\n    }\n\n    var args = slice.call(arguments, 2);\n\n    return function () {\n      return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\n    };\n  };\n\n  // round a given number to a given precision\n  this.format_number = function (num, digits) {\n    var pow = Math.pow(10, digits || 5);\n    return Math.round(num * pow) / pow;\n  };\n\n  // trim whitespace from both sides of a string\n  this.trim = function (str) {\n    return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n  };\n\n  // split a string into words\n  this.split_words = function (str) {\n    return this.trim(str).split(/\\s+/);\n  };\n\n  // set options to an object, inheriting parent's options as well\n  this.set_options = function (obj, options) {\n    if (!obj.hasOwnProperty('options')) {\n      obj.options = obj.options ? earth.core.utils.create(obj.options) : {};\n    }\n    for (var i in options) {\n      obj.options[i] = options[i];\n    }\n    return obj.options;\n  };\n\n  // make an URL with GET parameters out of a set of properties/values\n  this.get_url_parameter= function (obj, existing_url, uppercase) {\n    var params = [];\n    for (var i in obj) {\n      params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\n    }\n    return ((!existing_url || existing_url.indexOf('?') === -1) ? '?' : '&') + params.join('&');\n  };\n\n  this.is_array= Array.isArray || function (obj) {\n    return (Object.prototype.toString.call(obj) === '[object Array]');\n  };\n\n  this.coordinate = function(coordinate){\n      return parseFloat(coordinate).toFixed(6);\n  };\n\n  this.empty_image = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n  \n  // do nothing (used as a noop throughout the code)\n  this.false_function = function () { return false; };\n\n  this.parse_ids = function(ids, as_query_parameter){\n    as_query_parameter = (as_query_parameter)?true:false;\n\n    switch(typeof ids){\n      case 'string':\n        ids = ids.split('|');\n        break;\n      case 'number':\n        ids = [ids];\n        break;\n      case 'undefined':\n      case 'object':\n        if(!(ids instanceof Array)){\n          ids = [];\n        }\n        break;\n      default:\n        ids = [];\n    }\n\n    var r = [],len,id;\n    for(var i = 0,len=ids.length;i<len;i++){\n      id = parseInt(ids[i]);\n      if(id) r.push(id);\n    }\n\n    r = this.unique(r).sort(function(a, b){return a-b});\n    return (as_query_parameter)?r.join('|'):r;\n  };\n\n  this.unique = function(list) {\n    var result = [];\n    $.each(list, function(i, e) {\n        if ($.inArray(e, result) == -1) result.push(e);\n    });\n    return result;\n  };\n\n  this.clone = function(obj, deep){\n\t\tif(deep){\n \t    var i, ret, ret2;\n  \t  if (typeof obj === \"object\") {\n  \t    if (obj === null) return obj;\n  \t    if (Object.prototype.toString.call(obj) === \"[object Array]\") {\n  \t      ret = [];\n  \t      for (i = 0; i < obj.length; i++) {\n  \t        if (typeof obj[i] === \"object\") {\n  \t          ret2 = this.clone(obj[i], true);\n  \t        } else {\n  \t          ret2 = obj[i];\n  \t        }\n  \t        ret.push(ret2);\n  \t      }\n  \t    } else {\n  \t      ret = {};\n  \t      for (i in obj) {\n  \t        if (obj.hasOwnProperty(i)) {\n  \t          if (typeof(obj[i] === \"object\")) {\n  \t            ret2 = this.clone(obj[i], true);\n  \t          } else {\n  \t            ret2 = obj[i];\n  \t          }\n  \t          ret[i] = ret2;\n  \t        }\n  \t      }\n  \t    }\n  \t  } else {\n  \t    ret = obj;\n    \t}\n  \n    \treturn ret;\n    }else{\n      var target = {};\n      for (var i in obj) {\n        if (obj.hasOwnProperty(i)) {\n          target[i] = obj[i];\n        }\n      }\n      return target;\n    }\n  };\n\n  this.clone_deep = function(obj) {\n\t};\n})();\n\nearth.extend = earth.core.utils.extend;\nearth.bind = earth.core.utils.bind;\nearth.stamp = earth.core.utils.stamp;\nearth.set_options = earth.core.utils.set_options;\n\n/**\n  * ECMA5 SHIMs\n  * \n  */\n\n// Add ECMA262-5 string trim if not supported natively\n//\nif (!('trim' in String.prototype)) {\n  String.prototype.trim= function() {\n    return this.replace(/^\\s+/, '').replace(/\\s+$/, '');\n  };\n}\n\n// Add ECMA262-5 Array methods if not supported natively\n//\nif (!('indexOf' in Array.prototype)) {\n    Array.prototype.indexOf= function(find, i /*opt*/) {\n        if (i===undefined) i= 0;\n        if (i<0) i+= this.length;\n        if (i<0) i= 0;\n        for (var n= this.length; i<n; i++)\n            if (i in this && this[i]===find)\n                return i;\n        return -1;\n    };\n}\nif (!('lastIndexOf' in Array.prototype)) {\n    Array.prototype.lastIndexOf= function(find, i /*opt*/) {\n        if (i===undefined) i= this.length-1;\n        if (i<0) i+= this.length;\n        if (i>this.length-1) i= this.length-1;\n        for (i++; i-->0;) /* i++ because from-argument is sadly inclusive */\n            if (i in this && this[i]===find)\n                return i;\n        return -1;\n    };\n}\nif (!('forEach' in Array.prototype)) {\n    Array.prototype.forEach= function(action, that /*opt*/) {\n        for (var i= 0, n= this.length; i<n; i++)\n            if (i in this)\n                action.call(that, this[i], i, this);\n    };\n}\nif (!('map' in Array.prototype)) {\n    Array.prototype.map= function(mapper, that /*opt*/) {\n        var other= new Array(this.length);\n        for (var i= 0, n= this.length; i<n; i++)\n            if (i in this)\n                other[i]= mapper.call(that, this[i], i, this);\n        return other;\n    };\n}\nif (!('filter' in Array.prototype)) {\n    Array.prototype.filter= function(filter, that /*opt*/) {\n        var other= [], v;\n        for (var i=0, n= this.length; i<n; i++)\n            if (i in this && filter.call(that, v= this[i], i, this))\n                other.push(v);\n        return other;\n    };\n}\nif (!('every' in Array.prototype)) {\n    Array.prototype.every= function(tester, that /*opt*/) {\n        for (var i= 0, n= this.length; i<n; i++)\n            if (i in this && !tester.call(that, this[i], i, this))\n                return false;\n        return true;\n    };\n}\nif (!('some' in Array.prototype)) {\n    Array.prototype.some= function(tester, that /*opt*/) {\n        for (var i= 0, n= this.length; i<n; i++)\n            if (i in this && tester.call(that, this[i], i, this))\n                return true;\n        return false;\n    };\n}\n\nif (typeof Array.prototype.forEach != 'function') {\n  Array.prototype.forEach = function(callback){\n    for (var i = 0; i < this.length; i++){\n      callback.apply(this, [this[i], i, this]);\n    }\n  };\n}\n\nif (!Function.prototype.bind) {\n  Function.prototype.bind = function(oThis) {\n    if (typeof this !== 'function') {\n      // closest thing possible to the ECMAScript 5\n      // internal IsCallable function\n      throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n    }\n\n    var aArgs   = Array.prototype.slice.call(arguments, 1),\n        fToBind = this,\n        fNOP    = function() {},\n        fBound  = function() {\n          return fToBind.apply(this instanceof fNOP && oThis\n                 ? this\n                 : oThis,\n                 aArgs.concat(Array.prototype.slice.call(arguments)));\n        };\n\n    fNOP.prototype = this.prototype;\n    fBound.prototype = new fNOP();\n\n    return fBound;\n  };\n}\n\n//\n// Object\n// ======\n//\n\n// ES5 15.2.3.14\n// http://es5.github.com/#x15.2.3.14\nObject.keys = Object.keys || (function () {\n    var hasOwnProperty = Object.prototype.hasOwnProperty,\n        hasDontEnumBug = !{toString:null}.propertyIsEnumerable(\"toString\"),\n        DontEnums = [\n            'toString',\n            'toLocaleString',\n            'valueOf',\n            'hasOwnProperty',\n            'isPrototypeOf',\n            'propertyIsEnumerable',\n            'constructor'\n        ],\n        DontEnumsLength = DontEnums.length;\n  \n    return function (o) {\n        if (typeof o != \"object\" && typeof o != \"function\" || o === null)\n            throw new TypeError(\"Object.keys called on a non-object\");\n     \n        var result = [];\n        for (var name in o) {\n            if (hasOwnProperty.call(o, name))\n                result.push(name);\n        }\n     \n        if (hasDontEnumBug) {\n            for (var i = 0; i < DontEnumsLength; i++) {\n                if (hasOwnProperty.call(o, DontEnums[i]))\n                    result.push(DontEnums[i]);\n            }   \n        }\n     \n        return result;\n    };\n})();\n\nif (typeof String.prototype.startsWith != 'function') {\n  // see below for better implementation!\n  String.prototype.startsWith = function (str){\n    return this.indexOf(str) === 0;\n  };\n}\n\"use strict\";\n/**\n  * copies all static and instance methods to the object as well as options\n  * \n  */\nearth.core.mixin = function () {};\n\nearth.core.mixin.extend = function (skeleton) {\n  if(skeleton instanceof Function) skeleton = new skeleton(this.prototype);\n  var new_object = function () {};\n\n\n  // jshint camelcase: false\n  var parent_proto = this.prototype;\n  var proto = earth.core.utils.create(parent_proto);\n  \n  proto.constructor = new_object;\n  new_object.prototype = proto;\n\n  //inherit parent's statics\n  for (var i in this) {\n    if (this.hasOwnProperty(i) && i !== 'prototype') {\n      new_object[i] = this[i];\n    }\n  }\n  // mix static skeleton into the object\n  if(skeleton.statics) {\n    earth.core.utils.extend(new_object, skeleton.statics);\n    delete skeleton.statics;\n  }\n\n  // merge options\n  if (proto.options) {\n    new_object.options = earth.core.utils.extend(earth.core.utils.create(proto.options), skeleton.options);\n  }\n\n  // mix given skeleton into the prototype\n  earth.core.utils.extend(proto, skeleton);\n  return new_object;\n};\n\nearth.core.mixin.add_init_hook = function (fn) { // (Function) || (String, args...)\n  this.prototype.__init_hooks__ = this.prototype.__init_hooks__ || [];\n  this.prototype.__init_hooks__.push(fn);\n};\n\"use strict\";\n\nearth.core.mixin.cacheable = earth.core.mixin.extend(function(_super){\n  this.__id__ = 'earth.core.mixin.cacheable';\n  this.statics = {};\n  this.statics.add = function(obj){\n    if(obj) obj.__age = Date.now();\n    return (this.cache)?this.cache.add(obj):null;\n  }\n  this.statics.remove = function(obj){\n    return (this.cache)?this.cache.remove(obj):null;\n  }\n  this.statics.has = function(obj){\n    return (this.cache)?this.cache.has(obj):false;\n  }\n  this.statics.clear = function(){\n    return (this.cache)?this.cache.clear():null;\n  }\n  this.statics.size = function(){\n    return (this.cache)?this.cache.size():null;\n  }\n  this.statics.all = function(){\n    return (this.cache)?this.cache.all():[];\n  }\n  this.statics.get = function(id, age){\n    var data = (this.cache)?this.cache.get(id):null; \n    if(data && data.__age && age){\n        return ((data.__age - Date.now())/1000 < age)?data:null;\n    }\n    return data;\n  };\n});\n\nearth.core.mixin.cacheable.add_init_hook(function(){\n  this.constructor.add(this);\n});\n\"use strict\";\n\nearth.core.mixin.observable = earth.core.mixin.extend(function(_super){\n  this.__id__ = 'earth.core.mixin.observable';\n\n  this.on = function (types, fn, context) {\n    // types can be a map of types/handlers\n    if (typeof types === 'object') {\n      for (var type in types) {\n        // we don't process space-separated events here for performance;\n        // it's a hot path since Layer uses the on(obj) syntax\n        this._on(type, types[type], fn);\n      }\n    } else {\n      // types can be a string of space-separated words\n      types = earth.core.utils.split_words(types);\n\n      for (var i = 0, len = types.length; i < len; i++) {\n        this._on(types[i], fn, context);\n      }\n    }\n\n    return this;\n  };\n\n  this.off = function (types, fn, context) {\n    if (!types) {\n      // clear all listeners if called without arguments\n      delete this._events;\n    } else if (typeof types === 'object') {\n      for (var type in types) {\n        this._off(type, types[type], fn);\n      }\n    } else {\n      types = earth.core.utils.split_words(types);\n\n      for (var i = 0, len = types.length; i < len; i++) {\n        this._off(types[i], fn, context);\n      }\n    }\n\n    return this;\n  };\n\n  // attach listener (without syntactic sugar now)\n  this._on = function (type, fn, context) {\n    var events = this._events = this._events || {},\n        context_id = context && context !== this && earth.stamp(context);\n\n    if (context_id) {\n      // store listeners with custom context in a separate hash (if it has an id);\n      // gives a major performance boost when firing and removing events (e.g. on map object)\n\n      var index_key = type + '_idx',\n          index_len_key = type + '_len',\n          type_index = events[index_key] = events[index_key] || {},\n          id = earth.stamp(fn) + '_' + context_id;\n\n      if (!type_index[id]) {\n        type_index[id] = {fn: fn, ctx: context};\n\n        // keep track of the number of keys in the index to quickly check if it's empty\n        events[index_len_key] = (events[index_len_key] || 0) + 1;\n      }\n\n    } else {\n      // individual layers mostly use \"this\" for context and don't fire listeners too often\n      // so simple array makes the memory footprint better while not degrading performance\n\n      events[type] = events[type] || [];\n      events[type].push({fn: fn});\n    }\n  };\n\n  this._off = function (type, fn, context) {\n    var events = this._events,\n        index_key = type + '_idx',\n        index_len_key = type + '_len';\n\n    if (!events) { return; }\n\n    if (!fn) {\n      // clear all listeners for a type if function isn't specified\n      delete events[type];\n      delete events[index_key];\n      delete events[index_len_key];\n      return;\n    }\n\n    var context_id = context && context !== this && earth.stamp(context),\n        listeners, i, len, listener, id;\n\n    if (context_id) {\n      id = earth.stamp(fn) + '_' + context_id;\n      listeners = events[index_key];\n\n      if (listeners && listeners[id]) {\n        listener = listeners[id];\n        delete listeners[id];\n        events[index_len_key]--;\n      }\n\n    } else {\n      listeners = events[type];\n\n      if (listeners) {\n        for (i = 0, len = listeners.length; i < len; i++) {\n          if (listeners[i].fn === fn) {\n            listener = listeners[i];\n            listeners.splice(i, 1);\n            break;\n          }\n        }\n      }\n    }\n\n    // set the removed listener to noop so that's not called if remove happens in fire\n    if (listener) {\n      listener.fn = earth.core.utils.false_function;\n    }\n  };\n\n  this.fire = function (type, data, propagate) {\n\n    if (!this.listens(type, propagate)) { return this; }\n\n    var event = earth.core.utils.extend({}, data, {type: type, target: this}),\n        events = this._events;\n\n    if (events) {\n        var type_index = events[type + '_idx'],\n            i, len, listeners, id;\n\n      if (events[type]) {\n        // make sure adding/removing listeners inside other listeners won't cause infinite loop\n        listeners = events[type].slice();\n\n        for (i = 0, len = listeners.length; i < len; i++) {\n          listeners[i].fn.call(this, event);\n        }\n      }\n\n      // fire event for the context-indexed listeners as well\n      for (id in type_index) {\n        type_index[id].fn.call(type_index[id].ctx, event);\n      }\n    }\n\n    if (propagate) {\n      // propagate the event to parents (set with add_event_parent)\n      this._propagate_event(event);\n    }\n\n    return this;\n  };\n\n  this.listens = function (type, propagate) {\n    var events = this._events;\n\n    if (events && (events[type] || events[type + '_len'])) { return true; }\n\n    if (propagate) {\n      // also check parents for listeners if event propagates\n      for (var id in this._event_parents) {\n        if (this._event_parents[id].listens(type, propagate)) { return true; }\n      }\n    }\n    return false;\n  };\n\n  this.once = function (types, fn, context) {\n    if (typeof types === 'object') {\n      for (var type in types) {\n        this.once(type, types[type], fn);\n      }\n      return this;\n    }\n    var handler = earth.bind(function () {\n      this\n          .off(types, fn, context)\n          .off(types, handler, context);\n    }, this);\n\n    // add a listener that's executed once and removed after that\n    return this\n        .on(types, fn, context)\n        .on(types, handler, context);\n  };\n\n  // adds a parent to propagate events to (when you fire with true as a 3rd argument)\n  this.add_event_parent = function (obj) {\n    this._event_parents = this._event_parents || {};\n    this._event_parents[earth.stamp(obj)] = obj;\n    return this;\n  };\n\n  this.remove_event_parent = function (obj) {\n    if (this._event_parents) {\n      delete this._event_parents[earth.stamp(obj)];\n    }\n    return this;\n  };\n\n  this._propagate_event= function (e) {\n    for (var id in this._event_parents) {\n      this._event_parents[id].fire(e.type, e, true);\n    }\n  };\n});\n\"use strict\";\nearth.core.dispatcher = new earth.core.mixin.observable();\n\"use strict\";\n\n/**\n  * class has a global cache, registering all caches in the static methods\n  * also provides instance methods for a specific cache\n  * on initialisation, each caching object will be added to the global cache\n  * so one can get all caches initialised\n  *\n  */\nearth.core.cache = earth.core.object.extend(new function(){\n  this.__id__ = 'earth.core.cache';\n\n  this.includes = [earth.core.mixin.observable];\n\n  /* START STATIC METHODS */\n  this.statics = {};\n  /**\n    * a collection of all global caches\n    */\n  this.statics.global = [];\n\n  this.statics.all = function(){\n    return this.global;\n  };\n\n  this.statics.add = function(id, cache){\n    if(!this.has(id)){\n      this.global[id] = cache;\n      this.global.length++; \n    }else{\n      console.error('Cache with ID ' + id + ' already exists.');\n    }\n  };\n\n  this.statics.remove = function(id){\n    if(this.global[id]){\n      this.global[id] = null;\n      delete this.global[id];\n      this.global.length--; \n    }else{\n      console.error('Cache with ID ' + id + ' does not exist.');\n    }\n  };\n\n  this.statics.has = function(id){\n    return (this.global[id] && this.global[id] != null);\n  };\n\n  this.statics.size = function(){\n    return this.statics.length;\n  };\n  /* END STATIC METHODS */\n\n  /**\n    * the internal ID for the cache\n    */\n  this.id = null;\n\n  /**\n    * holds the references to the cached objects. This is to be considered a plain array.\n    * @see earth.core.cache.init\n    */\n  this.cache = null;\n  this.length = 0;\n\n  /**\n   * Converts any object to a useable index\n   * if the object does not have an ID a random number will be returned and respective flags set\n   * can be overridden\n   */\n  this.index = function(obj) {\n    if (obj && !isNaN(obj-0)) return obj;\n    if (obj && (typeof obj === 'string' || obj instanceof String)) return obj;\n    if (obj && obj.id) return obj.id;\n    if (obj && obj.__cache_id__) return obj.__cache_id__;\n\n    //no ID, we create a random number and set the respective flag so we can identify it lateron\n    (obj.__cache_id__ = Math.floor((Math.random() * (Number.MAX_VALUE/10)) + 1));\n    return obj.__cache_id__;\n  }\n\n  this.has = function(obj){\n    var ret = this.cache[this.index(obj)];\n    return (ret)?ret:false;\n  };\n\n  this.get = function(id){\n    return this.has(id);\n  };\n\n  this.add = function(obj){\n    var id = this.index(obj);\n    if(!this.has(obj)){\n      this.fire('cache.add', {id:this.id, obj:obj});\n      this.cache[id] = obj;\n      this.length++; \n      return true;\n    }else{\n      if(id) console.error('Cache with ID ' + id + ' already exists in cache ' + this.id);\n    }\n    return false;\n  };\n\n  this.remove = function(obj){\n    var id = this.index(obj);\n    if(this.cache[id]){\n      this.fire('cache.remove', {id:this.id, obj:obj});\n      var obj = this.cache[id];\n      this.cache[id] = null;  // XXX: MD what for?\n      delete this.cache[id];\n      this.length--;\n      return obj;\n    }\n    return null;\n  };\n\n  this.clear = function(){\n    this.fire('cache.clear', {id:this.id});\n    this.cache = {};\n    this.length = 0;\n  };\n\n  this.size = function(){\n    return this.length;\n  };\n\n  this.all = function(){\n    return this.cache;\n  };\n\n  this.get_id = function(){\n    return this.id;\n  };\n\n  this.__init = function(id){\n    this.id = id;\n    this.cache = {};\n    this.length = 0;\n  };\n});\n\nearth.core.cache.add_init_hook(function(){\n  this.constructor.add(this.id, this);\n});\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {module.exports = earth;}else {if (typeof define === 'function' && define.amd) {define([], function() {return earth;});}else {window.earth = earth;}}"]}