// checks the forms to see if any values of changes
function is_form_original() {
	var i, j, f, e;
	for (i = 0; i < document.forms.length; i++) {
		f = document.forms[i];
		for (j = 0; j < f.elements.length; j++) {
			e = f.elements[j];
			if (e.type == 'checkbox' || e.type == 'radio') {
				if (e.defaultChecked != e.checked) return false;
			} else if (e.type == 'file' || e.type == 'password') {
				if (e.value) return false;

			} else if (e.type == 'button' || e.type == 'submit'
					|| e.type == 'select'
					|| e.type == 'select-one'
					|| e.type == 'select-multiple'
					|| e.type == 'hidden') {
				/* ignore these... */
				continue;
			} else {
				if (e.value != e.defaultValue) return false;
			}
		}
	}
	return true;
}



// javascript hacks to make a more pleseant result-set
// complete with keybindings and autoscrolling
//
function __get_x_pos(x) {
	if (x == null) {
		if (window.pageYOffset || window.pageXOffset)
			return window.pageXOffset;
		else if (document.documentElement != null)
			return document.documentElement.scrollLeft;
		else if (document.body != null)
			return document.body.scrollLeft;
		else
			return window.pageXOffset;
	} else {
		var y = x.offsetLeft;
		for (x = x.offsetParent; x;) {
			y = y + x.offsetLeft;
			x = x.offsetParent;
		}
		return y;
	}
}
function __get_y_size(x) {
	if (x != null) {
		return x.offsetHeight;
	}
	if (window.innerHeight)
		return window.innerHeight;
	if (document.documentElement != null)
		return document.documentElement.clientHeight;
	if (document.body != null)
		return document.body.clientHeight;
	if (window.height)
		return window.height;
	return 100;
}
function __get_y_pos(x) {
	if (x == null) {
		if (window.pageYOffset || window.pageXOffset)
			return window.pageYOffset;
		else if (document.documentElement != null)
			return document.documentElement.scrollTop;
		else if (document.body != null)
			return document.body.scrollTop;
		else
			return window.pageYOffset;
	} else {
		var y = x.offsetTop;
		for (x = x.offsetParent; x;) {
			y = y + x.offsetTop;
			x = x.offsetParent;
		}
		return y;
	}
}

function view_scroll_to_focused() {
	var s = window.top.__entry_focus;
	if (!s) return;

	var page_x = __get_x_pos(null);
	var height = __get_y_size(null);

	var p = document.getElementById('entry@' + s);
	var y = __get_y_pos(p);
	y = y + (p.offsetHeight / 2);

	y = y - (height / 2);
	if (y < 0) y = 0;

	window.scrollTo(page_x, y);
}
function view_focus_first_visible() {
	var page_y = __get_y_pos(null);

	var s = window.top.__entry_focus;
	if (!s) s = window.top.__entry_first;
	if (!s) return false;

	var p = document.getElementById(s);
	var y = __get_y_pos(p);

	var height = __get_y_size(null);

	if (!(y < (page_y + 10) || y > page_y + (height - 10)))
		return false;

	var j = s.indexOf(",");
	if (j > -1) {
		var x = s.substr(0, j);
		var n;
		for (n = 0;; n++) {
			s = x + "," + n;
			if (s == window.top.__entry_last) break;

			p = document.getElementById(s);
			y = __get_y_pos(p);

			if (y >= page_y + 10) {
				view_entry_focus(s);
				return true;
			}
		}
	}
	return true;
}
function view_key_down() {
	if (window.top.__entry_focus) {
		var s = window.top.__entry_focus;
		if (s == window.top.__entry_last) return;

		var j = s.indexOf(",");
		if (j > -1) {
			var n = parseInt(s.substr(j+1));
			n++;
			s = s.substr(0, j) + "," + n;
			view_entry_focus(s);
		} else {
			view_entry_focus(window.top.__entry_last);
		}
	} else {
		/* no entry; select first one by default */
		view_entry_focus(window.top.__entry_first);
	}
}

function view_key_up() {
	if (window.top.__entry_focus) {
		var s = window.top.__entry_focus;
		var j = s.indexOf(",");
		if (j > -1) {
			var n = parseInt(s.substr(j+1));
			n--;
			if (n < 0) {
				s = window.top.__entry_first;
			} else {
				s = s.substr(0, j) + "," + n;
			}
			view_entry_focus(s);
		}
	} else {
		view_entry_focus(window.top.__entry_first);
	}
}

function view_entry_focus(x) {
	if (window.top.__entry_focus)
		view_entry_unfocus(window.top.__entry_focus);

	var p = document.getElementById(x);
	var q = document.getElementById("entry@" + x);
	if (p && q) {
		if (p.checked)
			q.className = 'contententry_selected_focused';
		else
			q.className = 'contententry_focused';
		window.top.__entry_focus = x;
	}
}
function view_entry_unfocus(x) {
	var q = document.getElementById("entry@" + x);
	var p = document.getElementById(x);
	if (p && q) {
		if (p.checked)
			q.className = 'contententry_selected';
		else
			q.className = 'contententry';
	}
	window.top.__entry_focus = null;
}

