var columns = 0;
var layout_order = new Object();
var column_order = new Object();
window.onload = initColumns;
function initColumns()
	{
	columns = Math.floor(1*document.forms[0].columns.value);
	for (var i = 1; i <= columns; i++)
		{
		var the_column = document.forms[0]['order_'+i].value;
		layout_order['order_'+i] = the_column;
		column_order['column_'+the_column] = i;
		}
	}
var timer_id = '';
var update_field = '';
function changeOrder(what)
	{
	if (timer_id != '')
		{
		window.clearTimeout(timer_id);
		}
	update_field = what;
	timer_id = window.setTimeout('shuffleOrder()',750);
	}
function shuffleOrder()
	{
	var what = update_field;
	var changed_column = what.value;
	var new_order = what.name;
	
	var old_order = column_order['column_'+changed_column];
	var supplanted_column = layout_order[new_order];
	if (!old_order)
		{
		what.value = supplanted_column;
		alert('Not a valid column number\n\nReverting to previous ordering');
		return;
		}
	layout_order[new_order] = changed_column;
	layout_order['order_'+old_order] = supplanted_column;
	column_order['column_'+supplanted_column] = old_order;
	var split_new_order = new_order.split('_');
	column_order['column_'+changed_column] = split_new_order[1];
	document.forms[0]['order_'+old_order].value = supplanted_column;
	if (document.forms[0].longest)
		{
		if (document.forms[0].longest[old_order-1].checked)
			{
			document.forms[0].longest[split_new_order[1]-1].checked = true;
			}
		}
	}
function updateOrder(xtra)
	{
	if (!xtra) { xtra = ''; }
	var order = '';
	var the_width = '';
	for (var i = 1; i <= columns; i++)
		{
		if (order != '')
			{
			order += '-';
			the_width += '-';
			}
		order += document.forms[0]['order_'+i].value;
		the_width += document.forms[0]['width_'+i].value;
		}
	var snap = '';
	if (document.forms[0].snap && document.forms[0].snap.checked == true)
		{
		snap = '&snap=1';
		}
	var unit = '';
	if (document.forms[0].unit && document.forms[0].unit.selectedIndex != 0)
		{
		unit = '&unit='+document.forms[0].unit[document.forms[0].unit.selectedIndex].value;
		}
	var controls = '';
	if (document.forms[0].controls.checked != true)
		{
		controls = '&controls=0';
		}
	var notes = '';
	if ((document.forms[0].notes) && (document.forms[0].notes.checked != true))
		{
		notes = '&notes=0';
		}
	var equal_height = '';
	if (document.forms[0].equal_height && document.forms[0].equal_height.checked == true)
		{
		equal_height = '&equal_height=1';
		}
	var css = '';
	if (document.forms[0].css && document.forms[0].css.checked != true)
		{
		css = '&css=0';
		}
	var images = '';
	if (document.forms[0].images && document.forms[0].images.checked == true)
		{
		images = '&images=1';
		}
	var firefox_fix = '';
	if (document.forms[0].firefox_fix && document.forms[0].firefox_fix.checked == true)
		{
		firefox_fix = '&firefox_fix=1';
		}
	var op8_fix = '';
	if (document.forms[0].op8_fix && document.forms[0].op8_fix.checked == true)
		{
		op8_fix = '&op8_fix=1';
		}
	var rtl = '';
	if (document.forms[0].rtl && document.forms[0].rtl.checked == true)
		{
		rtl = '&rtl=1';
		}
	var longest = '';
	if (document.forms[0].longest)
		{
		longest = 1;
		for (var i = 0; i < document.forms[0].longest.length; i++)
			{
			if (document.forms[0].longest[i].checked)
				{
				longest = document.forms[0]['order_'+document.forms[0].longest[i].value].value;
				break;
				}
			}
		longest = '&longest='+longest;
		}
	order = 'order='+order;
	the_width = '&width='+the_width;
	var query_string = '?'+order+the_width+unit+equal_height+snap+xtra+rtl+controls+notes+css+images+op8_fix+firefox_fix+longest;
	var url_parts = document.location.href.split('?');
	the_url = url_parts[0];
	var datey = new Date();
	datey = datey.valueOf();
	document.location.href = the_url+query_string+'&time='+datey;
	}
