/*
    File: group.js
    Classes: MEMOZ.groupDragDrop, MEMOZ.group
    The group-class ...
*/

MEMOZ.groupDragDrop = function(ref, index, dragDiv, interactionGroup) {
	YAHOO.util.DDM.mode = 0;
    this.ref = ref;
    this.index = index;
    this.dragDiv = dragDiv;    
    this.interactionGroup = interactionGroup;
    this.init(this.dragDiv, this.interactionGroup);   
};
YAHOO.extend(MEMOZ.groupDragDrop, YAHOO.util.DD, {
	
    _className: "MEMOZ.groupDragDrop",

	ref: null,
	index: -1,
	dragDiv: -1,
	interactionGroup: '',
    minX: 0,
    minY: 0,
    dragging: false,
    
    setMinX: function(n) {
        this.minX = n;
    },
    
    setMinY: function(n) {
        this.minY = n;
    },
        
    onMouseDown: function(e) {
        var panel = this.getEl();
        this.startCursorPos = [YAHOO.util.Event.getPageX(e),
                               YAHOO.util.Event.getPageY(e)];
        this.startPanelPos = YAHOO.util.Dom.getXY(panel);
        this.startOffset = [this.startCursorPos[0] - this.startPanelPos[0],
                            this.startCursorPos[1] - this.startPanelPos[1]];
    },
        
    onDrag: function(e, id) { 
    	this.dragging = true;
		var el = this.getEl();
        var newPos = [YAHOO.util.Event.getPageX(e), YAHOO.util.Event.getPageY(e)];
        newPos[0] = Math.max(this.minX, newPos[0] - this.startOffset[0]);
        newPos[1] = Math.max(this.minY, newPos[1] - this.startOffset[1]);
		YAHOO.util.Dom.setXY(this.getEl(),newPos);
	}, 
	
    onInvalidDrop: function(e) {
    	var self = this;
    	console.warn('Invalid drop target');
    	
		// return to the start position 
		// Dom.setXY(this.getEl(), startPos); 
		
		// Animating the move is more intesting 
		new YAHOO.util.Motion(  
			this.dragDiv, 
			{ points: { to: this.startPanelPos } },  
			0.3,  
			YAHOO.util.Easing.easeOut  
		).animate();     	
   	}

});

