var knownCSS = [];

// {{{ add_site_css(array_of_stylesheets)
function add_site_css(ss) {
  if(!ss) { return; }

  if(typeof(ss) !== 'object') {
    ss = new Array(ss);
    if(!ss.length) { return; }
  }

  // Get list of known stylesheets to see if any in "ss" have already been used
  if(!knownCSS.length) {
    knownCSS = $$('link[rel=stylesheet]');
  }

  var defStyle = knownCSS.grep({ match : function(el) {
    return el.hasClassName('sitecss');
  } });

  // Second try:
  if(defStyle) {
    defStyle = defStyle[defStyle.length - 1];
  } else {
    defStyle = knownCSS.grep({ match : function(el) {
      return el.href.match(new RegExp('/html/(?:css/)?site.css'));
    } });

    if(defStyle) {
      defStyle = defStyle[defStyle.length - 1];
    } else {
      defStyle = knownCSS[0];
    }
  }

  $A(ss).each(function(s) {
    if(typeof(s) !== 'object') {
      s = {href:s};
    }

    if(knownCSS.find(function(el) {
      return el.href.indexOf(s.href) !== -1
    })) {
      return;
    }

    var link = new Element('link', Object.extend(s, { type: 'text/css',
                                                      rel:  'stylesheet' }) );
    link.addClassName('sitecss');

    if(defStyle) {
      defStyle.insert({after:link});
      defStyle = link; // So we append after what we just appended
    } else {
      $$('head')[0].appendChild(link);
    }

    knownCSS.push(link);
  });
} // }}}

// {{{ add_css(array_of_stylesheets)
function add_css(ss) {
  if(typeof(ss) !== 'object') {
    ss = new Array(ss);
  }

  $A(ss).each(function(s) {
    if(typeof(s) !== 'object') {
      s = {href:s};
    }

    var link = new Element('link', Object.extend(s, { type: 'text/css',
                                                      rel:  'stylesheet' }) );
    link.addClassName('sitecss');
    $$('head')[0].appendChild(new Element('link', s));
  });
} // }}}

// Credit: http://www.quirksmode.org/bugreports/archives/2006/01/IE_wont_allow_documentcreateElementstyle.html#c4088

// {{{ function addStyleSheet(data)
function addStyleSheet(data) {
  var ss = new Element('style', {type: 'text/css'});
  if(ss.styleSheet) { // IE
    ss.styleSheet.cssText = data;
  } else { // FF
    ss.appendChild(document.createTextNode(data));
  }
  $$('head')[0].appendChild(ss);
} // }}}

var checkInputLabel = [];
Event.observe(window, 'load', function() {
  setTimeout(function() {
    if(!checkInputLabel.length) return;
    $A(checkInputLabel).each(function(el) {
      if(el && el.defaultText && el.defaultValue !== el.value)
        el.removeClassName('definputlabel');
    });
  }, 500);
});

// {{{ inputAsLabel(el)
function inputAsLabel(el) {
 // If called from window.load event;
 if(!el)
   return;

 if(Object.isString(el)) {
   if(!$(el)) {
     Event.observe(window, 'load', function() { inputAsLabel($(el)); });
     return;
   }

   el = $(el);
 }

 if(!el) return;

 if(el.type !== 'text') { return; }

 var cval = $F(el);

 if(el.defaultValue) {
   if(el.defaultValue === cval) {
     el.addClassName('definputlabel');
   } else {
     el.removeClassName('definputlabel');
   }
 } else {
   el.defaultText = cval;
   el.addClassName('definputlabel');
 }
 checkInputLabel.push(el);

 el.observe('focus', ialFocus).observe('blur', ialBlur);
} // }}}

/* {{{ ialFocus(ev) */
function ialFocus(ev) {
  var el = ev.element ? Event.element(ev) : ev;
  var def = el.defaultValue || el.defaultText;
  el.value = el.value.replace(/^\s+/, '').replace(/\s+$/, '');
  el.removeClassName('definputlabel');

  if(def && el.value === def)
    el.value = '';
}; /* }}} */

