function CountWords (fieldValue)
{
	var fullStr = fieldValue + " ";
	var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi;
	var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");
	var non_alphanumerics_rExp = rExp = /[^A-Za-z0-9]+/gi;
	var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
	var splitString = cleanedStr.split(" ");
	var word_count = splitString.length -1;
	
	if (fullStr.length < 2)
		word_count = 0;

	return word_count;
}

function onLoadForm(widget)
{
	widget.addEventListener("beforeSubmit", function()
	{
		document.getElementById("formStats"+widget.item.id).style.display = "block";
		document.getElementById("formDiv"+widget.item.id).style.display = "none";
	});
}

function checkObject(errorMsg)
{
	var checkFail = false;
	for (x in obligatory)
	{
		var obl = obligatory[x];
		switch (obl["type"])
		{
			case "clearText":
				var field = document.getElementById(obl["name"]);
				if (field.value == "" || CountWords(field.value) > obl["max"])
				{
					checkFail = true;
					field.className = "failed";
				}
				else
					field.className = "text";
				
				break;
			case "date":
				var d = document.getElementById(obl["name"]+"_d");
				var m = document.getElementById(obl["name"]+"_m");
				var Y = document.getElementById(obl["name"]+"_Y");
				var date = document.getElementById(obl["name"]);
				
				if (d.value.length == 1)
					d.value = "0" + d.value;
				if (m.value.length == 1)
					m.value = "0" + m.value;
					
				date.value = Y.value + "-" + m.value + "-" + d.value;
				var regX = new RegExp(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/);
				
				if (!regX.test(date.value))
				{
					checkFail = true;
					d.className = "failed";
					m.className = "failed";
					Y.className = "failed";
				}
				else
				{
					d.className = "text";
					m.className = "text";
					Y.className = "text";
				}
				break;
			case "enum":
				var checked = false;
				var radios = document.getElementsByName(obl["name"]);
				var arrLength = radios.length;
				if (document.all)
					arrLength--;

				for (var i = 1; i <= arrLength; i++)
				{
					if (document.getElementById(obl["name"]+i).checked)
						checked = true;
				}
				if (!checked)
				{
					checkFail = true;
					document.getElementById(obl["name"]).className = "failed";
				}
				else
					document.getElementById(obl["name"]).className = "";
				break;
			case "email":
				var field = document.getElementById(obl["name"]);
				var regX = new RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/);
				if (!regX.test(field.value))
				{
					checkFail = true;
					field.className = "failed";
				}
				else
					field.className = "text";
				break;
			case "image":
			case "file":
				var field = document.getElementById(obl["name"]);
				if (document.getElementById(obl["name"] + "_exists").value == "no" && field.value == "")
				{
					checkFail = true;
					field.className = "failed";
				}
				else
					field.className = "text";
				break;
			default:
				var field = document.getElementById(obl["name"]);
				if (field.value == "")
				{
					checkFail = true;
					field.className = "failed";
				}
				else
					field.className = "text";
				break;
		}
	}
	if (checkFail)
		window.alert(errorMsg);
	else
		document.getElementById("submitBtn").disabled = true;
		
	return !checkFail;
}

function checkLogin(noEmail, noPw)
{
	var userField = document.getElementById("username");
	var pwField = document.getElementById("password");
	var regX = new RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/);
	var regX2 = new RegExp(/^raadslid[0-9]{2}$/);
	if (userField.value != "admin" && !regX2.test(userField.value) && !regX.test(userField.value))
	{
		window.alert(noEmail);
		return false;
	}
	if (pwField.value == "")
	{
		window.alert(noPw);
		return false;
	}
}

function checkPasswordForm(noEmail)
{
	var userField = document.getElementById("username");
	var regX = new RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/);
	if (!regX.test(userField.value))
	{
		window.alert(noEmail);
		return false;
	}
}

