function configureMoveButtons()
{
	var a_allStemList = $$('.stem_list');

	a_allStemList.each(function(el)
	{
		// Hide icons not needed when only 1 item is visible			
		if(el.getChildren().length == 1)
		{
			el.getElements(".moveStemUp").setStyle('display', 'none');
			el.getElements(".moveStemDown").setStyle('display', 'none');
			el.getElements(".deleteStem").setStyle('display', 'none');
			
		}
		else if(el.getChildren().length == 2)
		{
			el.getFirst().getElements(".moveStemDown").setStyle('display', 'inline');
			el.getFirst().getElements(".moveStemUp").setStyle('display', 'none');
			
			el.getLast().getElements(".moveStemUp").setStyle('display', 'inline');				
			el.getLast().getElements(".moveStemDown").setStyle('display', 'none');
			el.getElements(".deleteStem").setStyle('display', 'inline');
		}
		else
		{
			el.getElements(".moveStemUp").setStyle('display', 'inline');
			el.getElements(".moveStemDown").setStyle('display', 'inline');
			el.getElements(".deleteStem").setStyle('display', 'inline');
			
			el.getFirst().getElements(".moveStemUp").setStyle('display', 'none');
			el.getLast().getElements(".moveStemDown").setStyle('display', 'none');
		}
	});
}

function configureMoveKlavieren()
{
	var a_klavieren = $$('.disposition_edit');

	// klavieren will always contain one template klavier. In this case 2 means 1 visible klavier
	if(a_klavieren.length == 2)
	{
		a_klavieren[1].getElement(".moveKlavierUp").setStyle('display', 'none');
		a_klavieren[1].getElement(".moveKlavierDown").setStyle('display', 'none');
	}
	else if(a_klavieren.length > 2 ) // more than 1 item found
	{
		a_klavieren[1].getElement(".moveKlavierUp").setStyle('display', 'none');
		a_klavieren[1].getElement(".moveKlavierDown").setStyle('display', 'inline');
		
		var i_loop = 2;
		for(i_loop; i_loop < a_klavieren.length; i_loop++)
		{
			a_klavieren[(i_loop)].getElement(".moveKlavierUp").setStyle('display', 'inline');
			a_klavieren[(i_loop)].getElement(".moveKlavierDown").setStyle('display', 'inline');		
		}
		
		a_klavieren[(a_klavieren.length -1)].getElement(".moveKlavierUp").setStyle('display', 'none');
		a_klavieren[(a_klavieren.length -1)].getElement(".moveKlavierDown").setStyle('display', 'inline');
		
		a_klavieren[(a_klavieren.length -1)].getElement(".moveKlavierUp").setStyle('display', 'inline');
		a_klavieren[(a_klavieren.length -1)].getElement(".moveKlavierDown").setStyle('display', 'none');
	}
}

function setInputElementIds(o_parentObj)
{
	// Set klavier name
	$(o_parentObj).getElement('input').set('name', 'klavieren['+o_parentObj+'][settings][naam]');
	
	var i_stemIterator = 0;		
	var a_stemInputElements = $(o_parentObj).getElement('ul').getChildren().getElements('input');		

	// Set names for all stem elements
	a_stemInputElements.each(function(el)
	{
		// Set stem names
		el[0].set('name', 'klavieren['+o_parentObj+'][stemmen][stem_'+i_stemIterator+'][mainhead]');
		el[1].set('name', 'klavieren['+o_parentObj+'][stemmen][stem_'+i_stemIterator+'][value]');
		
		// Set stem id's
		el[0].set('id', 'klavieren['+o_parentObj+'][stemmen][stem_'+i_stemIterator+'][mainhead]');
		el[1].set('id', 'klavieren['+o_parentObj+'][stemmen][stem_'+i_stemIterator+'][value]');
		
		i_stemIterator = i_stemIterator + 1;
	});
}

function addEventHandlersStem(o_parentObj)
{
	// Add event function for delete button for the newly added stem
	o_deleteStem = o_parentObj.getElements('.deleteStem');
	o_moveUp = o_parentObj.getElements('.moveStemUp');
	o_moveDown = o_parentObj.getElements('.moveStemDown');
	
	
	// Delete items
	o_deleteStem.each(function(el)
	{
		el.addEvent("click", function()
		{			
			// Get parent klavier id
			var i_klavierId = $(this).getParent().getParent().getParent().getParent().get('id');
							
			if($(this).getParent().getParent().getChildren().length > 1)
			{
				// Remove stem
				$(this).getParent().dispose();

				// Reset stem names
				setInputElementIds(i_klavierId);
				
				// Reconfigure MoveButtons
				configureMoveButtons();
			}
			return false;
		});
	})
	
	
	// Move items up
	o_moveUp.each(function(el)
	{					
		el.addEvent("click", function()
		{		
			var i_klavierId = $(this).getParent().getParent().getParent().getParent().get('id');
			
			moveStemElements(i_klavierId, this, -1);
			
			return false;
		});				
	});
			
	// Move items down
	o_moveDown.each(function(el)
	{	
		el.addEvent("click", function()
		{
			var i_klavierId = $(this).getParent().getParent().getParent().getParent().get('id');
			
			moveStemElements(i_klavierId, this, 1);
				
			return false;			
		});			
	});
}

