MooEditable.Locale.define({
	mmlink: 'Insert hyperlink'
	, mmunlink: 'Remove hyperlink'
	, mmcharmap: 'Insert special character'
	, mmurlimage: 'Afbeelding toevoegen'
	, mmurldocument: 'Document toevoegen'
	, mmcreatelink: 'Link toevoegen'
});

MooEditable.UI.PromptDialogExtra = function(questionText, answerText, fn){
	if (!questionText) return;
	var html = '<label class="dialog-label">' + questionText
		+ '<select id="imageSelect">'
		+ '</select>'
		+ ' <input type="text" class="text dialog-input" value="' + answerText + '">'
		+ '</label> <button class="dialog-button dialog-ok-button">' + MooEditable.Locale.get('ok') + '</button>'
		+ '<button class="dialog-button dialog-cancel-button">' + MooEditable.Locale.get('cancel') + '</button>';

	return new MooEditable.UI.Dialog(html, {
		'class': 'mooeditable-prompt-dialog',
		onOpen: function(){
			var imagesRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/getImages'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						
						var imageSelect = document.id('imageSelect');
						imageSelect.empty();
						imageSelect.removeEvents();
						
						var first = new Element('option', {
							value: ''
							, text: 'Selecteer afbeelding'
						});
						first.inject(imageSelect, 'bottom');
						
						rJson.images.each(function(item){
							var o = new Element('option', {
								value: item.src
								, text: item.title
							});
							o.inject(imageSelect, 'bottom');
						});

						
						var input = this.el.getElement('.dialog-input');			
						imageSelect.addEvent('change', function(e) {
							input.set('value', 'http://thehydrocruisers.nl/uploads/imgs/'+imageSelect.get('value'));
						}.bind(this));
						
					}
				}.bind(this)
			});
			imagesRequest.send();	
			
			

			(function(){
				// input.focus();
				// input.select();
			}).delay(10);
		},
		
		onClick: function(e){
			e.preventDefault();
			if (e.target.tagName.toLowerCase() != 'button') return;
			var button = document.id(e.target);
			var input = this.el.getElement('.dialog-input');
			if (button.hasClass('dialog-cancel-button')){
				input.set('value', answerText);
				this.close();
			} else if (button.hasClass('dialog-ok-button')){
				var answer = input.get('value');
				input.set('value', answerText);
				this.close();
				if (fn) fn.attempt(answer, this);
			}
		}
	});
};





//
MooEditable.UI.PromptDialogDocument = function(questionText, answerText, fn){
	if (!questionText) return;
	var html = '<label class="dialog-label">' + questionText
		+ '<select id="documentSelect">'
		+ '</select>'
		+ ' <input type="text" class="text dialog-input" value="' + answerText + '">'
		+ '</label> <button class="dialog-button dialog-ok-button">' + MooEditable.Locale.get('ok') + '</button>'
		+ '<button class="dialog-button dialog-cancel-button">' + MooEditable.Locale.get('cancel') + '</button>';

	return new MooEditable.UI.Dialog(html, {
		'class': 'mooeditable-prompt-dialog',
		onOpen: function(){
			var documentsRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/getDocuments'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						
						var documentSelect = document.id('documentSelect');
						documentSelect.empty();
						documentSelect.removeEvents();
						
						var first = new Element('option', {
							value: ''
							, text: 'Selecteer document'
						});
						first.inject(documentSelect, 'bottom');
						
						rJson.documents.each(function(item){
							var o = new Element('option', {
								value: item.src
								, text: item.title
							});
							o.inject(documentSelect, 'bottom');
						});

						
						var input = this.el.getElement('.dialog-input');			
						documentSelect.addEvent('change', function(e) {
							input.set('value', 'http://thehydrocruisers.nl/uploads/docs/'+documentSelect.get('value'));
						}.bind(this));
						
					}
				}.bind(this)
			});
			documentsRequest.send();	
			
			(function(){
				// input.focus();
					// input.select();
			}).delay(10);
		},
		
		onClick: function(e){
			e.preventDefault();
			if (e.target.tagName.toLowerCase() != 'button') return;
			var button = document.id(e.target);
			var input = this.el.getElement('.dialog-input');
			if (button.hasClass('dialog-cancel-button')){
				input.set('value', answerText);
				this.close();
			} else if (button.hasClass('dialog-ok-button')){
				var answer = input.get('value');
				input.set('value', answerText);
				this.close();
				if (fn) fn.attempt(answer, this);
			}
		}
	});
};