function form_check2(form, msg, _section)
{
	var formId = form.elements["id"].value;
	
	var varPrefix = "form_" + formId + "_";
	
	var jsVars = form_getJSVars(formId);
	
	if (!jsVars)
	{
		return false;
	}
	
	var obligatoryQuestions = jsVars[varPrefix + "obligatoryQuestions"];
	var answer2Question = jsVars[varPrefix + "answer2Question"];
	var answerRegexs = jsVars[varPrefix + "answerRegexs"];
	var answerRegexMessages = jsVars[varPrefix + "answerRegexMessages"];
	
	var numFailed = 0;
	
	// check obligatory questions
	for(var i in obligatoryQuestions)
	{
		var title = document.getElementById("form_question_" + obligatoryQuestions[i] + "_title");
		if (!form_checkAnswer(form, obligatoryQuestions[i]))
		{
			if (title) title.className = "failed";
			numFailed++;
		}
		else if (title)
		{
			title.className = "text";
		}
	}
	
	var subMsgs = Array();
	// check open answers
	for(i=0; i<form.elements.length; i++)
	{
		var re = /^form_openanswer_([0-9]+)$/;
		
		var matches = re.exec(form.elements[i].name);
		if (matches)
		{
			var answerId = matches[1];
			
			// check if this open answer is checked
			var questionId = answer2Question[answerId];
			var checked = form_checkAnswer(form, questionId, answerId);
			var multipleChoice = typeof form.elements["form_answer_" + questionId] != "undefined";
			
			var title = document.getElementById("form_question_" + questionId + "_title");
			
			var regex = answerRegexs[answerId];
			if (regex && regex[0] == '/' && regex[regex.length-1] == '/') 
			{
				regex = regex.substr(1, regex.length-2);
			}
			var matched = !regex || RegExp(regex).exec(form.elements[i].value);
			if (!matched && form.elements[i].value != "")
			{
				if (title) title.className = "failed";
				numFailed++;
				subMsgs.push(answerRegexMessages[answerId]);
			}
			else if (checked && form.elements[i].value == "" && !form.elements[i].disabled &&
				(multipleChoice || (!multipleChoice && in_array(questionId, obligatoryQuestions)))
				)
			{
				if (title) title.className = "failed";
				numFailed++;
			}
			else if (!multipleChoice)
			{
				if (title) title.className = "text";
			}
		}
	}
	
	if (msg != "" && numFailed > 0)
	{
		if (subMsgs.length > 0)
			msg += "\n\n" + subMsgs.join("\n");
		alert(msg);
	}
	
	var widget = jsVars[varPrefix + "fromWidget"]; 
	if (widget && numFailed == 0)
	{
		widget.submitWithoutCheck();
		return false;
	}
	
	return numFailed == 0;
}

var checkedBoxes = 0;
function toggleVote(lang, cBox)
{
	if (cBox.checked && checkedBoxes == 3)
	{
		cBox.checked = false;
		if (lang == "en")
			window.alert("You can vote on a maximum of three participants");
		else
			window.alert("Je kan op maximaal drie deelnemers stemmen");
	}
	else if (cBox.checked && checkedBoxes <3)
		checkedBoxes++;
	else if (!cBox.checked)
		checkedBoxes--;
}

function checkVote(lang)
{
	var userField = document.getElementById("username");
	var regX = new RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/);
	if (!regX.test(userField.value))
	{
		if (lang == "en")
			window.alert("Your e-mail address is needed to confirm your vote");
		else
			window.alert("Je e-mailadres is nodig om je stem te bevestigen");
		return false;
	}

	if (checkedBoxes <= 0)
	{
		if (lang == "en")
			window.alert("Select at least one participant.");
		else
			window.alert("Selecteer teminste één deelnemer.");
		return false;
	}
}

function loadForm()
{
	var divObject = document.getElementById("registerForm");

	xajax.call("xajax_getHTML", {context: {
		callback: function(html)
		{
			divObject.innerHTML = html;
		}
	}});
}