var selector_cache = {};

function append_querystring(l,q) {
	return l+(l.indexOf('?')!=-1?'&':'?')+q;
}

function selector_show(node, input_id, caption) {
	selector_close();
	var body = document.getElementsByTagName('body')[0];
	var div = create_child(body, 'div');
	
	var uri = append_querystring(node.href,'noheader=true');

	var pos = AbsolutePosition(node);
	div.style.left = pos.x + 'px';
	div.style.top = pos.y + 'px';
	div.className = 'selector';
	var table = create_child(div, 'table');
	var thead = create_child(table, 'thead');
	var tbody = create_child(table, 'tbody');
	var tr = create_child(thead, 'tr');
	var th = create_child(tr, 'th');
	th.innerHTML = caption ? caption : 'Selector';
	var td = create_child(tr, 'td');
	var a = create_child(td, 'a');
	a.onclick = function() { return selector_close(this); };
	a.className = 'close';
	a.href = '#';
	a.innerHTML = '&times;';
	var tr = create_child(tbody, 'tr');
	var td = create_child(tr, 'td');
	td.colspan = '2';
	td.innerHTML = 'Loading...';

	HTTPGet(uri, selector_receive, td);

	selector_cache = { div: div, td: td,node: node, uri: uri, input: input_id, caption: caption };
	return false;
}

function selector_receive(html, http, td) {
	td.innerHTML = html;
	var spans = td.getElementsByTagName('span');
	for (var j in spans)
		if (j && spans[j] && hasClass(spans[j], 'cancel'))
			spans[j].innerHTML = '<button class="button" onclick="return selector_close();">Cancel</button>';
}

function selector_use(id) {
	var node;
	if (id)
		node = grab(id);
	else {
		var s = selector_cache.div.getElementsByTagName('select');
		if (s && s[0])
			node = s[0];
		else
			return false;
	}
	var index = node.selectedIndex;
	if (index < 0) {
		var item = selector_cache.caption;
		alert('Please make a selection first.');
		return false;
	}
	var option = node.options[node.selectedIndex];
	var id = option.value;
	var text = option.text;
	selector_result(text, id);
	return false;
}

function selector_update(uri) {
	uri = uri.href || uri || '';
	var td = selector_cache['td'];
	uri = uri + '&noheader=true';
	if (td && td.tagName.toLowerCase() == 'td')
		HTTPGet(uri, HTTPinto, td);
	else
		alert(td);
}

function selector_result(text, id) {
	var sinput = selector_cache['input'];
	var nInput = grab(sinput);
	nInput.value = text;
	var idinput = grab(sinput + 'ID');
	if (idinput) idinput.value = id;
	if (window.selector_notify) selector_notify(text, id, nInput);
	selector_close();
}

function selector_close() {
	removeNode(selector_cache['div']);
	return false;
}