/**
 * Calculate the distances by using the numbers, strings and dates.
 * @param  {node} source
 * @param  {node} target
 * @param  {array} properties - the properties of the nodes.
 * @return {number}            the distance between source and target nodes.
 */
function calculateEuclideanDistanceTSNE (source, target, properties, normArgs) {
  var dotProduct = 0.0,
    sumX = 0.0,
    sumY = 0.0;

  // console.log(normArgs);
  // Iterate through every column of data
  for (var i = 0; i < properties.length; i++) {
    property = properties[i];
    if (source.hasOwnProperty(property) && target.hasOwnProperty(property) &&
      property.toLowerCase() !== 'class') {
      var s = source[property],
        t = target[property];

      dotProduct += s * t;

      sumX += s * s;
      sumY += t * t;
    }
  }

  // console.log("Dot", dotProduct);
  // console.log((-2 * dotProduct) + sumX + sumY);

  return -2 * dotProduct + sumX + sumY;
}
