//
// File        : check_functions.js
// Description : general JAVASCRIPT functions to check user input 
//
//
//
//



/*
' Function		: CheckInt
' Description	: Checks if object contains a valid int
' Arguments		:
' Returns		: 0 = OK
'             -1 = not integer
'             -2 = value < min
'             -3 = value > max
*/
function CheckInt(objControl, sFieldDescription, bAllowEmpty, iMin, iMax, bSilent)
{
	var s = Trim(objControl.value)
	objControl.value = s;

	if ( (bAllowEmpty) && (s == ""))
		return 0;

	var iError = 0
	var iValue = String2Int(s)
	if (isNaN(iValue)) // Tsja????
		iError = -1;
	else
	{
		if (iMin != null)
			if (iValue < iMin)
				iError = -2;
		if (iMax != null)
			if (iValue > iMax)
				iError = -3;
	}

	if (iError != 0)
	{
		if (!bSilent)
		{
			switch (iError)
			{
				case -1 : alert("Vul een geheel getal in voor " + sFieldDescription); break;
				case -2 :
				case -3 : if ((iMin != null) && (iMax != null))
							alert("Vul voor " + sFieldDescription + " een geheel getal in tussen " + iMin.toString() + " en " + iMax.toString());
						  else
							alert("Vul voor " + sFieldDescription + " een geheel getal in " + ((iError == -2) ? "groter" : "kleiner") + " dan of gelijk aan " + (iError == -2) ? iMin.toString() : iMax.toString());
						  break;
			}
			objControl.focus();
			objControl.select();
		}
		return iError;
	}

	objControl.value = iValue.toString();
	return 0;
}

/*
' Function		: CheckFloat
' Description	: Checks if object contains a valid float
' Arguments		:
' Returns		:
*/
function CheckFloat(objControl, sFieldDescription, bAllowEmpty, dMin, dMax, bSilent)
{
	var s = Trim(objControl.value)
	objControl.value = s;

	if ( (bAllowEmpty) && (s == ""))
		return 0;

	var iError = 0;
	var dValue = parseFloat(s)
	if (isNaN(dValue)) // Tsja????
		iError = -1;
	else
	{
		if (dMin != null)
			if (dValue < dMin)
				iError = -2;
		if (dMax != null)
			if (dValue > dMax)
				iError = -3;
	}

	if (iError != 0)
	{
		if (!bSilent)
		{
			switch (iError)
			{
				case -1 : alert("Vul een getal in voor " + sFieldDescription); break;
				case -2 :
				case -3 : if ((dMin != null) && (dMax != null))
							alert("Vul voor " + sFieldDescription + " een getal in tussen " + dMin.toString() + " en " + dMax.toString());
						  else
							alert("Vul voor " + sFieldDescription + " een getal in " + ((iError == -2) ? "groter" : "kleiner") + " dan of gelijk aan " + (iError == -2) ? dMin.toString() : dMax.toString());
						  break;
			}
			objControl.focus();
			objControl.select();
		}
		return iError;
	}

	objControl.value = dValue.toString();
	return 0;
}


/*
' Function		: CheckDate
' Description	: Checks if object contains a valid date
' Arguments		:
' Returns		:
'           
*/
function CheckDate(objControlDay, objControlMonth, objControlYear, sFieldDescription, bAllowEmpty, tMin, tMax, bSilent)
{
	var day   = Trim(objControlDay.value);
	var month = Trim(objControlMonth.value);
	var year  = Trim(objControlYear.value);

	if ((bAllowEmpty) && (year + month + day == ""))
		return 0;

	var iError = 0
	if (!StringsContainDate(year, month, day))
		iError = -1;
	else
	{
		var tEnteredDate = new Date(String2Int(year), String2Int(month) - 1, String2Int(day));
		if (tMin != null)
			if (tEnteredDate < tMin)
				iError = -2;
		if (tMax != null)
			if (tEnteredDate > tMax)
				iError = -3;
	}

	if (iError != 0)
	{
		if (!bSilent)
		{
			switch (iError)
			{
				case -1 : alert("Vul een correcte datum in (dag-maand-jaar) voor " + sFieldDescription); break;
				case -2 :
				case -3 : if ((tMin != null) && (tMax != null))
							alert("Vul voor " + sFieldDescription + " een datum in tussen " + Date2String(tMin) + " en " + Date2String(tMax));
						  else
							alert("Vul voor " + sFieldDescription + " een datum in " + ((iError == -2) ? "groter" : "kleiner") + " dan of gelijk aan " + Date2String(iError == -2 ? tMin : tMax));
						  break;
			}
			objControlDay.focus();
			objControlDay.select();
		}
		return iError;
	}

	objControlDay.value   = AddLeadingCharacters (day, '0', objControlDay.size);
	objControlMonth.value = AddLeadingCharacters (month, '0', objControlMonth.size);
	objControlYear.value  = AddLeadingCharacters (year, '0', objControlYear.size);

	return 0;
}

