diff --git a/scripts/ckeditor/plugins/dndfiles/plugin.js b/scripts/ckeditor/plugins/dndfiles/plugin.js
new file mode 100755
index 00000000..66c69802
--- /dev/null
+++ b/scripts/ckeditor/plugins/dndfiles/plugin.js
@@ -0,0 +1,166 @@
+/**
+ * Basic sample plugin inserting current date and time into CKEditor editing area.
+ */
+
+// Register the plugin within the editor.
+CKEDITOR.plugins.add( 'dndfiles', {
+
+ icons: 'dndfiles',
+
+ // The plugin initialization logic goes inside this method.
+ init: function( editor ) {
+
+ // Define an editor command that inserts a timestamp.
+ editor.addCommand( 'dragndrop', {
+
+ // Define the function that will be fired when the command is executed.
+ exec: function( editor ) {
+
+ // stores the names of all the files that are uploaded
+ var filename = [];
+ var iframe = document.getElementsByTagName('iframe')[0];
+ var iframeHTML = $(iframe).contents().find("html");
+
+ var holder = $(document.getElementsByTagName('iframe')[0].contentDocument),
+ tests = {
+ filereader: typeof FileReader != 'undefined',
+ dnd: 'draggable' in document.createElement('span'),
+ formdata: !!window.FormData,
+ progress: "upload" in new XMLHttpRequest
+ }
+
+ // Function that initializes all relevant listeners for the drag and drop events
+ function init() {
+
+ if(tests.dnd) { // Drag and drop is enabled
+
+ // Handle drag and drop events
+ holder.dndhover().on({
+ 'dndHoverStart': function(event) {
+ event.stopPropagation();
+ event.preventDefault();
+
+ console.log("start");
+
+ iframeHTML.css('box-shadow', 'inset 0px 0px 10px 1px #999998');
+
+ return false;
+ },
+ 'dndHoverEnd': function(event) {
+ event.stopPropagation();
+ event.preventDefault();
+
+ iframeHTML.css('box-shadow', '0px 0px 0px 0px #999999');
+
+ console.log("end");
+ return false;
+ },
+ 'drop' : function(e) {
+ e.preventDefault();
+
+ console.log("drop");
+
+ iframeHTML.css('box-shadow', '0px 0px 0px 0px #999999');
+
+ // Upload dropped files
+ upload(e.originalEvent.dataTransfer.files);
+ }
+ });
+ } else {
+ console.log("Drag and drop functionality not available...");
+ fileupload.querySelector('input').onchange = function () {
+ upload(this.files);
+ };
+ }
+ }
+
+ // This function is called when the upload of files succedes. Displays uploaded images
+ // into img tags and everything else as an tag
+ function uploadSuccess(data) {
+ // End the progress bar
+ progressJs().end();
+
+ console.log(data);
+
+ var html = '';
+ for(var idx = 0; idx < data.attachments.length; idx++) {
+ var att = data.attachments[idx];
+ var name = att.fullName;
+
+ // this is an image and it has a thumbnail
+ if(att.thumbName) {
+ html += '
';
+ } else { // this is not an image
+ html += "