var loading = false;
var pageN = 1;

function setupLoadMore() {
	
	if($('mas')) {
	
		$('mas').onclick = function() {
			if(!loading) {
				pageN++;
				loadMoreMessages(pageN, true, false);
			}
			
			return false;
		}
		
	}

}
	
function loadMoreMessages(p, display, clear) {
		
	//Get next page
	loading = true;
	$('mas').addClassName('loading');
	
	//Get container
	var messages = $$('.messages')[0];
	
	//Setup filters
	if($('onlyDirect').checked)
		var direct = '&direct';
	else
		var direct = '';
		
	if($('onlyFavs').checked)
		var favs = '&favourite';
	else
		var favs = '';
		
	var filter = $$('input.filter').find(function(el) { return el.checked })
	filters = '&filter='+filter.value;

	//Get messages
	new Ajax.Request(HOST+'home/'+p+'?ajax&only_msgs'+direct+favs+filters, {
		
		method: 'get',				
		onSuccess: function(transport) {
			
			if(clear) {
				messages.innerHTML = '';
				$('mas').style.display = 'block'
			}
			
			if(transport.responseText != '0' && display)
				messages.innerHTML += transport.responseText;
			else if(transport.responseText == '0')
				$('mas').style.display = 'none'			
			
			loading = false;
			$('mas').href = HOST+'/home/'+(p+1);
			$('mas').removeClassName('loading');
			
			//If filtered, attach 'remove from folder' buttons
			if(!isNaN(filter.value) && filter.value > 0 && display) {
				$$('.message').each(function(el) {
					attachAction(el, filter.value)
				})
			}
			
			//Init dragging
			dragMessages()
			
		}
		
	});
	
	//Check if next page available
	if(display == true)
		loadMoreMessages(p+1, false, false);
	
}

function dragMessages() {
	//Drag messages
	//Drop in folders

	var m = $$('.message');
	
	for(i = 0; i < m.length; i++) {
		
		new Draggable(m[i].id, { 
    		revert: true,
    		ghosting: true,
    		onStart: function(obj, event) {
    			
    			//Disable links
    			$$('.message a').each(function(el) {
    				el.onclick = function() {
    					return false;
    				}
    			})
    			
    		},
    		onEnd: function(obj, event) {
    			
    			//Enable links
    			setTimeout("enableLinks()", 500);
    			
    		}
    	});
    	
    	m[i].style.cursor = 'pointer';
    	m[i].style.width = 'auto';
		
	}
	
	var f = $$('.folder');

	for(i = 0; i < f.length; i++) {
	
		Droppables.add(f[i].id, { 
			accept: 'message',
			hoverclass: 'hover',
			onDrop: function(element, droppable) { 
				droppable.highlight();
				saveInFolder(element.id, droppable.id)
			}
		});
	
	}
}

function enableLinks() {
	//Enable links after dragging
	$$('.message a').each(function(el) {
		el.onclick = function() {}
	})
}

function saveInFolder(message, folder) {
	//Save message in folder
	//message: m+message.id
	//folder: f+folder.id
	
	message = parseInt(message.substr(1));
	folder = parseInt(folder.substr(1));
	
	if(message != 0 && folder != 0) {

		new Ajax.Request(HOST+'home/save_message/'+message+'/'+folder,
		{
			method:'get',
			onSuccess: function(transport) {
				if(transport.responseText.substr(0, 2) == 'ok') {
					
					originalQuant = $('fq'+folder).firstChild.nodeValue;
					quant = transport.responseText.substr(2);
		
					if(originalQuant != quant) {
					
						quant = document.createTextNode(quant);
					
						$('fq'+folder).removeChild($('fq'+folder).firstChild);
						$('fq'+folder).appendChild(quant);
						
						$('m'+message).addClassName('mf'+folder);
						
					} else {
						errorMessage('El mensaje ya está guardado en ese directorio');
					}
					
				} else {
					errorMessage("Error al guardar mensaje.");
				}
			},
			onFailure: function(){ errorMessage('Error al guardar mensaje.') }
		});
	
	}
	
}

