advanced = null;

function expand(id) {
	f = document.getElementById("info"+id);
	attr = (document.all ? "className": "class" );
	h = "detailedHidden";
	v = "detailed";
	f.setAttribute(attr, f.getAttribute(attr) == h ? v: h)
}

function expandAdvanced() {
	f = document.getElementById("advanced");
	attr = (document.all ? "className": "class" );
	h = "detailedHidden";
	v = "detailed";
	f.setAttribute(attr, f.getAttribute(attr) == h ? v: h)
	
}

function query_pair_toString() {
	return escape(this.key) + "=" + escape(this.value);
} 

function query_set(key,value) {
	if(!value) {
		np = new Array();
		while( this.pairs.length ) {
			p = this.pairs.pop();
			if(p.key == key) continue;
			np.push(p);
		}
		this.pairs = np;
		return;
	}
	for(i = 0; i < this.pairs.length; ++i) 
		if(this.pairs[i].key == key) {
			this.pairs[i].value = value;
			return;
		}
	p = new Object();
	p.key = key;
	p.value = value;
	p.toString = query_pair_toString;
	this.pairs.push(p);
}

function query_execute() {
	document.location = q.d + "?" +  this.pairs.join("&");
}

function getQuery() {
	q = new Object();
	q.set = query_set;
	q.execute = query_execute;
	q.pairs = new Array()
	a = new String( document.location ).split("?",2);
	q.d = a[0];
	if(a.length == 2) {
		a = a[1].split("&");
		for(i = 0; i < a.length; ++i) {
			b = a[i].split("=",2);
			if(b.length < 2) continue;
			q.set(unescape(b[0]),unescape(b[1]));
		}
	}
	
	f = document.getElementById("advanced");
	attr = (document.all ? "className": "class" );
	q.set("advanced",f.getAttribute(attr) == "detailed"?"true":"");

	return q;
}

function handleSizeSelect(sel) {
	q = getQuery();
	q.set("size", sel.value );
	q.execute();
}

function check_props(q,form,name,hasType) {
	if(hasType && ! form.elements[name+"_type"]) {
		alert("Page error missing element "+name+"_type");
		return false;
	}
	if(! form.elements[name+"_value"]) {
		alert("Page error missing element "+name+"_value");
		return false;
	}
	return true;
}

function handleStringProp(q,form,name) {	
	if(!check_props(q,form,name,true)) return false;
	type = form.elements[name+"_type"].value;
	value = form.elements[name+"_value"].value;
	if(value == "") 
		q.set(name+"_type","");
	else 
		q.set(name+"_type",type);
	q.set(name+"_value",value);
	return true;
}

function handleMapEnumProp(q,form,name) {
	if(!check_props(q,form,name,false)) return false;
	value = form.elements[name+"_value"].value;
	q.set(name+"_value",value);
	return true;
}

function handleIntProp(q,form,name) {
	if(!check_props(q,form,name,true)) return false;
	type = form.elements[name+"_type"].value;
	value = form.elements[name+"_value"].value;
	if(value == "") {
		q.set(name+"_type","");
		q.set(name+"_value","");
	} else {
		if(type=="range") {
			a = value.split(":");
			if(a.length != 2) {
				alert("A range of "+name+" must be on the form 'number:number'");
				return false;
			}
			a[0] = parseFloat(a[0]);
			a[1] = parseFloat(a[1]);
			if(isNaN(a[0]) || isNaN(a[1])) {
				alert("A range of "+name+" must be on the form 'number:number'");
				return false;
			}
			value = a[0] + ":" + a[1];
		} else {
			value = parseFloat(value);
			if(isNaN(value)) {
				alert("The value of "+name+" must be a number");
				return false;
			}
		}
		q.set(name+"_type",type);
		q.set(name+"_value",value);
	}
	return true;
}

function handleOrder(order) {
	q = getQuery();
	q.set("order",order);
	q.execute();
}