// form validation function //
function validate() {
	
	var time_message = 3;

	var form = document.forms[0];
	var num = form.elements.length;
	var nameRegex = /^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*$/;
	var emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
	var messageRegex = new RegExp(/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>/gim);
	var numericRegex = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
	var integerRegex = /(^-?\d\d*$)/;

	for(var i = 0; i < num; i++){
		target = form.elements[i].name.replace(/_/g," ");
		switch(form.elements[i].className){
			case 'form_normal_validation':
				if(form.elements[i].value == ''){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br /> Devi inserire il valore del campo <strong>'+target+'</strong>.',time_message);
					return false;
				}
			break;
			
			case 'form_mail_validation':
				if(form.elements[i].value == ''){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br />Devi inserire il valore del campo <strong>'+target+'</strong>.',2);
					return false;
				}
				if(!form.elements[i].value.match(emailRegex)){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br /> Il campo <strong>mail</strong> non &eacute; corretto.',time_message);
					return false;
				}
			break;
			
			case 'form_text_validation':
				if(form.elements[i].value == ''){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br />Devi inserire il valore del campo <strong>'+target+'</strong>.',time_message);
					return false;
				}
				if(!form.elements[i].value.match(nameRegex)){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br /> Il contenuto del campo <strong>'+target+'</strong> non &eacute; corretto.',time_message);
					return false;
				}
			break;
	
			case 'form_textarea_validation':
				if(form.elements[i].value == ''){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br />Devi inserire il valore del campo <strong>'+target+'</strong>.',time_message);
					return false;
				}
				if(!form.elements[i].value.match(messageRegex)){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br /> Il contenuto del campo <strong>'+target+'</strong> non &eacute; corretto.',time_message);
					return false;
				}
			break;

			case 'form_numeric_validation':
				if(form.elements[i].value == ''){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br />Devi inserire il valore del campo <strong>'+target+'</strong>.',time_message);
					return false;
				}
				if(!form.elements[i].value.match(numericRegex)){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br /> Il contenuto del campo <strong>'+target+'</strong> non &eacute; corretto.',time_message);
					return false;
				}
			break;

			case 'form_integer_validation':
				if(form.elements[i].value == ''){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br />Devi inserire il valore del campo <strong>'+target+'</strong>.',time_message);
					return false;
				}
				if(!form.elements[i].value.match(intergerRegex)){
					inlineMsg(form.elements[i].name,'<strong>Errore</strong><br /> Il contenuto del campo <strong>'+target+'</strong> non &eacute; corretto.',time_message);
					return false;
				}
			break;
		}
	}
	return true;
}
// START OF MESSAGE SCRIPT //

var MSGTIMER = 20;
var MSGSPEED = 5;
var MSGOFFSET = 3;
var MSGHIDE = 3;

// build out the divs, set attributes and call the fade function //
function inlineMsg(target,string,autohide) {
	var msg;
	var msgcontent;
	if(!document.getElementById('msg_validation')) {
		msg = document.createElement('div');
		msg.id = 'msg_validation';
		msgcontent = document.createElement('div');
		msgcontent.id = 'msgcontent_validation';
		document.body.appendChild(msg);
		msg.appendChild(msgcontent);
		msg.style.filter = 'alpha(opacity=0)';
		msg.style.opacity = 0;
		msg.alpha = 0;
	} else {
		msg = document.getElementById('msg_validation');
		msgcontent = document.getElementById('msgcontent_validation');
	}
	msgcontent.innerHTML = string;
	msg.style.display = 'block';
	var msgheight = msg.offsetHeight;
	var targetdiv = document.getElementById(target);
	targetdiv.focus();
	var targetheight = targetdiv.offsetHeight;
	var targetwidth = targetdiv.offsetWidth;
	var topposition = topPosition(targetdiv) - ((msgheight - targetheight) / 2);
	var leftposition = leftPosition(targetdiv) + targetwidth + MSGOFFSET;
	msg.style.top = topposition + 'px';
	msg.style.left = leftposition + 'px';
	clearInterval(msg.timer);
	msg.timer = setInterval("fadeMsg(1)", MSGTIMER);
	if(!autohide) {
		autohide = MSGHIDE;  
	}
	window.setTimeout("hideMsg()", (autohide * 1000));
}

// hide the form alert //
function hideMsg(msg) {
	var msg = document.getElementById('msg_validation');
	if(!msg.timer) {
		msg.timer = setInterval("fadeMsg(0)", MSGTIMER);
	}
}

// face the message box //
function fadeMsg(flag) {
	if(flag == null) {
		flag = 1;
	}
	var msg = document.getElementById('msg_validation');
	var value;
	if(flag == 1) {
		value = msg.alpha + MSGSPEED;
	} else {
		value = msg.alpha - MSGSPEED;
	}
	msg.alpha = value;
	msg.style.opacity = (value / 100);
	msg.style.filter = 'alpha(opacity=' + value + ')';
	if(value >= 99) {
		clearInterval(msg.timer);
		msg.timer = null;
	} else if(value <= 1) {
		msg.style.display = "none";
	clearInterval(msg.timer);
	}
}

// calculate the position of the element in relation to the left of the browser //
function leftPosition(target) {
	var left = 0;
	if(target.offsetParent) {
		while(1) {
			left += target.offsetLeft;
			if(!target.offsetParent) {
				break;
			}
			target = target.offsetParent;
		}
	} else if(target.x) {
		left += target.x;
	}
	return left;
}

// calculate the position of the element in relation to the top of the browser window //
function topPosition(target) {
	var top = 0;
	if(target.offsetParent) {
		while(1) {
			top += target.offsetTop;
			if(!target.offsetParent) {
				break;
			}
			target = target.offsetParent;
		}
	} else if(target.y) {
		top += target.y;
	}
	return top;
}

// preload the arrow //
if(document.images) {
	arrow = new Image(7,80); 
	arrow.src = "img/msg_arrow.gif"; 
}
