var searchFeatures;
var featureSelector;
var nextFeatureID = 0;

var searchOps = [">=", "=", "<="];

function Feature(name) {
    this.name = name;
    if (/^NNV /.test(name))
	this.displayName = name.substring(4);
    else if (/^mainspec-/.test(name))
	this.displayName = name.substring(9);
    else
	this.displayName = name;
    if (!searchFeatures)
	searchFeatures = new Array();
    searchFeatures[searchFeatures.length] = this;
}

Feature.prototype.setExtents = function(min, max) {
    this.isNumeric = true;
    this.min = min;
    this.max = max;
    this.scale = 1;
}

Feature.prototype.addValue = function(val) {
    if (!this.values)
	this.values = new Array(val);
    else 
	this.values[this.values.length] = val;
}

function createSelect() {
    if (!searchFeatures)
	return;
    var featuresSpan = document.getElementById("features");
    featureSelector = featuresSpan.insertRow(0);
    var dt = document.createElement("dt");
    dt.appendChild(document.createTextNode("Features"));
    var dd = document.createElement("dd");
    var select = document.createElement("select");
    select.id = "featureSelect";
    select.onchange = featureSelected;
    var opt = document.createElement("option");
    opt.selected = true;
    opt.appendChild(document.createTextNode("Select a feature"));
    select.appendChild(opt);
    for (var f = 0; f < searchFeatures.length; f++) {
	opt = document.createElement("option");
	opt.value = f;
	opt.appendChild(document.createTextNode(searchFeatures[f].displayName));
	select.appendChild(opt);
    }
    dd.appendChild(select);
    var td = featureSelector.insertCell(0);
    td.appendChild(dt);
    td.appendChild(dd);
}

function featureSelected(evt) {
    evt = evt || window.event;
    var allFeatures = document.getElementById("features");
    var select = evt.target || evt.srcElement;
    var f = searchFeatures[select.selectedIndex - 1];
    // make new row
    var newFeature = allFeatures.insertRow(allFeatures.rows.length - 1);
    newFeature.className = "feature";
    var dt = document.createElement("dt");
    var label = document.createElement("label");
    label.htmlFor = "feature-" + nextFeatureID;
    label.appendChild(document.createTextNode(f.displayName));
    dt.appendChild(label);
    var dd = document.createElement("dd");
    var attr = document.createElement("input");
    attr.type = "hidden";
    attr.name = "attr";
    attr.value = f.name;
    dd.appendChild(attr);
    var inputElem;
    if (f.isNumeric) {
	var opElem = document.createElement("select");
	opElem.name = "op";
	var opt;
	for (var op = 0; op < searchOps.length; op++) {
	    opt = document.createElement("option");
	    opt.value = searchOps[op];
	    opt.appendChild(document.createTextNode(searchOps[op]));
	    opElem.appendChild(opt);
	}
	dd.appendChild(opElem);
	dd.appendChild(document.createTextNode(" "));
	var value = document.createElement("input");
	value.name = "value";
	value.type = "hidden";
	value.scale = f.scale;
	dd.appendChild(value);
	inputElem = document.createElement("input");
	inputElem.type = "text";
	inputElem.name = f.displayName;
	inputElem.onkeypress = scaleInput;
	inputElem.scaledValue = value;
	inputElem.setAttribute("validation", "numeric|bok");
	inputElem.id = "feature-" + nextFeatureID;
	dd.appendChild(inputElem);
	var s;
	if (f.min != f.max) {
	    s = "&nbsp;(" + f.min + "&ndash;" + f.max;
	    if (f.unit)
		s += " " + f.unit;
	    s += ")";
	} else if (f.unit) {
	    s = "&nbsp;(" + f.unit + ")";
	}
	if (s) {
	    var span = document.createElement("span");
	    span.innerHTML = s;
	    dd.appendChild(span);
	}
    } else {
	var op = document.createElement("input");
	op.type = "hidden";
	op.name = "op";
	op.value = "=";
	dd.appendChild(op);
	inputElem = document.createElement("select");
	inputElem.name = "value";
	inputElem.id = "feature-" + nextFeatureID;
	var opt;
	for (var v = 0; v < f.values.length; v++) {
	    var value = f.values[v];
	    opt = document.createElement("option");
	    opt.appendChild(document.createTextNode(value));
	    opt.value = value;
	    inputElem.appendChild(opt);
	}
	dd.appendChild(inputElem);
    }
    var remove = document.createElement("input");
    remove.type = "button";
    remove.onclick = removeFeature;
    remove.value = "Remove";
    remove.className = "button";
    remove.featureBlock = newFeature;
    var td = newFeature.insertCell(0);
    td.appendChild(dt);
    td.appendChild(dd);
    td = newFeature.insertCell(1);
    td.appendChild(remove);
    select.options[0].selected = true;
    nextFeatureID++;
    inputElem.focus();
}

function removeFeature(evt) {
    evt = evt || window.event;
    var target = evt.target || evt.srcElement;
    var allFeatures = document.getElementById("features");
    for (var i = 0; i < allFeatures.rows.length; i++) {
	if (allFeatures.rows[i] == target.featureBlock) {
	    allFeatures.deleteRow(i);
	    break;
	}
    }
}

function scaleInput(evt) {
    evt = evt || window.event;
    var textElem = evt.target || evt.srcElement;
    var input = textElem.value;
    if (input == "") {
	textElem.scaledValue.value = "";
    } else {
	var i = parseInt(input);
	textElem.scaledValue.value = isNaN(i) ? "" : i * textElem.scaledValue.scale;
    }
}

