var menuPaneWidth = 160;
var somethingChanged = false;
var somethingChanged_code = '';
var somethingChanged_name = '';
var somethingChanged_language = '';
var somethingChanged_lifetime = '';
var displayCodeFontSize = 12;

function init()
{
	try
	{
		$('code').focus();
	}
	catch(ex){}
}

function loadHistory()
{
	var idBase36 = $F('idBase36');
	var historyId = $F('history');
	
	if(historyId == 'current')
	{
		window.location = '/' + idBase36;
	}
	else
	{
		window.location = '/' + idBase36 + '/history/' + historyId;
	}
}

function showHistoryOptions()
{
	$('showHistoryLink').style.display = 'none';
	$('historyInput').style.display = 'block';
}

function showAddTagOptions()
{
	$('showAddTagsLink').style.display = 'none';
	$('tagInput').style.display = 'block';
}

function addTags()
{
	var serialized = Form.serialize('form');
	
	$('indicator').style.display = 'inline';
	$('statusMessage').innerHTML = 'adding tags...';
	
	new Ajax.Request('codebin.addtag.php',
		{
			method: 'post',
			postBody: serialized + '&rnd=' + (new Date()).getMilliseconds(),
			onSuccess: addTags_completed,
			onFailure: addTags_failure
		}
	);
}

function addTags_failure(response)
{
	$('indicator').style.display = 'none';
	$('statusMessage').innerHTML = '';
	
	alert('I\'m sorry but I can\'t save your tags right now. Try again later!');
}

function addTags_completed(response)
{
	$('tags').value = '';
	$('tags').focus();
	$('indicator').style.display = 'none';
	$('statusMessage').innerHTML = '';
}

function removeHelp()
{
	$('code').style.backgroundImage = 'none';
}

function increaseFont(bigger)
{
	if(bigger)
		displayCodeFontSize++;
	else
		displayCodeFontSize--;
	
	$('displayCodePane').style.fontSize = displayCodeFontSize + 'px';
}

function addCode()
{
	var serialized = Form.serialize('form');
	
	$('indicator').style.display = 'inline';
	$('saveNew').disabled = true;
	$('code').disabled = true;
	$('statusMessage').innerHTML = 'saving code...';
	
	new Ajax.Request('codebin.addnew.php',
		{
			method: 'post',
			postBody: serialized + '&rnd=' + (new Date()).getMilliseconds(),
			onSuccess: addCode_completed,
			onFailure: addCode_failure
		}
	);
}

function addCode_failure(response)
{
	$('indicator').style.display = 'none';
	$('statusMessage').innerHTML = '';
	
	alert('I\'m sorry but I can\'t save your code right now. Try again later!');
}

function addCode_completed(response)
{
	window.location = '/' + response.responseText;
}

function saveEditedCode()
{
	var serialized = Form.serialize('form');
	
	$('indicator').style.display = 'block';
	$('statusMessage').innerHTML = 'saving edited code...';
	
	$('saveEdit').disabled = true;
	$('name').disabled = true;
	$('language').disabled = true;
	$('lifetime').disabled = true;
	$('updatedCode').disabled = true;
	
	new Ajax.Request('codebin.saveasedit.php',
		{
			method: 'post',
			postBody: serialized + '&rnd=' + (new Date()).getMilliseconds(),
			onSuccess: saveEditedCode_completed,
			onFailure: saveEditedCode_failure
		}
	);
}

function saveEditedCode_failure(response)
{
	$('indicator').style.display = 'none';
	$('statusMessage').innerHTML = '';
	alert(response);
}

function saveEditedCode_completed(response)
{
	if(response.responseText.indexOf('failure') == -1)
		window.location = window.location;
	else
		alert('The code could not be updated. Please try again.');
}

function enableEditing(state)
{
	if(state)
	{
		$('editCodePane').style.display = 'block';
		$('displayCodePane').style.display = 'none';
		$('optionsMenuPane').style.display = 'block';
		$('readOnlyOptionsMenuPane').style.display = 'none';
		$('editThisCodeLink').style.display = 'none';
		$('cancelEditLink').style.display = 'block';
		$('codeStatusMessage').innerHTML = 'EDITING CODE:';
		$('updatedCode').focus();
		$('history').style.display = 'none';
	}
	else
	{
		if(somethingChanged)
			if(confirm('Changes to code will be lost. Continue?'))
			{
				$('updatedCode').value = somethingChanged_code;
				$('name').value = somethingChanged_name;
				$('language').value = somethingChanged_language;
				$('lifetime').value = somethingChanged_lifetime;
			}
			else
			{
				return;
			}
		
		$('editCodePane').style.display = 'none';
		$('displayCodePane').style.display = 'block';
		$('optionsMenuPane').style.display = 'none';
		$('readOnlyOptionsMenuPane').style.display = 'block';
		$('editThisCodeLink').style.display = 'block';
		$('cancelEditLink').style.display = 'none';
		$('codeStatusMessage').innerHTML = 'SAVED CODE:';
		$('history').style.display = 'inline';
	}
}

function enableEmail(state)
{
	if(state)
	{
		$('emailCodeInput').style.display = 'block';
		$('emailThisCodeLink').style.display = 'none';
		$('cancelEmailLink').style.display = 'block';
		$('email').focus();
	}
	else
	{
		$('emailCodeInput').style.display = 'none';
		$('emailThisCodeLink').style.display = 'block';
		$('cancelEmailLink').style.display = 'none';
	}
}

function printCode()
{
	window.print();
}

function fieldFocused()
{
	if(!somethingChanged)
	{
		somethingChanged_code = $F('updatedCode');
		somethingChanged_name = $F('name');
		somethingChanged_language = $F('language');
		somethingChanged_lifetime = $F('lifetime');
	}
}

function fieldChanged()
{
	somethingChanged = true;
}

function createNewCode()
{
	if(somethingChanged)
		if(!confirm('Changes to code will be lost. Continue?'))
			return;
			
	window.location = '/';
}

function emailThisCode()
{
	$('emailThisCodeButton').style.display = 'none';
	$('emailThisCode').style.display = 'block';
}

function sendCodeViaEmail()
{
	var email = $F('email');
	var id = $F('id');
	var showLineNumbers = $('showLineNumbers').checked;
	
	if(email != '')
	{
		$('indicator').style.display = 'inline';
		$('sendEmail').disabled = true;
		$('email').disabled = true;
		$('showLineNumbers').disabled = true;
		
		$('statusMessage').innerHTML = 'sending email...';
		
		new Ajax.Request('codebin.sendcode.php',
			{
				method: 'post',
				postBody: 'email=' + email + '&id=' + id + '&showlinenumbers=' + (showLineNumbers ? 'yes' : 'no') + '&rnd=' + (new Date()).getMilliseconds(),
				onSuccess: sendCodeViaEmail_completed,
				onFailure: sendCodeViaEmail_failure
			}
		);
	}
	else
	{
		alert('Please enter an email address before sending.');
		$('email').focus();
	}
}

function sendCodeViaEmail_completed(response)
{
	$('indicator').style.display = 'none';
	$('sendEmail').disabled = false;
	$('showLineNumbers').disabled = false;
	$('email').disabled = false;
	$('email').focus();
	$('email').select();
	$('statusMessage').innerHTML = '';
	
	enableEmail(false);
}

function sendCodeViaEmail_failure(response)
{
	$('statusMessage').innerHTML = '';
	$('indicator').style.display = 'none';
	
	alert('I\'m sorry but I can\'t send email right now. Try again later!');
}