var Meta = (function() {
  
  if (self != top) {
    return;
  }
  
  // dustindiaz.com
  function addEvent( obj, type, fn ) {
    if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
      EventCache.add(obj, type, fn);
    }
    else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[type+fn] );
      EventCache.add(obj, type, fn);
    }
    else {
      obj["on"+type] = obj["e"+type+fn];
    }
  }
  
  var EventCache = function(){
    var listEvents = [];
    return {
      listEvents : listEvents,
      add : function(node, sEventName, fHandler){
        listEvents.push(arguments);
      },
      flush : function(){
        var i, item;
        for(i = listEvents.length - 1; i >= 0; i = i - 1){
          item = listEvents[i];
          if(item[0].removeEventListener){
            item[0].removeEventListener(item[1], item[2], item[3]);
          };
          if(item[1].substring(0, 2) != "on"){
            item[1] = "on" + item[1];
          };
          if(item[0].detachEvent){
            item[0].detachEvent(item[1], item[2]);
          };
          item[0][item[1]] = null;
        };
      }
    };
  }();
  addEvent(window,'unload',EventCache.flush);
  
  // andrewdupont.net
  var Client = {
    viewportWidth: function() {
      return self.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth);
    },
  
    viewportHeight: function() {
      return self.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
    },
  
    viewportSize: function() {
      return { width: this.viewportWidth(), height: this.viewportHeight() };
    }
  };
  
  var meta = this;
  var open = false;
  
  var init = document.createElement('div');
  init.innerHTML = '<span>Meta</span>';
  init.setAttribute('style', 'visibility: hidden; ' +
                             'position: fixed; ' +
                             'right: 10px; ' +
                             'top: 10px; ' +
                             'padding: 7px 9px;' +
                             'font: 12px verdana, sans-serif; ' +
                             'cursor: pointer;');
  document.body.appendChild(init);
  
  if (document.all) {
    init.style.position = 'absolute';
    init.style.right = '10px';
    init.style.top = '10px';
  }
  
  var bg = document.createElement('div');
  var w = init.offsetWidth;
  bg.setAttribute('style', 'background: #78496A; ' +
                           'opacity: 0.66; ' +
                           '-moz-border-radius: 7px; ' +
                           '-webkit-border-radius: 7px; ' +
                           'width: ' + init.offsetWidth + 'px; ' +
                           'height: ' + init.offsetHeight + 'px; ' +
                           'position: fixed; ' +
                           'right: 10px; ' +
                           'top: 10px; ' +
                           'z-index: 999999;');
  init.appendChild(bg);
  init.getElementsByTagName('span')[0].setAttribute('style', "color: #fff; position: absolute; right: 9px; z-index: 1000000; text-decoration: none; width: " + (w - 17) + "px;");
  
  init.style.display = 'none';
  init.style.visibility = 'visible';
  bg.style.display = 'none';
  
  addEvent(init, 'mouseover', function() {
    bg.style.opacity = 0.85;
  });
  
  addEvent(init, 'mouseout', function() {
    bg.style.opacity = 0.66;
  });
  
  addEvent(init, 'mousedown', function() {
    bg.style.opacity = 1.0;
  });
  
  addEvent(init, 'mouseup', function() {
    bg.style.opacity = 0.85;
  });
  
  addEvent(init, 'click', function(e) {
    init.style.display = 'none';
    open = true;
    if (meta.el) {
      meta.el.style.display = 'block';
      return;
    }
    var outer = document.createElement('div');
    meta.el = outer;
    outer.setAttribute('style', 'width: 518px; ' +
                                '-moz-border-radius: 10px; ' +
                                '-webkit-border-radius: 10px; ' +
                                'border: 10px solid rgba(64, 64, 64, 0.60); ' +
                                'position: fixed; ' +
                                'text-align: left; ' +
                                'z-index: 1000000;');
    if (document.all) {
      outer.style.position = 'absolute';
    }
    
    outer.style.left = (Client.viewportWidth() / 2 - 255) + 'px';
    outer.style.top = (Client.viewportHeight() / 2 - 225) + 'px';
    
    var inner = document.createElement('div');
    inner.style.color = '#fff';
    inner.style.background = '#78496A';
    inner.style.width = '510px';
    inner.style.padding = '0 4px 4px 4px';
    outer.appendChild(inner);
    var title = document.createElement('div');
    title.innerHTML = '<span>&nbsp;</span>';
    title.style.font = '11px/20px verdana, sans-serif';
    title.style.padding = '2px 5px 2px 5px';
    title.style.position = 'relative';
    var mover = document.createElement('div');
    title.appendChild(mover);
    var close = document.createElement('a');
    close.setAttribute('href', '#close');
    close.style.padding = '0 3px 1px 3px';
    close.innerHTML = '&times;';
    close.style.position = 'absolute';
    close.style.top = '4px';
    close.style.right = '0';
    close.style.color = '#fff';
    close.style.background = '#000';
    close.style.opacity = '0.4';
    close.style.textDecoration = 'none';
    close.style.lineHeight = '15px';
    title.appendChild(close);
    inner.appendChild(title);
    var iframe = document.createElement('iframe');
    
    var titleText = title.getElementsByTagName('span')[0];
    titleText.innerHTML = 'Meta';
    
    iframe.style.border = 0;
    iframe.style.width = '510px';
    iframe.style.height = '410px';
    iframe.style.display = 'block';
    iframe.style.background = '#fff';
    inner.appendChild(iframe);
    document.body.appendChild(outer);
    iframe.setAttribute('src', $('admin-url').get('href'));
    
    mover.setAttribute('style', 'width: 485px;' +
                                'height: 24px; ' +
                                'cursor: move; ' +
                                'position: absolute; ' +
                                'left: 0; ' +
                                'top: 0;');
    
    var moving = false;
    var moveOrigin, moveStart;
    
    addEvent(mover, 'mousedown', function(e) {
      moving = true;
      moveOrigin = [e.clientX, e.clientY];
      moveStart = [parseInt(outer.style.left, 10), parseInt(outer.style.top, 10)];
      mover.style.cursor = '-moz-grabbing';
      mover.style.height = '434px';
      mover.style.width = '500px';
      return false;
    });
    
    addEvent(mover, 'mouseup', function() {
      moving = false;
      mover.style.cursor = '-moz-grab';
      mover.style.height = '24px';
      mover.style.width = '485px';
    });
    
    addEvent(window, 'mousemove', function(e) {
      if (moving) {
        outer.style.left = (moveStart[0] + e.clientX - moveOrigin[0]) + 'px';
        outer.style.top = (moveStart[1] + e.clientY - moveOrigin[1]) + 'px';
      }
    });
    
    addEvent(close, 'mouseover', function() {
      close.style.opacity = '0.75';
    });
    
    addEvent(close, 'mouseout', function() {
      close.style.opacity = '0.5';
    });
    
    addEvent(close, 'mousedown', function() {
      close.style.opacity = '1.0';
    });
    
    addEvent(close, 'mouseup', function() {
      close.style.opacity = '0.75';
    });
    
    addEvent(close, 'click', function(e) {
      open = false;
      init.style.display = 'block';
      outer.style.display = 'none';
      return false;
    });
    
    return false;
    
  });
  
  return {
    show: function() {
      if (!open) {
        init.style.display = 'block';
        bg.style.display = 'block';
      } else {
        meta.el.style.display = 'block';
      }
    },
    hide: function() {
      if (open) {
        init.style.display = 'none';
        bg.style.display = 'none';
      } else {
        meta.el.style.display = 'none';
      }
    }
  };
    
})();

