/**
 * @author noehmeier-marcel
 */
function Message(){
	
	/****************************************************************************
	 * CALLER METHODS
	****************************************************************************/
	this.callMessages = function(_cat_){
		if(typeof(_cat_)!='undefined'){
			this.currentCat = _cat_;
		}
		
		var option = {
			onComplete : function(data){
				_self.messages[_self.currentCat] = data.ret;
				_self.renderMessageOverview(document.getElementById('message_window'));
				_self.getFolder(_self.currentCat);
			}
		}
		var jSonRequest = new Json.Remote(this.url,option).send({
			session_id:	SID,
			order:		'asc',
			cat:		_self.currentCat,
			action:		'getmessages'
		});
	}
	
	this.sendMessage				=function(user,msg){
		var betreff = msg.subj;
		var nachricht = msg.msg;

		var option = {
			onComplete : function(data){
				if(data.ret){
					_self.abstractDialog('Nachricht:',[
						document.createTextNode('Nachricht wurde erfolgreich gesendet!')
					]);
				}else{
					alert('Fehler beim connecten auf Host');
				}
			}
		}
		var jSonRequest = new Json.Remote(this.url,option).send({
			session_id:	SID,
			action:		'savemessage',
			body:		nachricht.split('\n'),
			header:		betreff,
			user_id_to:	user
		});
	}
	
	this.getFolder = function(markedFolder){
		this.folderObj = document.getElementById('folderContainer');
		this.folder = [];
		var option = {
			onComplete : function(folder){
				_self.folderObj.innerHTML = '';
				for(var i = 0; i < folder.ret.length; ++i)
				{
					folder.ret[i].marked = false;
					_self.folder.push(folder.ret[i]);
					_self.visualFolder(folder.ret[i]);
					if(typeof(markedFolder)!='undefined' && folder.ret[i].id==markedFolder){
						_self.displayMarkedFolder(folder.ret[i]);
					}
				}
			}
		}
		var jSonRequest = new Json.Remote(this.url,option).send({
			session_id:	SID,
			action:		'getMessageFolder'
		});
	}
	
	this.getFolderName = function(id){
		for(var i = 0; i < this.folder.length; ++i){
			if(this.folder[i].id==id){
				return this.folder[i].name;
			}
		}
	}	
	/****************************************************************************
	 * ACTION METHODS
	****************************************************************************/
	this.getMarkedFolder = function(){
		for(var i = 0; i < this.folder.length; ++i){
			if(this.folder[i].marked){
				return this.folder[i];
			}
		}
		return null;
	}
	
	this.createFolder = function(name){
		var option = {
			onComplete : function(data){
				_self.getFolder(data.ret);
			}
		}
		var jSonRequest = new Json.Remote(this.url,option).send({
			session_id:	SID,
			action:		'createMessageFolder',
			name: name
		});
	}
	
	this.deleteFolder = function(){
		
		var confirmMsg;
		//makierten Ordner holen
		var markedFolder = _self.getMarkedFolder();
		//Wenn null, dann wurde kein Ordner makiert!
		if(markedFolder!=null){
			//Wenn einer der if-ordner gewählt wurde, Hinweis ausgeben dass diese nicht gelöscht
			//werden können da sie Hardcodiert sind. Evtl. fällt dir/euch eine bessere Lösung ein?
			if(markedFolder.id == 'in'){
				alert('Eingang kann nicht gelöscht werden da dies ein Standardordner ist!');
			}else if(markedFolder.id == 'out'){
				alert('Ausgang kann nicht gelöscht werden da dies ein Standardordner ist!');
			}else if(markedFolder.id == 'read'){
				alert('Gelesen kann nicht gelöscht werden da dies ein Standardordner ist!');
			}else{
				//Wenn der Ordner gelöscht wird, werden die ordnerfelder auf 0 gesetzt. Somit
				//ist wieder der gelesen/ungelesen status für die zuordnung zuständig
				confirmMsg = 'Ordner beinhaltet Mails!\n\n'+
							'Wenn du diesen Ordner löscht werden die Mails in '+
							'\n Eingang/Ausgang/Gelesen verschoben!';
				
				if( (this.messages[markedFolder.id].length > 0 ) ){
					this.visualDeleteFolderMenu(markedFolder);
				}else{
					var option = {
						onComplete : function(data){
							_self.callMessages('in');
						}
					}
					var jSonRequest = new Json.Remote(this.url,option);
					jSonRequest.send({
						session_id:	SID,
						action:		'deleteMessageFolder',
						id:			markedFolder.id,
						isFull:		false,
						change:		false
					});
				}
			}
			
		}else{
			alert('Du musst einen Ordner makieren um ihn zu löschen!');
		}
	}
	
	this.deleteMsg = function(id,container,overlay){
		var user = this;
		var option = {
			onComplete : function(data){
				_self.getFolder(_self.currentCat);
				var parent = container.parentNode
				parent.removeChild(container);
				if(!parent.hasChildNodes()){
					parent.innerHTML = 'Keine neuen Nachrichten verfügbar!';
				}
				if(typeof(overlay)!='undefined' && overlay != null){
					document.body.removeChild(overlay);
				}
				cdUser.getMessageCount();
			}
		}
		var jSonRequest = new Json.Remote(this.url,option).send({
			session_id:	SID,
			action:		'deleteMessage',
			msgid:		id,
			isSender: container.data.isSender
		});
	}
	
	this.setReadMsg = function(id,container){
		var option = {
			onComplete : function(data){
				_self.callMessages();
				cdUser.getMessageCount();
			}
		}
		var jSonRequest = new Json.Remote(this.url,option).send({
			session_id:	SID,
			msg_id:		id,
			action:		'readmessage'
		});
	}
	
	this.setUnreadMsg = function(id,container){
		var option = {
			onComplete : function(data){
				_self.visualUnreadedMessage(container,_self.messages[_self.currentCat][container.i].isSender);
				cdUser.getMessageCount();
			}
		}
		var jSonRequest = new Json.Remote(this.url,option).send({
			session_id:	SID,
			msg_id:		id,
			action:		'unreadmessage'
		});
	}
	
	this.isRead = function(obj){
		if( obj.status_sender == 0 && obj.isSender == 1 ){
			return false;
		}else if( obj.status_reader == 0 && obj.isSender == 0 ){
			return false;
		}
		return true;
	}
	/****************************************************************************
	 * VISUAL METHODS
	****************************************************************************/
	this.brClear = function(){
		br = document.createElement('br');
		br.clear = 'all';
		br.style.clear = 'both';
		return br;
	}
	/**
	 
	this.visualMarkedMessage = function(msgObj){
		msgObj.style.backgroundColor = '#fff';
		msgObj.style.color = '#000';
		msgObj.style.fontWeight = 'normal';
		msgObj.title = 'gelesen';
	}
	
	this.visualUnmarkedMEssage = function(){
		msgObj.style.backgroundColor = '#fff';
		msgObj.style.color = '#000';
		msgObj.style.fontWeight = 'normal';
		msgObj.title = 'gelesen';
	}
	 * 
	 */
	
	this.visualReadedMessage = function(msgObj){
		msgObj.style.backgroundColor = '#fff';
		msgObj.style.color = '#000';
		msgObj.style.fontWeight = 'normal';
		msgObj.title = 'gelesen';
	}
	
	this.visualUnreadedMessage = function(msgObj,isSender){
		msgObj.style.backgroundColor = '#fff';
		
		//msgObj.style.fontWeight = 'bold';
		if(isSender==1){
			msgObj.style.color = '#777';
			msgObj.title = 'Vom Empfänger noch ungelesen!';
		}else{
			msgObj.style.color = '#691c23';
			msgObj.title = 'Du hast diese Nachricht noch nicht gelesen!';
		}		
	}
	
	this.visualDeleteFolderMenu = function(markedFolder){
		var overlay,select,option,radioDelete;
		var radioChange,text,button,br,dialog;
		
		select = document.createElement('select');
		select.name = 'folder';
		
		//Eingang, Ausgang und Gelesen hardcodieren
		option = document.createElement('option');
		option.value = 0;
		option.innerHTML = 'Eingang/Ausgang/Gelesen';
		select.appendChild(option);
		
		for(var i = 0; i < this.folder.length; ++i){
			if(this.folder[i].id != 'in' && this.folder[i].id != 'out' && this.folder[i].id != 'read' && this.folder[i].id != markedFolder.id){
				option = document.createElement('option');
				option.value = this.folder[i].id;
				option.innerHTML = this.folder[i].name;
				select.appendChild(option);
			}
		}
		
		overlay = document.createElement('div');
		text = document.createElement('div');
		text.className = 'description';
		text.innerHTML = 'Wähle eine der Optionen aus. Du kannst die Nachrichten alle '+
						'löschen, oder alle in einen anderen Ordner verschieben!';
		
		//Option zum Löschen!
		radioDelete = document.createElement('input');
		radioDelete.name = 'deleteOption';
		radioDelete.type = 'radio';
		radioDelete.checked = true;
		radioDelete.onclick = function(){
			overlay.removeChild(select);
		}
		
		radioDeleteDiv = document.createElement('div');
		radioDeleteDiv.className = 'radioBox';
		radioDeleteDiv.appendChild(radioDelete);
		radioDeleteDiv.appendChild( document.createTextNode('Alle Nachrichten Löschen!') );
		
		
		//Option um Nachrichten zu verschieben!
		radioChange = document.createElement('input');
		radioChange.name = 'deleteOption';
		radioChange.type = 'radio';
		radioChange.onclick = function(){
			overlay.insertBefore(select,button);
		}
		
		radioChangeDiv = document.createElement('div');
		radioChangeDiv.className = 'radioBox';
		radioChangeDiv.appendChild(radioChange);
		radioChangeDiv.appendChild( document.createTextNode('Alle Nachrichten verschieben!') );
		
		//Submitbutton!
		button = document.createElement('button');
		button.innerHTML = 'Ok';
		button.onclick = function(){
			
			var option = {
				onComplete : function(data){
					_self.callMessages('in');
					document.body.removeChild( dialog );
				}
			}
			var jSonRequest = new Json.Remote(url,option);
			
			if(radioChange.checked){
				jSonRequest.send({
					session_id:	SID,
					action:		'deleteMessageFolder',
					id:			markedFolder.id,
					isFull:		true,
					change:		select.options[select.options.selectedIndex].value
					
				});
			}else if(radioDelete.checked){
				jSonRequest.send({
					session_id:	SID,
					action:		'deleteMessageFolder',
					id:			markedFolder.id,
					isFull:		true,
					change:		false
				});
			}else{
				alert('Muasst scho wos auswäin, du Sepp! :D');
			}
			
			
		}
		
		//Content
		overlay.appendChild( text );
		overlay.appendChild( radioDeleteDiv );
		overlay.appendChild( radioChangeDiv );
		overlay.appendChild( button );
		
		
		overlay.appendChild( this.brClear() );
		dialog = this.abstractDialog('Mailordner erstellen:',[
			overlay
		]);
		document.body.appendChild( dialog );
	}
	
	this.abstractDialog = function(headDesc,obj){
		var overlay,head,body,input,button;
		//Object build
		overlay = document.createElement('div');
		button = document.createElement('button');
		head = document.createElement('div');
		body = document.createElement('div');
		//CSS Classes
		overlay.className = 'message_dialog';
		head.className = 'head';
		body.className = 'body';
		
		button.innerHTML = 'X';
		button.onclick = function(){
			overlay.parentNode.removeChild(overlay);
		}
		head.appendChild( button );
		head.appendChild( document.createTextNode(headDesc) );
		
		
		
		
		for(var i = 0; i < obj.length; ++i){
			body.appendChild(obj[i]);
		}
		overlay.appendChild( head );
		overlay.appendChild( body );
		
		return overlay;
	}
	
	this.visualCreateFolderMenu = function(){
		var overlay,text,input,button;
		
		text = document.createElement('span');		
		input = document.createElement('input');
		input.maxLength = '12';
		
		button = document.createElement('button');
		
		text.innerHTML = 'Bitte gebe den gewünschten Ordnernamen ein!';
		button.innerHTML = 'speichern';
		
		
		overlay = this.abstractDialog('Mailordner erstellen:',[
			text,
			input,
			button,
			this.brClear()
		]);
		
		var submit = function(){
			
			if(input.value != '' && input.value.length > 3){
				_self.createFolder(input.value);
				overlay.parentNode.removeChild(overlay);
			}else{
				alert('Der Ordnername muss mindestens 3 Zeichen haben!');
			}
		};
		
		button.onclick = submit;
		input.onkeypress = function(e){
			if(!e) e = window.event;
			
			if(e.keyCode == 13){
				submit();
			}
		}
		
		document.body.appendChild(overlay);
		input.focus();
	}
	
	this.renderMessageOverview = function(c){
		var overlay, container, from, subject, date;
		obj = this;
		
		overlay = this.div();
		
		for(var i = 0; i < this.messages[this.currentCat].length; ++i){
			
			from = this.div();
			from.className = 'msgFrom';
			if(this.currentCat == 'in'){
				from.appendChild( document.createTextNode( 'Von: '+this.messages[this.currentCat][i]._from ) );
			}else{
				from.appendChild( document.createTextNode( 'An: '+this.messages[this.currentCat][i]._to ) );
			}
			
			subject = this.div();
			subject.className = 'msgSubject';
			subject.appendChild( document.createTextNode( this.messages[this.currentCat][i].subject ) );
			date = this.div();
			date.className = 'msgDate';
			date.appendChild( document.createTextNode( this.messages[this.currentCat][i].date ) );
			
			
			//Actions
			action = this.div();
			action.i = i;
			action.className = 'msgAction';
			action.onmouseover = function(){
				obj.createMessageActionMenu(this);
				this.onmouseout = function(){
					obj.contextMenu.hide();
				}
			}
			
			container = this.div();
			container.className = 'msgOverview';
			container.appendChild( from );
			container.appendChild( subject );
			container.appendChild( date );
			container.appendChild( action );
			
			if( !this.isRead( this.messages[this.currentCat][i] ) ){
				this.visualUnreadedMessage(container,this.messages[this.currentCat][i].isSender);
			}else{
				this.visualReadedMessage(container);
			}
			
			
			container.i = i;
			container.data = this.messages[this.currentCat][i];
			container.style.cursor = 'pointer';
			
			overlay.appendChild( container );
			this.initDropableMessages(container);
			this.initMarkedMessageObject(container);
			
			container.ondblclick = function(){
				obj.renderMessageDetail(this);
			}
		}
		c.innerHTML = '';
		if( typeof(this.messages[this.currentCat].length) == 'undefined' ){
			c.innerHTML = 'Keine Nachrichten vorhanden im Ordner '+this.getFolderName(this.currentCat)+'!';
		}
		c.appendChild(overlay);
	}
	
	this.createMessageActionMenu = function(obj){
		var posLeft, posTop;
		
		//PositionsFixing
		if( document.all ){
			//IE
			posLeft = (obj.offsetLeft)+170;
			posTop = (obj['offsetParent'].offsetTop+obj.offsetTop)+125;
		}else{
			posLeft = (obj.offsetLeft);
			posTop = (obj['offsetParent'].offsetTop+obj.offsetTop)+100;
		}
		
		this.contextMenu = new Contextmenu()
		this.contextMenu.createOverlayNEW(obj, {x:posLeft,y:posTop});
		
		var _this = this;
		
		this.contextMenu.insertBox({
			name: 'Öffnen',
			action: function(){
				_this.renderMessageDetail(obj.parentNode);
			}
		});
		
		this.contextMenu.insertBox({
			name: 'Löschen',
			action: function(){
				if( confirm( "Mail wirklich löschen?" ) ){
					_this.deleteMsg(_this.messages[_this.currentCat][obj.i].id,obj.parentNode,null);
				}
			}
		});
		if( _this.messages[_this.currentCat][obj.i].isSender == 0 ){
			this.contextMenu.insertBox({
				name: 'Als gelesen makieren',
				action: function(){
					if( _this.messages[_this.currentCat][obj.i].isSender == 0 ){
						_this.setReadMsg(_this.messages[_this.currentCat][obj.i].id,obj.parentNode);
					}
				}
			});
		
			this.contextMenu.insertBox({
				name: 'Als ungelesen makieren',
				action: function(){
						_this.setUnreadMsg(_this.messages[_this.currentCat][obj.i].id,obj.parentNode);
				}
			});
			this.contextMenu.insertBox({
				name: 'Antworten',
				action: function(){
					_this.showSendMessageDialog(	_this.messages[_this.currentCat][obj.i]._from_id,
												_this.messages[_this.currentCat][obj.i]._from,
												_this.messages[_this.currentCat][obj.i].subject,
												_this.messages[_this.currentCat][obj.i].body);
				}
			});
		}
		
		this.contextMenu.display();
	}	
	
	this.renderMessageDetail = function(container){
		
		var overlay,msgBody,msgSubject,msgHeaderLeft;
		var msgHeaderRight,msgAttach,msgFrom,msgDate;
		var txt,msgDelete,msgAnswer,msgClose;
		
		var i=container.i;
		/*
		 * CloseButton
		 */
		msgClose = document.createElement('button');
		msgClose.className = 'msgClose';
		msgClose.innerHTML = 'schliessen';
		msgClose.onclick = function(){
			msgClose.disabled = true;
			document.body.removeChild(overlay);
			if( _self.messages[_self.currentCat][container.i].isSender == 0 ){
				_self.setReadMsg(_self.messages[_self.currentCat][container.i].id,container);
			}
		}
		if(document.all){
			msgClose.setAttribute('type','button');
		}else{
			msgClose.type = 'button';
		}
		
		/*
		 * AnswerButton
		 */
		msgAnswer = document.createElement('button');
		msgAnswer.className = 'msgAnswer';
		msgAnswer.innerHTML = 'antworten';
		msgAnswer.onclick = function(){
			msgAnswer.disabled = true;
			_self.showSendMessageDialog(_self.messages[obj.currentCat][i]._from_id,
										_self.messages[obj.currentCat][i]._from,
										_self.messages[obj.currentCat][i].subject,
										_self.messages[obj.currentCat][i].body);
			if( _self.messages[_self.currentCat][container.i].isSender == 0 ){
				_self.setReadMsg(_self.messages[_self.currentCat][container.i].id,container);
			}
										
			document.body.removeChild(overlay);
		}
		if(document.all){
			msgAnswer.setAttribute('type','button');
		}else{
			msgAnswer.type = 'button';
		}
		
		/*
		 * Löschen
		 */
		msgDelete = document.createElement('button');
		msgDelete.className = 'msgDelete';
		msgDelete.innerHTML = 'löschen';
		msgDelete.onclick = function(){
			msgDelete.disabled = true;
			//Mail als gelöscht markieren
			if(confirm("Mail wirklich löschen?")){
				obj.deleteMsg(obj.messages[obj.currentCat][i].id,container,overlay);
			}			
		}
		if(document.all){
			msgDelete.setAttribute('type','button');
		}else{
			msgDelete.type = 'button';
		}
		
		/*
		 * Date & Time
		 */
		msgDate = this.div();
		msgDate.className = 'msgDate';
		msgDate.appendChild( document.createTextNode(this.messages[this.currentCat][i].date) );
		
		/*
		 * Absender
		 */
		msgFrom = this.div();
		msgFrom.className = 'msgFrom';
		txt = document.createElement('span');
		txt.innerHTML = 'Von: ';
		txt.style.fontWeight = 'bold';
		msgFrom.appendChild( txt );
		msgFrom.appendChild( document.createTextNode(this.messages[this.currentCat][i]._from) );
		
		txt = document.createElement('span');
		txt.innerHTML = '<br />';
		msgFrom.appendChild( txt );
		
		txt = document.createElement('span');
		txt.innerHTML = 'An: ';
		txt.style.fontWeight = 'bold';
		msgFrom.appendChild( txt );
		msgFrom.appendChild( document.createTextNode(this.messages[this.currentCat][i]._to) );
		
		
		
		/*
		 * Betreff
		 */
		msgSubject = this.div();
		msgSubject.className = 'msgSubject';
		txt = document.createElement('span');
		txt.innerHTML = 'Betreff: ';
		txt.style.fontWeight = 'bold';
		msgSubject.appendChild( txt );
		msgSubject.appendChild( document.createTextNode(this.messages[this.currentCat][i].subject) );
		
		/*
		 * Attachment
		 */
		msgAttach = this.div();
		msgAttach.className = 'msgAttach';
		txt = document.createElement('span');
		txt.innerHTML = 'Anhänge: ';
		txt.style.fontWeight = 'bold';
		msgAttach.appendChild( txt );
		msgAttach.appendChild( document.createTextNode('Noch nicht möglich. Stepp 2!') );
		
		/*
		 * Message
		 */
		msgBody = this.div();
		msgBody.className = 'msgBody';
		msgBody.innerHTML = this.messages[this.currentCat][i].body;
		var r = /\[mail_id_js\]/g;
		msgBody.innerHTML = msgBody.innerHTML.replace(r,this.messages[this.currentCat][i].id);
		//alert(msgBody.innerHTML);
		if( this.messages[this.currentCat][container.i].isSender == 1 ){
			while(msgBody.getElementsByTagName('button').length){
				msgBody.removeChild( msgBody.getElementsByTagName('button')[0] );
			}
		}else{
			var i = 0;
			while(i < msgBody.getElementsByTagName('button').length){
				msgBody.getElementsByTagName('button')[i].onmouseup = function(){
					this.disabled = true;
				};
				++i;
			}
		}
		
		
		/*
		 * Headers
		 */
		msgHeaderLeft = this.div();
		msgHeaderLeft.className = 'msgHeaderLeft';
		msgHeaderLeft.appendChild( msgFrom );
		msgHeaderLeft.appendChild( msgDate );
		msgHeaderLeft.appendChild( msgSubject );
		msgHeaderLeft.appendChild( msgAttach );
		
		msgHeaderRight = this.div();
		msgHeaderRight.className = 'msgHeaderRight';
		msgHeaderRight.appendChild( msgClose );
		if(this.currentCat == 'in'){
			msgHeaderRight.appendChild( msgAnswer );
		}
		msgHeaderRight.appendChild( msgDelete );
		
		//Der WindowHeader
		winHead = this.div();
		winHead.className = 'winHeader';
		winHead.style.color = '#fff';
		winHead.style.padding = '2px';
		winHead.appendChild( document.createTextNode('Nachricht:') );
		
		//Overlay oder auch Rahmen (Container)
		overlay = this.div();
		overlay.className = 'msgOverlay';
		overlay.appendChild( winHead );
		overlay.appendChild( msgHeaderLeft );
		overlay.appendChild( msgHeaderRight );
		overlay.appendChild( msgBody );
		
		//Ab gehts! :)
		document.body.appendChild( overlay );
		//alert(overlay.innerHTML);
	}
	
	this.showSendMessageDialog			= function(id,name,reHeader,reBody){
		var container, overlay, subj, subjInput, msg, msgInput, submitBtn;
		
		reBody = "\n\n\n\n\n\n----"+name+" schrieb-----\n\n"+reBody
		reBody = reBody.replace(/<br \/>/g,'\n');
		
		//Build Object
		subj = document.createElement('div');
		subjInput = document.createElement('input');
		subjInput.className = 'msgSendHeader';
		msg = document.createElement('div');
		msgInput = document.createElement('textarea');
		
		subj.innerHTML = 'Betreff:';
		subjInput.value = reHeader;
		
		msg.innerHTML = 'Nachricht:';
		msgInput.value = reBody;
		
		submitBtn = document.createElement('button');
		submitBtn.innerHTML = 'senden';
		submitBtn.onclick = function(){
			_self.sendMessage(id,{
				subj: subjInput.value,
				msg: msgInput.value
			});
			document.body.removeChild(overlay);
		}
		
		
		overlay = this.abstractDialog(name+' antworten:',[
			subj,
			subjInput,
			msg,
			msgInput,
			submitBtn,
			this.brClear()
		]);
		
		document.body.appendChild(overlay);
	}
	
	this.div = function(){
		return document.createElement('div');
	}
	
	this.visualFolder = function(fObj)
	{
		var li,name,count;
		li = document.createElement('li');
		li.className = 'folder';
		
		name = document.createElement('span');
		name.innerHTML = fObj.name;
		name.className = 'folderName';
		
		count = document.createElement('span');
		count.innerHTML = '('+fObj.count+')';
		count.className = 'folderCount';
		
		li.appendChild(name);
		li.appendChild(count);
		
		li.data = fObj;
		fObj.obj = li;
		
		li.onclick = function(){
			_self.markFolder(fObj.id);
			_self.callMessages(fObj.id);
		}
		
		this.folderObj.appendChild(li);
		return li;
	}
	
	this.unmarkAllFolder = function(){
		this.displayUnmarkedFolder(this.getMarkedFolder());
	}
	
	this.markFolder = function(fid){
		this.unmarkAllFolder();
		for(var i = 0; i < this.folder.length; ++i){
			if(this.folder[i].id==fid){
				this.folder[i] = this.displayMarkedFolder(this.folder[i]);
				return true;
			}
		}
	}
	
	this.displayMarkedFolder = function(mObj){
		if(typeof(mObj)=='undefined' || mObj == null){
			return false;
		}
		mObj.obj.style.backgroundColor = '#ddd';
		//mObj.obj.childNodes[0].style.color = '#000';
		//mObj.obj.childNodes[1].style.color = '#691c23';
		mObj.marked = true;
		return mObj;
	}
	
	this.displayUnmarkedFolder = function(mObj){
		if(typeof(mObj)=='undefined' || mObj == null){
			return false;
		}
		mObj.obj.style.backgroundColor = '#f1f1f1';
		//mObj.obj.childNodes[0].style.color = '#000';
		//mObj.obj.childNodes[1].style.color = '#691c23';
		mObj.marked = false;
		return mObj;
	}
	
	
	this.unmarkAllMessages = function(markedObj){
		var parent = markedObj.parentNode;
		
		for(var i = 0; i < parent.childNodes.length; ++i){
			parent.childNodes[i].style.backgroundColor = '#fff';
		}
	}
	
	
	this.initMarkedMessageObject = function(obj){
		$(obj).addEvent('mousedown', function(e) {
			if( (e.button==1 && !document.all) || (document.all && e.button==2) ){
				return;
			}
			e = new Event(e).stop();
			_self.unmarkAllMessages(obj);
			obj.style.backgroundColor = '#f1f1f1';
		});
	}
	
	this.initDropableMessages = function(obj)
	{
		$(obj).addEvent('mousedown', function(e) {
			if( (e.button==0 && !document.all) || (document.all && e.button==1) ){
				return;
			}
			e = new Event(e).stop();
			
			var clone = this.clone()
				.setStyles(this.getCoordinates())
				.setStyles({
					'opacity': 0.7, 
					'position': 'absolute',
					'font-size':'10px'
				}).addEvent('emptydrop', function() {
					//alert('emptydrop');
					
					$$('#folderContainer li').each(function(){
						this.removeEvents();
					});
					this.remove();
				}).inject(document.body);
	 
			$$('#folderContainer li').each(function(drop){
				drop.addEvents({
					'drop': function() {
						drop.setStyle('background-color', 'transparent');
						drop.setStyle('color', '#000');
						drop.removeEvents();
						var option = {
							onComplete : function(folder){
								_self.callMessages(_self.currentCat);
							}
						}
						var jSonRequest = new Json.Remote(url,option).send({
							session_id:	SID,
							msg_id: obj.data.id,
							folder_id: drop.data.id,
							isSender: (obj.data.isSender),
							action:		'changeMessageFolder'
						});
						clone.remove();
						
					},
					'over': function() {
						_self.markFolder(drop.data.id);
					},
					'leave': function() {
						_self.displayUnmarkedFolder(_self.getMarkedFolder());
					}
				});
			});
	 
			var drag = clone.makeDraggable({
				droppables: $$('#folderContainer li')
			}); 
			drag.start(e);
		});
	}
	
	/****************************************************************************
	 * CONSTRUCTOR
	****************************************************************************/
	this.e = new Events();
	this.e.addEvent('burn', function(){
			alert('Burn Baby Burn! :-)');
		}
	);
	
	
	this.messages = {
		inbox: [],
		outbox: []
	};
	this.currentCat = 'in';
	
	this.url		= rpath+"community/user.php";
	var url			= rpath+"community/user.php";
	
	var _self = this;
	
	this.folder = [];
	this.folderObj = null;
	window.addEvent('domready', function() {
		_self.callMessages('in');
		//_self.e.fireEvent('burn');
	});
}


