/*
 * Number base conversion user interface
 * (C) Copyright by Rafael Vuijk (aka Dark Fader)
 */

function OnQuickSelect(event,inout)
{
	var quickSelect = document.getElementById(inout+'QuickSelect');
	var value = quickSelect.options[quickSelect.selectedIndex].value;
	var split = value.split(',');

	var charsSelect = document.getElementById(inout+'CharsSelect');
	charsSelect.selectedIndex = split[0];

	var baseField = document.getElementById(inout+'BaseField');
	baseField.value = split[1];

	if (document.getElementById('immediate').checked) ConvertTheStuff((inout == 'Blaat0') ? 'Blaat1' : 'Blaat0');
}

// Match quick select with other settings
function UpdateQuickSelect(inout)
{
	var charsSelect = document.getElementById(inout+'CharsSelect');
	var baseField = document.getElementById(inout+'BaseField');
	var value = charsSelect.selectedIndex + ',' + baseField.value;

	var quickSelect = document.getElementById(inout+'QuickSelect');
	for (var i=0; i<quickSelect.options.length; i++)
	{
		if (quickSelect.options[i].value == value)
		{
			quickSelect.selectedIndex = i;
			return;
		}
	}

	quickSelect.selectedIndex = 0;
	if (document.getElementById('immediate').checked) ConvertTheStuff((inout == 'Blaat0') ? 'Blaat1' : 'Blaat0');
}

function OnCharsSelect(event,inout,clicked)
{
	if (clicked)
	{
		// change custom character set
		var charsSelect = document.getElementById(inout+'CharsSelect');
		var i = charsSelect.selectedIndex;
		if (charsSelect.options[i].innerText == "custom")
		{
			var newset = prompt("You can change the custom character set here", charsSelect.options[i].value);
			if (newset != null) charsSelect.options[i].value = newset;
		}
	}

	UpdateQuickSelect(inout);
	if (document.getElementById('immediate').checked) ConvertTheStuff((inout == 'Blaat0') ? 'Blaat1' : 'Blaat0');
}

function OnBaseChanged(event,inout)
{
	UpdateQuickSelect(inout);
	if (document.getElementById('immediate').checked || ((event.type == "keyup") && (event.keyCode == 13)))
	{
		ConvertTheStuff((inout == 'Blaat0') ? 'Blaat1' : 'Blaat0');
	}
}

function OnNumberChanged(event,inout)
{
	if (document.getElementById('immediate').checked || ((event.type == "keyup") && (event.keyCode == 13)))
	{
		ConvertTheStuff(inout);
	}
}

function OnCustomCharsChanged(event)
{
	for (var i=0; i<2; i++)
	{
		// need to convert where custom character set is used
		if (document.getElementById('Blaat'+i+'CharsSelect').value != "custom")
		{
			if (document.getElementById('immediate').checked) ConvertTheStuff('Blaat' + i);
			break;
		}
	}

	UpdateCustomCharsLength();
}

function UpdateCustomCharsLength()
{
	// show number of custom characters
	document.getElementById('CustomCharsLength').value = document.getElementById('CustomChars').value.length;
}

var BlaatCharsSelect_prev_selectedIndex = new Array();
var BlaatNumberField_prev_value = new Array();
var BlaatBaseField_prev_value = new Array();
var padding_prev_value = false;

// Custom change detection
/*function CheckChanges()
{
	var changed = false;
	for (var i=0; i<2; i++)
	{
		changed |=
			(BlaatCharsSelect_prev_selectedIndex[i] != document.getElementById('Blaat'+i+'CharsSelect').selectedIndex) ||
			(BlaatBaseField_prev_value[i] != document.getElementById('Blaat'+i+'BaseField').value) ||
			(BlaatNumberField_prev_value[i] != document.getElementById('Blaat'+i+'NumberField').value);
	}
	changed |= (padding_prev_value != padding.checked);
	return changed;
}*/

/*function UpdateChanges()
{
	// backup changed values
	for (var i=0; i<2; i++)
	{
		BlaatCharsSelect_prev_selectedIndex[i] = document.getElementById('Blaat'+i+'CharsSelect').selectedIndex;
		BlaatBaseField_prev_value[i] = document.getElementById('Blaat'+i+'BaseField').value;
		BlaatNumberField_prev_value[i] = document.getElementById('Blaat'+i+'NumberField').value;
	}
	padding_prev_value = padding.checked;
}*/

function ConvertTheStuff(inout)	//,force)
{
	//if (CheckChanges() || force)
	{
		var outin = (inout == 'Blaat1') ? 'Blaat0' : 'Blaat1';
		var Blaat0Base = document.getElementById(inout+'BaseField').value;
		var Blaat1Base = document.getElementById(outin+'BaseField').value;
		var Blaat0Chars = CheckASCII(document.getElementById(inout+'CharsSelect').options[document.getElementById(inout+'CharsSelect').selectedIndex]);
		var Blaat1Chars = CheckASCII(document.getElementById(outin+'CharsSelect').options[document.getElementById(outin+'CharsSelect').selectedIndex]);
		var _Blaat0NumberField = document.getElementById(inout+'NumberField');
		var _Blaat1NumberField = document.getElementById(outin+'NumberField');

		var result = BaseConvert(_Blaat0NumberField.value, Blaat0Base, Blaat1Base, Blaat0Chars, Blaat1Chars);
		if (result == null)
		{
			_Blaat0NumberField.className = "field_error";
			_Blaat1NumberField.className = "field_error";
		}
		else
		{
			_Blaat0NumberField.className = "field";
			_Blaat1NumberField.className = "field";
			_Blaat1NumberField.value = result;
		}

		//UpdateChanges();
	}
}

// Copy character set to custom characters
function BlaatCopyCustom(inout)
{
	document.getElementById('CustomChars').value = CheckASCII(document.getElementById(inout+'CharsSelect').options[document.getElementById(inout+'CharsSelect').selectedIndex]);
	UpdateCustomCharsLength();
}

// Generate ASCII characters or use character literally
function CheckASCII(option)
{
	if (option.value == "*")
	{
		var s = "_";
		for (var i=1; i<256; i++) s += String.fromCharCode(i);
		return s;
	}
	else if (option.value == "custom")
	{
		return document.getElementById('CustomChars').value;
	}
	else if (option.value == "rot13")
	{
		var s = "_";
		for (var i=1; i<65; i++) s += String.fromCharCode(i);
		for (var i=0; i<26; i++) s += String.fromCharCode((i+13)%26 + 65);
		for (var i=91; i<97; i++) s += String.fromCharCode(i);
		for (var i=0; i<26; i++) s += String.fromCharCode((i+13)%26 + 97);
		for (var i=123; i<256; i++) s += String.fromCharCode(i);
		return s;
	}
	return option.value;
}

function DuplicateBlaat(what,n)
{
	var s = document.getElementById(what).innerHTML;
	while (s.indexOf("Blaat0") >= 0) s = s.replace("Blaat0","Blaat"+n);
	document.write(s);
}

function InitBaseUI()
{
	OnQuickSelect(null,'Blaat0');
	OnQuickSelect(null,'Blaat1');
	//UpdateChanges();
}
