function DOM_ReframeItMarginMessageDrop()
{
  this._listener = null;

  this.getMessageDrop = function() {
    var element = document.getElementById("_reframeitMarginMessageDrop");
    
    if (!element)
    {
        element = document.createElement("div");
        element.setAttribute("id", "_reframeitMarginMessageDrop");
        element.setAttribute("style", "display:none");
        document.documentElement.appendChild(element);
    }
   
    return element;
  };

  this.notifyMargin = function(topic, data) {
    var element = this.getMessageDrop();
    
    var event = document.createEvent("Events");
    event.initEvent('marginMessage', true, false);
    
    element.setAttribute('topic', topic);
    element.setAttribute('data', data);
   
    element.dispatchEvent(event);
  };
  
  this._responseEventListener = function(event){
    var elm = event.target;
    var topic = elm.getAttribute("topic") || "";
    var data = elm.getAttribute("data") || "";

    if(this._listener)
      this._listener(topic, data);
  };

  this.setListener = function(listener) {
    this._listener = listener;
  };

  $(this.getMessageDrop()).bind("marginResponse", 
    {'obj': this, 'func' : this._responseEventListener}, 
    function(e) { e.data.func.apply(e.data.obj, [e]); });
}

function IE_ReframeItMarginMessageDrop() {
  this.notifyMargin = function(topic, data) {
    if(!window.reframeit)
      return;

    window.reframeit.postMarginMessage(topic, data);
  };

  this.setListener = function(listener) {
    if(!window.reframeit)
      return;

    window.reframeit.SetListener(listener);
  };
}


if(!jQuery.browser.msie) {
  window.marginMessageDrop = new DOM_ReframeItMarginMessageDrop();
} else {
  window.marginMessageDrop = new IE_ReframeItMarginMessageDrop();
}
