/*
 * Copyright (c) CleverLeaf, Inc.
 * All Rights Reserved.
 *
 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of CleverLeaf, Inc.;
 * the contents of this file may not be disclosed to third parties, copied or
 * duplicated in any form, in whole or in part, without the prior written
 * permission of CleverLeaf, Inc.
 *
 * RESTRICTED RIGHTS LEGEND:
 * Use, duplication or disclosure by the Government is subject to restrictions
 * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
 * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
 * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
 * rights reserved under the Copyright Laws of the United States.
 */

function addLoadEvent(func) {
  var _onload = window.onload;
  if (typeof _onload != 'function')
    window.onload = func;
  else {
    window.onload = function() {
      _onload(); func();
    }
  }
}

Object.extend = function(destination, source) {
  for (property in source)
    if (! destination[property])
      destination[property] = source[property];
  return (destination);
};

Object.extend(String.prototype, {

  reverse: function() {
    var result = '';
    for (i = this.length; --i >= 0; )
      result += this.charAt(i);
    return (result);
  },

  decoder: function() {
    var result = '';
    var xdigit = '0123456789abcdef';
    var string = this.reverse();
    if (/^[0-9a-f]+$/.test(string) && ! (string.length&1)) {
      var i = 0;
      do {
        var hi = xdigit.indexOf(string.charAt(i++));
        var lo = xdigit.indexOf(string.charAt(i++));
        result += String.fromCharCode(hi << 4 | lo);
      } while (i < string.length);
      return (result);
    }
    return (null);
  },

  mailto: function(text) {
    var result = this.decoder();
    return (result ? (text || result).link('mailto:' + result) : null);
  }

});
