// (c) 2005-2007 by Rob Jansman, http://www.xs4all.nl/~rjansman/ict/

function ErrorMsg(nIndex)
{
	var s = aLang[nIndex];
	for (var i=1; i<arguments.length; i++)
		s = s.replace(new RegExp("%" + i, "g"), arguments[i]);
	return s;
}

function SetMsg(idMsgContainer, sMsg)
{
	var objMsg = document.getElementById(idMsgContainer);
	objMsg.innerHTML = sMsg;
}

function ResetMsgContainers()
{
	for (var i=0; i<arguments.length; i++)
	{
		var objMsg = document.getElementById(arguments[i]);
		if (objMsg)
			objMsg.innerHTML = "&nbsp;";
	}
}

function CheckNotEmpty(ctrl, idMsgContainer, sSubj, sUnalteredDefault)
{
	var objMsg = document.getElementById(idMsgContainer);

	if (ctrl.value.length && (ctrl.value != sUnalteredDefault))
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	setTimeout("SetMsg('" + idMsgContainer + "', '" + ErrorMsg("missing1", sSubj) + "')", 100);
//	objMsg.innerHTML = ErrorMsg("missing1", sSubj);
	return false;
}

function CheckLimitedText(ctrl, idMsgContainer, sLimitTo, sSubj)
{
	var objMsg = document.getElementById(idMsgContainer);

	var aMatches = ctrl.value.match(new RegExp("[^" + sLimitTo + "]", "g"));
	if (aMatches && (aMatches.length > 0))
	{
		objMsg.innerHTML = ErrorMsg("limittext1", sSubj, aMatches.join("', '"));
		return false;
	}

	objMsg.innerHTML = "&nbsp;";
	return true;
}

function CheckIntMinMax(ctrl, idMsgContainer, nMin, nMax, sSubj)
{
	var objMsg = document.getElementById(idMsgContainer);

	if (!ctrl.value.length)
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	if (ctrl.value.search(/[^\d-]/) != -1)
		objMsg.innerHTML = ErrorMsg("num1", sSubj);
	else if (ctrl.value < nMin)
		objMsg.innerHTML = ErrorMsg("num4", nMin);
	else if (ctrl.value > nMax)
		objMsg.innerHTML = ErrorMsg("num5", nMax);
	else
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	return false;
}

function CheckMoneyMinMax(ctrl, idMsgContainer, nMin, nMax, sSubj)
{
	ctrl.value = ctrl.value.replace(/[,\.][\s=-]*$/, ".00");
	ctrl.value = ctrl.value.replace(/([,\.]\d{2})[^,\.]+$/, "$1");

	return CheckFloatMinMax(ctrl, idMsgContainer, nMin, nMax, sSubj);
}

function CheckFloatMinMax(ctrl, idMsgContainer, nMin, nMax, sSubj)
{
	var objMsg = document.getElementById(idMsgContainer);

	if (!ctrl.value.length)
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	var fTmp = ctrl.value.replace(/,/, ".") * 1.0;

	if (ctrl.value.search(/[^\d,\.-]/) != -1)
		objMsg.innerHTML = ErrorMsg("num2", sSubj);
	else if (ctrl.value.search(/[,\.][^,\.]*[,\.]/) != -1)
		objMsg.innerHTML = ErrorMsg("num3", sSubj);
	else if (fTmp < nMin)
		objMsg.innerHTML = ErrorMsg("num4", sSubj, nMin);
	else if (fTmp > nMax)
		objMsg.innerHTML = ErrorMsg("num5", sSubj, nMax);
	else
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	return false;
}

