String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

function check(f, fields, types, format, messages) {
	for (var i=0; i<fields.length; i++) {
		var value = eval("f." + fields[i] + ".value");
		var error = false;
		var type = parseInt(types[i]);
		// if not null value is required
		if (type == 1 && (value == null || value.trim().length < 1)) error = true;
		// if email address is required
		if (type == 2 && !isEmail(value))  error = true;
		// break in case of error
		if (error) {
			alert(format.replace("%1", messages[i]) + ".");
			return false;
		}
	}
	// all valid
	return true;
}

function isEmail(x) {
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(x)) return true;
	else return false;
}

function signup() {
	var address = document.getElementById("newsletter.email").value;
	get("signup.jsp?email=" + address);
}

function update(s) {
	var txt = document.getElementById("newsletter.text");
	var res = document.getElementById("newsletter.response");
	res.innerHTML = s;
	txt.style.visibility = "hidden";
	txt.style.display = "none";
	res.style.visibility = "visible";
	res.style.display = "";
}

function get(url) {
   	var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
   	if (window.XMLHttpRequest)
       	self.xmlHttpReq = new XMLHttpRequest();
    // IE
   	else if (window.ActiveXObject)
       	self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    // execute query
   	self.xmlHttpReq.open('GET', url, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
   	self.xmlHttpReq.onreadystatechange = function() {
       	if (self.xmlHttpReq.readyState == 4)
           	update(self.xmlHttpReq.responseText);
    }
   	self.xmlHttpReq.send(""); // query string is argument
}
