/* javascript for forms */

function insertAfter(node, referenceNode) 
{
   return referenceNode.parentNode.insertBefore(node, referenceNode.nextSibling);
}

function set_input_icon(obj, icon)
{
	obj.parentNode.className = "input_"+icon;
}

function display_error_message(obj, message)
{
	error_div = obj.parentNode.firstChild;
	error_div.textContent = message;
	error_div.innerText = message;
}

function clear_error_message(obj)
{
	display_error_message(obj, "")
}

function input_blur()
{
	var icon;
	
	validate_element(this);
}

function input_focus()
{
	set_input_icon(this, "edit");
}

function init_elements(elements)
{
	for (var i in elements)
	{
		var obj  = elements[i];

		// select only class = "required_xxx"
		if (obj.className == "required" || obj.className == "required_email") 
		{
			// start with 'off' icon
			set_input_icon(obj, "required")

			// attach behaviour
			obj.onfocus = input_focus;
			obj.onblur = input_blur;

			// insert error message div
			var div = document.createElement("div");
			var error_div = obj.parentNode.insertBefore(div, obj);
			error_div.className = "form_inline_error_message";
		}

	}
}

function init() 
{
	if (arguments.callee.done) return; // quit if this function has already been called
	arguments.callee.done = true; // flag this function so we don't do the same thing twice

	var inputs = document.body.getElementsByTagName("input"); // get all input tags
	var textareas = document.body.getElementsByTagName("textarea"); // get all textarea tags

	init_elements(inputs);
	init_elements(textareas);
}

/* load init function after page has loaded */
if (document.addEventListener) 
	document.addEventListener("DOMContentLoaded", init, false);
window.onload = init;





/****************
	validation 
******************/

function validate_element(obj)
{
	var is_error = false;
	if (obj.value != "") // generic required - must not be empty
	{
		icon = "checked";
		clear_error_message(obj);
		if (obj.className=="required_email" && !is_valid_email(obj.value)) // validate email
		{
			icon = "error";
			display_error_message(obj, "Invalid email");
			is_error = true;
		}
	}
	else
	{
		icon = "required";
		display_error_message(obj, "this field is required");
		is_error = true;
	}
	set_input_icon(obj, icon);
	return is_error;
}
	
// check if elements still have default classname (means that they have not been filled)
function check_elements(elements)
{
	var n = 0;
	for (var i in elements)
	{
		var obj = elements[i];
		//print_r(obj)
		if (count_prop(obj) != 0) {
		if (obj.className == "required" || obj.className == "required_email" || obj.className == "input_required" || obj.className == "input_error") 
		{
			if (validate_element(obj))
				n++;
		}
		}
	}
	return n;
}

function validate_form()
{
	var nb_error = 0;
	var inputs = document.body.getElementsByTagName("input"); // get all input tags
	var textareas = document.body.getElementsByTagName("textarea");  // get all textarea tags
	
	nb_error += check_elements(inputs);
	nb_error += check_elements(textareas);

	if (nb_error == 0)
	{
		//document.enquiry.submit();
		return true;
	}
	else
	{
		// insert main error message and go to top of the form
		if (document.getElementById("form_main_error_message") == null)
		{
			var div = document.createElement("div");
			div.id = "form_main_error_message";
			var error_div = insertAfter(div, document.getElementById("form_top"));
			error_div.className = "form_main_error_message";
		}
		else
		{
			error_div = document.getElementById("form_main_error_message");
		}

		// write number of errors
		var text = "Please review your entries. There are "+nb_error+" missing field(s).";
		error_div.innerText = text;
		error_div.textContent = text;
		
		// go back at top of document
		if (document.location.href.indexOf("#") == -1)
			document.location.href = document.location.href+"#form_top";
		else
			document.location.href = document.location.href;
		return false;
	}
}






function is_valid_email(str) 
{
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	
	if (str.indexOf(at)==-1) return false;
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) return false;
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) return false;
	if (str.indexOf(at,(lat+1))!=-1) return false;
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) return false;
	if (str.indexOf(dot,(lat+2))==-1) return false;
	if (str.indexOf(" ")!=-1) return false;
	
	return true					
}



function print_r(obj) {
	str = '';
	for(prop in obj) {
		str += prop+' - value: '+obj[prop]+'\n';
	}
	alert(str);
}


function count_prop(obj) {
	n = 0;
	for(prop in obj) {
		n++;
	}
	return n;
}