(function() {
	//tinymce.PluginManager.requireLangPack('lineunbreaker');

	tinymce.create('tinymce.plugins.Lineunbreaker', {
		init : function(ed, url) {
			ed.addCommand('mceLineunbreak', function() {

				var content = ed.selection.getContent();
                var contentClean = content.replace(/(\r\n|\n|\r|<br\s*[\/]?>)/gim, function (match, p1, offset, original) {
                    var hasSpace = false;
                    var hasHyphen = false;
                    // Check if there is a space left side of match
                    if (offset > 0) {
                        var lftChar = original.charAt(offset - 1);
                        if (lftChar === ' ') {
                            hasSpace = true;
                        }
                        // Check for ascii hyphen and unicode hyphen
                        if (lftChar === '-' || lftChar === '‐') {
                            hasHyphen = true;
                        }
                    }
                    if (offset < original.length - 1 - p1.length) {
                        var rgtChar = original.charAt(offset + p1.length);
                        if (rgtChar === ' ') {
                            hasSpace = true;
                        }
                        // Check for hyphen
                        if (rgtChar === '-' || rgtChar === '‐') {
                            hasHyphen = true;
                        }
                    }

                    return hasHyphen || hasSpace ? '' : ' ';
                });
				ed.selection.setContent(contentClean);
			});

			// Register button
			ed.addButton('lineunbreak', {
				title : 'Removes linebreaks from selected text',
				cmd : 'mceLineunbreak',
				image : url + '/img/lineunbreaker.gif',
			});

		},

		getInfo : function() {
			return {
				longname : 'Lineunbreaker',
				author : 'Andre Lohan',
				authorurl : 'http://wordpress.org/extend/plugins/lineunbreaker/',
				infourl : '',
				version : "1.3"
			};
		}
	});

	tinymce.PluginManager.add('lineunbreaker', tinymce.plugins.Lineunbreaker);
})();