function validate_email(field) {
	return field.value.match(/^[a-zA-Z0-9._-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,5}$/);	
}

function validate_number(field) {
	return field.value.match(/^[0-9]+$/);
}

function validate_default(field) {
	return field.value != "";
}

function validate_form() {
	var valid = true;
	var hsh = getInputsByName();
	var val_str = hsh["validation"][0].value;
	var lines = val_str.split("\n");
	var field = null;
	var spans = $$("span.table_mailer_error");
	spans.each(function(s) { s.remove(); });
	for (var i = 0; i < lines.length; i++) {
		var words = lines[i].split(":");
		if (words.length == 2) {
			var fnc = validate_default;
			if (words[1] == "email") {
				fnc = validate_email;
			} else if (words[1] == "number") {
				fnc = validate_number;
			}
			field = hsh[words[0]][0];
			if ( !fnc(field) ) {
				valid = false;
				mark_field(field);
			} else {
				un_mark_field(field);				
			}
		}
	}	
	if (!valid) {
		var td = $("table_mailer").down("td");
		if (!td.dakis_updated) {
			td.dakis_updated = true;
			td.insert({top: "<span style='color: red'>Please review the fields marked with an asterix (*)</span>"});
		}
	} else {
		$(field).up("form").submit();
	}
}

function get_pos_in_tr(tr, td) {
	var children = tr.childElements();
	for (var i = 0; i < children.length; i++) {
		if (children[i] == td) {
			return i;
		}
	}
	return -1;
}

function mark_field(field) {
	var td = $(field).up("td");
	var tr = td.up("tr");
	var pos = get_pos_in_tr(tr, td);
	var next_tr = tr.up("tr").next();
	if (next_tr) {
		next_tr = next_tr.down("tr");
	} else {
		next_tr = tr.next();
	}
	var children = next_tr.childElements();
	var p = children[pos].down("p");
	if (!p.dakis_updated) {
		p.dakis_updated	= true;
		p.update("* " + p.innerHTML);
		p.setStyle({color: 'red'});
	}
}

function un_mark_field(field) {
	var td = $(field).up("td");
	var tr = td.up("tr");
	var pos = get_pos_in_tr(tr, td);
	var next_tr = tr.up("tr").next();
	if (next_tr) {
		next_tr = next_tr.down("tr");
	} else {
		next_tr = tr.next();
	}
	var children = next_tr.childElements();
	var p = children[pos].down("p");
	if (p.dakis_updated) {
		p.dakis_updated	= false;
		p.update(p.innerHTML.substr(2));
		p.setStyle({color: 'black'});
	}
}

function getInputsByName() {
	hsh = new Object();
	allInputs = $$("input");
	allInputs.each(function(i) {
		if (!hsh[i.name]) { hsh[i.name] = []; }
		hsh[i.name][ hsh[i.name].length ] = i;
	});
	allTexts = $$("textarea");
	allTexts.each(function(i) {
		if (!hsh[i.name]) { hsh[i.name] = []; }
		hsh[i.name][ hsh[i.name].length ] = i;
	});
	allSelects = $$("select");
	allSelects.each(function(i) {
		if (!hsh[i.name]) { hsh[i.name] = []; }
		hsh[i.name][ hsh[i.name].length ] = i;
	});
	return hsh;
}
