function invalidateInputGroup(isInputGroupName)
{
  document.getElementById(isInputGroupName + "_labelTD").className	= "tdValidationError";
  document.getElementById(isInputGroupName + "_inputTD").className	= "tdValidationError";
}
function disableInputGroup(isInputGroupName)
{
  document.getElementById(isInputGroupName + "_labelTD").className	= "tdLabelDisabled";
  document.getElementById(isInputGroupName + "_inputTD").className	= "tdData";
}
function reactivateInputGroup(isInputGroupName)
{
  document.getElementById(isInputGroupName + "_labelTD").className	= "tdLabel";
  document.getElementById(isInputGroupName + "_inputTD").className	= "tdData";
}
function setDateControlGroupStatus(isControlGroupName, isClassName, ibDisabledFlag)
{
  document.getElementById(isControlGroupName + "Days").disabled		= ibDisabledFlag;
  document.getElementById(isControlGroupName + "Months").disabled	= ibDisabledFlag;
  document.getElementById(isControlGroupName + "Years").disabled	= ibDisabledFlag;
  document.getElementById(isControlGroupName + "Days").className	= isClassName;
  document.getElementById(isControlGroupName + "Months").className	= isClassName;
  document.getElementById(isControlGroupName + "Years").className	= isClassName;
}
function disableInputControl(isFormName, isControlName, isGroupName, ibResetValue)
{
  var OForm = eval("document." + isFormName);
  OForm.elements[isControlName].className						= "Disabled";
  OForm.elements[isControlName].disabled						= true;
  document.getElementById(isGroupName + "_labelTD").className	= "tdLabelDisabled";
  document.getElementById(isGroupName + "_inputTD").className	= "tdLabelDisabled";
  if (ibResetValue) OForm.elements[isControlName].value = "";
}
function enableInputControl(isFormName, isControlName, isGroupName, ibFocus)
{
  var OForm = eval("document." + isFormName);
  OForm.elements[isControlName].className						= "";
  OForm.elements[isControlName].disabled						= false;
  document.getElementById(isGroupName + "_labelTD").className	= "tdLabel";
  document.getElementById(isGroupName + "_inputTD").className	= "tdData";
  if (ibFocus) OForm.elements[isControlName].focus();
}

/*
 * Validates an amount control as required.
 * Arguments:
 *   isFormName         - the name of the form
 *   isControlName      - the control to validate
 *   isControlGroupName - the group in which the control occurs (marked valid or invalid)
 *   iiNumberType       - Numeric type check to perform: 0 = integers only [isNumber()] (DEFAULT)
 *                                                       1 = decimals only [isDecimalNumber()] (was ibAllowIntegers = false)
 *                                                       2 = a number [isDecimalOrNumber()] (was ibAllowIntegers = true)
 *   ibErrorFound       - error already found flag
 * Return: -1 indicates error, 0 indicates the field is empty, +1 indicates valid data in field
 */
function validateAmountControl(isFormName, isControlName, isControlGroupName, iiNumberType, ibErrorFound)
{
  var sControlValue;
  var OForm = eval("document." + isFormName);
  
  sControlValue = trimString(OForm.elements[isControlName].value);
  
  if (sControlValue.length > 0)
  {
	if ( (iiNumberType == 2 && isDecimalOrNumber(sControlValue)==false ) ||
	     (iiNumberType == 1 && !isDecimalNumber(sControlValue) ) ||
	     (iiNumberType == 0 && !isNumberONLY(sControlValue)) )
	{
      invalidateInputGroup(isControlGroupName);
	  if(!ibErrorFound)
	  {
	    OForm.elements[isControlName].focus();
	  }
	  return -1;
	}else{
	  reactivateInputGroup(isControlGroupName);
	  return 1;
	}
  }else{
	invalidateInputGroup(isControlGroupName);
	if(!ibErrorFound)
	{
		OForm.elements[isControlName].focus();
	}
	return -1;
  }
}

