 var wumessage = new function() {
  var eff = null;
  var counter = 0;
  this.move = function() {
   counter++;
   if (counter > 20) wumessage.hide();
  }
  this.hide = function() {
   document.body.removeEvent('mousedown', wumessage.hide);
   document.body.removeEvent('keydown', wumessage.hide);
   document.body.removeEvent('mousemove', wumessage.move);
   eff.start(0.8, 0);
  }
  this.render = function(message, ishtml, autohide) {
   if ($('wumessage')) $('wumessage').remove();
   counter = 0;
   var d = new Element('div').setProperty('id', 'wumessage').setOpacity(0);
   if (ishtml) d.setHTML(message); else d.appendText(message);
   if (!autohide) d.adopt(new Element('br')).adopt(new Element('br')).adopt(new Element('button').appendText('ok').addEvent('click', function(e) {
    new Fx.Style(d, 'opacity', {duration: 500}).start(0.8, 0);
    return wu.stop(e);
   }));
   document.body.appendChild(d);
   var setx = (Window.getWidth() - d.offsetWidth) / 2;
   var sety = (Window.getHeight() - d.offsetHeight) / 2 + Window.getScrollTop();
   setx = (setx < 0 ) ? 0 : setx;
   sety = (sety < 0 ) ? 0 : sety;
   d.setStyles({'left': setx + 'px', 'top': sety + 'px'}).setOpacity(0.8);
   if (autohide) {
    eff = new Fx.Style(d, 'opacity', {duration: 500, onComplete: function() { $('wumessage').remove(); }});
    $(document.body).addEvent('mousedown', wumessage.hide);
    document.body.addEvent('keydown', wumessage.hide);
    document.body.addEvent('mousemove', wumessage.move);
   };
  }
  this.show = function(message) { wumessage.render(message, false, true); }
  this.okdialog = function(message) { wumessage.render(message, true, false); }
 };
 
 var wuquestion = new function() {
  var ajaxurl = '';
  var onyes = null;
  var onno = null;
  var window = null;
  this.response = function(text, xml) {
   wuquestion.remove();
   if (onyes) onyes(text, xml);
  }
  this.doit = function() {
   $(window.getElementsByTagName('p').item(1)).setHTML('').adopt(new Element('img').setProperties({'src': 'editorpic/msgloading.gif'}));
   if (ajaxurl != '') new Ajax(ajaxurl + '&random=' + (Math.round(Math.random() * 1000000)), {method: 'get', onComplete: wuquestion.response}).request();
   else {
    if (onyes) onyes();
    wuquestion.remove();
   };
  }
  this.repos = function() {
   var setx = (Window.getWidth() - window.offsetWidth) / 2;
   var sety = (Window.getHeight() - window.offsetHeight) / 2 + Window.getScrollTop();
   setx = (setx < 0 ) ? 0 : setx;
   sety = (sety < 0 ) ? 0 : sety;
   window.setStyles({'left': setx + 'px', 'top': sety + 'px'});
  }
  this.no = function() {
   if (onno) onno();
   wuquestion.remove();
  }
  this.remove = function() {
   if (window) window.empty().remove();
   window = null;
  }
  this.ask = function(question, yes, no, url, yesfn, nofn) {
   wuquestion.remove();
   ajaxurl = url;
   onyes = yesfn;
   onno = nofn;
   window = new Element('div').setProperty('id', 'wu_question')
    .adopt(new Element('p').addClass('wu_question').appendText(question))
    .adopt(new Element('p').setStyle('text-align', 'center')
     .adopt(new Element('button').appendText(yes).addEvent('click', wuquestion.doit))
     .appendText(' ')
     .adopt(new Element('button').appendText(no).addEvent('click', wuquestion.no))
    ).setOpacity(0.85);
   document.body.appendChild(window);
   wuquestion.repos();
  }
 }

 var wulb = new function() {
  var mainobj = null;
  var happened = false;
  var overlayeff = null;
  var mainobjeff = null;
  var origheight = 0;
  var over = false;
  var runaftershow = null;
  var grey = null;
  var afterhide = null;
  this.nothappened = function() { happened = false; }
  this.setorigheight = function(param) { origheight = param; }
  this.getpageheight = function() {
   if (Window.getScrollHeight() < Window.getHeight()) return Window.getHeight(); else return Window.getScrollHeight();
  }
  this.displayobjects = function(display) {
   var objects = document.getElementsByTagName('object');
   var objectslen = objects.length;
   for (var n = 0; n < objectslen; n++) if (objects.item(n).parentNode.hasClass == 'wu_flashparent') objects.item(n).parentNode.style.display = display;
   var selects = document.getElementsByTagName('select');
   var selectslen = selects.length;
   for (var n = 0; n < selectslen; n++) selects.item(n).style.display = display;
  }
  this.dooverlay = function() {
   if (over) {
    mainobj.style.display = 'block';
    mainobjeff.start(0, origheight);
   } else {
    wulb.displayobjects('');
    $('overlay').style.display = 'none';
   };
  }
  this.domain = function() {
   if (over) {
    if (runaftershow) runaftershow();
   } else {
    mainobj.setStyles({'height': '0px', 'display': 'none'});
    overlayeff.start(0.8, 0);
   };
  }
  this.showbox = function(mainobjp, runafter, modalparam) {
   mainobj = $(mainobjp);
   if (!mainobj) return;
   var readheight = mainobj.offsetHeight;
   var origwidth = mainobj.offsetWidth;

   if (typeof runafter == 'function') runaftershow = runafter; else runaftershow = null;
   wulb.displayobjects('none');

   if (happened) {
    $('overlay').setStyles({'height': wulb.getpageheight() + 'px', 'display': 'block'});
    overlayeff.start(0, 0.8);
    over = true;
    return false;
   };

   origheight = readheight;
   var setx = (Window.getWidth() - origwidth) / 2;
   var sety = (Window.getHeight() - origheight) / 2 + Window.getScrollTop();
   setx = (setx < 0 ) ? 0 : setx;
   sety = (sety < 0 ) ? 0 : sety;
   mainobj.setStyles({'position': 'absolute', 'z-index': '9999999', 'left': setx + 'px', 'top': sety + 'px', 'height': '0px', 'overflow': 'hidden'});
   if (!mainobjeff) mainobjeff = new Fx.Style(mainobj, 'height', {duration: 300, onComplete: wulb.domain});

   if ($('overlay')) $('overlay').remove();
   var overlay = new Element('div').setProperty('id', 'overlay').setStyle('height', wulb.getpageheight() + 'px');
   if (!((arguments.length > 2) && (modalparam))) overlay.addEvent('click', wulb.hidebox);

   overlayeff = new Fx.Style(overlay, 'opacity', {duration: 300, onComplete: wulb.dooverlay, transition: Fx.Transitions.linear});
   overlayeff.hide();
   document.getElementsByTagName('body').item(0).appendChild(overlay);

   overlayeff.start(0, 0.8);

   happened = over = true;
   return false;
  }
  this.dogrey = function() {
   if (!($('wu_grey'))) $('wu_wrap').adopt(grey);
  }
  this.greybox = function(src) {
   if (!$('wu_wrap')) {
    grey = new Element('iframe').setProperties({'name': 'wu_grey', 'id': 'wu_grey', 'width': '100%', 'height': '100%', 'frameborder': '0', 'src': src});
    document.body.appendChild(new Element('div').setProperty('id', 'wu_wrap').adopt(new Element('a').setProperties({'id': 'wu_closewindow', 'href': '#', 'tabindex': '0'}).setStyles({'position': 'absolute', 'top': '0', 'right': '0', 'z-index': '9999999'}).appendText('x').addEvent('click', function(e) {
     wulb.hidebox();
     return wu.stop(e);
    })));
   };
   wulb.showbox('wu_wrap', wulb.dogrey);
  }
  this.setafterhide = function(p) { afterhide = p; }
  this.hidebox = function() {
   if (afterhide) afterhide();
   mainobjeff.start(origheight, 0);
   over = false;
   return false;
  }
 };