diff --git a/js/h5p.js b/js/h5p.js
new file mode 100644
index 0000000..4eb8c80
--- /dev/null
+++ b/js/h5p.js
@@ -0,0 +1,94 @@
+window.H5P = window.H5P || {};
+
+//
+// Initialize H5P content
+// Scans for ".h5p-content"
+H5P.init = function () {
+ $(".h5p-content").each(function (idx, el) {
+ var $el = H5P.jQuery(el);
+ var obj = new (H5P.classFromName($el.data('class')))(H5P.jQuery.parseJSON(Drupal.settings.h5p.jsonContent));
+ obj.attach($el);
+ });
+};
+
+//
+// Used from libraries to construct instances of other libraries' objects by
+// name.
+//
+H5P.classFromName = function(name) {
+ var arr = name.split(".");
+ return this[arr[arr.length-1]];
+};
+
+// Helper object for keeping coordinates in the same format all over.
+H5P.Coords = function(x, y, w, h) {
+ if ( !(this instanceof H5P.Coords) )
+ return new H5P.Coords(x, y, w, h);
+
+ this.x = 0;
+ this.y = 0;
+ this.w = 1;
+ this.h = 1;
+
+ if (typeof(x) == 'object') {
+ this.x = x.x;
+ this.y = x.y;
+ this.w = x.w;
+ this.h = x.h;
+ } else {
+ if (x !== undefined) {
+ this.x = x;
+ }
+ if (y !== undefined) {
+ this.y = y;
+ }
+ if (w !== undefined) {
+ this.w = w;
+ }
+ if (h !== undefined) {
+ this.h = h;
+ }
+ }
+ return this;
+};
+
+// We have several situations where we want to shuffle an array, extend array
+// to do so.
+Array.prototype.shuffle = function() {
+ var i = this.length, j, tempi, tempj;
+ if ( i === 0 ) return false;
+ while ( --i ) {
+ j = Math.floor( Math.random() * ( i + 1 ) );
+ tempi = this[i];
+ tempj = this[j];
+ this[i] = tempj;
+ this[j] = tempi;
+ }
+ return this;
+};
+
+// Add indexOf to browsers that lack them. (IEs)
+if(!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function(needle) {
+ for(var i = 0; i < this.length; i++) {
+ if(this[i] === needle) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+
+// Simple 'contains' function. Easier to use than keep testing indexOf to -1.
+Array.prototype.contains = function (needle) {
+ return (this.indexOf(needle) > -1);
+};
+
+// We want our own jQuery version, regardless of what the containing page is
+// up to.
+(function () {
+ document.writeln('');
+ document.writeln('');
+ document.writeln('');
+})();
+