//highlight a field, typically in another color than white
function highlightField(obj) {
  if($(obj) != null){
	  $(obj).setStyle({backgroundColor: 'yellow'});
	}
}
//undo the highlighting of a field, typically put the backgroundcolor back to white
function resetFieldColor(obj) {
  if($(obj) != null)
	  $(obj).setStyle({backgroundColor: 'white'});
}
//showValidationError (for the moment doing only highlightField)
function showValidationError(field) {
		highlightField(field);
}
//hideValidationError ((for the moment doing only resetFieldColor)
function hideValidationError(field) {
		resetFieldColor(field);
}
//showValidationError simultaneously for 2 fields 
function showCompareValidationError(field1, field2) {
	showValidationError(field1);
	showValidationError(field2);
}
//hideValidationError simultaneously for 2 fields 
function hideCompareValidationError(field1, field2) {
	hideValidationError(field1);
	hideValidationError(field2);
}
//check whether required field has a non-empty value
function validateRequiredField(field) {
	var value = $F(field);
	//typing just 1 or more spaces is allowed
	//remark: the obligation to type something else than space should be defined in another function
    if(value.length == 0) {
		showValidationError(field);
		return false;
	} else {	
		hideValidationError(field);		
		return true;
	}
}
function validateLengthInterval(field,minValue,maxValue) {
  validateRangeField(field,minValue,maxValue);
}
//check whether the length of the value in a field is between the minValue and maxValue (minValue <= field <= maxValue)
function validateRangeField(field,minValue,maxValue) {
	var valueText = $F(field);
	var value = valueText.length
	var numberOfChecks = 0;
	var numberOfFailures = 0;
  
  if(minValue != null) {
    numberOfChecks++;
		if(value < minValue) {
		  numberOfFailures++;
		} 
	} 
  if(maxValue != null) {
    numberOfChecks++;
		if(value > maxValue) {
			numberOfFailures++;
		} 
	} 
  if(numberOfChecks == 0) {
    hideValidationError(field);
    return true;
  } else {
    if (numberOfFailures == 0) {
      hideValidationError(field);
      return true;
    } else {
      showValidationError(field);
      return false;
    }
  }
}
//check whether field1 operator field2? the operator is a parameter ('eq' or 'not' standing resp. for == or !=)
function validateCompareFields(field1,field2,operator) {
	if(operator == 'eq')
		return validateEquality(field1,field2);
	else if(operator == 'not')
		return validateNotEquals(field1,field2);
}
//check whether field 1 == field2
function validateEquality(field1,field2) {
	var value1 = $F(field1);
	var value2 = $F(field2);
	
	if(value1 == value2) {
		hideCompareValidationError(field1, field2);
		return true;
	}
	else {
		showCompareValidationError(field1, field2);
		return false;
	}
}
//check whether field1 differs from field2
function validateNotEquals(field1,field2) {
	var value1 = $F(field1);
	var value2 = $F(field2);
	
	if(value1 != value2) {
		hideCompareValidationError(field1, field2);
		return true;
	}
	else {
		showCompareValidationError(field1, field2);
		return false;
	}
}
//check whether a field matches a regex
function validateRegExp(field,pattern) {
	var value = $F(field);
	if(value == "") {
		hideValidationError(field);
		return true;
	}
	
	if(value.match(pattern) == null) {		
		showValidationError(field);
		return false;
	}
	else {
		hideValidationError(field);
		return true;
	}
}
//check whether a field has a specific length
function validateLengthExactly(field, exactValue) {
	var value = $F(field);
	if(value.length != exactValue) {
		showValidationError(field);
		return false;
	} else {
		hideValidationError(field);
		return true;
	}
}
/*check whether a field equals a StringToCompare
without generating validationErrors*/
function testEqual(field,StringToCompare){
	var value = $F(field);
	if(value == StringToCompare) {
		return true;
	}
	else {
		return false;
	}
}