//
// add link with pages
MooEditable.UI.PromptDialogLink = function(questionText, answerText, fn){
	if (!questionText) return;
	var html = '<label class="dialog-label">' + questionText
		+ '<select id="pageSelect">'
		+ '</select>'
		+ ' <input type="text" class="text dialog-input" value="' + answerText + '">'
		+ '</label> <button class="dialog-button dialog-ok-button">' + MooEditable.Locale.get('ok') + '</button>'
		+ '<button class="dialog-button dialog-cancel-button">' + MooEditable.Locale.get('cancel') + '</button>';

	return new MooEditable.UI.Dialog(html, {
		'class': 'mooeditable-prompt-dialog',
		onOpen: function(){
			var linksRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/getLinks'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						
						var pageSelect = document.id('pageSelect');
						pageSelect.empty();
						pageSelect.removeEvents();
						
						var first = new Element('option', {
							value: ''
							, text: 'Selecteer pagina'
						});
						first.inject(pageSelect, 'bottom');
						
						rJson.links.each(function(item){
							if(item.purl != undefined){
								var o = new Element('option', {
									value: item.purl+'/'+item.url
									, text: '- '+item.name
								});
							}else{
								var o = new Element('option', {
									value: item.url
									, text: item.name
								});
							}
							o.inject(pageSelect, 'bottom');
						});

						
						var input = this.el.getElement('.dialog-input');			
						pageSelect.addEvent('change', function(e) {
							input.set('value', 'http://thehydrocruisers.nl/'+pageSelect.get('value'));
						}.bind(this));
						
					}
				}.bind(this)
			});
			linksRequest.send();
			
			(function(){
				// input.focus();
				// 	input.select();
			}).delay(10);
		},
		
		onClick: function(e){
			e.preventDefault();
			if (e.target.tagName.toLowerCase() != 'button') return;
			var button = document.id(e.target);
			var input = this.el.getElement('.dialog-input');
			if (button.hasClass('dialog-cancel-button')){
				input.set('value', answerText);
				this.close();
			} else if (button.hasClass('dialog-ok-button')){
				var answer = input.get('value');
				input.set('value', answerText);
				this.close();
				if (fn) fn.attempt(answer, this);
			}
		}
	});
};