/*
    Constructor: group
    Initializes the object.
*/
MEMOZ.group = function(groupId, groupMemoz) {
    this.id = groupId;
    this.groupMemoz = groupMemoz;
}
YAHOO.extend(MEMOZ.group, MEMOZ.base, {

    _className: "MEMOZ.group",

    /* Bools: Permissions 
 	   allowDeleteGroup - Slette gruppe
 	   allowAddMemoz - Legg til Memoz
 	   allowAddFolder - Legg til mappe
    */
    allowDeleteGroup: false,
    allowAddFolder: false,
    allowAddMemoz: false,



	labelRenameMemozPrompt: "Nytt navn på memozen:",
	labelRenameFolderPromt: "Nytt navn på mappen:",	
	labelDeleteFolderConfirm: "Er du sikker på at du vil slette denne mappen?",
	labelDeleteMemozConfirm: "Er du sikker på at du vil slette denne memozen?",
    
    /* 
    	int: id
     	The group-id.
    */
    id: 0,
    owner: {id:0, name:''},
    folders: [],
    memozes: [],
    userId: 0,
    imageDir: 'imgs',
    interactionGroup: 'groups',
    
    
    /* 
    	int: groupMemoz
     	The memoz-id assigned to the current group. Contains the gallery.
    */
    groupMemoz: 0,
    
    /* An array of objects { id: int, name: String: teacher: boolean } 
       listing the members (pupils and teachers) of this class. */
    members: [],
    
    /* An array of the member-names only (as strings). Used for autocompleting. */
    memberNames: [],
    
    // tree: null,  
    dlgAddFolder: null,
    btnAddFolder: null,
    uniqueId: 'group', // User for imageSelector,

	isMember: function() {
		for (var i = 0; i < this.members.length; i++) {
			if (this.members[i]) {
				if (this.members[i].id == this.userId) return true;
			}
		}
		return false;
	},
	
    setAllowAddFolder: function(allowAddFolder) {
        this.allowAddFolder = allowAddFolder;
    },
    
    setAllowAddMemoz: function(allowAddMemoz) {
        this.allowAddMemoz = allowAddMemoz;
    },

    setAllowDeleteGroup: function(allowDeleteGroup) {
        this.allowDeleteGroup = allowDeleteGroup;
    },
    
    setMemozes: function(memozes) {
    	this.memozes = memozes;
    },

    setFolders: function(folders) {
    	this.folders = folders;
    },
    
    setUser: function(userId) {
    	this.userId = userId;
    },
    
    setOwner: function(owner) {
    	this.owner = owner;
    },
    
    setMembers: function(members) {
    	this.members = members;
    	this.memberNames = [];
    	for (var i = 0; i < this.members.length; i++) {
    		this.memberNames.push(this.members[i].name);
    	}
    },
    
	/*
		 Utility function used to return the parent TR element of the
		 actual node in the "dataset" table that fired the 
		 "contextmenu" event
	*/

	GetTableRowFromEventTarget: function(p_oNode) {
		if (p_oNode.tagName.toLowerCase() == "div") {		
			return p_oNode;
		} else {
			/*
				 If the target of the event was a child of a TR, 
				 get the parent TR element
			*/
			do {
				if (p_oNode.tagName.toLowerCase() == "div") {
					return p_oNode;
					break;				
				}
			} while ((p_oNode = p_oNode.parentNode));
		}	
	},

	oContextMenuItems: {
		'groupFolder': [
			"Gi nytt navn",
			"Slett"
		],
		'groupMemozLink': [
			"Gi nytt navn",
			"Slett"
		]		
	},
	
	onContextMenuBeforeShow: function(p_sType, p_aArgs, ref) {

		var oTR = this.GetTableRowFromEventTarget(ref.contextEventTarget),
			aMenuItems,
			aClasses;
			
		//console.log(oTR);

			aClasses = oTR.className.split(" ");
			aMenuItems = this.oContextMenuItems[aClasses[0]];
/*
		if (YAHOO.util.Dom.hasClass(oTR, "odd")) {
			aClasses = oTR.className.split(" ");
			aMenuItems = this.oContextMenuItems[aClasses[0]];
		} else {
			aMenuItems = this.oContextMenuItems[oTR.className.trim()];
		}
	*/	

		ref.clearContent();
		ref.addItems(aMenuItems);
		ref.render();
	
		if (aMenuItems != null) 		
		YAHOO.util.Dom.addClass(oTR, "groupSelected");
		
	},

	// "hide" event handler for the context menu

	onContextMenuHide: function(p_sType, p_aArgs, ref) {

		var oTR = this.GetTableRowFromEventTarget(ref.contextEventTarget);

		YAHOO.util.Dom.removeClass(oTR, "groupSelected");
	
	},
	
	onContextMenuClick: function(p_sType, p_aArgs, ref) {
	
		var action;
		if (p_aArgs[1] == null) return false;
		if (p_aArgs[1].index == 0) 
			action = 'rename';
		else if (p_aArgs[1].index == 1) 
			action = 'delete';

		var oTR = this.GetTableRowFromEventTarget(ref.contextEventTarget);
		
		for (var i = 0; i < this.memozes.length; i++) {			
			if (this.memozes[i] != null && this.memozes[i].div.id == oTR.id) {
				if (action == 'rename')
					this.renameMemozForm(i);
				else if (action == 'delete')
					this.deleteMemozForm(i);
				break;
			}
		}

		for (var i = 0; i < this.folders.length; i++) {
			if (this.folders[i] != null && this.folders[i].div.id == oTR.id) {
				if (action == 'rename')
					this.renameFolderForm(i, oTR);
				else if (action == 'delete')
					this.deleteFolderForm(i);
				break;
			}
		}
		
	},
		
	renameFolderForm: function(index, oTR) {
		var self = this;
		var f = this.folders[index];
		var newName = prompt(this.labelRenameFolderPromt, f.name);
		if (newName == null) return false;
		this.folders[index].name = newName
		this.folders[index].div.innerHTML = newName;
    	this.ajaxReq('renameFolder','folderRenamed', { 
            classId: this.id, 
            folderId: f.id, 
            name: newName
        });
    },
    
    folderRenamed: function(json) {
    	if (json.error != 0) {
    		MEMOZ.log('Mappen kunne ikke gis nytt navn', 'error');
    	}
	},

	renameMemozForm: function(index, oTR) {
		var self = this;
		var m = this.memozes[index];
		var newName = prompt(this.labelRenameMemozPrompt,m.name);
		if (newName == null) return false;
		this.updateMemozName(m.id, newName);
    	this.ajaxReq('renameMemoz','memozRenamed', { 
            classId: this.id, 
            memozId: m.id, 
            name: newName 
        });
    },
    
    memozRenamed: function(json) {
    	if (json.error != 0) {
    		MEMOZ.log('Memozen kunne ikke gis nytt navn', 'error');
    	}
	},
	
	updateMemozName: function(memozId, newName) {
		for (var i = 0; i < this.memozes.length; i++) {
			if (this.memozes[i].id == memozId) {
				this.memozes[i].name = newName
				this.memozes[i].div.innerHTML = newName;
				break;
			}
		}
	},
	
	deleteFolderForm: function(index, oTR) {
		var self = this;
		var f = this.folders[index];
		
		MEMOZ.dialog.confirmDlg(this.labelDeleteFolderConfirm, function(doit) { if (doit) self.deleteFolder(f.id); });
		/*
		var newName = prompt(this.labelRenameFolderPromt, f.name);
		if (newName == null) return false;
		this.folders[index].name = newName
		this.folders[index].div.innerHTML = newName;
    		*/
    },
    
    deleteFolder: function(id) {
    	var self = this;
    	this.ajaxReq('deleteFolder','folderDeleted', { 
            classId: this.id, 
            folderId: id
        });
    },
    
    folderDeleted: function(json) {
    	if (json.error != 0) {
    		MEMOZ.log('Mappen kunne ikke slettes', 'error');
    	} else {
    		for (var i = 0; i < this.folders.length; i++) {
    			if (this.folders[i] != null && this.folders[i].id == json.folderId) {
    				this.rootUl.removeChild(this.folders[i].li);
    				this.folders[i] = null;    				
    				break;
    			}
    		}
    	}
	},

	deleteMemozForm: function(index, oTR) {
		var self = this;
		var m = this.memozes[index];		
		MEMOZ.dialog.confirmDlg(this.labelDeleteMemozConfirm, function(doit) { if (doit) self.deleteMemoz(m.id); });
    },
    
    deleteMemoz: function(id) {
    	var self = this;
    	this.ajaxReq('deleteMemoz','memozDeleted', { 
            classId: this.id, 
            memozId: id
        });
    },
    
    memozDeleted: function(json) {
    	if (json.error != 0) {
    		MEMOZ.log('Memozen kunne ikke slettes', 'error');
    	} else {
    		for (var i = 0; i < this.memozes.length; i++) {
    			if (this.memozes[i] != null && this.memozes[i].id == json.memozId) {
    				var m = this.memozes[i];
    				var parentUl = this.getFolderById(m.folder, this.rootUl);
					YAHOO.util.Dom.setStyle(m.li,'position','static');
					parentUl.removeChild(m.li);    				
    				$('infoBox').innerHTML = "Memozen \""+this.memozes[i].name+"\" ble slettet."; 
    				this.memozes[i] = null;
    				break;
    			}
    		}
    	}
	},
    
    run: function() {
		var self = this;
		/*
		this.tree = new YAHOO.widget.TreeView("groupMemozList"); 
		var root = this.tree.getRoot(); 
	    for (var i = 0; i < this.memozes.length; i++) {
	    	this.memozes[i].treeNode = new YAHOO.widget.TextNode(
	    		this.memozes[i].name, root, false
	    	); 	    
	    }		
		this.tree.draw();
		*/

		this.currentlyHighlightedFolder = null;
		
		var el = $('groupMemozList');
		this.rootUl = document.createElement('ul');
	    el.appendChild(this.rootUl);
		for (var i = 0; i < this.folders.length; i++) {
			this.drawFolder(i);
		}
		
		for (var i = 0; i < this.memozes.length; i++) {
			this.drawMemoz(i);			
		}
		
		// Initialize tabs
		
		this.tabView = new YAHOO.widget.TabView('groupTabs'); 
		
		// Initialize dialogs
				
		this.dlgAddFolder = new MEMOZ.dialog(
			'dlgAddFolder', {ref: self, fn: 'folderAdded'}, { action: 'addFolder', classId: self.id }, [
			{ type: 'text', id: 'Name', def: '', submitAs: 'folderName', focus: true }
		]);
		this.dlgAddMemoz = new MEMOZ.dialog(
			'dlgAddMemoz', {ref: self, fn: 'memozAdded'}, { action: 'addMemoz', groupId: self.id }, [
			{ type: 'text', id: 'Name', def: '', submitAs: 'memozName', focus: true }
		]);
		this.dlgAddEditor = new MEMOZ.dialog(
			'dlgAddEditor', {ref: self, fn: 'editorAdded'}, { action: 'addEditor' }, [
			{ type: 'hidden', id: 'MemozId', def: '-1', submitAs: 'memozId' },
			{ type: 'hidden', id: 'ClassId', def: '-1', submitAs: 'classId' },
			{ type: 'text', id: 'Name', def: '', submitAs: 'userName', focus: true }
		]);
		
		// Initialize buttons

		this.btnLeaveGroup = new YAHOO.widget.Button('btnLeaveGroup', {
			onclick: { fn: function() { self.leaveGroup(); }}
		});		
		this.btnJoinGroup = new YAHOO.widget.Button('btnJoinGroup', {
			onclick: { fn: function() { self.joinGroup(); }}
		});
		this.btnDeleteGroup = new YAHOO.widget.Button('btnDeleteGroup', {
			onclick: { fn: function() { self.confirmDeleteGroup(); }}
		});

		if (!this.userId) {
        	YAHOO.util.Dom.setStyle('btnJoinGroup','display','none');
        	YAHOO.util.Dom.setStyle('btnLeaveGroup','display','none');		
		} else if (this.isMember()) {
        	YAHOO.util.Dom.setStyle('btnJoinGroup','display','none');
        	if (this.owner.id == this.userId) {
		        YAHOO.util.Dom.setStyle('btnLeaveGroup','display','none');
			}
		} else {
	        YAHOO.util.Dom.setStyle('btnLeaveGroup','display','none');
		}
		
		if (!this.allowDeleteGroup) {
	        YAHOO.util.Dom.setStyle('btnDeleteGroup','display','none');
		}

		
		this.allowAddFolder = false;
		this.allowAddMemoz = false;
		
		
		if (this.allowAddFolder) {
            this.btnAddFolder = new YAHOO.widget.Button('btnAddFolder', {
                onclick: { fn: function() { self.dlgAddFolder.show(); }}
            });
        } else {
        	YAHOO.util.Dom.setStyle('btnAddFolder','display','none');
        }
		if (this.allowAddMemoz) {
            this.btnAddMemoz = new YAHOO.widget.Button('btnAddMemoz', {
                onclick: { fn: function() { self.dlgAddMemoz.show(); }}
            });
        } else {
        	YAHOO.util.Dom.setStyle('btnAddMemoz','display','none');
        }
	    
		// Create the context menu	
		
		this.oContextMenu = new YAHOO.widget.ContextMenu("contextmenu", { trigger: this.rootUl, lazyload: true });                                  
		this.oContextMenu.beforeShowEvent.subscribe(function(p_sType, p_aArgs) { 
			self.onContextMenuBeforeShow(p_sType, p_aArgs, this); 
		});
		this.oContextMenu.hideEvent.subscribe(function(p_sType, p_aArgs) { 
			self.onContextMenuHide(p_sType, p_aArgs, this); 
		}); 
		this.oContextMenu.clickEvent.subscribe(function(p_sType, p_aArgs) { 
			self.onContextMenuClick(p_sType, p_aArgs, this); 
		});
		
		// Add members
		
		var listEl = $('membersUl');
    	for (var i = 0; i < this.members.length; i++) {
    		var liEl = document.createElement('li');
    		var owner = (this.owner.id == this.members[i].id) ? " <span style='font-size: 80%; color: #999;'>(ansvarlig)</span>" : '';
    		liEl.innerHTML = "<a href='./?member="+this.members[i].id+"'>"+this.members[i].name +
				owner + 
				"</a>";
    		listEl.appendChild(liEl);
    	}
		
		// Create imageselector

		var imgSelForm ='	' +
			'<table width="100%"><tr><td style="width:200px;vertical-align:top;">'+
			'	<div id="imgSel'+this.uniqueId+'Tree"></div>' +
			'	<div style="padding-top:20px" id="btnNewSubAlbum'+this.uniqueId+'">'+
			'		<input type="button" id="btnAddAlbum" value="Nytt underalbum" />'+
			'	</div>' +
			'<td><td>'+
            '	<div id="imgSel'+this.uniqueId+'Activity" style="float:right;visibility:hidden;padding-right:5px;">'+
            '		<img src="'+this.imageDir+'/indicator8.gif"> '+
            '	</div>\n' +
            '	<div id="imgSel'+this.uniqueId+'DropDown">&nbsp;</div>\n'+
            '	<div id="imgSel'+this.uniqueId+'ImgPane" style="clear:both;" class="bgPreview"></div>\n' +
            '	<div id="imgSel'+this.uniqueId+'Upload"></div>\n' +
            '	<div class="errors"><!-- --></div>' +
	        '</td></tr></table> \n';
	    
	    $('classImgGallery').innerHTML = imgSelForm;
		
		var editorForm = $('imgSelForm'+this.uniqueId);
        var errorDiv = YAHOO.util.Dom.getElementsByClassName('errors', 'div', editorForm)[0];
              
        this.imageGallery = new MEMOZ.imageSelector();
        this.imageGallery.setMemoz(this.groupMemoz);
        this.imageGallery.setRoot('group:'+this.id); // c for class
        this.imageGallery.setUniqueId(this.uniqueId);
        this.imageGallery.setErrorDiv(errorDiv);
        //this.imageGallery.setSelectedImage(bgIndex);
        this.imageGallery.onSelect = function() { 
            self.imgSelected() 
        };
        this.imageGallery.draw();
        
        // Create in-place-editor
        
        if (this.owner.id == this.userId) {

			this.inPlaceEditor = new MEMOZ.inPlaceEditor('groupDescription', 'updateGroupDescription', 
				'description', { groupId: this.groupId }
			);
			this.inPlaceEditor.useTextArea = true;
			this.inPlaceEditor.onRename = function(n) {
				self.groupDescriptionSaved(n);
			}
		}
       
    },
    
    groupDescriptionSaved: function(n) {
    	console.log(n);
    },    
    
    imgSelected: function() { 
        //var currentBg = this.imageGallery.getSelectedImage();
        //this.setPageBackground(currentBg.link); 
    },
    
    drawFolder: function(i) {
    	var self = this;
		this.folders[i].li = document.createElement('li');
		this.folders[i].ul = document.createElement('ul');
		this.folders[i].div = document.createElement('div');
		this.folders[i].div.setAttribute('id','memozFolderNr'+i);
		this.folders[i].txt = document.createTextNode(this.folders[i].name);			

		this.rootUl.appendChild(this.folders[i].li);
		this.folders[i].li.appendChild(this.folders[i].div);
		this.folders[i].div.appendChild(this.folders[i].txt);
		YAHOO.util.Dom.addClass(this.folders[i].li, 'groupFolder');
		YAHOO.util.Dom.addClass(this.folders[i].div,'groupFolder');
		YAHOO.util.Dom.addClass(this.folders[i].div,'folderOpen');

		this.folders[i].li.appendChild(this.folders[i].ul);
		this.folders[i].dd = new YAHOO.util.DDTarget(this.folders[i].li, this.interactionGroup); 
		YAHOO.util.Event.addListener(this.folders[i].div, 'click', function(e) { 
			self.folderClick(this.id); 
		});
    },
    
    drawMemoz: function(i) {
		var self = this;
		this.memozes[i].li = document.createElement('li');
		this.memozes[i].div = document.createElement('div');
		this.memozes[i].div.setAttribute('id','memozMemozNr'+i);
		this.memozes[i].txt = document.createTextNode(this.memozes[i].name);			
		this.memozes[i].li.appendChild(this.memozes[i].div);
		this.memozes[i].div.appendChild(this.memozes[i].txt);
		YAHOO.util.Dom.addClass(this.memozes[i].li, 'groupMemoz');
		YAHOO.util.Dom.addClass(this.memozes[i].div,'groupMemozLink');

		var folder = this.getFolderById(this.memozes[i].folder, this.rootUl);
		folder.appendChild(this.memozes[i].li);
		
		this.memozes[i].startPos = YAHOO.util.Dom.getXY(this.memozes[i].li); 

		YAHOO.util.Event.addListener(this.memozes[i].div, 'click', function(e) { 
			self.memozClick(this.id); 
		});
		

		/*
		this.memozes[i].dd = new MEMOZ.groupDragDrop(this, i, this.memozes[i].li, this.interactionGroup);
		
		this.memozes[i].dd.onDragDrop = function(e, id) {
			if (!this.dragging) return;
			this.dragging = false;
			var oDD;
			if ("string" == typeof id) { 
				oDD = YAHOO.util.DDM.getDDById(id); 
			} else { 
				oDD = YAHOO.util.DDM.getBestMatch(id); 
			} 
			var el = this.getEl(); 
			for (var i = 0; i < self.folders.length; i++) {
				if (self.folders[i] != null && oDD.id == self.folders[i].li.id) {
					dropIndex = i;
					break;
				}
			}
			self.dropped(this.index, dropIndex);
		}
		this.memozes[i].dd.onDragEnter = function(e, id) {
			self.rollOver(id);    	        
		}
		this.memozes[i].dd.onDragOut = function(e, id) {
			self.rollOut(id);    	        
		}
		this.memozes[i].dd.endDrag = function(e) {
			if (self.currentlyHighlightedFolder != null) {
				YAHOO.util.Dom.removeClass(self.currentlyHighlightedFolder,'groupSelected');
				self.currentlyHighlightedFolder = null;
			}
		}
		*/
    
    },
    
    groupDescriptionSaved: function(json, n) {
    
    },
    
    memozClick: function(divId) {
    	var index = divId.substr(12);
    	var m = this.memozes[index];
    	this.getMemozInfo(m.id);
    },
    
    getMemozInfo: function(memozId) {
    	var self = this;
    	if (this.inPlaceEditor) this.inPlaceEditor.destroy();
    	$('infoBox').innerHTML = "Et øyeblikk...";    	
    	this.ajaxReq('getMemozInfo','gotMemozInfo', { 
            memozId: memozId,
            readonly: true
        });
    },
// onclick="myClass.removeEditor('.$this->memozId.','.$usr->getId().'); return false;"    
    
    removeRemoveEditorListeners: function() {
		var self = this;
		var box = document.getElementById('infoBox');
    	var removeLinks = YAHOO.util.Dom.getElementsByClassName('pupilRemoveLink','a',box);
		for (var i = 0; i < removeLinks.length; i++) {
			console.log('purge editor'+removeLinks[i].id.substr(15));
			YAHOO.util.Event.purgeElement(removeLinks[i]);
		}
    },

    addRemoveEditorListeners: function(memozId) {
		var self = this;
		var box = document.getElementById('infoBox');
    	var removeLinks = YAHOO.util.Dom.getElementsByClassName('pupilRemoveLink','a',box);
		console.log(removeLinks.length);
		for (var i = 0; i < removeLinks.length; i++) {
			YAHOO.util.Event.addListener(removeLinks[i], 'click', function(e) { 
				console.log('remove editor '+this.id.substr(15));
				self.removeEditor(memozId, this.id.substr(15));
			});
		}
    },
    
    gotMemozInfo: function(json) {
		var self = this;
		var box = document.getElementById('infoBox');
    	this.removeRemoveEditorListeners();
    	if (json.error != 0) {
    		box.innerHTML = json.error;
    	} else {
    		box.innerHTML = json.code;
    	}
    	if (json.owner == this.userId) {
    		var e = YAHOO.util.Dom.getElementsByClassName('editable','h3',box);
	    	var elem = e[0].id;
	    	this.inPlaceEditor = new MEMOZ.inPlaceEditor(elem, 'renameMemoz', 
	    		'name', {memozId: json.id});
    		this.inPlaceEditor.onRename = function(n) {
    			self.updateMemozName(json.id, n);
    		}
	    	YAHOO.util.Event.addListener('addNewEditorLink', 'click', function(e) { 
    			self.addEditor(json.id);
			});
			this.addRemoveEditorListeners(json.id);
		}
    },
    
    /* __________________________________ ADD / REMOVE EDITOR _________________________________ */
    
    addEditor: function(memozId) {
		$('dlgAddEditorClassId').value = this.id;
		$('dlgAddEditorMemozId').value = memozId;
		this.dlgAddEditor.show();
		this.makeAutoComplete();
    },
    
    editorAdded: function(json) {
    	if (json.error == 0){
    		this.getMemozInfo(json.memozId);
    	}    
    },
    
    removeEditor: function(memozId, userId) {
    	var self = this;
    	this.ajaxReq('removeEditor','editorRemoved', { 
            classId: this.id, 
            memozId: memozId, 
            userId: userId
        });
    },
    
    editorRemoved: function(json) {
    	if (json.error == 0){
    		this.getMemozInfo(json.memozId);
    	}    
    },

	makeAutoComplete: function() {
        var self = this;
        this.acDataSource1 = new YAHOO.widget.DS_JSArray(this.memberNames); 
        this.ac1 = new YAHOO.widget.AutoComplete('dlgAddEditorName', 'usercontainer', 
            this.acDataSource1, { allowBrowserAutocomplete: false }); 
        this.ac1.typeAhead = true;
        this.ac1.forceSelection = true; 
        
        /* YAHOO.util.Event.addListener('userName', 'keyup', function() { self.onType(); });
        this.ac1.itemSelectEvent.subscribe(function() { self.onType(); });
        this.ac1.unmatchedItemSelectEvent.subscribe(function() { self.onType(); });
        this.ac1.typeAheadEvent.subscribe(function() { self.onType(); });
        */
    },

    /* __________________________________ SOMETHING ELSE _________________________________ */

    getChildDiv: function(el) {
		var el = document.getElementById(el);
		for (var i = 0; i < el.childNodes.length; i++) {
			if (el.childNodes[i].tagName.toLowerCase() == 'div') {
				return el.childNodes[i];
			}
		}
		return false;    
    },
    
	rollOver: function(el) {
		el = this.getChildDiv(el);
		if (YAHOO.util.Dom.hasClass(el,'groupFolder')) {
			this.currentlyHighlightedFolder = el;
			YAHOO.util.Dom.addClass(el,'groupSelected');
		}
	},    

	rollOut: function(el) {
		el = this.getChildDiv(el);
		if (YAHOO.util.Dom.hasClass(el,'groupFolder')) {
			YAHOO.util.Dom.removeClass(el,'groupSelected');
		}
	},    
    
    getFolderById: function(id, root) {
		for (var i = 0; i < this.folders.length; i++) {
			if (this.folders[i] != null && this.folders[i].id == id) {
				return this.folders[i].ul;
			}
		}
		return root;
    },
    
    folderClick: function(id) {
		for (var i = 0; i < this.folders.length; i++) {
			
			if (this.folders[i] != null && this.folders[i].div.id == id) {
				var el = this.folders[i].ul;
				var c = YAHOO.util.Dom.getStyle(el,'display');
				if (c == 'block') {
					YAHOO.util.Dom.setStyle(el,'display','none');
					YAHOO.util.Dom.replaceClass(this.folders[i].div,'folderOpen','folderClosed');
				} else {
					YAHOO.util.Dom.setStyle(el,'display','block');
					YAHOO.util.Dom.replaceClass(this.folders[i].div,'folderClosed','folderOpen');
				}
				break;
			}
		}    
    },
    
    dropped: function(drop, targ) {
    	var self = this;
    	var t = this.folders[targ];
    	var m = this.memozes[drop];
    	MEMOZ.log(m.name+' dropped on '+t.name);
		YAHOO.util.Dom.setStyle(m.li,'position','static');
    	if (m.folder != t.id) {
			var parentUl = this.getFolderById(m.folder, this.rootUl);
			parentUl.removeChild(m.li);
			t.ul.appendChild(m.li);
	    	this.memozes[drop].folder = t.id;
			this.ajaxReq('moveMemoz','memozMoved', { 
				classId: this.id, 
				memozId: m.id, 
				folderId: t.id
			});
    	}
    },
    
    memozMoved: function(json) {
    	if (json.error != 0) {
    		MEMOZ.log('Memozen kunne ikke flyttes', 'error');
    	}
    },
    
    /* ________________________ ADD MEMOZ FOLDER FUNCTIONS _________________________*/
	
    folderAdded: function(json) {
        if (json.error == 0) {
        	this.folders.push({id: json.id, name: json.name});
        	this.drawFolder(this.folders.length-1);
        }
    },

    memozAdded: function(json) {
        if (json.error == 0) {
        	this.memozes.push({id: json.id, name: json.name, parent: 0});
        	this.drawMemoz(this.memozes.length-1);
        }
    },
    
    /* ________________________ JOINING/LEAVING GROUP _________________________*/
    
    joinGroup: function() {
    	this.ajaxReq('joinGroup','joinedGroup', { 
			userId: this.userid, 
			groupId: this.id
		});
    },
    
    joinedGroup: function(json) {
    	if (json.error == 0) {
    		this.members.push(json.newMember);
			var listEl = $('membersUl');
			var liEl = document.createElement('li');
			liEl.innerHTML = "<a href='./?member="+json.newMember.id+"'>"+json.newMember.name+"</a>";
			listEl.appendChild(liEl);
			YAHOO.util.Dom.setStyle('btnJoinGroup','display','none');
			YAHOO.util.Dom.setStyle('btnLeaveGroup','display','');
    	} else {
    	
    	}
    },
    
    leaveGroup: function() {
    	this.ajaxReq('leaveGroup','leftGroup', { 
			userId: this.userid, 
			groupId: this.id
		});    
    },

    leftGroup: function(json) {
	
		if (json.error == 0) {
			var jump = false;
			for (var i = 0; i < this.members.length; i++) {
				if (jump) this.members[i-1] = this.members[i];
				if (this.members[i].id == json.userId) jump = true;
			}
			this.members.pop();
			
			var listEl = $('membersUl');
			var el;
			while (el = YAHOO.util.Dom.getFirstChild(listEl)) {
				listEl.removeChild(el);
			}
			for (var i = 0; i < this.members.length; i++) {
				var liEl = document.createElement('li');
				liEl.innerHTML = "<a href='./?member="+this.members[i].id+"'>"+this.members[i].name+"</a>";
				listEl.appendChild(liEl);
			}
			YAHOO.util.Dom.setStyle('btnJoinGroup','display','');
			YAHOO.util.Dom.setStyle('btnLeaveGroup','display','none');
		} else {
		
		}
    },
    
    /* Section: Deleting group */
    
    /* 
    	Method: confirmDeleteGroup
    	Uses <MEMOZ.dialog.confirmDlg> to ask the user for confirmation. If positive, we'll call <deleteGroup>
    */
    confirmDeleteGroup: function() {
        var me = this;
		MEMOZ.dialog.confirmDlg(this.getLabel('confirmDeleteGroup'), function(doit) { 
			if (doit) me.deleteGroup(); 
		});    

    },
    
    /* 
    	Method: deleteGroup
    	Makes an AJAX-request to delete the current group.
    */
    deleteGroup: function() {
    	
    	$('groupTabs').innerHTML = "<img src='imgs/indicator6.gif' alt='One moment...' />";
    	
    	this.ajaxReq('deleteGroup', 'groupDeleted', { 
            groupId: this.id
		});
		
    },
    
    /* 
    	Method: groupDeleted
    	Callback for the request made from <deleteGroup>.
    */
	groupDeleted: function(json) {
		if (json.error == 0) {
	    	$('groupTabs').innerHTML = "<p>Gruppen er slettet!</p><p><a href='./'>Til din side</a></p>";
	    } else {
	    	$('groupTabs').innerHTML = "<p>Gruppen ble ikke slettet. Prøv å laste siden på nytt. "+json.error+"</p>";
	    }
    }

});
