// Validate a Key
function vk(e, allowSign, allowDot)
{
  e = e ? e : event;
  var keyCode= e.charCode? e.charCode : e.keyCode
   
  if ((keyCode > 47 && keyCode < 58) ||     // '0'-'9'
      (keyCode == 45 && allowSign) ||       // '-' 
      // '.' and "delete" have same keyCode (46)
      // If disallow this keyCode for '.', "delete" will also be disallowed
      (keyCode == 46) || //&& allowDot) ||  // '.' or "delete"
      (keyCode == 8) ||                     // backspace
      (keyCode > 32 && keyCode < 41))       // navigation
  {
    e.returnValue = true;
  }
  else
  {
    //disable key press
    if (e.preventDefault) 
    {
      e.preventDefault();
    }
    e.returnValue = false;    
  }
}

// Validate a Number
function vn(input, scale, defaultValue, minValue, maxValue, forceScaleZeros)
{
  var value = parseFloat(input.value);
  var result = value;
  
  if (isNaN(value))
  {
    result = defaultValue;
  }
  else if (result > maxValue)
  {
    result = maxValue;
  }
  else if (result < minValue)
  {
    result = minValue;
  }
  
  result = result.toString();
  var dotPosition = result.indexOf('.');
   
  if (dotPosition >= 0)
  {
    if (scale > 0)
    {
      // Maximum allowed length 
      var maxLength = dotPosition + 1 + scale;
    
      if (maxLength < result.length)
      { 
        // Trim 
        result = result.substr(0, maxLength);
      }
      else if (forceScaleZeros)
      {
        // Add zeros
        result += BuildZeroChain(maxLength - result.length); 
      }
    }  
    else
    {
      // Get integer part only
      result = result.substr(0, dotPosition)
    } 
  }
  else if ((scale > 0) && forceScaleZeros)
  {
    // Add zeros
    result += '.' + BuildZeroChain(scale); 
  } 
  
  input.value = result;
}

function BuildZeroChain(quantity)
{
  var result = "";
  for (var i = 0; i < quantity; i++)
  {
    result += "0";
  }
  return result;
}
