document.observe('dom:loaded', function() {
	$('skeleton') && $('skeleton').hide();

	/*Event.observe($('pickups'), 'mouseover', listOver);
	Event.observe($('pickups'), 'mouseout', listOut);*/
	Event.observe($('pickups'), 'click', buttonClick);

	updateList();
});

function updateList() {
	new Ajax.Request('/pickup/list', {
	  method: 'get',
	  onSuccess: function (transport) {
	  	// alla pickups
    	var obj = transport.responseJSON;

    	$('loading') && $('loading').remove();

    	for (i = 0; i < obj.length; i++) {

    		var pickupId = 'pickup_' + obj[i].id;
				var exists = false;

    		if ($(pickupId)) {
    			var pickupNode = $(pickupId);
    			exists = true;
    		} else {
	    		var pickupNode = $('skeleton').cloneNode(true);
	    		$(pickupNode).writeAttribute('id', pickupId);
	    		$('pickups').insert(pickupNode);
	    	}

	    	var modified = $(pickupNode).down('input[name=modified]');

	    	// bara uppdatera rad om pickupens info ändrats
	    	if (obj[i].modified <= modified.value)
	    		continue;

	    	modified.value = obj[i].modified;

	    	var added = false;

	    	$(pickupNode).down('.pickupinfo').select('div').each(function (el, index) {
    			var key = $w($(el).className)[0];

    			if (obj[i][key]) {
    				switch (key) {
	    				case 'users':
	    					var users = new Element('div');
					    	for (u = 0; u < obj[i].num_players; u++) {
				    			if (obj[i].users[u]) {
						    		if ($('uid') && obj[i].users[u].id == $F('uid'))
											added = true;
				    				$(users).insert(new Element('a', { href: '/member/' + obj[i].users[u].id }).update(obj[i].users[u].username));
				    			} else {
				    				$(users).insert(' -');
				    			}

				    			if (u < obj[i].num_players-1)
				    				$(users).insert(' / ');
				    		}

				    		if ($('uid')) {
					    		var actionEl = $(pickupNode).down('input[name=action]');

					    		if (actionEl.value == 'Add' && added == true)
					    			actionEl.value = 'Remove';
					    		else
					    			actionEl.value = 'Add';

					    		actionEl.enable();
				    		}

								$(el).update(users);
	    					break;
	    				default:
								$(el).update(obj[i][key]);
	    					break;
  	  			}
					}
    		});

    		if (exists)
    			$(pickupNode).highlight();
    		else
    			$(pickupNode).appear();

    		if (added) {
					// ordna chatbox och sŠtt upp observers
    			var chatbox = $(pickupNode).down('.chatbox');
					if (!$(chatbox).visible())
						$(chatbox).blindDown({queue: {scope: 'infobox', position: 'end'}, duration: 0.4});
						
					$(chatbox).down('.log').writeAttribute('id', 'chatlog_' + obj[i].id);
					$(chatbox).down('input[name=usertext]').writeAttribute('id', 'usertext_' + obj[i].id);
					$(chatbox).down('input[name=usertext]').observe('keydown', chat);
					updateChat(obj[i].id);
    		}
    	}

   		setTimeout(updateList, 1000);
	  },
	  onFailure: function () {
	  	/* general ajax error handling */
	  }
	});
}

// chathistorik
var scrollHistory = [];
var scrollCurrentElement = [];

function chat(event) {
	var el = event.element();
	var id = $(el).readAttribute('id').split(/_/)[1];
	switch (event.keyCode) {
		case 13:
			sendChat(id);
			break;
		case 38:
			chatHistoryUp(id);
			break;
		case 40:
			chatHistoryDown(id);
			break;
	}
}