/* {{{ ialBlur(ev) */
function ialBlur(ev) {
  var el = ev.element ? Event.element(ev) : ev;
  var def = el.defaultValue || el.defaultText;
  el.value = el.value.replace(/^\s+/, '').replace(/\s+$/, '');

  if(def && (!el.value || el.value === def)) {
    el.addClassName('definputlabel');
    el.value = def;
  }
}; /* }}} */

// {{{ help.js
if(typeof(addHelpEH) == 'undefined' || !addHelpEH) {
  addHelpEH = 1;
  Event.observe(window, 'load', function() {
    $$('.sitehelp').each(function(el) {
      el.observe('click', siteHelp);
    });
  });

  function siteHelp(ev) {
    ev.stop();
    window.open(Event.element(ev).href,'userhelp','WIDTH=660,HEIGHT=640,resizable=yes,toolbars=yes,scrollbars=yes,left=150,top=100,screenX=150,screenY=100');
  }
} // }}}

// {{{ InitCAPTCHA()
function InitCAPTCHA(){
  var img = $('captchaimg');
  var c_img = $('captchaimgph');
  if(img && c_img && img.parentNode !== c_img) {
    c_img.appendChild(Element.remove(img));
    img.show();
  }

  var reload = $('captchareload');
  if(reload) {
    reload.observe('click', ReloadCAPTCHA)
          .setAttribute('href', '#reloadcaptcha');

    var c_txt = $('captchatxtph');
    if(c_txt && reload.parentNode !== c_txt) {
      c_txt.appendChild(Element.remove(reload));
    }

    reload.show();
  }
} // }}}

// {{{ ReloadCAPTCHA(ev)
var loader;
function ReloadCAPTCHA(ev){
  if(ev) { ev.stop(); }
  var img = document.getElementById('captchaimg');

  if(!img){
    for(var i = 0; i < document.images.length; i++){
      if(document.images[i].alt
      && document.images[i].alt.indexOf('CAPTCHA') != -1){
        img = document.images[i];
        break;
      }
    }

    if(!img){
      alert('Your browser needs modern Javascript to use this function.');
      return;
    }
  }

  var t = img.src;
      t.replace(new RegExp(/\/r=[0-9]+/), '');
      t += '/r=' + Math.floor(Math.random()*1000);

  // # quick, load up the loading image:
  if(!loader) {
    loader = new Loader({
      title: 'Reloading CAPTCHA ... ',
      img: '/graphics/loading_icon_1.gif',
      position : {
        src: $('captchareload'),
        offset : {
          setWidth: false,
          setHeight: false,
          offsetLeft: parseInt($('captchareload').getWidth() / 2) - 8,
          offsetTop: 0
        }
      }
    });
  } else {
    $('loader').show();
  }

  img.src = t;
  $(img).observe('load', function(ev) { $('loader').hide(); });
  return;
} // }}}

// {{{ Loader.js
var Loader = Class.create({
  Version: '0.0.2',
  title  : 'Loading ...',
  img    : false,
  loader : false,

  // {{{ initialize()
  initialize : function() {
    Object.extend(this, arguments[0]);

    if(!this.loader)
      this.loader = $('loader');

    if(!this.loader) {
      var loader = new Element('div', {id: 'loader'});
      loader.appendChild(new Element('h3', {id: 'loadertitle'}).update(this.title));
      if(this.img) {
        if(Object.isString(this.img)) {
          this.img = new Element('img', {src: this.img});
        }
        loader.appendChild(this.img);
      }
      this.loader = loader;
      $$('body')[0].appendChild(loader);
    }

    if(this.position) {
      this.setPosition();
    }

    if(this.show) {
      this.loader.show();
    }

    return this;
  }, // }}}

  setPosition : function(srcEl, offSet) {
    if(srcEl)
      this.position.src = srcEl;

    if(!this.position.offset) {
      this.position.offset = {
        setWidth: false,
        setHeight: false
      };
    }

    if(offSet) {
      this.position.offset = offSet;
    }

    if(this.position.src) {
      Element.clonePosition(
        this.loader,
        this.position.src,
        this.position.offset
      );
    }
  }
});

Event.observe(window, 'unload', function() {
  if($('loader'))
    $('loader').hide();
});

Event.observe(window, 'load', function() {
  if($('loader'))
    $('loader').hide();
});
// }}}