/*
 * Simple forwarding function for normal dd/mm/yyyy date control groups
 */
function validateDateControlGroup(isFormName, isGroupBaseName, ibErrorFound, iEarliestDate)
{
  return advValidateDateControlGroup(isFormName, isGroupBaseName, ibErrorFound, iEarliestDate, true, false)
}

/*
 * Validates that a date control group (consisting of separate day (optional), month and 
 * year controls) has been filled in with a valid date.
 * If iEarliestDate is not null it additionally checks that the date specified is after
 * the given earliest date. (Note must be null if not checking the days!)
 * The date may be made optional using the ibOptional parameter. An optional date is valid
 * if all fields are empty _or_ the combination of all fields is a valid date.
 */
function advValidateDateControlGroup(isFormName, isGroupBaseName, ibErrorFound, iEarliestDate, ibCheckDay, ibOptional)
{
  var bErrorFound = false;
  var OForm = eval("document." + isFormName);
  
  // alert ( OForm.elements[isGroupBaseName + "Days" ] );
  if ( ibCheckDay && !ibOptional && trimString(OForm.elements[isGroupBaseName + "Days"].value)=="")
  { 
	invalidateInputGroup(isGroupBaseName + "Group");
	OForm.elements[isGroupBaseName + "Days"].value="";
    bErrorFound = true;
	if (ibErrorFound == false)
	{
	  OForm.elements[isGroupBaseName + "Days"].focus();
	}
  }
	
  if ( !ibOptional && trimString(OForm.elements[isGroupBaseName + "Months"].value)=="")
  { 
    invalidateInputGroup(isGroupBaseName + "Group");
	OForm.elements[isGroupBaseName + "Months"].value="";
	if (ibErrorFound == false && bErrorFound == false)
	{
	  OForm.elements[isGroupBaseName + "Months"].focus();
	}
    bErrorFound = true;
  }
	
  if ( !ibOptional && trimString(OForm.elements[isGroupBaseName + "Years"].value)=="")
  {
    invalidateInputGroup(isGroupBaseName + "Group"); 
	OForm.elements[isGroupBaseName + "Years"].value="";
	if (ibErrorFound == false && bErrorFound == false) 
	{
	  OForm.elements[isGroupBaseName + "Years"].focus();
	}
	bErrorFound = true;
  }
	
  var dteInput
  dteInput = ( ibCheckDay ? trimString(OForm.elements[isGroupBaseName + "Days"].value) : "" )
           + trimString(OForm.elements[isGroupBaseName + "Months"].value)
           + trimString(OForm.elements[isGroupBaseName + "Years"].value);

  if (dteInput.length > 0)
  {
    if(!CheckDate(dteInput))
	{
	  invalidateInputGroup(isGroupBaseName + "Group");
	  if(!bErrorFound)
	  {
	    OForm.elements[isGroupBaseName + ( ibCheckDay ? "Days" : "Months" ) ].focus();
	  }
      bErrorFound = true;
    }

    if(bErrorFound == false && iEarliestDate != null)
	{	
	  dteInput = ( ibCheckDay ? trimString(OForm.elements[isGroupBaseName + "Days"].value) + '/' : '' )
	           + trimString(OForm.elements[isGroupBaseName + "Months"].value) + '/' 
	           + trimString(OForm.elements[isGroupBaseName + "Years"].value);
	  
	  if(!CheckFutureDate(iEarliestDate, dteInput))
	  {	
		invalidateInputGroup(isGroupBaseName + "Group");
		if (!bErrorFound)
		{
		  OForm.elements[isGroupBaseName + "Days"].focus();
		}
		bErrorFound = true;
	  }
	}
  }

  if (bErrorFound == false) reactivateInputGroup(isGroupBaseName + "Group");
  if(!ibErrorFound){return bErrorFound;}else{return ibErrorFound;}
}