function filterMessages() {
	//Filter shown messages
	
	//Get folders
	var filters = $$('.filter');
	
	for(i = 0; i < filters.length; i++) {
		
		filters[i].onchange = function() {
			pageN = 1;
			loadMoreMessages(pageN, true, true);
		}
	
	}

}

function attachAction(message, id) {
	
	if(message.hasClassName('deleteButtonAdded'))
		return false; //Avoid duplicate buttons
	
	//Attach "remove from folder" link	
	var a = document.createElement('a');
	a.className = 'remove'
	a.href = HOST+'home/delete_message/'+message.id.substr(1)+'/'+id;
	
	var folder = id;
	a.onclick = function() {
	
		var message = Element.extend(this).up();
	
		new Ajax.Request(this.href,
		{
			method:'get',
			onSuccess: function(transport) {
				if(transport.responseText.substr(0, 2) == 'ok') {
					
					quant = transport.responseText.substr(2);					
					quant = document.createTextNode(quant);
				
					$('fq'+folder).removeChild($('fq'+folder).firstChild);
					$('fq'+folder).appendChild(quant);
					
					message.removeClassName('mf'+folder);
					
					okMessage('El mensaje fue eliminado del directorio.');					

					//Reload messages
					pageN = 1;
					loadMoreMessages(pageN, true, true);
										
				} else {
					errorMessage("Error al eliminar mensaje.");
				}
			},
			onFailure: function(){ errorMessage('Error al eliminar mensaje.') }
		});
		
		return false;

	}
	
	//Get filter action
	var filter = $('folder'+id).next().next().innerHTML;
	a.appendChild(document.createTextNode('eliminar de '+filter))
	
	message.appendChild(a);
	message.addClassName('deleteButtonAdded');
	
}

function setButtons() {
	var messages = $$('.message');
	var links;
	var comment;
	
	for(i = 0; i < messages.length; i++) {

		messages[i].onmouseover = function() {
			links = this.getElementsByClassName('controlLink');
			for(j = 0; j < links.length; j++)
				links[j].style.display = 'block';
		}
		
		messages[i].onmouseout = function() {
			links = this.getElementsByClassName('controlLink');
			for(j = 0; j < links.length; j++)
				links[j].style.display = 'none';
		}
		
		comment = messages[i].getElementsByClassName('answerLink');
		for(j = 0; j < comment.length; j++) {
		
			comment[j].onclick = function() {
				newComment(this)
			}
		
		}
	
	}
}

function newComment(link) {

	var message = link.up().up();
	var container = link.up().up().up();

	var id = message.id.substr(1);
	var isContent = message.hasClassName('isContent');
	
	message = message.next();
	
	if(message && message.tagName == 'FORM') //Already created form, delete
		return message.parentNode.removeChild(message)

	var text = document.createElement('textarea');
	text.name = 'comments';
	
	var inp = document.createElement('input');
	inp.type = 'submit';
	inp.name = 'sendComment';
	inp.value = 'Enviar comentario';
	
	var div = document.createElement('div');
	div.className = 'clear';
	
	var form = document.createElement('form');

	if(isContent)
		form.action = HOST+'content/_/'+id+'-.html';
	else
		form.action = HOST+'user/messages/'+id+'-.html';
	
	form.method = 'post';
	form.className = 'answerForm';
	form.appendChild(text);
	form.appendChild(inp);
	form.appendChild(div);
	
	form.onsubmit = function() {
		submitForm(this, inp, text, false, null, false);
		this.parentNode.removeChild(this);				
		return false;
	}
	
	if(message)
		container.insertBefore(form, message)
	else
		container.appendChild(form)
	
	return false;
}

