Source: tools/source/foundation.js



/**
  XT is the global namespace for all the "xTuple Tools" defined in
  lib/tools directory and elsewhere

  @namespace XT
 */
XT = typeof XT !== 'undefined' ? XT : {};

  /**
    @class XT.Foundation
    @name XT.Foundation
  */

_.extend(XT, /** @lends XT.Foundation# */{

  ASCII: {
    CARRIAGE_RETURN: 13,
    N_DASH: 45,
    ZERO: 48,
    NINE: 57,
    VULGAR_HALF: 189
  },

  // This will be updated from the server when we start our session
  debugging: false,

  _date: new Date(),

  // will be filled in by the relevant business objects
  documentAssociations: {},

  toReadableTimestamp: function (millis) {
    var re = XT._date || (XT._date = new Date());
    re.setTime(millis);
    return re.toLocaleTimeString();
  },

  generateUUID: function () {
    var d = new Date().getTime();
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
      var r = (d + Math.random() * 16) % 16 | 0;
      d = Math.floor(d / 16);
      return (c === 'x' ? r : (r&0x7|0x8)).toString(16);
    });

    return uuid;
  },

  getObjectByName: function (target) {

    if (!target.split) return null;

    var parts = target.split(".");
    var ret;
    var part;
    var idx = 0;
    for (; idx < parts.length; ++idx) {
      part = parts[idx];
      ret = ret ? ret[part] : typeof window !== 'undefined' ? window[part] : global[part];
      //ret = ret? ret[part] : window[part];
      if (ret === null || ret === undefined) {
        return null;
      }
    }
    return ret;
  },

  /**
    @NOTE: some logic borrowed from SproutCore
  */
  A: function (obj) {
    if (obj === null || obj === undefined) return [];
    if (obj.slice instanceof Function) {
      if (typeof obj === "string") return [obj];
      else return obj.slice();
    }

    var ret = [];

    // case of function arguments that has length property
    if (obj.length) {
      var len = obj.length;
      while(--len >= 0) ret[len] = obj[len];
      return ret;
    }

    // for cases where we just convert the values from an
    // object to an array and discard the keys...
    return _.values(obj);
  }

});

XT.$A = XT.A;