function validateNonEmptyStringInput(isFormName, isInputControlName, isReactivateInput, ibErrorFound)
{
  var OForm = eval("document." + isFormName);
  
  if (trimString(OForm.elements[isInputControlName].value)=="")
  { 
    invalidateInputGroup(isReactivateInput);
	OForm.elements[isInputControlName].value="";
	if (!ibErrorFound)
	{
	  OForm.elements[isInputControlName].focus();
	}
	return true;
  }
  else
  {
    reactivateInputGroup(isReactivateInput);
    if(!ibErrorFound){return false;}else{return ibErrorFound;};
  }
}


function enableAmountOrPercentage(iOAmountControl, iOPercentControl, isType)
{
  if (document.getElementById(iOAmountControl).value!="")
  {
    enableInputs(iOAmountControl, iOPercentControl, isType);
  }
  else
  {
    if (document.getElementById(iOPercentControl).value!="")
    {
      enableInputs (iOPercentControl, iOAmountControl, isType);
    }
  }
}

function validateNINOInput(isFormName, isInputControlName, isReactivateInput, ibErrorFound)
{
  var OForm = eval("document." + isFormName);
  
  if ((trimString(OForm.elements[isInputControlName].value)=="") ||
		(!isNINO(OForm.elements[isInputControlName].value)))
  { 
    invalidateInputGroup(isReactivateInput);
	OForm.elements[isInputControlName].value="";
	if (!ibErrorFound)
	{
	  OForm.elements[isInputControlName].focus();
	}
	return true;
  }
  else
  {
    reactivateInputGroup(isReactivateInput);
    if(!ibErrorFound){return false;}else{return ibErrorFound;}
   }
}


function minimumCheck(isFormName, isInputControlName, isReactivateInput, ibErrorFound, iiMinimum)
{
	var OForm = eval("document." + isFormName);
	
	if(Number(OForm.elements[isInputControlName].value) < iiMinimum)
	{
		invalidateInputGroup(isReactivateInput);
		if (!ibErrorFound)
		{
			OForm.elements[isInputControlName].focus();
		}
		return true;
	}else{
		reactivateInputGroup(isReactivateInput);
		if(!ibErrorFound){return false;}else{return ibErrorFound;}
	}
}

function maximumCheck(isFormName, isInputControlName, isReactivateInput, ibErrorFound, iiMaximum)
{
	var OForm = eval("document." + isFormName);
	
	if(Number(OForm.elements[isInputControlName].value) > iiMaximum)
	{
		invalidateInputGroup(isReactivateInput);
		if (!ibErrorFound)
		{
			OForm.elements[isInputControlName].focus();
		}
		return true;
	}else{
		reactivateInputGroup(isReactivateInput);
		if(!ibErrorFound){return false;}else{return ibErrorFound;}
	}
}

function checkDropDownSelected(isFormName, isControlName, ilDefaultLength, ibErrorFound)
{
	var OForm = eval("document." + isFormName);
	var bErrorFound=false;
	if (OForm.elements[isControlName].options(OForm.elements[isControlName].selectedIndex).text.length == ilDefaultLength)
	{ 
		invalidateInputGroup(isControlName);
		if(!ibErrorFound)
		{
		    OForm.elements[isControlName].focus();
		}
		bErrorFound=true;
	}else{
		reactivateInputGroup(isControlName);
	}
	if(!ibErrorFound){return bErrorFound;}else{return ibErrorFound;}
}

function checkDropDownValueSelected(isFormName, isControlName, ibErrorFound)
{
	var OForm = eval("document." + isFormName);
	var bErrorFound=false;
	if (OForm.elements[isControlName].selectedIndex== 0)
	{ 
		invalidateInputGroup(isControlName);
		if(!ibErrorFound)
		{
		    OForm.elements[isControlName].focus();
		}
		bErrorFound=true;
	}else{
		reactivateInputGroup(isControlName);
	}
	if(!ibErrorFound){return bErrorFound;}else{return ibErrorFound;}
}