function newDirectory() {
	
	$('newDir').style.display = 'none';
	
	$('newDirLink').observe('click', function() {
		$('newDir').style.display = 'block';
	})
	
	$('cancelNewDir').observe('click', function() {
		$('newDir').style.display = 'none';
	})
}

function privateColor() {
	
	$('private').onchange = function() {
	
		if(this.checked)
			$('message').addClassName('private') 
		else
			$('message').removeClassName('private') 
		
	
	}
	
}

//Hide popup
function closeInsertContent() {
	$$('.contentList').each(function(el) {
		el.style.display = 'none';
	})
}

//Show 'insert content' popup
function insertContent() {

	//Attach action to show popup
	$$('.insertButtons img').each(function(el) {
		el.onclick = function() {
						
			closeInsertContent()
			$(this.className).style.display = 'block'
			
		}
	})
	
	//Close popup and show attachment
	$$('.contentList input').each(function(el) {
		el.onchange = function() {
			if(this.checked) {
			
				closeInsertContent()
				$('attachedContent').innerHTML = 'Contenido adjunto: <strong>'+this.nextSibling.nodeValue+'</strong>';
				
			}
		}
	})
	
	$$('.contentList .listo').each(function(el) {
		el.onclick = function() {
						
			closeInsertContent()
			
		}
	})
	
	//Delete attachment
	$('attachedContent').onclick = function() {
		this.innerHTML = '';
		$$('.contentList input').each(function(el) {
			el.checked = false;
		})
	}
}

//Steup user's notifications
function setupNotifications(historyText, dismissText, titleText) {
	
	//Get new
	setInterval("getNotifications('"+historyText+"', '"+dismissText+"', '"+titleText+"')", 60000);
	setupDeleteLink();
	
}

function setupDeleteLink() {
	//Delete
	var link = $('dismiss');

	if(!link) return false;
	
	link.onclick = function() {
		
		new Ajax.Request(HOST+'ajax/delete-notifications.php',
		{
			method:'get',
			onSuccess: function(transport) {
				if(transport.responseText.substr(0, 2) == 'OK') {
					
					new Effect.SlideUp('notifications', {duration: 0.5, afterFinish: function() {
						$('notifications').remove();
					}});
					
				} else {
					errorMessage("Error al eliminar notificaciones.");
				}
			},
			onFailure: function(){ errorMessage('Error al eliminar notificaciones.') }
		});

		
	}
}

function getNotifications(historyText, dismissText, titleText) {

	var url = HOST+'ajax/get-notifications.php';
	new Ajax.Request(url,
	{
		method:'get',
		onSuccess: function(transport) {
		
			if(transport.responseText == '')
				return false;
		
			var ul = $('notificationsUL');
		
			//Build notifications
			if(!ul) {
				var div = document.createElement('div');
				div.id = 'notifications';
				
				var p = document.createElement('p');
				p.id = 'tools';
				
				var span = document.createElement('span');
				span.id = 'dismiss';
				span.appendChild(document.createTextNode(dismissText));
				
				var a = document.createElement('a');
				a.href = HOST+'home/notifications/';
				a.appendChild(document.createTextNode(historyText));
				
				p.appendChild(a);
				p.appendChild(document.createTextNode(' | '));
				p.appendChild(span);
				
				div.appendChild(p);
				
				var h3 = document.createElement('h3');
				h3.appendChild(document.createTextNode(titleText))
				
				ul = document.createElement('ul');
				ul.className = 'news';
				ul.id = 'notificationsUL';
				Element.extend(ul);
				
				div.appendChild(p);
				div.appendChild(h3);
				div.appendChild(ul);
				$('page').insertBefore(div, $('page').firstChild.nextSibling);
				
				setupDeleteLink();
			}
			
			ul.innerHTML = transport.responseText + ul.innerHTML;
			
			$$('#notificationsUL li').each(function(el) {
				if(el.style.display == 'none')
					Effect.SlideDown(el)
			})
		
		}
	});

}
