(function(){

  var widgetWrapper, widgetIframe, widgetCloseBtn,
widgetWrapperContent = ''
  + '<a id="mixin-badge-event-window-close" href=""></a>'
  + '<div id="mixin-badge-event-window"></div>',

options = {
  badge                  : 1,
  lang                   : 'en',
  yes_text               : null,
  maybe_text             : null,
  bg_button              : '#7ed40c',
  bg_button_selected     : '#129d02',
  border_button          : '#00FF00',
  border_button_selected : '#4C8400'
},

getPosition = function (element, gravity) {
  var top = 0, left = 0, gravity = gravity || 'right', root = element;
  while(element) {
    top += element.offsetTop;
    left += element.offsetLeft;
    element = element.offsetParent;
  }

  if (gravity == 'right') {
    left = left - 390 + root.offsetWidth;
  }

  return left < 0 && gravity == 'right'
    ? getPosition(root, 'left')
    : {top: top + 'px', left: left + 'px', gravity: gravity};
},

widgetToggle = function(shown) {
  widgetWrapper.style.display = shown ? '' : 'none';
  if (!shown) {
    newFrame = document.createElement('iframe');
    newFrame.setAttribute('id', 'mixin-badge-event-window-iframe');
    newFrame.setAttribute('frameborder', 0);
    newFrame.setAttribute('framescrolling', 'no');
    if (widgetIframe) {
      widgetIframe.parentNode.removeChild(widgetIframe);
    }

    document.getElementById('mixin-badge-event-window')
      .appendChild(newFrame);
    widgetIframe = newFrame;
  }
},

buildIntegrationUrl = function(event_id) {
  var url_tail = [];
  for (var o in options) {
    if (options[o]) {
      url_tail.push('&' + o + '=' + encodeURIComponent(options[o]));
    }
  }
  return 'http://www.mixin.com/integration/events/' + event_id  + '/?c='+ +new Date
    + url_tail.join('');
},

openEventDetail = function(event_id, trigger, openComments){
  if (!widgetWrapper) {
    widgetWrapper = document.getElementById('mixin-badge-event-window-wrapper');
    if (!widgetWrapper) {
      widgetWrapper = document.createElement('div');
      widgetWrapper.setAttribute('id', 'mixin-badge-event-window-wrapper');
      widgetWrapper.className = 'mixin-badge-event-window-wrapper';
      widgetWrapper.innerHTML = widgetWrapperContent;
      document.body.appendChild(widgetWrapper);
    }
    widgetCloseBtn = document.getElementById('mixin-badge-event-window-close')
    widgetCloseBtn.onclick = function(e) {
      updateBadgeCounters(getHrefEventId(widgetIframe.getAttribute('src')));
      widgetToggle(0);
      return false;
    };
  }

  widgetToggle(0);

  var links = trigger.getElementsByTagName('a'),
    pos = getPosition(trigger, 'right');

  widgetCloseBtn.style.width = links[0].offsetWidth
      + links[1].offsetWidth
      + links[2].offsetWidth
      + 'px';

  widgetCloseBtn.style.marginLeft = pos.gravity == 'right' ? 'auto': '0px';

  widgetWrapper.style.left = pos.left;
  widgetWrapper.style.top = pos.top;
  var framebody = (widgetIframe.contentDocument || widgetIframe.contentWindow.document).body;
  framebody.innerHTML = '<span style="padding: 10px; font-family: arial; color: #222;">Loading...';
  framebody.style.backgroundColor = '#D8DDE1';

  widgetIframe.src = buildIntegrationUrl(event_id) + (openComments ? '#comments': '');
  widgetToggle(1);
},

bindBadgeEvents = function(element) {
  element.onclick = function(e) {
    var target = e && e.target || window.event.srcElement,
    elTagName = target.tagName.toLowerCase();

    if (target.tagName.toLowerCase() == 'span') target = target.parentNode;
    if (target.tagName.toLowerCase() != 'a') return;

    // target must be badge link only for positioning - nico's rule ...
    var event_id = getHrefEventId(target.getAttribute('href'));
    openEventDetail(event_id,
                    document.getElementById('mixin-event-counters-' + event_id),
                    target.getAttribute('id') && target.getAttribute('id').indexOf('comments')+1);
    return false;
  };
},

getHrefEventId = function(href) {
  return href.match(/\/(\d+)\//)[1];
},

updateBadgeCounters = function(event_id) {
  var script = document.createElement('script');
  script.setAttribute('id', 'mixin-badge-scriptlet-' + event_id);
  script.setAttribute('src', 'http://www.mixin.com/integration/events/'
                      + event_id  + '/counters/jsonp/?callback=mixin_badge.updateCounters&nc=' + (+new Date));
  document.getElementsByTagName('head')[0].appendChild(script);
},

mixin_badge = {
  updateCounters : function(json) {
    var scriptlet = document.getElementById('mixin-badge-scriptlet-' + json.event_id);
    scriptlet.parentNode.removeChild(scriptlet);
    document.getElementById('mixin-badge-total-users-counter-' + json.event_id)
      .innerHTML = json.rsvp_count;
    document.getElementById('mixin-badge-total-comments-counter-' + json.event_id)
      .innerHTML = json.comments_count;
  }
};

function loadBadge(){

  var link = document.createElement('link');
  link.setAttribute('rel', 'stylesheet');
  link.setAttribute('href', 'http://d46eyxjpj8cuf.cloudfront.net/14673/gzip/badge.css');
  link.setAttribute('type', 'text/css');
  link.setAttribute('media', 'screen');
  document.getElementsByTagName('head')[0].appendChild(link);

  // inline css
  var css  = '\x0A  #mxbadge{\x0A    font\x2Dsize:95%\x3B\x0A    padding:8px\x3B\x0A    border: 1px solid #ddd\x3B\x0A    \x0A    \x0A  }\x0A  \x0A  ';

  
  var style = document.createElement('style');
  style.setAttribute('id', 'mxbadge-style-overview-NicolasSierro');
  document.getElementsByTagName('head')[0].appendChild(style);

  if(!!window.ActiveXObject) {
    document.styleSheets[document.styleSheets.length-1].cssText = css;
  } else {
    var styleTxt = document.createTextNode(css);
    style.appendChild(styleTxt);
  }

   // insert badge
  var container = document.getElementById('mxbadge-overview-NicolasSierro');
  container.innerHTML = "\x3Cdiv id\x3D\x22mxbadge\x22\x3E\x0A\x0A  \x0A    \x3Ca href\x3D\x22http://www.mixin.com/users/NicolasSierro/\x22 title\x3D\x22NicolasSierro\x27s agenda for this week\x22\x3E\x0A  \x3Cimg src\x3D\x22http://www.mixin.com/users/121981/timeline/png/badge/timeline.png\x22 border\x3D\x220\x22 alt\x3D\x22\x22\x3E\x0A\x3C/a\x3E\x0A  \x0A\x0A  \x3Cdl\x3E\x0A  \x0A  \x0A \x3C/dl\x3E\x0A  \x3Cdiv class\x3D\x22mxclearer\x22\x3E\x3C/div\x3E\x0A   \x3Cspan class\x3D\x22mxfooter\x2Dlogo\x22\x3E\x3Ca href\x3D\x22http://www.mixin.com/\x22\x3E\x3Cimg src\x3D\x22http://d46eyxjpj8cuf.cloudfront.net/14673/gzip/images/logo_badge01.gif\x22\x3E\x3C/a\x3E \x0A\x0A Follow \x3Ca href\x3D\x22http://www.mixin.com/users/NicolasSierro/\x22 title\x3D\x22NicolasSierro\x27s agenda\x22\x3ENicolasSierro\x27s agenda\x3C/a\x3E\x0A \x0A\x3C/span\x3E\x0A\x0A\x0A\x3C/div\x3E\x0A";
  bindBadgeEvents(container);
};



/* DOMContentLoaded: http://www.kryogenix.org/days/2007/09/26/shortloaded */
(function(i) {u = navigator.userAgent; e = /*@cc_on!@*/false; st = setTimeout;
if(/webkit/i.test(u)){st(function(){dr = document.readyState;if(dr=="loaded"||
dr=="complete"){i();}else{st(arguments.callee,10);}},10);}else if((/mozilla/i.
test(u)&&!/(compati)/.test(u))||(/opera/i.test(u))){document.addEventListener(
"DOMContentLoaded",i,false);} else if(e){(function(){t=document.createElement(
'doc:ready');try{t.doScroll('left');i();t= null;}catch(e){st(arguments.callee,
0);}})();}else{window.onload = i;}}

(loadBadge));

})();

