function serialize(f) {
var o = {};
var s = f.getElementsByTagName("select");
for (var i = 0; i < s.length; i++) {
var si = s[i];
var n = si.name;
if (!si.multiple) {
o[n] = si.value;
continue;
}
o[n] = [];
var ops = si.options;
for (var j = 0; j < ops.length; j++) {
var oj = ops[j];
if (oj.selected) {
o[n].push(oj.value || oj.text);
}
}
}
var r = f.querySelectorAll("input");
for (var i = 0; i < r.length; i++) {
var ri = r[i];
var n = ri.name;
if (!(n in o)) {
if (ri.type === "checkbox") {
o[n] = [];
} else {
o[n] = "";
}
}
switch (ri.type) {
case "radio":
if (o[n]) {
continue;
}
if (ri.checked) {
o[n] = ri.value || "on";
}
break;
case "checkbox":
if (ri.checked) {
o[n].push(ri.value || "on");
}
break;
default:
o[n] = ri.value;
break;
}
}
return o;
}