


CKEDITOR.plugins.add( 'SFMediaPool', {
	
	init: function(editor) {
		
		console.log("initialize plugin ... SFMediaPool ... advanced ... ssalevsky");

		editor.on('doubleclick', function(evt) {
			var element = evt.data.element;
			if (element && element.hasAttribute('data-mediapool')) {
				if(editor.config.mediaURL) {
					CKEDITOR.mediaPoolOpener = editor;
					if (element.hasAttribute('data-mediapopup')) {
						centerPopup(element.getAttribute('data-mediapopup'), 900, 650);
					} else {
						centerPopup(editor.config.mediaURL, 900, 650);
					}
				}
				evt.stop();
			}
		});

		editor.on('instanceReady', function() {
			if (editor.commands.image) {
				var previous = editor.commands.image.exec;
				editor.commands.image.exec = function() {
					var element = editor.getSelection().getStartElement();
					if (element.hasAttribute('data-mediapopup')) {
						CKEDITOR.mediaPoolOpener = editor;
						centerPopup(element.getAttribute('data-mediapopup'), 900, 650);
					} else {
						previous.apply(editor.commands.image);
					}
				}
			}
		});

		var serverReplace = function(what) {
			try {
				var req = new XMLHttpRequest();
				// req.open("POST","/SITEFORUM?t=/tools/js/ckeditor/plugins/mediaPool/replacement", false);
				
				req.open("POST",editor.config.mediaReplaceUrl, false);
				req.setRequestHeader("Content-Type","text/plain; encoding=utf-8");
				req.setRequestHeader("Accept","text/plain");
				req.send(what);
				if (req.status === 200) {
					return req.responseText;
				}
			} catch (e) {
				console.log(e); // Ignore.
			}
			return what;
		}

		editor.dataProcessor.htmlFilter.addRules({
			attributes: {
				"data-mediapool": function(attribute, element) {
					element.replaceWith(new CKEDITOR.htmlParser.text(attribute));
				}
			}
		});
		
		editor.dataProcessor.dataFilter.addRules({
			text: function(what) {
				if (what.indexOf('$') != -1) {
					return serverReplace(what);
				} else {
					return what;
				}
			}
		});

		var centerPopup = function(url, w, h) {
		    var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
		    var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;
		    width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
		    height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
		    var left = ((width / 2) - (w / 2)) + dualScreenLeft;
		    var top = ((height / 2) - (h / 2)) + dualScreenTop;
		    var newWindow = window.open(url, 'sfs-media-popup', 'status=no, menubar=no, titlebar=no, scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
		    if (window.focus) {
		        newWindow.focus();
		    }
		};

		// Command.
		editor.addCommand('SFMediaPoolPopup', {
			exec: function() {
				if(editor.config.mediaURL) {
					CKEDITOR.mediaPoolOpener = editor;
					centerPopup(editor.config.mediaURL, 900, 650);
				}
			}
		});
		
		// Button.
		editor.ui.addButton( 'SFMediaPool', {
			label:   'SITEFORUM Media Pool',
			command: 'SFMediaPoolPopup',
			icon:    '/global_files/icons/fugue/folder--plus.png'
		});
	}
	
});


