
function help_open(helpid)
{
	el = document.getElementById(helpid);
	el.style.display = "block";
}

function help_close(helpid)
{
	el = document.getElementById(helpid);
	el.style.display = "none";
}

function help_move(event,helpid)
{
	if (event.pageX) {
		// !msie
		xPos = event.pageX;
		yPos = event.pageY;
	}
	else {
		// msie
		xPos = window.event.x;
		yPos = window.event.y;

		xPos += document.body.scrollLeft;
		yPos += document.body.scrollTop;

		if ((document.documentElement) && (document.documentElement.scrollLeft)) {
			xPos += document.documentElement.scrollLeft;
		}
		if ((document.documentElement) && (document.documentElement.scrollTop)) {
			yPos += document.documentElement.scrollTop;
		}
	}

	el = document.getElementById(helpid);
	el.style.left = xPos + 20 + "px";
	el.style.top  = yPos + 10 + "px";
}

/**
 * Validate an emailaddress
 *
 * uses http://en.wikipedia.org/wiki/E-mail_address as reference
 */
function validate_email(email)
{
	var parts = email.split(/@/);

	if (parts.length != 2) {
		// not composed of local part and domain part
		return false;
	}

	var local_part = parts[0];
	var domain_part = parts[1];


	// check the local part

	var reg = /^([A-Za-z0-9!#\$%\*\/\?\|\^\{\}`~&'+\-=_.]+)$/;

	if (reg.test(local_part)) {
		if (local_part.indexOf("..") >= 0) {
			// double dot in local part
			return false;
		}
		if (local_part.indexOf(".") == 0) {
			// dot at start of local part
			return false;
		}
		if (local_part.lastIndexOf(".") == local_part.length-1) {
			// dot at end of local part
			return false;
		}
	}
	else {
		reg = /^\"([^\"]+)\"$/;

		if (!reg.test(local_part)) {
			// failed escaped local part
			return false;
		}
	}


	// check the domain part

	reg = /^[[]([0-9:.]+)[]]$/;
	
	if ((domain_part == "") || (domain_part == "[]")) {
		// invalid domain part
		return false;
	}
	else if (reg.test(domain_part)) {
		// check the ip address

		// (still missing)
	}
	else {
		// check the labels

		var labels = domain_part.split(/[.]/);
		reg = /^([A-Za-z0-9-]+)$/;

		var i;
		for(i=0; i < labels.length; i++) {
			var label = labels[i];

			if (label == "") {
				// empty label
				return false;
			}
			if (!reg.test(label)) {
				// invalid characters
				return false;
			}
			if (label.indexOf("-") == 0) {
				// hyphen at start of label
				return false;
			}
			if (label.lastIndexOf("-") == label.length-1) {
				// hyphen at end of label
				return false;
			}
		}
	}

	return true;
}