function sendChat(id) {
	var textfield = 'usertext_' + id;
	
	if ($F(textfield)) {
		// nŒgot Šr skrivet
		if (!scrollHistory[id])
			scrollHistory[id] = [];
			
		scrollHistory[id].push($F(textfield));
		scrollCurrentElement[id] = scrollHistory[id].length;
		
		var url = '/pickup/chat';
		var params = { pickup_id: id, user_id: $('uid').value, text: $F(textfield)};
				
		new Ajax.Request(url, {
			method: 'post',
			parameters: params,
			onComplete: function (transport) {
				//alert(transport.responseText);
				// scrolla lŠngst ner
				$(textfield).value = '';
				updateChat(id);
			}		
		});
	}
}

function updateChat(id) {
	// uppdatera chatlog med allt som skrivits fšr pickupen och Šr unread
	
	// posta pickup-id via ajax
	var url = '/pickup/chatlog/';
	var params = { pickup_id: id };
	
	new Ajax.Request(url, {
		method: 'post',
		parameters: params,
		onComplete: function (transport) {
			//alert(transport.responseText);
			var obj = transport.responseJSON;
			var log = $('chatlog_' + id);

			// loopa igenom alla chatrader och skriv ut
			for (i = 0; i < obj.length; i++) {
				$(log).insert(new Element('p').update(obj[i].created + ' &lt;' + obj[i].username + '&gt; ' + obj[i].message + '<br>'));
			}
			
			if (obj.length > 0)
				$(log).scrollTop = 1e7;	
		}
	});
	
	setTimeout('updateChat(' + id + ')', 1000);
}

function chatHistoryUp(id) {
	if (!scrollHistory[id])
		return;
		
	if (scrollHistory[id].length > 0 && scrollCurrentElement[id] > 0) {
		scrollCurrentElement[id]--;
		$('usertext_' + id).value = scrollHistory[id][scrollCurrentElement];
	}
}

function chatHistoryDown(id) {
	if (!scrollHistory[id])
		return;
	
	if (scrollCurrentElement[id] < scrollHistory[id].length - 1) {
		scrollCurrentElement[id]++;
		$('usertext_' + id).value = scrollHistory[id][scrollCurrentElement];
	}
}

function listOver(event) {
	var el = event.element();

	if (el.nodeName.toLowerCase() != 'li')
		var el = $(el).up('li');

	if ($(el)) {
		$(el).addClassName('over');
	}
}

function listOut(event) {
	var el = event.element();

	if (el.nodeName.toLowerCase() != 'li')
		var el = $(el).up('li');

	if ($(el)) {
		do {
			$(el).removeClassName('over');
		} while ($(el).hasClassName('over'));
	}
}

function buttonClick(event) {
	var el = event.element();

	if ($(el).getAttribute('type') == 'button') {

		var pickup_id = $(el).up('li').readAttribute('id');

		if (!pickup_id)
			return;

		pickup_id = pickup_id.split('_')[1];

		switch (el.value.toLowerCase()) {
			case 'add':
				$(el).disable();
				new Ajax.Request('/pickup/add/id/' + pickup_id,
			  {
			    method: 'get',
			    onSuccess: function (transport) {
			    	var obj = transport.responseJSON;
			      if (!obj || obj.error === undefined) {
			    		var chatbox = $(el).up('li').down('.chatbox');
							if (!$(chatbox).visible())
								$(chatbox).blindDown({queue: {scope: 'infobox', position: 'end'}, duration: 0.4});
					  } else {
			      	alert(obj.error);
			      }
			    }
			  });
				break;
			case 'remove':
				$(el).disable();
			  new Ajax.Request('/pickup/remove/id/' + pickup_id,
			  {
			    method: 'get',
			    onSuccess: function (transport) {
			    	var obj = transport.responseJSON;
						if (!obj || obj.error === undefined) {
			    		var chatbox = $(el).up('li').down('.chatbox');
							//if ($(chatbox).visible())
									$(chatbox).blindUp({queue: {scope: 'infobox', position: 'end'}, duration: 0.4});
			      } else {
			      	alert(obj.error);
			      }
			    }
			  });
				break;
		}
	}
}