Object.append(MooEditable.Actions, {
	mmunlink: {
		title: MooEditable.Locale.get('mmunlink')
		, options: {}
		, command: function() {
			var selection = this.selection;
			if (selection.isCollapsed()){
				var node = selection.getNode();
				selection.selectNode(node);
			} else {
				
			}			
			this.execute('unlink', false, false);
		}
	}
	, mmlink: {
		title: MooEditable.Locale.get('mmlink')
		, options: {
			// shortcut: 'l'
		}
		, states: {
			tags: ['a']
		}
		// dialogs: {
		// 	alert: MooEditable.UI.AlertDialog.pass(MooEditable.Locale.get('selectTextHyperlink')),
		// 	prompt: function(editor){
		// 		return MooEditable.UI.PromptDialog(MooEditable.Locale.get('enterURL'), 'http://', function(url){
		// 			editor.execute('createlink', false, url.trim());
		// 		});
		// 	}
		// },
		, command: function(){
			var selection = this.selection;
			var range;
			var opts = {
				promptValue: 'http://'
			};
			var editor = this;
mm.log(editor);			
// 			var linkDialog = new mmDialog.Prompt('Hyperlink', function(url) {
// 					editor.editorFocus();				
// 				setTimeout(function() {
// 
// 					editor.execute('createlink', false, url.trim());
// 				},500);
// 			}, function() {
// 				setTimeout(function() {				
// 					editor.iframe.focus();
// mm.log('focused?');					
// 				},1000);
// 			}, opts);

			var editable_hyperlink_url = 'editable_hyperlink';
			var editableDialogHyperlink = new mmDialog.Ajax(editable_hyperlink_url,{
				overlay: {
					id: 'mmDialogAjaxOverlay'
					, color: '#000'
					, duration: 200
					, opacity: 0.001
					, zIndex: 9000
				}
			});		


			editableDialogHyperlink.addEvent('submit', function(data) {
				if (range) { selection.setRange(range); }				
mm.log(data);				
				if (data) {		
					var url = (data.url != undefined) ? data.url.trim() : '' ;
					var url_internal = (data.url_internal != undefined) ? data.url_internal.trim() : '____' ;
					var target = (data.new_window != undefined && data.new_window.toInt() == 1) ? '_blank' : '' ;
					var theUrl = '';
					if (url != '') {
						theUrl = url;	// needs check for http:// etc
					} else if (url_internal != '____') {
						theUrl = url_internal;
					}
					if (theUrl != '') {
						// editor.execute('createlink', false, theUrl);
						// editor.selection.insertContent('<a href="' + protocol_input.get('value') + '://' + url_input.get('value') + '" target="' + target_input.get('value') + '">' + editor.selection.getText() + '</a>');
						var theLink = '<a href="'+theUrl+'" ';
						if (target != '') {
							theLink += 'target="_blank"';
						}
						theLink += '>'+editor.selection.getText()+'</a>';
						editor.selection.insertContent(theLink);
					} else {
						mm.alert('No url provided');
					}
				}
			});
			
			editableDialogHyperlink.addEvent('close', function() {
				if (range) { selection.setRange(range); }
			});



			if (selection.isCollapsed()){
				var node = selection.getNode();
				if (node.get('tag') == 'a' && node.get('href')){
					selection.selectNode(node);
					editableDialogHyperlink.addEvent('initialized', function() {
						if (editableDialogHyperlink.dialogForm) {
							var href = node.get('href');

							var new_window = editableDialogHyperlink.dialogForm.getElement('input[name=new_window]');
							
							var i_url = editableDialogHyperlink.dialogForm.getElement('#editable_url');							
							var i_url_internal = editableDialogHyperlink.dialogForm.getElement('#editable_url_internal');		

							if (i_url_internal && i_url) {
								i_url_internal.addEvent('change', function(e) {
									if (i_url_internal.get('value') != '____') {
										i_url.set('value','');
									}
								});
								i_url.addEvent('keyup', function(e) {
									if (i_url_internal.get('value') != '____') {
										i_url_internal.set('value','____').fireEvent('change');
									}
								});
								
								if (href.test('://')) {

									if (i_url) {
										i_url.set('value', href).focus();
									}
								} else {
									if (i_url_internal) {
										i_url_internal.getElements('option').each(function(opt) {
											var opt_val = opt.get('value');
											if (opt_val == href) {
												opt.set('selected', true);
												i_url_internal.fireEvent('change');
											} 
										});
									}
								}								
							}							
							
							if (new_window) {
								if (node.get('target') != undefined && node.get('target') != '') {
									new_window.set('checked', true);
								}
							}
mm.log('initialized event func executed collapsed');							
						}
					});
					range = selection.getRange();			
					editableDialogHyperlink.openDialog();					
				} else {
					mm.alert('Please select the text to link first');
				}
			} else {
				var text = selection.getText();
				var node = selection.getNode();
				if (node.get('tag') == 'a' && node.get('href')){				
					editableDialogHyperlink.addEvent('initialized', function() {
						if (editableDialogHyperlink.dialogForm) {
							var href = node.get('href');							
							var i_url = editableDialogHyperlink.dialogForm.getElement('#editable_url');							
							var i_url_internal = editableDialogHyperlink.dialogForm.getElement('#editable_url_internal');
							var new_window = editableDialogHyperlink.dialogForm.getElement('input[name=new_window]');													

							if (i_url_internal && i_url) {
								i_url_internal.addEvent('change', function(e) {
									if (i_url_internal.get('value') != '____') {
										i_url.set('value','');
									}
								});
								i_url.addEvent('keyup', function(e) {
									if (i_url_internal.get('value') != '____') {
										i_url_internal.set('value','____').fireEvent('change');
									}
								});
								
								if (href.test('://')) {

									if (i_url) {
										i_url.set('value', href).focus();
									}
								} else {
									if (i_url_internal) {
										i_url_internal.getElements('option').each(function(opt) {
											var opt_val = opt.get('value');
											if (opt_val == href) {
												opt.set('selected', true);
												i_url_internal.fireEvent('change');
											} 
										});
									}
								}								
							}

							if (new_window) {
								if (node.get('target') != undefined && node.get('target') != '') {
									new_window.set('checked', true);
								}
							}
mm.log('initialized event func executed');							
						}
					});				
				}
				range = selection.getRange();			
				editableDialogHyperlink.openDialog();
			}
		}	
	}
	, mmcharmap: {
		title: MooEditable.Locale.get('mmcharmap')
		, options: {}
		, command: function() {
			var selection = this.selection;
			var editor = this;
			var range;
			if (selection.isCollapsed()){
				// var node = selection.getNode();
				// selection.selectNode(node);
			} else {
				
			}			
			// this.execute('unlink', false, false);
			var editable_charmap_url = 'editable_charmap';
			var editableDialogCharmap = new mmDialog.Ajax(editable_charmap_url,{
				overlay: {
					id: 'mmDialogAjaxOverlay'
					, color: '#000'
					, duration: 200
					, opacity: 0.001
					, zIndex: 9000
				}
			});
			
			editableDialogCharmap.addEvent('submit', function(data) {
				if (range) { selection.setRange(range); }				
mm.log(data);				
				if (data && data.mmchar != undefined) {
					// var url = data.url.trim();
					// editor.execute('createlink', false, url.trim());
					editor.selection.insertContent(data.mmchar);					
				}
			});

			editableDialogCharmap.addEvent('close', function() {
				if (range) { selection.setRange(range); }
			});			
			
			range = selection.getRange();			
			editableDialogCharmap.openDialog();			
		}
	}	
	, mmsource: {
		title: MooEditable.Locale.get('mmsource')
		, options: {}
		, command: function() {
			var selection = this.selection;
			var editor = this;
			var range;
			// this.toggleView();
			var editable_source_url = 'editable_source';
			var editableDialogSource = new mmDialog.Ajax(editable_source_url, {
				overlay: {
					id: 'mmDialogAjaxOverlay'
					, color: '#000'
					, duration: 200
					, opacity: 0.001
					, zIndex: 9000
				}				
			});
			editableDialogSource.addEvent('submit', function(data) {
				if (data && data.source != undefined) {
					editor.textarea.set('value', data.source);
					editor.setContent(data.source);	
				}
			});
			editableDialogSource.addEvent('initialized', function() {
				var src = editableDialogSource.dialogForm.getElement('#editable_source');
				src.set('value', editor.getContent());
			});
			// range = selection.getRange();
			editableDialogSource.openDialog();			
		}
	}
	
	,mmurlimage: {
		title: MooEditable.Locale.get('mmurlimage'),
		options: {
			shortcut: 'a'
		},
		dialogs: {
			prompt: function(editor){
				return MooEditable.UI.PromptDialogExtra(MooEditable.Locale.get('enterImageURL'), 'http://', function(url){
					editor.execute('insertimage', false, url.trim());
				});
			}
		},
		command: function(){
			this.dialogs.mmurlimage.prompt.open();
		}
	}
	

	
	
	,mmurldocument: {
		title: MooEditable.Locale.get('mmurldocument'),
		options: {
			shortcut: 'l'
		},
		states: {
			tags: ['a']
		},
		dialogs: {
			alert: MooEditable.UI.AlertDialog.pass(MooEditable.Locale.get('selectTextHyperlink')),
			prompt: function(editor){
				return MooEditable.UI.PromptDialogDocument(MooEditable.Locale.get('enterURL'), 'http://', function(url){
					editor.execute('createlink', false, url.trim());
				});
			}
		},
		command: function(){
			
			
			var selection = this.selection;
			var dialogs = this.dialogs.createlink;
			if (selection.isCollapsed()){
				var node = selection.getNode();
				if (node.get('tag') == 'a' && node.get('href')){
					selection.selectNode(node);
					var prompt = dialogs.prompt;
					prompt.el.getElement('.dialog-input').set('value', node.get('href'));
					this.dialogs.mmurldocument.prompt.open();
				} else {
					
					// dialogs.alert.open();
				}
			} else {
				var text = selection.getText();
				// var prompt = dialogs.prompt;
				// if (urlRegex.test(text)) prompt.el.getElement('.dialog-input').set('value', text);
				this.dialogs.mmurldocument.prompt.open();

				
			}
			
		}
	}
	
	,mmcreatelink: {
		title: MooEditable.Locale.get('mmcreatelink'),
		options: {
			shortcut: 'l'
		},
		states: {
			tags: ['a']
		},
		dialogs: {
			alert: MooEditable.UI.AlertDialog.pass(MooEditable.Locale.get('selectTextHyperlink')),
			prompt: function(editor){
				return MooEditable.UI.PromptDialogLink(MooEditable.Locale.get('enterURL'), 'http://', function(url){
					editor.execute('createlink', false, url.trim());
				});
			}
		},
		command: function(){			
			var selection = this.selection;
			var dialogs = this.dialogs.createlink;
			if (selection.isCollapsed()){
				var node = selection.getNode();
				if (node.get('tag') == 'a' && node.get('href')){
					selection.selectNode(node);
					var prompt = dialogs.prompt;
					prompt.el.getElement('.dialog-input').set('value', node.get('href'));
					this.dialogs.mmcreatelink.prompt.open();
				} else {
					
					// dialogs.alert.open();
				}
			} else {
				var text = selection.getText();
				// var prompt = dialogs.prompt;
				// if (urlRegex.test(text)) prompt.el.getElement('.dialog-input').set('value', text);
				this.dialogs.mmcreatelink.prompt.open();	
			}		
		}
	}
	

});
