function slowShowSideBox(that,boxNumber) {
	var itemToModify = that.next(2); // Get content div
	if(itemToModify.style.display == 'none') // When box is hidden
	{
		notifyMenuHide(that.readAttribute('id').substr(-1), 0);
	}else{ // When it's shown.
		notifyMenuHide(that.readAttribute('id').substr(-1), 1);
	}
	toggleBox(itemToModify, that, 100)
}

function toggleBox(box, label, scaleTo)
{
	new Effect.toggle(box, 'blind', {queue:'end', duration:0.5});
	if(box.style.display == 'none') // When box is hidden
	{
		label.update('hide');
	}else{ // When it's shown.
		label.update('show');
	}
}

function characterLimitChange(areaId, charId, maxLength)
{
	var areaLength = $(areaId).value.length;
	if(charId.length > 0)
	{
		$(charId).innerHTML = maxLength-areaLength+" characters left";
	}
	if(areaLength > maxLength)
	{
		$(areaId).style.backgroundColor = '#977';
	}else{
		$(areaId).style.backgroundColor = '#999';
	}
}

function operationOptions(dataTo, dataOb, entityID)
{
	new Effect.Opacity($(entityID), {duration:0.5, from:1.0, to:0.0, queue:'end', afterFinish: function () {
		if(dataTo != 0) { prefix = "<div style=\"float:right\" class=\"emuLink\" onclick=\"operationOptions(0, '"+dataOb+"', '"+entityID+"')\">Go Back</div>"; }else{ prefix = ""; }
		$(entityID).update(prefix+operationsData[dataOb][dataTo]);
	}});
	new Effect.Opacity($(entityID), {duration:0.5, from:0.0, to:1.0, queue:'end'});
}

function BLX42DeleteNotification(toDelete)
{
	new Ajax.Updater('BLX42Notifications', '/xnotificationDelete/', {parameters: { toDelete: toDelete }});
}

var ratings = $H({});
// this function determines whether the event is the equivalent of the microsoft
// mouseleave or mouseenter events.
function isMouseLeaveOrEnter(e, handler) {
	if (e.type != 'mouseout' && e.type != 'mouseover') return false;
	var reltg = e.relatedTarget ? e.relatedTarget :
	e.type == 'mouseout' ? e.toElement : e.fromElement;
	while (reltg && reltg != handler) reltg = reltg.parentNode;
	return (reltg != handler);
}

function BLX100PlusMouseOver(that, clearAll)
{
	if(clearAll)
	{
		that.up().next().immediateDescendants().invoke('update','-');
		return true;
	}
	that.update('+');
	that.previousSiblings().invoke('update','+');
	that.nextSiblings().invoke('update','-');
}

function BLX100PlusMouseClick(that)
{
	var rating = that.getAttribute('name');
	var criteria = that.up(2).getAttribute('name');
	if(rating != 0)
	{
		ratings.set(criteria, rating);
		that.up(2).storedRating = that.up(2).innerHTML;
		that.up(2).style.backgroundColor = "#413221";
	}else{
		ratings.unset(criteria);
		that.up(2).storedRating = that.up(2).innerHTML;
		that.up(2).style.backgroundColor = "";
	}
}

function BLX100OverOrOut(that, overOrOut)
{
	if(overOrOut)
	{
		if(!that.storedRating)
		{
			that.defaultText = that.innerHTML;
			that.update("<div class=\"rateStars\"><div style=\"display:inline;cursor:pointer;\" class=\"rateStars\"> <div style=\"display:inline;\" onmouseover=\"BLX100PlusMouseOver(this,1);\" name=\"0\" onclick=\"BLX100PlusMouseClick(this);\">X</div></div><div style=\"display:inline;cursor:pointer;\" class=\"rateStars\"><div onmouseover=\"BLX100PlusMouseOver(this);\" style=\"display:inline\" name=\"1\" onclick=\"BLX100PlusMouseClick(this);\">-</div><div onmouseover=\"BLX100PlusMouseOver(this);\" style=\"display:inline\" name=\"2\" onclick=\"BLX100PlusMouseClick(this);\">-</div><div onmouseover=\"BLX100PlusMouseOver(this);\" style=\"display:inline\" name=\"3\" onclick=\"BLX100PlusMouseClick(this);\">-</div><div onmouseover=\"BLX100PlusMouseOver(this);\" style=\"display:inline\" name=\"4\" onclick=\"BLX100PlusMouseClick(this);\">-</div><div onmouseover=\"BLX100PlusMouseOver(this);\" style=\"display:inline\" name=\"5\" onclick=\"BLX100PlusMouseClick(this);\">-</div></div>");
		}else{
			that.update(that.storedRating)
		}
	}else{
		that.update(that.defaultText);
	}
}

function BLX100DumpVotes()
{
	ratings.each( function(pair) {
		$('BLX100HiddenVotes').update($('BLX100HiddenVotes').innerHTML+"<input type=\"hidden\" name=\"ratings["+pair.key+"]\" value=\""+pair.value+"\" />");
		return true;
	});
	return false;
}
function BLX100Heart(heartOrBreak, item, comment)
{
	new Effect.Opacity(item, {duration:0.5, from:1.0, to:0.1, queue:'end', afterFinish: function () {
			new Ajax.Updater(item, '/xHeart', {parameters: {heartOrBreak: heartOrBreak, comment: comment}, onSuccess: function() {
				new Effect.Opacity(item, {duration:0.2, from:0.1, to:1, queue:'end'});
				
			} } );
		}});
}