/*
' Function		: CheckTime
' Description	: Checks if objects contains a valid time
' Arguments		: tMin en tMax van type Date, maar alleen uren en minuten gedeelte wordt gebruikt
' Returns		:
*/
function CheckTime(objControlHour, objControlMinute, sFieldDescription, bAllowEmpty, tMin, tMax, bSilent)
{
  var sHour = Trim(objControlHour.value);
  var sMinute = Trim(objControlMinute.value);

  if ((bAllowEmpty) && (sHour + sMinute == ""))
    return 0;

	var iError = 0
  if ( !StringsContainTime(sHour, sMinute, '0') )
		iError = -1;
	else
	{
		var tEnteredTime = new Date(2000,0,1,String2Int(sHour),String2Int(sMinute),0);// converted to 1/1/2000
		if (tMin != null)
    {
     var tMin20000101 = new Date(2000,0,1,tMin.getHours(),tMin.getMinutes(),tMin.getSeconds());
			if (tEnteredTime < tMin20000101)
				iError = -2;
    }
		if (tMax != null)
    {
      var tMax20000101 = new Date(2000,0,1,tMax.getHours(),tMax.getMinutes(),tMax.getSeconds());
			if (tEnteredTime > tMax20000101)
				iError = -3;
    }
	}

	if (iError != 0)
	{
		if (!bSilent)
		{
			switch (iError)
			{
				case -1 : alert("Vul een correcte tijd in (uren:minuten) voor " + sFieldDescription); break;
				case -2 :
				case -3 : if ((tMin != null) && (tMax != null))
							alert("Vul voor " + sFieldDescription + " een tijd in tussen " + Time2String(tMin) + " en " + Time2String(tMax));
						  else
							alert("Vul voor " + sFieldDescription + " een tijd in " + ((iError == -2) ? "groter" : "kleiner") + " dan of gelijk aan " + Time2String(iError == -2 ? tMin : tMax));
						  break;
			}
			objControlHour.focus();
			objControlHour.select();
		}
		return iError;
  }
      
  objControlHour.value   = AddLeadingCharacters (sHour.toString(), '0', objControlHour.size);
	objControlMinute.value = AddLeadingCharacters (sMinute.toString(), '0', objControlMinute.size);

	return 0;

}


/*
' Function		: CheckString
' Description	: Checks if object contains a valid string
' Arguments		:
' Returns		:
' Remarks		: Until now only empty/not empty and maxlength are checked.
*/
function CheckString(objControl, sFieldDescription, bAllowEmpty, iMaxLength, bSilent)
{
//	var s = Trim(objControl.value);
	var s = objControl.value;
//	objControl.value = s;

	if ( (bAllowEmpty) && (Trim(s) == ""))
		return 0;

	var iError = 0;
	if ((iMaxLength > 0) && (s.length > iMaxLength))
		iError = -2;
	
	if ((!bAllowEmpty) && (Trim(s) == ""))
		iError = -1;

	if (iError != 0)
	{
		if (!bSilent)
		{
			switch (iError)
			{
				case -1 : alert("Vul een waarde in voor " + sFieldDescription); break;
				case -2 : alert(FirstCharacterUppercase(sFieldDescription) + " mag niet langer zijn dan " + iMaxLength + " karakters" ); break;
			}
			objControl.focus();
			objControl.select();
		}
		return iError;
	}

	return 0;
}

function ConvertToTSQLString (v)
{
  switch (typeof(v))
  {
    case "number"  : return v.toString();
    case "string"  : return "'" + v.replace(/'/g,"''") + "'";
    case "boolean" : return v ? 1 : 0;
    case "object"  : if (v == null) return "null"
                     if (v instanceof Date) return "'" + (v.getMonth() + 1).toString() + "/" + v.getDate().toString() + "/" + v.getYear() + " " + v.getHours() + ":" + v.getMinutes() + ":" + v.getSeconds() + "'"
                     document.write("Cannot convert to TSQL string: " + typeof(v)); 
                     return null;
    default	       : document.write("Cannot convert to TSQL string: " + typeof(v));
                     return null;          
  }
}