function addColumn()
	{
	var unit = getUnit();
	var new_width = unit ? promptValue(unit, 'new') : 1;
	updateOrder('&add='+new_width);
	}
function subtractColumn()
	{
	updateOrder('&subtract=1');
	}
function resetWidths(unit)
	{
	var overspill = new Array();
	var default_width = 0;
	var width_one = '';
	if (unit != '')
		{
		default_width = promptValue(unit);
		}
	else
		{
		
		default_width = Math.floor(100/columns);
		width_one = 100 - (default_width * (columns));
		while (width_one)
			{
			//alert('width_one - '+width_one);
			overspill.push(1);
			width_one--;
			}
		}
	for (var i = 1; i <= columns; i++)
		{
		var set_width = default_width + (overspill[i-1] ? 1 : '');
		//var set_width = ((i == 1) && width_one) ? width_one : default_width;
		document.forms[0]['width_'+column_order['column_'+i]].value = set_width;
		}
	setOverallWidth();
	}
function promptValue(unit, which)
	{
	var prompt_value = '';
	if (!which) { which = 'default'; }
	if (unit == 'em')
		{
		prompt_value = 10;
		}
	else if (unit == 'px')
		{
		prompt_value = 160;
		}
	if (prompt_value != '')
		{
		prompt_value = prompt('Enter a value for the '+which+' column width in '+(unit == 'em' ? 'ems' : 'pixels'), prompt_value); 
		}
	if ((prompt_value != prompt_value * 1) || (prompt_value == ''))
		{
		prompt_value = promptValue(unit, which);
		}
	return prompt_value;
	}
function setOverallWidth()
	{
	var total_width = 0;
	for (var i = 1; i <= columns; i++)
		{
		total_width += Math.floor(document.forms[0]['width_'+column_order['column_'+i]].value);
		}
	var unit = getUnit();
	var warning = '';
	if (!unit)
		{
		unit = '%';
		if (total_width == 100)
			{
			warning = '<span>If column wrapping occurs,</span> try reducing total width to 99%';
			}
		else if (total_width > 100)
			{
			warning = '<span>Total width is greater</span> than 100% - weird wrapping will probably occur';
			}
		}
	document.getElementById('overall_width').innerHTML = total_width+unit;
	document.getElementById('width_warning').innerHTML = warning;
	}
function getUnit()
	{
	return document.forms[0].unit[document.forms[0].unit.selectedIndex].value;
	}
function changeWidth(what)
	{
	if (timer_id != '')
		{
		window.clearTimeout(timer_id);
		}
	update_field = what;
	timer_id = window.setTimeout('calculateWidth()',1000);
	}
function calculateWidth()
	{
	var what = update_field;
	if ((what.value != what.value * 1) || (what.value == ''))
		{
		what.value = prompt("That's not a proper number! Please enter a valid width");
		calculateWidth(what);
		}
	setOverallWidth();
	}
function changeShowSettings()
	{
	var new_setting = document.forms[0].display_non_layout.checked ? false : true;
	document.forms[0].controls.disabled=new_setting;
	document.forms[0].notes.disabled=new_setting;
	document.forms[0].css.disabled=new_setting;
	}
function changeColumnPadding()
	{
	}
// this is all so lame, but I'm so tired, it works and I can't be bothered to refactor it
function changeEqualHeight()
	{
	var equalheight = document.forms[0].equal_height.checked ? false : true;
	if (!equalheight) { return; }
	if (document.forms[0].op8_fix.checked)
		{
		document.forms[0].op8_fix.checked = false;
		}
	if (document.forms[0].firefox_fix.checked)
		{
		document.forms[0].firefox_fix.checked = false;
		}
	}
function changeSnap()
	{
	var snap = document.forms[0].snap.checked ? false : true;
	if (!snap) { return; }
	if (document.forms[0].firefox_fix.checked)
		{
		document.forms[0].firefox_fix.checked = false;
		}
	}
function changeFirefox()
	{
	document.forms[0].equal_height.checked = true;
	document.forms[0].snap.checked = true;
	}
function changeOp8()
	{
	document.forms[0].equal_height.checked = true;
	}

