var DummyCrypt = {

  rt: 13,
  sh: 7,  
  cloak: null,

  init: function(cfg) {

    if (typeof cfg['rt'] != 'undefined') DummyCrypt.rt = parseInt(cfg['rt']);
    if (typeof cfg['sh'] != 'undefined') DummyCrypt.sh = parseInt(cfg['sh']);
    if (typeof cfg['cloak'] == 'object') DummyCrypt.cloak = cfg['cloak'];

    DummyCrypt.addOnload(function() {
      DummyCrypt.printEmail();
    });
  },

  shift: function(txt, pos) {
    var out = '';
    var s = txt.length;
    pos %= s;
    pos += s;
    pos %= s;
    for (var i = 0; i < s; i++) out += txt.charAt((i + pos) % s);
    return out;
  },

  rotate: function(txt, count) {
    var out = ''; 
    var alpha = "abcdefghijklmnopqrstuvwxyz";
    var rotate = new Array();

    count %= 26;
    count += 26;
    count %= 26;

    for (var i = 0; i < alpha.length; i++) {
      rotate[alpha.charAt(i)] = alpha.charAt((i + count ) % 26);
      rotate[alpha.charAt(i).toUpperCase()] = alpha.charAt((i + count) % 26).toUpperCase();
    }

    for (i = 0; i < txt.length; i++) {
      var chr = txt.charAt(i);
      out += (chr >= 'a' && chr <= 'z' || chr >= 'A' && chr <= 'Z' ? rotate[chr] : chr);
    }

    return out;
  },

  addOnload: function(fct) {
    var _onload = window.onload;

    if (typeof _onload == 'function') {
      window.onload = function() {
        _onload();
        fct();
      }
    } else {
      window.onload = fct;
    }
  },

  crypt: function(email) {
    var out =  DummyCrypt.rotate(email, DummyCrypt.rt);
    out =  DummyCrypt.shift(out, DummyCrypt.sh);
    return out;
  },

  printEmail: function() {
    var id;
    for (var key in DummyCrypt.cloak) {
      if (id = document.getElementById(key)) {
        id.style.display = 'inline';
        id.innerHTML += DummyCrypt.crypt(DummyCrypt.cloak[key]);
      }
    }
  }
}
