var nbsp = 160;
var node_text = 3;
var emptyString = /^\s*$/ ;
var global_valfield;

function trim(str) {
	return str.replace(/^\s+|\s+$/g, '');
}


function setFocusDelayed() {
	global_valfield.focus();
}

function setfocus(valfield)
{
	global_valfield = valfield;
	setTimeout( 'setFocusDelayed()', 100 );
}

function msg(valfield, fld, msgtype, message) {
	var dispmessage;

	if (emptyString.test(message)) {
		dispmessage = String.fromCharCode(nbsp);
		valfield.style.backgroundColor= "#ffffff";
	} else {
		dispmessage = message;

		if (msgtype == "error") valfield.style.backgroundColor= "#ffdddd";
		else if (msgtype == "warn") valfield.style.backgroundColor= "#ffffdd";
	}

	var elem = document.getElementById(fld);
	elem.firstChild.nodeValue = dispmessage;
  
	elem.className = msgtype; // Set CSS class to adjust appearance of message
}

var proceed = 2;  

function commonCheck(lang, valfield, infofield, required) {
	var msgstr_hasto = "Måste anges.";

	if (lang == "english") msgstr_hasto = "Must be specified."; 

	if (!document.getElementById) 
		return true;
	
	var elem = document.getElementById(infofield);

	if (!elem.firstChild) return true;
	if (elem.firstChild.nodeType != node_text) return true;

	if (emptyString.test(valfield.value)) {
		if (required) {
			msg (valfield, infofield, "error", msgstr_hasto);  
			setfocus(valfield);
			return false;
		}
		else {
			msg (valfield, infofield, "warn", "");   // OK
			return true;  
		}
	}

	return proceed;
}

function validatePresent(lang, valfield, infofield) {
	var stat = commonCheck (lang, valfield, infofield, true);

	if (stat != proceed) return stat;

	msg (valfield, infofield, "warn", "");  
	return true;
}

function validateEmail(lang, valfield, infofield, required) {
	var stat = commonCheck (lang, valfield, infofield, required);
	if (stat != proceed) return stat;
	var tfld = trim(valfield.value);
	var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ;

	var msgstr_invalidemail = "Ogiltig e-mail adress.";
	var msgstr_weirdemail = "Misstänkt adress - kontrollera.";

	if (lang == "english") {
		msgstr_invalidemail = "Invalid e-mail address.";
		msgstr_weirdemail = "Suspicious address - check it.";
	}

	if (!email.test(tfld)) {
		msg (valfield, infofield, "error", msgstr_invalidemail);
		setfocus(valfield);
		return false;
	}

	var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/  ;
	if (!email2.test(tfld)) 
		msg (valfield, infofield, "warn", msgstr_weirdemail);
	else
		msg (valfield, infofield, "warn", "");

	return true;
}

function validateTelnr(lang, valfield, infofield, required)
{
	var stat = commonCheck (lang, valfield, infofield, required);
	if (stat != proceed) return stat;

	var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
	var telnr = /^\+?[0-9 ()-]+[0-9]$/  ;

	var msgstr_invnr = "Ogiltig telefonnummer.";
	var msgstr_shortnr = "siffror - för kort.";
	var msgstr_weirdnr = "siffror - kontrollera.";

	if (lang == "english") {
		msgstr_invnr = "Invalid phone number.";
		msgstr_shortnr = "digits - to short.";
		msgstr_weirdnr = "digits - check it.";
	}

	if (!telnr.test(tfld)) {
		msg (valfield, infofield, "error", msgstr_invnr);
		setfocus(valfield);
		return false;
	}

	var numdigits = 0;
	for (var j=0; j<tfld.length; j++)
		if (tfld.charAt(j)>='0' && tfld.charAt(j)<='9') numdigits++;

	if (numdigits<5) {
		msg (valfield, infofield, "error", numdigits + " " + msgstr_shortnr);
		setfocus(valfield);
		return false;
	}

	if (numdigits>14)
		msg (valfield, infofield, "warn", numdigits + " " + msgstr_weirdnr);
	else
		msg (valfield, infofield, "warn", "");

	return true;
}