function view_entry_toggle(x) {
	var p = document.getElementById(x);
	if (p.checked) {
		view_entry_deselect(x);
	} else {
		view_entry_select(x);
	}
}

function view_entry_select(x) {
	var p = document.getElementById(x);
	var q = document.getElementById("entry@" + x);
	p.checked = true;
	if (window.top.__entry_focus == x)
		q.className = 'contententry_selected_focused';
	else
		q.className = 'contententry_selected';
}
function view_entry_deselect(x) {
	var p = document.getElementById(x);
	var q = document.getElementById("entry@" + x);
	p.checked = false;
	if (window.top.__entry_focus && window.top.__entry_focus == x)
		q.className = 'contententry_focused';
	else
		q.className = 'contententry';
}
function view_entry_add(x) {
	var p = document.getElementById(x);
	var q = document.getElementById("entry@" + x);
	if (!q) return false;
	q.onclick = function(e) {
		if (!e) e = event;
		if (p.checked) {
			view_entry_deselect(x);
		} else {
			view_entry_select(x);
		}
		view_entry_focus(x);
		if (p.type == 'radio') {
			p.form.submit();
		}
		if (e && e.ctrlKey) return false;
		return true;
	}
	p.onclick = function(e) {
		/* this seems retarded... */
		if (!e) e = event;
		window.setTimeout(q.onclick, 1);
		if (e && e.ctrlKey) return false;
		return true;
	};
	if (p.checked) {
		view_entry_select(x);
	} else {
		view_entry_deselect(x);
	}
	view_entry_unfocus(x);
	if (! window.top.__entry_first) window.top.__entry_first = x;
	window.top.__entry_last = x;
	return true;
}

function view_handle_keydown(e) {
	if (window.top.__view_disabled) {
		return true; /* pass it back normally */
	}

	if (!e) e = event;
	if (e) {
		var k = (e.charCode ? e.charCode :
			((e.keyCode ? e.keyCode : e.which)));

		k = k + "";

		if (k == "33" || k == "34" || k == "35" || k == "36") {
			/* this is ugly */
			window.setTimeout(view_focus_first_visible, 1);
			return true;
		}

		/* order is important here */
		if (e.shiftKey || e.metaKey1Down) k = "s" + k;
		if (e.ctrlKey || e.metaKey2Down) k = "c" + k;
		if (e.altKey || e.metaKey3Down) k = "a" + k;
		if (e.metaKey4Down) k = "m" + k;

		if (k == "40" || k == "c40") {
			view_key_down();
			view_scroll_to_focused();
		} else if (k == "38" || k == "c38") {
			view_key_up();
			view_scroll_to_focused();
		} else if (k == "32" || k == "c32") {
			if (window.top.__entry_focus) {
				view_entry_toggle(window.top.__entry_focus);
				view_key_down();
				view_scroll_to_focused();
			}
		} else if (k == "8") {
			if (window.top.__entry_focus) {
				view_key_up();
				view_entry_deselect(window.top.__entry_focus);
				view_scroll_to_focused();
			}
		} else {
			if (window.top.__hotkeytable[k]) {
				var c = window.top.__hotkeytable[k];
				if (c == null) return true;
				document.forms[0].elements['sv:' + c].value
						= 'hotkey-selected';
				document.forms[0].submit();
				/* fall through */
			} else {
				return true;
			}
		}
		window.top.cancel_onkeypress = true;
		if (e.preventDefault) {
			e.preventDefault();
		}
		return false;
	}
}
function view_handle_keypress(e) {
	if (window.top.cancel_onkeypress) {
		window.top.cancel_onkeypress = false;
		return false;
	}
	return true;
}
function view_set_hotkey(s, c) {
	if (window.top.__hotkeytable == null)
		eval("window.top.__hotkeytable = [];");
	window.top.__hotkeytable[s] = c;
}
function view_enable() {
	window.top.__view_disabled = false;
	document.onkeypress = view_handle_keypress;
	document.onkeydown = view_handle_keydown;
}
function view_disable() {
	window.top.__view_disabled = true;
	document.onkeypress = window.top.__saved_onkeypress;
	document.onkeydown = window.top.__saved_onkeydown;
}
function view_init() {
	var i, j;
	for (i = 0; i < window.document.forms.length; i++) {
		var f = window.document.forms[i];
		for (j = 0; j < f.elements.length; j++) {
			var o = f.elements[j];
			var otype = o.type;
			var ocl = o.className;
			if ((otype == 'radio' || otype == 'checkbox' || otype == 'hidden')
			&& (ocl == 'sradio' || ocl == 'scheckbox')) {
				/* result box */
				if (view_entry_add(o.id)) {
					o.onfocus = view_enable;
				} else {
					o.onfocus = view_disable;
					o.onblur = view_enable;
				}
			} else {
				o.onfocus = view_disable;
				o.onblur = view_enable;
			}
		}
	}

	eval("window.top.__hotkeytable = [];");

	window.top.__saved_onkeypress = document.onkeypress;
	window.top.__saved_onkeydown = document.onkeydown;

	if (window.top.__entry_first) {
		document.onfocus = view_enable;
		view_enable();
	}
}