function CheckEmail(ctrl, idMsgContainer)
{
	var objMsg = document.getElementById(idMsgContainer);

	if (!ctrl.value.length ||
		(ctrl.value.search(/^[\da-z~!#$%&_-]([.]?[\da-z~!#$%&_-])*@[\da-z~!#$%&_-]([.]?[\da-z~!#$%&_-])*$/i) != -1))
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	objMsg.innerHTML = ErrorMsg("email1", ctrl.value);
	return false;
}

function CheckPostcode(ctrl, idMsgContainer, sCountryField)
{
	var objMsg = document.getElementById(idMsgContainer);

	if (!ctrl.value.length)
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	ctrl.value = ctrl.value.toUpperCase();

	var idCountry = 0;
	var sCountryName = false;
	if (sCountryField && ctrl.form && ctrl.form[sCountryField])
	{
		var nIndex = ctrl.form[sCountryField].selectedIndex;
		idCountry = ctrl.form[sCountryField].options[nIndex].value * 1;
		sCountryName = ctrl.form[sCountryField].options[nIndex].text;
	}

	switch (idCountry)
	{
	case 0:	// Nederland
		if (ctrl.value.search(/^[1-9][0-9]{3}[ ][A-Z]{2}$/) != -1)
			break;
		objMsg.innerHTML = ErrorMsg("postcode1", ctrl.value);
		return false;
	case 1:	// België
	case 8:	// Denemarken
	case 9:	// Noorwegen
	case 10:	// Oostenrijk
	case 11:	// Portugal
	case 12:	// Zwitserland
		if (ctrl.value.search(/^[0-9]{4}$/) != -1)
			break;
		objMsg.innerHTML = ErrorMsg("postcode2", ctrl.value, 4, sCountryName ? sCountryName : aLang["ditland"]);
		return false;
	case 3:	// Deutschland
	case 4:	// Frankrijk
	case 5:	// Finland
	case 6:	// Italië
	case 7:	// Spanje
		if (ctrl.value.search(/^[0-9]{5}$/) != -1)
			break;
		objMsg.innerHTML = ErrorMsg("postcode2", ctrl.value, 5, sCountryName ? sCountryName : aLang["ditland"]);
		return false;
	case 2:	// United Kingdom
		if (ctrl.value.search(/^(([A-Z]{3})|((([A-Z]{2})|[A-Z])(([0-9]{2})|([0-9][A-Z])|[0-9])))[ ][0-9][A-Z]{2}$/) != -1)
			break;
		objMsg.innerHTML = ErrorMsg("postcode3", ctrl.value);
		return false;
	case 13:	// Zweden
		if (ctrl.value.search(/^[0-9]{3}[ ][0-9]{2}$/) != -1)
			break;
		objMsg.innerHTML = ErrorMsg("postcode4", ctrl.value);
		return false;
	default:
		objMsg.innerHTML = "&nbsp;";
		return true;	// no validation for countries we don't know
	}

	objMsg.innerHTML = "&nbsp;";
	return true;	// passed validation
}

function CheckPhoneNrIntl(ctrl, idMsgContainer, sCountryField, sPostcodeField, sPlaatsField)
{
	var idCountry = 0;
	if (sCountryField && ctrl.form && ctrl.form[sCountryField])
	{
		var nIndex = ctrl.form[sCountryField].selectedIndex;
		idCountry = ctrl.form[sCountryField].options[nIndex].value * 1;
	}

	if (!idCountry)
		return CheckPhoneNr(ctrl, idMsgContainer, (sPostcodeField || sPlaatsField), sPostcodeField, sPlaatsField)

	var objMsg = document.getElementById(idMsgContainer);

	if (!ctrl.value.length || (ctrl.value.search(/[^0-9- \+\)\(]/) == -1))
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	objMsg.innerHTML = ErrorMsg("tel6", ctrl.value);
	return false;
}

function CheckPhoneNr(ctrl, idMsgContainer, bBeautify, sPostcodeField, sPlaatsField)
{
	var objMsg = document.getElementById(idMsgContainer);

	if (!ctrl.value.length)
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	if (bBeautify)
		BeautifyPhoneNr(ctrl, sPostcodeField, sPlaatsField);

	if ((ctrl.value.search(/^\+/) != -1) || (ctrl.value.search(/^00[1-9\s\)]/) != -1))
	{
		objMsg.innerHTML = "&nbsp;";
		return true;	// buitenlands nr (we kunnen niet alle bestaande formaten checken)
	}

	if (ctrl.value.search(/^0(6-[1-9][0-9]{2}|[1-9][0-9]-[1-9][0-9]|[1-9][0-9]{2}-[1-9])[0-9]{5}$/) != -1)
	{
		objMsg.innerHTML = "&nbsp;";
		return true;	// geldig nederlands nr: 0(6-ddd|dd-dd|ddd-d)ddddd
		// (06-dddddddd, eerste d na streepje ongelijk 0)
		// (0dd-ddddddd, eerste d na 0 en na streepje ongelijk 0)
		// (0ddd-dddddd, eerste d na 0 en na streepje ongelijk 0)
	}

	var nCount = 0;
	for (var i=0; i<ctrl.value.length; i++)
	{
		var c = ctrl.value.charAt(i);
		if (c.search(/[0-9]/) != -1)
			++nCount;
	}

	if (ctrl.value.search(/[^0-9- \+]/) != -1)
		objMsg.innerHTML = ErrorMsg("tel1", ctrl.value);
	else if ((ctrl.value.charAt(0) != "0") && (ctrl.value.substring(0, 2) != "(0"))
	{
		if (nCount <= 7)
			objMsg.innerHTML = ErrorMsg("tel2", ctrl.value);
		else
			objMsg.innerHTML = ErrorMsg("tel3", ctrl.value);
	}
	else if (nCount != 10)
		objMsg.innerHTML = ErrorMsg("tel4", ctrl.value, nCount);
	else
		objMsg.innerHTML = ErrorMsg("tel5", ctrl.value);
	return false;
}

function CheckTimeFormat(ctrl, idMsgContainer, bWithSeconds)
{
	var objMsg = document.getElementById(idMsgContainer);

	if (!ctrl.value.length)
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	if (ctrl.value.search(/[^:\d]/) != -1)
		objMsg.innerHTML = ErrorMsg("time1", ctrl.value);
	else if (!bWithSeconds && (ctrl.value.search(/^\d\d(:\d\d)$/) == -1))
		objMsg.innerHTML = ErrorMsg("time2", ctrl.value);
	else if (bWithSeconds && (ctrl.value.search(/^\d\d:\d\d:\d\d$/) == -1))
		objMsg.innerHTML = ErrorMsg("time3", ctrl.value);
	else if (!bWithSeconds && (ctrl.value.search(/^((([01]\d|2[0-3]):[0-5]\d)|(24:00))$/) == -1))
		objMsg.innerHTML = ErrorMsg("time4", ctrl.value);
	else if (bWithSeconds && (ctrl.value.search(/^((([01]\d|2[0-3]):[0-5]\d:[0-5]\d)|(24:00:00))$/) == -1))
		objMsg.innerHTML = ErrorMsg("time4", ctrl.value);
	else
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	return false;
}

function CheckPastDateFormat(ctrl, idMsgContainer, sSubj)
{
	if (CheckDateFormat(ctrl, idMsgContainer))
	{
		if (!ctrl.value.length)
			return true;

		var dateNow = new Date();
		var a = ctrl.value.split("-");

		if (a[2].length == 2)
		{
			a[2] = a[2] * 1 + 2000;
			var dateValue = new Date(a[2], a[1] - 1, a[0]);
			if (dateValue.getTime() > dateNow.getTime())
				a[2] -= 100;
			ctrl.value = a[0];
			for (var i=1; i<a.length; i++)
				ctrl.value += "-" + a[i];
		}
		else
		{
			var dateValue = new Date(a[2], a[1] - 1, a[0]);
			if (dateValue.getTime() > dateNow.getTime())
			{
				var objMsg = document.getElementById(idMsgContainer);
				objMsg.innerHTML = ErrorMsg("date4", ctrl.value, sSubj);
				return false;
			}
		}

		return true;
	}

	return false;
}

function CheckDateFormat(ctrl, idMsgContainer, bYearObliged, bMakeFullYear)
{
	var objMsg = document.getElementById(idMsgContainer);

	if (!ctrl.value.length)
	{
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	if ((arguments.length == 2) || bMakeFullYear)
		bYearObliged = true;

	if (ctrl.value.search(/[^-\d]/) != -1)
		objMsg.innerHTML = ErrorMsg("date1", ctrl.value);
	else if (bYearObliged && (ctrl.value.search(/^\d{1,2}-\d{1,2}-(\d{4}|\d\d)$/) == -1))
		objMsg.innerHTML = ErrorMsg("date2", ctrl.value);
	else if (!bYearObliged && (ctrl.value.search(/^\d{1,2}-\d{1,2}(-(\d{4}|\d\d))?$/) == -1))
		objMsg.innerHTML = ErrorMsg("date2", ctrl.value);
	else if (bYearObliged && (ctrl.value.search(/^([12]\d|3[01]|0?[1-9])-(1[0-2]|0?[1-9])-(20\d\d|19\d\d|\d\d)$/) == -1))
		objMsg.innerHTML = ErrorMsg("date3", ctrl.value);
	else if (!bYearObliged && (ctrl.value.search(/^([12]\d|3[01]|0?[1-9])-(1[0-2]|0?[1-9])(-(20\d\d|19\d\d|\d\d))?$/) == -1))
		objMsg.innerHTML = ErrorMsg("date3", ctrl.value);
	else
	{
		if (bMakeFullYear)
		{
			var a = ctrl.value.split("-");
			if (a[2].search(/^\d\d$/) == 0)
			{
				var dateNow = new Date();
				a[2] = a[2] * 1 + 2000;
				if (a[2] > (dateNow.getFullYear() + 50))
					a[2] -= 100;
				ctrl.value = a[0];
				for (var i=1; i<a.length; i++)
					ctrl.value += "-" + a[i];
			}
		}
		objMsg.innerHTML = "&nbsp;";
		return true;
	}

	return false;
}

function ReverseDate(sDate)
{
	var aTmp = sDate.split("-");
	return aTmp[2] + "-" + aTmp[1] + "-" + aTmp[0];
}

function CheckSplitDateNotEmpty(form, sName, idMsgContainer, sSubj, nField)
{
	var aPostFixes = ["_d", "_m", "_y"];
	for (var i=0; i<nField; i++)
	{
		var ctrl = form[sName + aPostFixes[i]];
		if (!CheckNotEmpty(ctrl, idMsgContainer, sSubj))
			return false;
	}
	return true;
}

function CheckDateValues(form, sName, idMsgContainer, bYearObliged, bMakeFullYear)
{
	var objMsg = document.getElementById(idMsgContainer);
	var aPostFixes = ["_d", "_m", "_y"];
	var aMin = [1, 1, 0];
	var aMax = [31, 12, 9999];

	if ((arguments.length == 3) || bMakeFullYear)
		bYearObliged = true;
	var nCount = bYearObliged ? 3 : 2;

	for (var i=0; i<nCount; i++)
	{
		var ctrl = form[sName + aPostFixes[i]];
		if (ctrl.value.length)
		{
			if (ctrl.value.search(/[^\d]/) != -1)
			{
				objMsg.innerHTML = ErrorMsg("num1", aLang["date" + aPostFixes[i]]);
				return false;
			}
			else if (ctrl.value < aMin[i])
			{
				objMsg.innerHTML = ErrorMsg("num6", aLang["date" + aPostFixes[i]], aMin[i]);
				return false;
			}
			else if (ctrl.value > aMax[i])
			{
				objMsg.innerHTML = ErrorMsg("num7", aLang["date" + aPostFixes[i]], aMax[i]);
				return false;
			}
		}
	}
	if (bMakeFullYear)
	{
		if (ctrl.value.search(/^\d\d$/) == 0)
		{
			var dateNow = new Date();
			ctrl.value = ctrl.value * 1 + 2000;
			if (ctrl.value > (dateNow.getFullYear() + 50))
				ctrl.value -= 100;
		}
	}
	else if ((ctrl.maxLength == 2) && (ctrl.value.length == 1))
		ctrl.value = "0" + ctrl.value;

	objMsg.innerHTML = "&nbsp;";
	return true;
}

function EnableOther(ctrl, key, sName, idMsgContainer)
{
	var form = ctrl.form;
	form[sName].disabled = (ctrl.value != key);
	if (ctrl.value == key)
	{
		form[sName].focus();
		form[sName].select();
	}
	else
		document.getElementById(idMsgContainer).innerHTML = "&nbsp;";
}
