/**
 * Humanique main javascript
 *
 * this contains all the main javascripts
*/

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)
{
	var scrollTop = 0;
	if (document.body.scrollTop > 0) {
		scrollTop = document.body.scrollTop;
	}
	else {
		scrollTop = document.documentElement.scrollTop;
	}

	if (event.pageX) {
		// !msie
		xPos = event.pageX;
		yPos = event.pageY;
	}
	else {
		// msie
		xPos = window.event.clientX;
		yPos = window.event.clientY;


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

	el = document.getElementById(helpid);

	var right = xPos + 20 + el.offsetWidth;
	var bottom = yPos + 20 + el.offsetHeight;
	var up = false;
	var left = false;

	if (typeof(window.innerWidth) == "number") {
		if (right > window.innerWidth && window.innerWidth > el.offsetWidth) {
			left = true;
		}
		
		if (bottom > (window.innerHeight + scrollTop) && window.innerHeight > el.offsetHeight) {
			up = true;
		}
	}
	else {
		if (right > document.documentElement.clientWidth && document.documentElement.clientWidth > el.offsetWidth) {
			left = true;
		}
		if (bottom > (document.documentElement.clientHeight + scrollTop) && document.documentElement.clientHeight > el.offsetHeight) {
			up = true;
		}
	}

	if (left) {
		el.style.left = (xPos - 20 - el.offsetWidth) + "px";
	}
	else {
		el.style.left = xPos + 20 + "px";
	}
	if (up) {
		if (typeof(window.innerHeight) == "number") {
			el.style.top = ((window.innerHeight - 10 - el.offsetHeight) + scrollTop) + "px";
		}
		else {
			el.style.top = ((document.documentElement.clientHeight - 10 - el.offsetHeight) + scrollTop) + "px";
		}
	}
	else {
		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;
}

function form_remove_file(iname, no_previous_text)
{
	$("#" + iname + "_previous").html(no_previous_text);
	$("#" + iname + "_delete_id").attr("value","yes");
	$('#' + iname + '_remove').hide();

	return false;
}

function form_add_file(iname)
{
	$("#" + iname + "_delete_id").attr("value","no");

	return false;
}

function outgoing_link(href, target, name)
{
	if (target != '') {
		window.open(href, target);
		return false;
	}

	if (name == '') {
		name = escape(href);

		if (name.indexOf("http%3A//") == 0) {
			name = name.substring(9);
		}
		else if (name.indexOf("https%3A//") == 0) {
			name = name.substring(10);
		}
	}

	if (pageTracker) {
		pageTracker._trackPageview('/outgoing/' + name);
	}

	return true;
}