function moveStemElements(i_klavierId, o_moveButtonElement, i_direction)
{		
	// Get current elements
	var o_currentKey = o_moveButtonElement.getParent().getFirst().get('id');	
	var o_currentValue = o_moveButtonElement.getParent().getFirst().getNext().get('id');			
		
	var o_currentKeyProperties = $(o_currentKey).getProperties('id', 'name', 'value', 'type');
	var o_currentValueProperties = $(o_currentValue).getProperties('id', 'name', 'value', 'type');
	
	// Determine current id and previous id
	var i_currentKeyBroken = o_currentKey.split("_");		

	// alert(i_currentKeyBroken[2]);
	
	var i_currentIdKlavier = i_currentKeyBroken[1].substring(0, i_currentKeyBroken[1].indexOf(']'));	
	var i_currentIdStem = i_currentKeyBroken[2].substring(0, i_currentKeyBroken[2].indexOf(']'));
	
	
	
	if(i_direction == -1)
	{
		var i_previousId = parseInt(i_currentIdStem) - 1;												
	}
	else
	{
		var i_previousId = parseInt(i_currentIdStem) + 1;	
	}
								
	// Get previous elements
	var o_previousKey = $('klavieren[klavier_'+i_currentIdKlavier+'][stemmen][stem_'+i_previousId+'][mainhead]');
	var o_previousValue = $('klavieren[klavier_'+i_currentIdKlavier+'][stemmen][stem_'+i_previousId+'][value]');
	
	var o_previousKeyProperties = o_previousKey.getProperties('id', 'name', 'value', 'type');
	var o_previousValueProperties = o_previousValue.getProperties('id', 'name', 'value', 'type');
			
	// Switch elements					
	$(o_currentKey).setProperties(o_previousKeyProperties);
	$(o_currentValue).setProperties(o_previousValueProperties);
	
	$(o_previousKey).setProperties(o_currentKeyProperties);
	$(o_previousValue).setProperties(o_currentValueProperties);
			
	// Reset Stemmen
	setInputElementIds(i_klavierId);
}

function moveKlavieren(s_currentKlavier, i_direction)
{
	var i_klavierNumber = s_currentKlavier.split('_')[1];
		
	// Swap elements		
	if(i_direction == -1)
	{
		var s_moveToKlavier = 'klavier_' + (parseInt(i_klavierNumber) - 1);
		$(s_currentKlavier).inject($(s_moveToKlavier), "before");	
	}
	else
	{
		var s_moveToKlavier = 'klavier_' + (parseInt(i_klavierNumber) + 1);
		$(s_currentKlavier).inject($(s_moveToKlavier), "after");
	}
		
	// Reset klavieren en stemmen
	var i_loop = 1;
	var i_loopLength = $$(".disposition_edit").length;
	for(i_loop; i_loop < i_loopLength; i_loop++)
	{
		$$(".disposition_edit")[i_loop].set('id', 'klavier_'+(i_loop - 1))
		setInputElementIds('klavier_'+(i_loop - 1));
	}
		
	// Configure buttons
	configureMoveKlavieren();
}

function addEventHandlersKlavier(o_parentObj)
{	
	// Add event functions for delete button for the newly added klavier
	o_deleteKlavier = o_parentObj.getElement(".deleteKlavier");
	o_moveKlavierUp = o_parentObj.getElement(".moveKlavierUp");
	o_moveKlavierDown = o_parentObj.getElement(".moveKlavierDown");
	
	
	o_deleteKlavier.addEvent("click", function()
	{		
		if($$(".disposition_edit").length >= 2)
		{
			// Delete parent.parent element (klavier)
			$(this).getParent().getParent().dispose();
		}
		return false;
	});		
	
	o_moveKlavierUp.addEvent("click", function()
	{
		moveKlavieren($(this).getParent().getParent().get('id'), -1);		
		return false;
	});

	o_moveKlavierDown.addEvent("click", function()
	{
		moveKlavieren($(this).getParent().getParent().get('id'), 1);		
		return false;
	});
	
	// Add event functions for add stem button for the newly added klavier
	o_addStem = o_parentObj.getElements(".addStem");
	
	o_addStem.each(function(el)
	{
		el.addEvent("click", function()
		{
			// Add new stem
			var o_stemItemList = o_parentObj.getElement('.stem_list');
			
			var o_originalListItem = $("disposition_edit_area").getElement('.stem_list').getElement('li');
			
			var o_newStem = o_stemItemList.getLast().clone(true, false).inject(o_stemItemList.getLast(), "after");
			
			// Empty last entry
			var a_lastEntries = o_stemItemList.getLast().getElements('input');
			
			a_lastEntries.each(function(el)
			{
				el.set('value', '');
			});
			
			// Get parent klavier id
			var i_klavierId = $(this).getParent().getParent().get('id');
			
			// Reset stem names
			setInputElementIds(i_klavierId);
			
			// Add event functions for newly added stem
			addEventHandlersStem(o_newStem);
			
			configureMoveButtons();
			
			return false;
		});
	});	
}