function BLX100Reply(linkTo)
{
	$('BLX100CommentReply').update("Replying to <a href=\"#c"+linkTo+"\">comment</a>");
	$('BLX100ReplyTo').value = linkTo;
}

function swapPiecesTo(newID)
{
	$('pieceType0').setStyle({textDecoration: 'none'});
	$('pieceType1').setStyle({textDecoration: 'none'});
	$('pieceType2').setStyle({textDecoration: 'none'});
	$('pieceType'+newID).setStyle({textDecoration: 'underline'});
	$('piecesText0').style.display = 'none';
	$('piecesText1').style.display = 'none';
	$('piecesText2').style.display = 'none';
	$('piecesText'+newID).style.display = 'block';
}

var clickedObjects = Array();
function clearOnClick(that)
{
	var elementID = that.readAttribute('id');
	if(!clickedObjects[elementID])
	{
		clickedObjects[elementID] = 1;
		if(that.value)
		{
			that.value = '';
		}else{
			that.innerHTML = '';
		}
	}
}

function checkMatches(that, beforeThat)
{
	if(that.value == beforeThat.value)
	{
		that.style.backgroundColor = '#22ff22';
		beforeThat.style.backgroundColor = '#22ff22';
	}else{
		that.style.backgroundColor = '#ff2222';
		beforeThat.style.backgroundColor = '#ff2222';
	}
}

function BLX56SubmitPiece()
{
	new Ajax.Request('/submitPiece/', {parameters: $('BLX56Form').serialize(true), onSuccess: function(transport) {
		var response = transport.responseText
		if(!transport.responseText.length)
		{
			alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your piece on your computer before continuing, so it doesn't disappear...");
		}else if(response.substring(0,2) == 'GO'){
			window.location = "/piece/"+response.substring(2)+"/";
		}else if(response.substring(0,2) == 'LO'){
			alert("One of the text boxes was too long. Please check you have not entered too many key words, or typed too much in the title or the piece (they should be highlighted red if you have.)");
		}else if(response.substring(0,2) == 'TI'){
			alert("Your login has expired. Please log back in again in a new window or tab (so that your work is not lost.)");
		}else if(response.substring(0,2) == 'AU'){
			alert("The password you entered was wrong. Please check and retry.");
		}else if(response.substring(0,2) == 'MI'){
			alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your piece on your computer before continuing, so it doesn't disappear...");
		}
		
	}, onFailure: function (transport) {
		alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your piece on your computer before continuing, so it doesn't disappear...");
	}});
}

function BLX62SubmitSeries()
{
	new Ajax.Request('/submitSeries/', {parameters: $('BLX62Form').serialize(true), onSuccess: function(transport) {
		var response = transport.responseText;
		if(!transport.responseText.length)
		{
			alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your piece on your computer before continuing, so it doesn't disappear...");
		}else if(response.substring(0,2) == 'GO'){
			window.location = "/series/"+response.substring(2)+"/";
		}else if(response.substring(0,2) == 'LO'){
			alert("One of the text boxes was too long. Please check you have not entered too many key words, or typed too much in the title or the piece (they should be highlighted red if you have.)");
		}else if(response.substring(0,2) == 'TI'){
			alert("Your login has expired. Please log back in again in a new window or tab (so that your work is not lost.)");
		}else if(response.substring(0,2) == 'AU'){
			alert("The password you entered was wrong. Please check and retry.");
		}else if(response.substring(0,2) == 'MI'){
			alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your piece on your computer before continuing, so it doesn't disappear...");
		}
		
	}, onFailure: function (transport) {
		alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your piece on your computer before continuing, so it doesn't disappear...");
	}});
}

function BLX65SubmitPiece()
{
	new Ajax.Request('/sendMessage/', {parameters: $('BLX65Form').serialize(true), onSuccess: function(transport) {
		var response = transport.responseText
		if(!transport.responseText.length)
		{
			alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your piece on your computer before continuing, so it doesn't disappear...");
		}else if(response.substring(0,2) == 'GO'){
			window.location = "/messageSent/";
		}else if(response.substring(0,2) == 'LO'){
			alert("One of the text boxes was too long. Please check you have not entered too many key words, or typed too much in the title or the piece (they should be highlighted red if you have.)");
		}else if(response.substring(0,2) == 'TI'){
			alert("Your login has expired. Please log back in again in a new window or tab (so that your work is not lost.)");
		}else if(response.substring(0,2) == 'AU'){
			alert("The password you entered was wrong. Please check and retry.");
		}else if(response.substring(0,2) == 'MI'){
			alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your data on your computer before continuing, so it doesn't disappear...");
		}else{
			alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your piece on your computer before continuing, so it doesn't disappear...");
		}
		
	}, onFailure: function (transport) {
		alert("An error occurred, please notify neoeno if this occurs repeatedly.\\nAlso: Save your piece on your computer before continuing, so it doesn't disappear...");
	}});
}

function BLX0Shout() {
	new Effect.Opacity('BLX0DataContents', {duration:0.5, from:1.0, to:0.5, queue:'end', afterFinish: function () {
			new Ajax.Updater('BLX0DataContents', '/xshoutOut', {parameters: {shoutText: $('BLX0Area').value}, onSuccess: function() {
				eval("$('BLX0Area').value = '';characterLimitChange('BLX0Area','BLX0Characters',200)"); // Not a clue.
				new Effect.Opacity('BLX0DataContents', {duration:0.2, from:0.5, to:1, queue:'end'});
				
			} } );
		}});
}

function BLX58GoPage(start, until)
{
	$('BLX58Form').start.value = start;
	$('BLX58Form').until.value = until;
	$('BLX58Form').submit();
}