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 loadRegisterForm()
{
	var divObject = document.getElementById("registerForm");

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

function checkLogin(form)
{
	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(form.username.value))
	{
		window.alert('Vul a.u.b. een gebruikersnaam in.');
		return false;
	}
	if (form.password.value == "")
	{
		window.alert('Vul a.u.b. een wachtwoord.');
		return false;
	}
}

function checkPasswordForm()
{
	var userField = document.getElementById("email");
	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('U heeft geen geldig e-mail adres ingevuld.');
		return false;
	}
}

function checkValues()
{
	this.message = "U heeft niet alle verplichte velden ingevuld. De verplichte velden zijn gemarkeerd.";
	this.checkFail = false;
}

function checkObligatory(form, checkObject)
{
	for (var x = 0; x < obligatory.length; x++)
	{
		var obl = obligatory[x];
		
		if (obl["name"].indexOf("invoice_") > -1 && !document.getElementById("otherInvoice").checked)
		{
			continue;
		}
		
		switch (obl["type"])
		{
			case "clearText":
				var field = document.getElementById(obl["name"]);
				if (field.value == "")
				{
					checkObject.checkFail = true;
					document.getElementById("label_" + obl["name"]).className = "failed";
				}
				else
				{
					document.getElementById("label_" + obl["name"]).className = "";
				}
				break;
			case "enum":
				var field = form.elements[obl["name"]];
				if (field.options[field.selectedIndex].value == "")
				{
					checkObject.checkFail = true;
					document.getElementById("label_" + obl["name"]).className = "failed";
				}
				else
				{
					document.getElementById("label_" + obl["name"]).className = "";
				}
				break;
			case "multicheck":
			case "linkedObjects":
				var checked = false;
				var checkboxes = form.elements[obl["name"] + "[]"];
				var arrLength = checkboxes.length;
				
				for (var i = 0; i < arrLength; i++)
				{
					if (checkboxes[i].checked)
					{
						checked = true;
					}
				}
				
				if (!checked)
				{
					checkObject.checkFail = true;
					document.getElementById("label_" + obl["name"]).className = "failed";
				}
				else
				{
					document.getElementById("label_" + 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))
				{
					checkObject.checkFail = true;
					document.getElementById("label_" + obl["name"]).className = "failed";
				}
				else
				{
					document.getElementById("label_" + obl["name"]).className = "";
				}
				break;
			case "image":
			case "file":
				var field = document.getElementById(obl["name"]);
				if (field.value != "" || !obl["checkOnly"])
				{
					if (field.value == "" && !obl["checkOnly"])
					{
						checkObject.checkFail = true;
						document.getElementById("label_" + obl["name"]).className = "failed";
					}
					else if (field.value != "" || obl["checkOnly"])
					{
						var value = field.value;
						
						if (value.indexOf("/") > -1)
						{
							value = value.substring(value.lastIndexOf("/")+1);
						}	
						else if (value.lastIndexOf("\\") > 0)
						{
							value = value.substring(value.lastIndexOf("\\")+1);
						}
						
						var regFile = new RegExp(/^[^\/^\\^\?^\|^<^>^\*^"]+\.\w{2,5}$/);
						var regExtImgAllow = new RegExp(/^[^\/^\\^\?^\|^<^>^\*^"]+\.(gif|jpg|png)$/);
						var regExtForbid = new RegExp(/^[^\/^\\^\?^\|^<^>^\*^"]+\.(php|exe|htm|html|js|bat)$/);
						
						if (!regFile.test(value) || 
							regExtForbid.test(value) || 
							(obl["type"] == "image" && !regExtImgAllow.test(value)))
						{
							checkObject.checkFail = true;
							document.getElementById("label_" + obl["name"]).className = "failed";
							
							checkObject.message = document.getElementById("label_" + obl["name"]).innerHTML;
							
							if (!regFile.test(value))
							{
								checkObject.message += " is geen geldig bestand.";
							}
							else if (obl["type"] == "image")
							{
								checkObject.message += " is geen geldige afbeelding.";
							}
							else
							{
								checkObject.message += " is van een type bestand dat niet is toegestaan.";
							}
						}
						else
							document.getElementById("label_" + obl["name"]).className = "";
					}
				}
				else
				{
					document.getElementById("label_" + obl["name"]).className = "";
				}
				break;
			case "formattedText":
				var editor = tinyMCE.get(obl["name"]);
				editor.save();
								
				if (editor.getContent().length <= 0)
				{
					checkObject.checkFail = true;
					document.getElementById("label_" + obl["name"]).className = "failed";
				}
				else
				{
					document.getElementById("label_" + obl["name"]).className = "";
				}
				break;
			case "date":
				var daySelect = document.getElementById(obl["name"] + "_day");
				var monthSelect = document.getElementById(obl["name"] + "_month");
				var yearSelect = document.getElementById(obl["name"] + "_year");
				
				var day = daySelect.options[daySelect.selectedIndex].value;
				var month = monthSelect.options[monthSelect.selectedIndex].value;
				var year = yearSelect.options[yearSelect.selectedIndex].value;
				
				var field = document.getElementById(obl["name"]);
				field.value = year + "-" + month + "-" + day; 
				
				var regDate = new RegExp(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/);
				if (!regDate.test(field.value))
				{
					checkObject.checkFail = true;
					document.getElementById("label_" + obl["name"]).className = "failed";
				}
				else
				{
					document.getElementById("label_" + obl["name"]).className = "";
				}
				break;
			case "boolean":
				if (!form.elements[obl["name"]][0].checked && !form.elements[obl["name"]][1].checked)
				{
					checkObject.checkFail = true;
					document.getElementById("label_" + obl["name"]).className = "failed";
				}
				else
				{
					document.getElementById("label_" + obl["name"]).className = "";
				}
			break;
			default:
				var field = document.getElementById(obl["name"]);
				if (field != null)
				{
					if (field.value == "" || (obl["name"] == "price" && isNaN(field.value)))
					{
						checkObject.checkFail = true;
						document.getElementById("label_" + obl["name"]).className = "failed";
					}
					else
					{
						document.getElementById("label_" + obl["name"]).className = "";
					}
				}
				break;
		}
	}
}

function checkRegister(form)
{
	document.getElementById("submitBtn").disabled = true;
	
	var checkObj = new checkValues();

	checkObligatory(form, checkObj);

	// Check username existence
	xajax.call("xajax_checkNewUsername", {parameters:[form.elements["username"].value], context: {
		callback: function(usernameExists)
		{
			if (usernameExists)
			{
				document.getElementById("label_username").className = "failed";
				checkObj.checkFail = true;
				checkObj.message = "Het e-mailadres is al in gebruik.";
			}
		}
	}});
	
	if (document.getElementById("label_rights") != undefined)
	{
		// Rights check
		var rightsField = form.elements["rights[]"];
		
		var checkedBox = false;
		for (var i = 0; i < rightsField.length; i++)
		{
			if (rightsField[i].checked)
			{
				checkedBox = true;
			}
		}
		
		if (!checkedBox)
		{
			document.getElementById("label_rights").className = "failed";
			checkObj.checkFail = true;
		}
		else
		{
			document.getElementById("label_rights").className = "";
		}
	}
	
	// Password check
	document.getElementById("label_password").className = "";
	document.getElementById("label_password2").className = "";

	var p1 = document.getElementById("password").value;
	var p2 = document.getElementById("password2").value;

	if (p1.length > 0 && p2.length == 0)
	{
		document.getElementById("label_password2").className = "failed";
		checkObj.checkFail = true;
		checkObj.message = "Vul het 2e wachtwoord veld in.";
	}
	else if (p1.length == 0 && p2.length > 0)
	{
		document.getElementById("label_password").className = "failed";
		checkObj.checkFail = true;
		checkObj.message = "Vul het 1e wachtwoord veld in.";
	}
	else if (p1.length == 0 && p2.length == 0)
	{
		document.getElementById("label_password").className = "failed";
		document.getElementById("label_password2").className = "failed";
		checkObj.checkFail = true;
		checkObj.message = "Het nieuwe wachtwoord en de herhaling zijn niet ingevuld.";
	}
	else if (p1 != p2)
	{
		document.getElementById("label_password").className = "failed";
		document.getElementById("label_password2").className = "failed";
		checkObj.checkFail = true;
		checkObj.message = "Het 1e en 2e wachtwoord komen niet overeen.";
	}
	
	if (checkObj.checkFail)
	{
		document.getElementById("submitBtn").disabled = false;
		window.alert(checkObj.message);
	}
		
	return !checkObj.checkFail;
}

function checkRating(form)
{
	document.getElementById("submitBtn").disabled = true;
	
	var checkObj = new checkValues();

	for (var i = 0; i < form.elements.length; i++)
	{
		if (form.elements[i].type == "textarea")
		{
			if (form.elements[i].value == "")
			{
				checkObj.checkFail = true;
				document.getElementById("label_" + form.elements[i].name).className = "failed";
			}
			else
			{
				document.getElementById("label_" + form.elements[i].name).className = "";
			}
		}		
	}
	
	if (checkObj.checkFail)
	{
		document.getElementById("submitBtn").disabled = false;
		window.alert(checkObj.message);
	}
	
	return !checkObj.checkFail;
}

function checkSimpleRating(form)
{
	document.getElementById("submitBtn").disabled = true;
	
	var checkObj = new checkValues();

	for (var i = 0; i < form.elements.length; i++)
	{
		if (form.elements[i].type == "textarea")
		{
			if (form.elements[i].value == "")
			{
				checkObj.checkFail = true;
				document.getElementById("label_" + form.elements[i].name).className = "failed";
			}
			else
			{
				document.getElementById("label_" + form.elements[i].name).className = "";
			}
		}		
	}
	
	if (checkObj.checkFail)
	{
		document.getElementById("submitBtn").disabled = false;
		window.alert(checkObj.message);
	}
	
	return !checkObj.checkFail;
}

function checkCharacters(textArea)
{
	if (textArea.value.length > 400)
	{
		textArea.value = textArea.value.substr(0, 400);
	}
	else
	{
		var counter = document.getElementById(textArea.name + "Count");
		counter.innerHTML = 400 - textArea.value.length;
	}
}

function parseDates(form)
{
	for (var x = 0; x < selectFields.length; x++)
	{
		var obl = selectFields[x];
		var fieldName = "field_" + obl["name"];

		switch (obl["type"])
		{
			case "dateFromTo":
				var field = form.elements[fieldName];
				checkDate(form, field, fieldName, "");
				break;
			case "date":
				var fields = form.elements[fieldName + "[]"];
				checkDate(form, fields[0], fieldName, "");
				checkDate(form, fields[1], fieldName + "_to", "");
				break;
			case "timeFromTo":
				var field = form.elements[fieldName];
				checkTime(form, field, fieldName);
				break;
			case "time":
				var fields = form.elements[fieldName + "[]"];
				checkTime(form, fields[0], fieldName);
				checkTime(form, fields[1], fieldName + "_to");
				break;
		}
	}
}

function checkDate(form, field, fieldName, checkOnly)
{
	var daySelect = form.elements[fieldName + "_Day"];
	var monthSelect = form.elements[fieldName + "_Month"];
	var yearSelect = form.elements[fieldName + "_Year"];
	
	var day = daySelect.options[daySelect.selectedIndex].value;
	var month = monthSelect.options[monthSelect.selectedIndex].value;
	var year = yearSelect.options[yearSelect.selectedIndex].value;

	field.value = year + "-" + month + "-" + day;
	
	var regDate = new RegExp(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/);
	if (checkOnly == "1" && field.value == "--")
	{
		field.value = "";
		return true;
	}
	else if (!regDate.test(field.value))
	{
		field.value = "";
		return false;
	}
	else
	{
		return true;
	}
}

function checkTime(form, field, fieldName)
{
	var hourSelect = form.elements[fieldName + "_Hour"];
	var minuteSelect = form.elements[fieldName + "_Minute"];
	var secondSelect = form.elements[fieldName + "_Second"];
	
	var hour = hourSelect.options[hourSelect.selectedIndex].value;
	var minute = minuteSelect.options[minuteSelect.selectedIndex].value;
	var second = secondSelect.options[secondSelect.selectedIndex].value;
	
	field.value = hour + ":" + minute + ":" + second; 
	
	var regTime = new RegExp(/^[0-9]{2}:[0-9]{2}:[0-9]{2}$/);
	if (!regTime.test(field.value))
	{
		field.value = "";
		return false;
	}
	else
	{
		return true;
	}
}

function checkQuantity(form)
{
	var formFail = false;
	
	for (var i = 0; i < form.elements.length; i++)
	{
		var field = form.elements[i];
		if (field.name.indexOf("quantity_") > -1 && (field.value == "" || field.value == "0" || isNaN(field.value)))
		{
			formFail = true;
			field.style.borderColor = "#FF0000";
		}
		else if (field.name.indexOf("quantity_") > -1)
		{
			field.style.borderColor = "#2A4E70";
		}
	}
	
	if (formFail)
	{
		window.alert("Vul voor één of meerdere velden een getal hoger dan nul in.");
	}
	
	return !formFail;
}


function checkBooking(form, checkUsername)
{
	document.getElementById("submitBtn").disabled = true;
	
	var checkObj = new checkValues();

	checkObligatory(form, checkObj);

	if (checkUsername)
	{
		// Check username existence
		xajax.call("xajax_checkNewUsername", {parameters:[form.elements["username"].value], context: {
			callback: function(usernameExists)
			{
				if (usernameExists)
				{
					document.getElementById("label_username").className = "failed";
					checkObj.checkFail = true;
					checkObj.message = "Het e-mailadres is al in gebruik.";
				}
			}
		}});
	}
	
	if (document.getElementById("label_password") != undefined)
	{
		// Password check
		document.getElementById("label_password").className = "";
		document.getElementById("label_password2").className = "";
	
		var p1 = document.getElementById("password").value;
		var p2 = document.getElementById("password2").value;
	
		if (p1.length > 0 && p2.length == 0)
		{
			document.getElementById("label_password2").className = "failed";
			checkObj.checkFail = true;
			checkObj.message = "Vul het 2e wachtwoord veld in.";
		}
		else if (p1.length == 0 && p2.length > 0)
		{
			document.getElementById("label_password").className = "failed";
			checkObj.checkFail = true;
			checkObj.message = "Vul het 1e wachtwoord veld in.";
		}
		else if (p1.length == 0 && p2.length == 0)
		{
			document.getElementById("label_password").className = "failed";
			document.getElementById("label_password2").className = "failed";
			checkObj.checkFail = true;
			checkObj.message = "Het nieuwe wachtwoord en de herhaling zijn niet ingevuld.";
		}
		else if (p1 != p2)
		{
			document.getElementById("label_password").className = "failed";
			document.getElementById("label_password2").className = "failed";
			checkObj.checkFail = true;
			checkObj.message = "Het 1e en 2e wachtwoord komen niet overeen.";
		}
	}
	
	if (checkObj.checkFail)
	{
		document.getElementById("submitBtn").disabled = false;
		window.alert(checkObj.message);
	}
		
	return !checkObj.checkFail;
}

function reactionCheck(msg)
{
	var emailField = document.getElementById("email");
	var websiteField = document.getElementById("website");
	var commentField = document.getElementById("comment");
	
	emailField.className = "text";
	websiteField.className = "text";
	commentField.className = "text";
	
	var error = false;
	
	var regXemail = new RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum))$/);
	var regXsite = new RegExp(/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-_!]+)*(:[0-9]+)?(\/.*)?$/);
	
	if (!regXemail.test(emailField.value))
	{
		emailField.className = "failed";
		error = true;
	}
	if (websiteField.value != "" && websiteField.value != "http://" && !regXsite.test(websiteField.value.toLowerCase()))
	{
		websiteField.className = "failed";
		error = true;
	}
	if (commentField.value == "")
	{
		commentField.className = "failed";
		error = true;
	}

	if (error)
	{
		window.alert(msg);
		return false;
	}
}
