function evalForm(oForm, returnAllErrors) {
	var i, vOn, msg, errCnt=0
	for(i=0;i<oForm.elements.length;i++) {
		vOn=oForm.elements[i].getAttribute("validation")
		if(vOn=="on") {
			if(!evalField(oForm.elements[i])) {
				msg=oForm.elements[i].getAttribute("message")
				alert(msg)
				if(returnAllErrors=="on") {
					errCnt++
				}
				else {
					oForm.elements[i].focus()
					return false
				}
			}
		}
	}
	if(errCnt) {
		return false
	}
	else {
		return true
	}
}

function evalField(oField) {
	var type, value=oField.value, checked=oField.checked

	switch (String(oField.tagName)) {
	case "INPUT":
		type=String(oField.type)
		break
	case "TEXTAREA":
		type="textarea"
		break
	case "SELECT":
		type="select"
		break
	}

	switch(type) {
	case "text":
		var rule=String(oField.getAttribute("rule"))
		var advRule=String(oField.getAttribute("advRule"))
		switch(rule) {
		case "obligatory":
			return(value!="" && evalString(value,advRule))
			break
		case "integer":
			return(evalString(value,"/^\\d+$/") && evalNumber(value,advRule))
			break
		case "floatingpoint":
			return(evalString(value,"/^\\d+[\\,\\.]?\\d?$/") && evalNumber(value,advRule))
			break
		case "email":
			return(evalString(value,"/^(?:[a-zæøåA-ZÆØÅ0-9_\\.\\-])+\@(?:(?:[a-zæøåA-ZÆØÅ0-9\\-])+\\.)+(?:[a-zA-Z0-9]{2,6}){1}$/"))
			break
		}
		break
	case "textarea": 
		var advRule=String(oField.getAttribute("advRule"))
		return(value!="" && evalString(value,advRule))
		break
	case "checkbox":
		return(checked==true)
		break
	default:
		return(value!="")
	}
}

function buildRxp(rxp) {
	return "/^"+rxp+"$/"
}

function evalString(v,rxp) {
	if(rxp=="null") {
		return true
	}
	else {
		try {
			var tstExp=/^\/(?:.*?)\/[gimGIM]{0,3}$/
			if(!tstExp.test(rxp)) {
				rxp=buildRxp(rxp)
			}
			var rExp
			eval("rExp=" + rxp)
			return rExp.test(v)
		}
		catch(er) {
			return false
		}
	}
}

function evalNumber(v,tst) {
	if(tst=="null") {
		return true
	}
	else {
		try {
			v=v.replace(/\,/,".")
			var success, tst=tst.replace(/#/g,v)
			eval("success=(" + tst + ")")
			return success
		}
		catch(er) {
			return false
		}
	}
}