var FORM_TEXTS = new Object();
FORM_TEXTS["please_review"] = new Object();
FORM_TEXTS["please_review"]["en"] = "Please review the fields marked in red.";

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_checked(field) {
	return field.checked;
}

function validate_phone(field) {
	var val = field.value + "";
	val = val.replace(/[() -]/g, "");
	return val.match(/^[0-9]{10}$/);
}

var g_already_sent = false;

function validate_form() {
	if (g_already_sent) { return; }
	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].indexOf("email") >= 0) {
				fnc = validate_email;
			} else if (words[1].indexOf("number") >= 0) {
				fnc = validate_number;
			} else if (words[1].indexOf("checked") >= 0) {
				fnc = validate_checked;
			} else if (words[1].indexOf("phone") >= 0) {
				fnc = validate_phone;
			}
			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;
			var lang = "en";
			td.insert({top: "<span style='color: red'>" + FORM_TEXTS["please_review"][lang] + "</span>"});
		}
	} else {
		g_already_sent = true;
		$(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 get_field_pgr(field) {
	var p, td, tr;
	td = $(field).up("td");
	tr = td.up("tr");
	p = tr.down("td").down("p");
	return p;
}

function mark_field(field) {
	p = get_field_pgr(field);
	if (!p.dakis_updated) {
		p.dakis_updated	= true;
		p.setStyle({color: 'red'});
	}
}

function un_mark_field(field) {
	p = get_field_pgr(field); 
	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;
}

