/* 
	prompt
	2 buttons, input
	event: 'prompted' 
*/
mmDialog.FileManager = new Class({	
	
	Extends: mmDialog
	, options: {
		buttons : {
			'ok': '<span class="mmIcon icon-save"></span> Select file'
			, 'cancel': 'Close'
		}
		, zIndex: 8010
		, overlay: {
			id: 'mmDialogOverlayFileManager'
			, color: '#000'
			, duration: 400
			, opacity: 0.2
			, zIndex: 8000
		}
		, size: { width: 800, height: 510 }		
		, autosize: false
		, closeable: true
		, useEscKey: true
		, focus: true
		, directory : '/'
		, cntClass: 'mmDialogFileManagerCnt'
		, template: '<div class="rel ptb-0"><div class="rel mmDialogFileManagerCnt tL"></div></div>'
	}
	, initialize: function(ajaxurl, posFunc, negFunc, options){
		this.parent(options);
		this.setPosFunc(posFunc).setNegFunc(negFunc);
		this.setupDialogElements();
		this.setDefaultContent();
		this.setupDialogEvents();
		this.ajaxurl = ajaxurl;
		this.mngDir = this.options.directory;
		this.mngAction = 'list';
		this.actionItemType	= '';
		this.actionItemName = '';	
		this.selectedItem = '';	
		this.selectedItemMeta = {};
		this.selectable	= true;	
		this.isRequesting = false;
		this.ajaxRequest = new Request.JSON({
			url: this.ajaxurl
			, method: 'post'
			, link: 'cancel'
			, noCache: true
			, onSuccess: function(rJson, rText) {
				this.ajaxRequestSucces(rJson, rText);		
			}.bind(this)
			, onRequest: function() {
				this.ajaxRequestStart();
			}.bind(this)
			, onFailure: function(xhr) {				
				this.ajaxRequestFailure(xhr);
			}.bind(this)
		});
		this.ajaxDetailsRequest = new Request.JSON({
			url: this.ajaxurl
			, method: 'post'
			, link: 'cancel'
			, noCache: true
			, onSuccess: function(rJson, rText) {
				this.ajaxDetailsRequestSucces(rJson, rText);		
			}.bind(this)
			, onRequest: function() {
				this.ajaxDetailsRequestStart();
			}.bind(this)
			, onFailure: function(xhr) {				
				this.ajaxDetailsRequestFailure(xhr);
			}.bind(this)
		});		
	}
	, setupDialogElements: function() {
		this.btnOk = new Element('a',{
			'class': 'mmBtn btn-default btn-l btn-pos ml-10'
			, 'href': '#'
			, events: {
				click: function(e){
					e.stop();				
					// var promptResult = this.promptInput.get('value');	
					// this.fireEvent('prompted', promptResult);
					this.close();					
					this.fireEvent('select', [this.mngDir, this.selectedItem, this.selectedItemMeta]);
					this.posFunc(this.mngDir, this.selectedItem, this.selectedItemMeta);
				}.bind(this)
				// , 'keydown': this.keyDown.bindWithEvent(this, this.btnOk)				
			},
			html: this.options.buttons.ok
		});	
		this.btnCancel = new Element('a',{
			'class': 'mmBtn btn-l'
			, 'href': '#'
			, events: {
				click: function(e){
					e.stop();
					this.close();					
					this.fireEvent('denied');					
					this.negFunc();					
				}.bind(this)
			},
			html: this.options.buttons.cancel
		});	

		this.btnCancel.addEvent('keydown', this.keyDown.bindWithEvent(this, this.btnCancel));
		this.btnOk.addEvent('keydown', this.keyDown.bindWithEvent(this, this.btnOk));				
		this.buttons = new Element('div', {'class':'rel'}).adopt([this.btnCancel,this.btnOk]);
		this.keyCatcherContainer = new Element('div', {'class':'abs abs-tl'}).setStyle('left',-100).inject(this.buttons);
		this.keyCatcher = new Element('input', {type:'text'}).setStyle('width',5).inject(this.keyCatcherContainer);		
		this.dialogTabIndex	= [this.btnOk, this.btnCancel];
		this.setFooter(this.buttons);
		this.setupCreateDirDialog();		
		this.setupRenameDialog();
		this.setupDeleteDialog();
		this.setupLoadingDialog();
	}
	, setDefaultContent:function() {
		var el = this.options.template.toHTML();
		this.setContent(el);
		this.cntContainer = this.dialogBody.getElement('div.'+this.options.cntClass);
		// this.promptInput = this.dialogBody.getElement('input.'+this.options.inputClass);
		// if (!this.promptInput) {
		// 	this.promptInput = new Element('input', {'class':this.options.inputClass,'type':'text'}).inject(this.dialogBody);
		// }		
		// this.dialogTabIndex.push(this.promptInput);	
		// this.promptInput.set('value','');	
		this.setDefaultButtonTexts();		
	}	
	, setupDialogEvents:function() {
		if(this.options.focus){
			this.addEvent('show',function(){
				// this.promptInput.focus();
			});
		}	
		this.addEvent('open',function(){
			// this.promptInput.set('value','');
			this.btnOk.removeClasses(['btn-active', 'btn-focus']);
			this.btnCancel.removeClasses(['btn-active', 'btn-focus']);			
		}.bind(this));				
		// this.promptInput.addEvent('keydown', this.keyDown.bindWithEvent(this, this.promptInput));
		this.boundKeyNav = this.keyNav.bindWithEvent(this);		
		this.addEvent('close', function() {
mm.log('closing filemanager, removing key events from body');		
			// document.id(document.body).removeEvent('keydown', this.boundKeyNav);				
			this.keyCatcher.removeEvent('keydown', this.boundKeyNav);
		}.bind(this));
	}
	, setupCreateDirDialog:function() {
		var posFunc = Function.from(true);
		var negFunc = Function.from(false);
		this.createDirDialog = new mmDialog.Prompt('', posFunc, negFunc, {
			autosize:true
			, disposeOnClose:false
			, useEscKey:true
			, closeable:true
			, overlay:{
				id:'mmDialogOverlayCreateDir'
				}
		});		
		this.createDirDialog.addEvents({
			'open': function() {
mm.log('REMOVING BOUNDKEYEVENT');				
				// document.id(document.body).removeEvent('keydown', this.boundKeyNav);				
				this.keyCatcher.removeEvent('keydown', this.boundKeyNav);				
			}.bind(this)
			, 'close': function() {
mm.log('ADDING BOUNDKEYEVENT');				
				// document.id(document.body).addEvent('keydown', this.boundKeyNav);		
				this.keyCatcher.addEvent('keydown', this.boundKeyNav);				
			}.bind(this)
			, 'prompted':function(input) {
mm.log('createDirDialog prompted input='+input);		
				if (input != '') {
mm.log('create dir: '+input);		
					this.ajaxRequest.send({
						data: {
							'action': 'createdir'
							, 'directory': this.mngDir
							, 'newName': input
						}
					});					
				}
			}.bind(this)
			, 'denied':function() {
mm.log('createDirDialog denied');				
			}.bind(this)
		});
		
	}	
	, setupRenameDialog:function() {
		var posFunc = Function.from(true);
		var negFunc = Function.from(false);
		this.renameDialog = new mmDialog.Prompt('', posFunc, negFunc, {
			autosize:true
			, disposeOnClose:false
			, useEscKey:true
			, closeable:true
			, overlay:{
				id:'mmDialogOverlayRename'
				}
		});		
		this.renameDialog.addEvents({
			'open': function() {
mm.log('REMOVING BOUNDKEYEVENT');				
				//document.id(document.body).removeEvent('keydown', this.boundKeyNav);				
				this.keyCatcher.removeEvent('keydown', this.boundKeyNav);				
			}.bind(this)
			, 'close': function() {
mm.log('ADDING BOUNDKEYEVENT');				
				// document.id(document.body).addEvent('keydown', this.boundKeyNav);		
				this.keyCatcher.addEvent('keydown', this.boundKeyNav);				
			}.bind(this)			
			, 'prompted':function(input) {
mm.log('renameDialog prompted input='+input);		
				if (this.actionItemType != '' && this.actionItemName != '' && input != '') {
mm.log('rename '+this.actionItemType+' from '+this.actionItemName+' to '+input);		
					this.ajaxRequest.send({
						data: {
							'action': 'rename'
							, 'directory': this.mngDir
							, 'itemType': this.actionItemType
							, 'itemName': this.actionItemName
							, 'newName': input
						}
					});					
				}
			}.bind(this)
			, 'denied':function() {
mm.log('renameDialog denied');				
			}.bind(this)
		});
	}	
	, setupDeleteDialog:function() {
		var posFunc = Function.from(true);
		var negFunc = Function.from(false);
		this.deleteDialog = new mmDialog.Confirm('', posFunc, negFunc, {
			autosize:true
			, disposeOnClose:false
			, useEscKey:true
			, closeable:true
			, overlay:{
				id:'mmDialogOverlayDelete'
				}
		});	
				
		this.deleteDialog.addEvents({
			'open': function() {
mm.log('REMOVING BOUNDKEYEVENT');				
				// document.id(document.body).removeEvent('keydown', this.boundKeyNav);				
				this.keyCatcher.removeEvent('keydown', this.boundKeyNav);				
			}.bind(this)
			, 'close': function() {
mm.log('ADDING BOUNDKEYEVENT');				
				// document.id(document.body).addEvent('keydown', this.boundKeyNav);		
				this.keyCatcher.addEvent('keydown', this.boundKeyNav);				
			}.bind(this)			
			, 'confirmed':function() {
mm.log('deleteDialog confirmed ');
				if (this.actionItemType != '' && this.actionItemName != '') {
mm.log('delete '+this.actionItemType+' name: '+this.actionItemName);
					this.ajaxRequest.send({
						data: { 
							'action':'delete'
							, 'directory':this.mngDir
							, 'itemType':this.actionItemType
							, 'itemName':this.actionItemName 
						}
					});
				}								
			}.bind(this)
			, 'denied':function() {
mm.log('deleteDialog denied');				
			}.bind(this)
		});			
	}
	, setupLoadingDialog:function() {
		this.loadingDialog = new mmDialog.Loading('', {
			
		});
	}
	, setPosFunc:function(posFunc) {
		this.posFunc = (posFunc != undefined && (typeOf(posFunc) == 'function')) ? posFunc : function() {} ;		
		return this;
	}
	, setNegFunc:function(negFunc) {
		this.negFunc = (negFunc != undefined && (typeOf(negFunc) == 'function')) ? negFunc : function() {} ;		
		return this;
	}	
	, ajaxRequestSucces:function(rJson, rText) {
		this.isRequesting = false;			
		if (rJson) {
			if (rJson.html) {
				this.cntContainer.empty();
				this.cntContainer.set('html', rJson.html);
				//document.id(document.body).removeEvent('keydown', this.boundKeyNav);							
				this.parseContent();
				// document.id(document.body).addEvent('keydown', this.boundKeyNav);				
				this.actionItemType	= '';
				this.actionItemName = '';	
				this.selectedItem = '';	
				this.selectedItemMeta = {};
			}
		}
	}
	, ajaxRequestStart:function() {
		this.isRequesting = true;
	}
	, ajaxRequestFailure:function(xhr) {
		this.isRequesting = false;		
	}
	, ajaxDetailsRequestSucces:function(rJson, rText) {	
		if (rJson) {
mm.log(rJson);			
			if (rJson.html) {
				if (this.fileInfo) {
					this.fileInfo.empty();
					this.fileInfo.set('html', rJson.html);
				}
			}
			if (rJson.meta) {
				this.selectedItemMeta = rJson.meta;
			}
		}
	}
	, ajaxDetailsRequestStart:function() {
		
	}
	, ajaxDetailsRequestFailure:function(xhr) {
		
	}	
	, setMessage:function(msg) {
		var setDefaultButtonTexts = false;
		if (msg.contains('::')) {
			setDefaultButtonTexts = true;
			var msg_array = msg.split('::');
			var msg = msg_array[0];
			if (msg_array[1] != undefined && msg_array[1] != '') {
				var buttontexts = msg_array[1];
				if (buttontexts.contains('|')) {
					var buttontexts_array = buttontexts.split('|');
					if (typeOf(buttontexts_array) == 'array'){ 
						setDefaultButtonTexts = false;
						if (buttontexts_array[0] != undefined && buttontexts_array[0] != '') {
							this.btnOk.set('text', buttontexts_array[0]);
						}
						if (buttontexts_array[1] != undefined && buttontexts_array[1] != '') {
							this.btnCancel.set('text', buttontexts_array[1]);
						}										
					} 
				} 
			} 
		} else {
			setDefaultButtonTexts = true;			
		}
		if (setDefaultButtonTexts) {
			this.setDefaultButtonTexts();
		}
		this.cntContainer.set('html', msg);
		// this.reSize();
		this.parseContent();
		return this;
	}
	, setDir:function(dir) {
		this.mngDir = dir;
		return this;
	}
	, beforeOpen:function() {		
		this.reloadList();
	}
	, afterClose: function() {
		$$('span.swiff-uploader-box').destroy();
	}
	, setActionItem:function(itemType, name) {
		this.actionItemType = itemType;
		this.actionItemName = name;
	}
	, reloadList: function() {	
		//document.id(document.body).removeEvent('keydown', this.boundKeyNav);		
		this.ajaxRequest.send({
			data: { 
				'action':this.mngAction
				, 'directory':this.mngDir
			}
		});		
	}
	, setDefaultButtonTexts:function() {
		this.btnCancel.set('html', this.options.buttons.cancel);
		this.btnOk.set('html', this.options.buttons.ok);		
	}
	, setSelectable:function(selectable) {
		this.selectable = selectable;
		this.btnOk.setStyle('display', selectable ? 'inline-block' : 'none' );
		return this;
	}
	, parseContent:function() {
		if (mm && mm.objects) {
			mm.objects.scan(this.dialogBody);
		}		
		this.dirList = this.dialogBody.getElement('.filemanagerDirList');
		this.fileList = this.dialogBody.getElement('.filemanagerFileList');	
		this.listContainer = this.dialogBody.getElement('.filemanagerListContainer');
mm.log('this.listContainer = ');
mm.log(this.listContainer);		
		var dirLinks = this.dialogBody.getElements('a.filemanagerDirLink');
		if (dirLinks.length > 0) {
			dirLinks.each(function(link) {
				var href = link.get('href');
				// link.set('href', '#');
				var actiontrigger = link.getNext('div');
				var parent = link.getParent('div');
	
				if (actiontrigger) {					
					var actions = actiontrigger.getFirst('div');					
					if (actions) {		
						actions.set('tween', {duration:400, transition:'circ:out'});
						
						var actionSave = actions.getElement('a.filemanagerActionSave');
						var actionRename = actions.getElement('a.filemanagerActionRename');
						var actionDelete = actions.getElement('a.filemanagerActionDelete');	
						if (actionRename) {
							var oldname = actionRename.get('href');
							actionRename.addEvent('click', function(e) {
								e.stop();
								this.setActionItem('dir', oldname);								
								this.renameDialog.setPromptValue(oldname).setMessage('Rename directory to?').open();
							}.bind(this));
						}
						if (actionDelete) {
							var oldname = actionDelete.get('href');
							actionDelete.addEvent('click', function(e) { 
								e.stop();
								this.setActionItem('dir', oldname);
								this.deleteDialog.setMessage('Are you sure you want to delete \''+oldname+'\' ?').open();
							}.bind(this));
						}						
					}				
					
					if (parent) {
						actiontrigger.hide();
						parent.addEvents({
							'mouseenter':function(e){ 
								actiontrigger.show();
							}
							, 'mouseleave':function(e) {
								actiontrigger.hide();
							}
						});
					}						
					
					actiontrigger.addEvents({
						'mouseenter':function(e) {
							if (actions) {
								actions.fade(0.9);
							}
						}.bind(this) 
						, 'mouseleave':function(e) {
							if (actions) {
								actions.fade(0);
							}						
						}.bind(this)											
					});
				}	
		
				link.addEvents({
					'click':function(e) {
						e.stop();
						link.blur();
						this.mngDir = href;
						// this.listContainer.focus();							
						this.keyCatcher.focus();
						this.reloadList();					
					}.bind(this)
				});
			},this);
		}
		var fileLinks = this.dialogBody.getElements('a.filemanagerFileLink');
		this.fileLinks = fileLinks;
		if (fileLinks.length > 0) {
			fileLinks.each(function(link){
				var href = link.get('href');
				// link.set('href', '#');
				var actiontrigger = link.getNext('div');
				var parent = link.getParent('div');
	
				if (actiontrigger) {														
					
					var actions = actiontrigger.getFirst('div');						
					if (actions) {		
						actions.set('tween', {duration:200, transition:'circ:out'});
						var actionRename = actions.getElement('a.filemanagerActionRename');
						var actionDelete = actions.getElement('a.filemanagerActionDelete');		
						if (actionRename) {
							var name = actionRename.get('href');							
							actionRename.addEvent('click', function(e) {
								e.stop();
								this.setActionItem('file', name);								
								this.renameDialog.setPromptValue(name).setMessage('Rename file to?').open();
							}.bind(this));
						}						
						if (actionDelete) {
							var name = actionDelete.get('href');							
							actionDelete.addEvent('click', function(e) { 
								e.stop();
								this.setActionItem('file', name);								
								this.deleteDialog.setMessage('Are you sure you want to delete \''+name+'\'?').open();
							}.bind(this));
						}				
					}					
					
					if (parent) {
						actiontrigger.hide();						
						parent.addEvents({
							'mouseenter':function(e){ 
								actiontrigger.show();
							}
							, 'mouseleave':function(e) {
								actiontrigger.hide();
							}
						});
					}					
					
					actiontrigger.addEvents({
						'mouseenter':function(e) {
							if (actions) {
								actions.fade(0.9);
							}
						}.bind(this) 
						, 'mouseleave':function(e) {
							if (actions) {
								actions.fade(0);
							}						
						}.bind(this)											
					});
				}				
				
				link.addEvents({
					'click':function(e){
						e.stop();
					
						
						if (this.selectedItem == href) { 
mm.log('file deselected: '+href);										
							link.removeClass('selected');
							this.deselectFile(href);
						} else {
mm.log('file selected: '+href);										
							fileLinks.removeClass('selected');							
							link.addClass('selected');
							this.selectFile(href);
						}
						// this.listContainer.focus();							
						this.keyCatcher.focus();
					}.bind(this)
					, 'dblclick':function(e) {
mm.log('dblclick');						
						e.stop();
						if (this.selectable) {
							fileLinks.removeClass('selected');
							link.addClass('selected');
							if (this.selectedItem != href) {
								this.selectFile(href);
							}
							this.close();					
							this.fireEvent('select', [this.mngDir, this.selectedItem, this.selectedItemMeta]);
							this.posFunc(this.mngDir, this.selectedItem, this.selectedItemMeta);						
						}
					}.bind(this)
				});
				
				link.makeDraggable({
					// container: link.getParent().getParent().getParent()
					 droppables: '.filemanagerDirLink'
					, style:true
					, modifiers: {x: 'left', y: 'top'}
					, onBeforeStart: function(element) {
						
					}
					, onStart: function(element, event) {
						element.addClass('selected').setStyle('opacity',0.5);
					}
					, onSnap: function(element) {
						
					}
					, onCancel: function(element) {
						element.setStyles({'left':0,'top':0,'opacity':1}).removeClass('selected');
					}
					, onEnter: function(element, droppable){
					        // console.log(element, 'entered', droppable);
						droppable.setStyles({'border':'1px solid #0069AA'});
					 }
				    , onLeave: function(element, droppable){
				        //console.log(element, 'left', droppable);
						//droppable.removeClass('bgc-w');				
						droppable.setStyles({'border':'none'});						
				    }					
				    , onDrop: function(element, droppable, event){
						// e.stop();
				        if (!droppable) { 
							//console.log(element, ' dropped on nothing');
							element.setStyles({'left':0,'top':0, 'opacity':1}).removeClass('selected');
				        } else { 
							//console.log(element, 'dropped on', droppable, 'event', event);
mm.log('move '+element.get('href')+' to '+droppable.get('href'));		
							this.moveFile(element.get('href'), droppable.get('href'));
						}
				    }.bind(this)

					, onComplete: function(element, event) {
						
					}
				});
				
			},this);
		}
		
		/*  CREATE DIR LINKS */
		var createDirLinks = this.dialogBody.getElements('a.filemanagerCreateDirLink');
		if (createDirLinks.length > 0) {
			createDirLinks.each(function(link) {
				var href = link.get('href');
				link.addEvent('click', function(e) {
					e.stop();
					link.blur();					
					this.createDirDialog.setPromptValue('new_directory').setMessage('Enter a name for the new directory:').open();
				}.bind(this));				
			},this);
		}

		
		
		/* UPLOAD FILE LINKS */
		var uploadFileLinks = this.dialogBody.getElements('a.filemanagerUploadFileLink');
		if (uploadFileLinks.length > 0) {
			uploadFileLinks.each(function(link) {
				this.setupUploadLink(link);
			},this);
		}
		



		
/*
		this.filesDrag = new Drag.Move('.filemanagerFileLink', {

		    droppables: '.filemanagerDirLink',

		    onDrop: function(element, droppable, event){
		        if (!droppable) { 
					console.log(element, ' dropped on nothing');
		        } else { 
					console.log(element, 'dropped on', droppable, 'event', event);
				}
		    },

		    onEnter: function(element, droppable){
		        console.log(element, 'entered', droppable);
		    },

		    onLeave: function(element, droppable){
		        console.log(element, 'left', droppable);
		    }

		});	*/
	
		
		this.generalInfo = this.cntContainer.getElement('#filemanager_info');
		this.fileInfo = this.cntContainer.getElement('#filemanager_fileinfo');
		
		if (this.dirList) {
			// nothing yet
		}
		if (this.listContainer) {
			
			if (fileLinks.length > 0) {
mm.log('FOCUSING FILE LINK 0 NOW');				
				this.focusFileLink.delay(10, this, fileLinks[0]);
				this.addKeyEvents.delay(50, this);
			}		
			this.focusKeyCatcher.delay(100,this);
		}
		
	}
	, focusKeyCatcher:function() {
mm.log('FOCUSING focusKeyCatcher');
		// this.listContainer.focus();						
		this.keyCatcher.focus();
	}
	, addKeyEvents:function() {
mm.log('ADDING KEY EVENTS AGAIN addKeyEvents');				
		// document.id(document.body).focus();
		// document.id(document.body).addEvent('keydown', this.boundKeyNav);		
		this.keyCatcher.addEvent('keydown', this.boundKeyNav);
	}
	, keyNav:function(e) {
mm.log('fileManager keyNav key = '+e.key);			
		switch(e.key) {
			case 'down' :
				e.stop();
				var cur = -1;
				if (this.focusedItem) {
					cur = this.fileLinks.indexOf(this.focusedItem);
				}
				if (this.fileLinks[cur+1]) {
					this.unfocusFileLink(this.focusedItem);
					this.focusFileLink(this.fileLinks[cur+1]);								
				}
			break;
			case 'up' :
				e.stop();						
				var cur = this.fileLinks.length;
				if (this.focusedItem) {
					cur = this.fileLinks.indexOf(this.focusedItem);
				}
				if (this.fileLinks[cur-1]) {
					this.unfocusFileLink(this.focusedItem);
					this.focusFileLink(this.fileLinks[cur-1]);
				}							

			break;	
			case 'space' :
				if (this.focusedItem) {
					var path = this.focusedItem.get('href');
					if (this.selectedItem == path) {
						// this.fileLinks.removeClass('selected');									
						this.focusedItem.removeClass('selected');
						this.deselectFile(path);
					} else {
						this.fileLinks.removeClass('selected');
						this.focusedItem.addClass('selected');									
						this.selectFile(path);
					}
				}
			break;						
			case 'enter' :
				if (this.focusedItem ) {
					var href = this.focusedItem.get('href');
					if (this.selectedItem != href) {
						this.selectFile(href);
					}
					this.close();					
					this.fireEvent('select', [this.mngDir, this.selectedItem, this.selectedItemMeta]);
					this.posFunc(this.mngDir, this.selectedItem, this.selectedItemMeta);					
				}
			break;						
		}
		// this.listContainer.focus();						
		this.keyCatcher.focus();
		
	}
	, focusFileLink:function(link) {
		var path = link.get('href');
		//link.addClass('brd-dark');
		link.setStyles({'border-top':'1px dashed #ddd', 'border-bottom':'1px dashed #ddd'});
		this.focusedItem = link;
	}
	, unfocusFileLink:function(link) {
		// link.removeClass('brd-dark');
		link.setStyles({'border-top':'none', 'border-bottom':'none'});		
		this.focusedItem = false;
	}
	, selectFile:function(path) {
		if (this.isRequesting) { return false; }
		this.selectedItem = path;
		this.ajaxDetailsRequest.send({
			data: { 
				'action':'details'
				, 'directory':this.mngDir
				, 'file': this.selectedItem
			}
		});		
//mm.info(path);
	}
	, deselectFile:function(path) {
		this.selectedItem = false;
		this.selectedItemMeta = {};
		if (this.fileInfo) {
			this.fileInfo.empty();
			this.fileInfo.set('html', '<span class="no_selection"><em>- no selection -</em></span>');
		}		
	}
	, moveFile:function(file, dir) {
		this.selectedItem = file;
		this.ajaxRequest.send({
			data: {
				'action':'move'
				, 'directory': this.mngDir
				, 'newdir': dir
				, 'file': file
			}
		});
	}

	, setupUploadLink:function(link) {
		var form = link.getParent('form');
		if (form) {
			var input = form.getElement('#filemanager_file');
	        var iFrameForm = new iFrameFormRequest(form,{
	            eventName: 'change',
	            onRequest: function(){
	                   // document.id('debug').set('text','start');
	                   iFrameForm.send();
	console.log('uploading the iframeform');       
	             	this.loadingDialog.setMessage('Uploading...').open();
	            }.bind(this),
	            onComplete: function(response){
	                   // document.id('debug').set('html',response);
	                   input.set('value', '');   // clearing the input again
	console.log(response);     
					this.reloadList();
					this.loadingDialog.close();
	            }.bind(this)
	        });			
		}
	}
	, setupUploadLink_old:function(link) {
		var flashurl = '/filemanager/upload';
		var extraData = {'directory':this.mngDir};
		if (!link.retrieve('fancyupload', false)) {
			this.swf = new Swiff.Uploader({
				path: 'http://assets.tinypay.me/img/plugins/fancyupload/Swiff.Uploader.swf',
				//url: 'https://wmadmin:k4n44lw3g@vic.moneymedic.eu/uploadsingle',
				url: flashurl,
				data: extraData,
				verbose: false,
				queued: false,
				multiple: true,
				target: link,
				container: link.getParent(),
				instantStart: true,
				typeFilter: {
					'Images and files (*.jpg, *.jpeg, *.gif, *.png, *.pdf, *.doc, *.docx, *.txt, *.xls, *.xlsx, *.zip, *.rar)': '*.jpg; *.jpeg; *.gif; *.png; *.pdf; *.doc; *.docx; *.txt; *.xls; *.xlsx; *.zip; *.rar;'
				},
				fileSizeMax: 2 * 1024 * 1024,								
				onBeforeStart: function() {
// mm.log('onBeforeStart');			
					// link.setStyle('display','none');
					// if (deleteBtn) { deleteBtn.setStyle('display','none'); }														
					// if (progressBar) { progressBar.setProgress(0); progressBar.show(); }
				},								
				onSelectSuccess: function(files) {
					if (Browser.Platform.linux) window.alert('Warning: Due to a misbehaviour of Adobe Flash Player on Linux,\nthe browser will probably freeze during the upload process.\nSince you are prepared now, the upload will start right away ...');
// mm.log('Starting Upload', 'Uploading <em>' + files[0].name + '</em> (' + Swiff.Uploader.formatUnit(files[0].size, 'b') + ')');
					this.setEnabled(false);
					// if (progressBar) { progressBar.setProgress(25); 
//mm.log('SETTING BULLSHIT PROGRESS');															
						// }	// fake							
						// if (loader) { loader.setStyle('display', 'block'); /*apng.start();*/ }		
						// mm.noticeInfo.show({title:'Uploading picture', visibleTime:10000});																											
				},
				onSelectFail: function(files) {
mm.alert(files[0].name + ' cannot be uploaded, please select an image smaller than 2Mb. (Error: #' + files[0].validationError + ') ');							
//mm.log('<em>' + files[0].name + '</em> was not added!', 'Please select an image smaller than 2 Mb. ');
					// link.setStyle('display','block');
					// if (loader) { /*apng.cancel();*/ loader.setStyle('display', 'none');  }	
					// if (progressBar) { progressBar.setProgress(0); progressBar.hide(); }																											
				},
				appendCookieData: true,
				onQueue: function() {
					if (!this.swf.uploading) return;
					var size = Swiff.Uploader.formatUnit(this.swf.size, 'b');
					// if (progressBar) {
						//progressBar.set('html', '<span class="small">' + this.swf.percentLoaded + '% of ' + size + '</span>');
// mm.log('PROGRESS = '+this.swf.percentLoaded);															
						// progressBar.setProgress(this.swf.percentLoaded);
					// }
					//link.set('html', );						
				}.bind(this),
				onFileComplete: function(file) {

					if (file.response.error) {
// mm.log('Failed Upload', 'Uploading <em>' + this.fileList[0].name + '</em> failed, please try again. (Error: #' + this.fileList[0].response.code + ' ' + this.fileList[0].response.error + ')');
mm.alert('Upload failed, please try again. (Error: #' + this.fileList[0].response.code + ' ' + this.fileList[0].response.error + ')');	
					} else {
						//var md5 = JSON.decode(file.response.text, true).hash; // secure decode

						//log.alert('Successful Upload', 'an MD5 hash was created from <em>' + this.fileList[0].name + '</em>: <code>' + md5 + '</code>.<br />gravatar.com generated a fancy and unique monsterid for it, since we did not save the image.');

						//var img = $('demo-portrait');
						//img.setStyle('background-image', img.getStyle('background-image').replace(/\w{32}/, md5));
						//img.highlight();
// mm.log('upload succes');							
						rJson = JSON.decode(file.response.text);
mm.log(rJson);										
					}
					this.setEnabled(true);									
				}
				,onComplete: function() {
					//link.set('html', 'klik again');
					// mm.noticeInfo.close(mm.noticeInfo.elements.getLast());							
					// if (loader) { /*apng.cancel();*/ loader.setStyle('display','none'); }
					//if (deleteBtn) { deleteBtn.setStyle('display','block'); }									
					// if (progressBar) { progressBar.hide(); }														
					this.reloadList();
				}.bind(this)
			});

					// Button state
			link.addEvents({
				click: function() {
					return false;
				},
				mouseenter: function() {
					//this.addClass('hover');
					this.swf.reposition();
				}.bind(this),
				mouseleave: function() {
					//this.removeClass('hover');
					this.blur();
				},
				mousedown: function() {
					this.focus();
				}
			});								
			link.store('fancyupload', this.swf);
		} 
	}	
	, keyDown:function(e, el) {
		if (this.dialogTabIndex.contains(el) && e.key=='tab') {
// mm.log('tab');			
			e.preventDefault(); 
			if (e.shift) {
				this.setFocusElement.delay(50, this, [el, true]);
			} else {
				this.setFocusElement.delay(50, this, [el, false]);				
			}
			return false;			
		}
		if ((el==this.btnOk || el==this.btnCancel) && (e.key =='space' || e.key == 'enter')) {
			e.stop();
			el.addClass('btn-active');
			el.fireEvent('click', e);
			el.blur();
			el.removeClass.delay(500, el, 'btn-active');
		}
		// if (el==this.promptInput && e.key == 'enter') {
		// 	e.stop();
		// 	this.btnOk.addClass('btn-active');
		// 	this.btnOk.fireEvent('click', e);
		// 	this.btnOk.blur();
		// 	this.btnOk.removeClass(500, this.btnOk, 'btn-active');
		// }
	}	
	, setFocusElement:function(el, back) {
// mm.log('setNextFocusElement el.id:'+el.get('id'));		
		var curPos = 0;
		var elList = [];
		elList = this.dialogTabIndex;
		curPos = elList.indexOf(el);
		if (back) {
			nextEl = elList[curPos-1] || elList.getLast() || false;			
		} else {
			nextEl = elList[curPos+1] || elList[0] || false;
		}
// mm.log('next el = '+nextEl.get('id'));				
		if (nextEl) { nextEl.focus(); }
	}	
});
