Behaviour.register({
	'a.grid-link' : function() { element.onclick = grid_request; }
});

function grid_reg_anchors(element) {
	var anchors = element.getElementsByTagName("a");
	for (var i = 0; i < anchors.length; i++)
		anchors[i].onclick = grid_request;
}
function grid_request(e) {
	var url = this.href;
	var data = this.getAttribute("link-data");
	if (data != null) {
		data = data.split(",");
		if ("cols" == data[0]) {
			url += "&cols="+grid_cols_value(data[1]);
		}
	}
	var ar = new AjaxRequest(url);
	ar.setEchoDebugInfo();
	ar.setAsync(false);
	ar.sendRequest();
	e.cancelBubble = true;
	return false;
}
function grid_cols_value(grid) {
	var src = document.getElementById(grid+"_cols_sel");
	var val = "";
	for (var i =0; i < src.options.length; i++)
		val += (val ? "," : "")+src.options[i].value;
	return val;
}

function grid_cols_up(grid) { grid_cols_moveUD(grid+"_cols_sel", true); }
function grid_cols_down(grid) { grid_cols_moveUD(grid+"_cols_sel", false); }
function grid_cols_moveUD(sel, up) {
	sel = document.getElementById(sel);
	var total = sel.options.length;
	var curr = sel.selectedIndex;
	if (curr == -1) return;
	if (up && curr == 0) return;
	if (!up && curr == total-1) return;
	var sw = sel.options[up ? curr-1 : curr+1];
	curr = sel.options[curr];
	var swt = sw.firstChild;
	var swv = sw.value;
	sw.appendChild(curr.firstChild);
	curr.appendChild(swt);
	sw.value = curr.value;
	curr.value = swv;
	curr.selected = false;
	sw.selected = true;
}

function grid_cols_add(grid) { grid_cols_moveLR(grid+"_cols_all", grid+"_cols_sel"); }
function grid_cols_remove(grid) { grid_cols_moveLR(grid+"_cols_sel", grid+"_cols_all"); }
function grid_cols_moveLR(from, to) {
	var ret = false;
	var from = document.getElementById(from);
	var to = document.getElementById(to);
	for (var i = 0; i < from.options.length; i++) {
		var opt = from.options[i];
		if (opt.selected) {
			opt.selected=false;
			to.appendChild(opt);
			i--;
			ret = true;
		}
	}
	return ret;
}

function wx_getParentByTagName(element, tag) {
	while (element && element.nodeName.toLowerCase() != tag) {
		element = element.parentNode;
	}
	return element;
}
