function log(txt) {
   window.console.log(txt);
}
var bugrain4 = {
   // Stuff to do on dom load
   domload: function() {
      var el,els,link,sitelinks,currentSitelink,menu,opts; // generic variables
      var loc = document.location.href;

      // Hide all stuff that should be hidden if JavaScript is eanbled
      $$('.hide-on-load').invoke('hide');
      $$('.display_none').invoke('hide'); // List plugin - make this the deafult instead of hide-on-load

      // See if we have a login/welcome menu for a logged on user
      menu = $('login');
      if (menu && !menu.select('input').length) {
         el = $('globallinks_list');
         els = menu.hide().select('a');
         els.each(function(link) {
            el.insert(new Element('li').update(new Element('a', {href: link.href}).update(link.innerHTML)));
         });
      }

      // Add 'floating' sitelink background
      if (sitelinks = $('sitelinks')) {
         var slLink = null;
         bg = new Element('li', {id: 'sitelink_bg', className: 'background'}).update(new Element('div', {className: 'left'}).update(''));
         bg.hide();
         bg.setOpacity(0.5);
         $$('.js-disabled').each(function(el) {
            el.removeClassName('js-disabled');
            el.addClassName('js-enabled');
         });
         sitelinks.down().insert(bg);
         el = $$('.sitelink-hilite')[0];
         if (el) {
            var currentSitelink = el;
            el.addClassName('sitelink-hilite-js');
            bg.setStyle({
               left: el.up().viewportOffset()[0]-35+'px',
               width: (el.getDimensions().width)+'px'
            });
            bg.show();
            slLink = el;
         }
         bg.observe('click', function(ev) {
            if (slLink.readAttribute('href').indexOf('search.php') > 0) {
               var search = $('search');
               if (search.visible()) {
                  var w = ev.element().viewportOffset().left;
                  new Effect.Fade('search',{
                     queue: 'searchqueue',
                     afterFinish: function() {
                        search.hide();
                        search.setStyle({top:'-500px',left:'-500px',width: 10});
                     }
                  });
               } else {
                  var w = ev.element().viewportOffset().left - sitelinks.viewportOffset().left - 5;
                  search.setStyle({
                     top:     slLink.viewportOffset().top-5+'px',
                     left:    '-'+w+'px',
                     height:  slLink.getHeight()+10+'px',
                     width:   w+'px'
                  });
                  search.show();
                  new Effect.Move('search',{
                     x: w+sitelinks.viewportOffset().left,
                     y: 0,
                     duration: 0.75,
                     queue: 'searchqueue',
                     afterFinish: function() {
                        search.select('input[type=text]')[0].focus();
                     }.bind(search)
                  });
               }
               ev.stop();
            } else {
               document.location = slLink.readAttribute('href');
            }
         });
         sitelinks.select('a').each(function (a) {
            if (a.href.indexOf('search.php') > -1) {
               $('search').hide().removeClassName('search').addClassName('search-js');
            }
            a.observe('mouseover', function(ev) {
               el = ev.element();
               var queue = Effect.Queues.get('sitelinkqueue');
               queue.each(function(e) {
                  e.cancel()
               });

               var m = el.viewportOffset()[0]-bg.viewportOffset()[0];

               new Effect.Morph(bg, {
                  style: {
                     left: el.up().viewportOffset()[0]-35+'px',
                     width: (el.getDimensions().width)+'px'
                  },
                  duration: 0.5,
                  queue: {scope: 'sitelinkqueue', position: 'end'}
               })
               slLink = el;
            });
         });
         $('sitelinks-wrapper').observe('mouseout', function(ev) {
            el = ev.element();
            if (el && el.id && el.id=='sitelinks-wrapper' && currentSitelink) {
               slLink = currentSitelink;
               Effect.Queues.get('sitelinkqueue').each(function(e) {
   	            e.cancel();
   	         });
               new Effect.Morph(bg, {
                  style: {
                     left: currentSitelink.up().viewportOffset()[0]-35+'px',
                     width: (currentSitelink.getDimensions().width)+'px'
                  },
                  duration: 0.5,
                  queue: {scope: 'sitelinkqueue', position: 'end'}
               })
            }
         });
      }
//      var g = new k.Growler({location:"tr"});
//      g.info("Something good happended", {life: 10});
//      g.growl("The funnest iPod ever. Millions of songs. Thousands of movies. Hundreds of games. <a target='_blank' href='http://www.apple.com/ipodtouch/whatsnew.html'>Learn more</a>", {header: "iPod Touch", className: "macosx", sticky: true});
      var footermenus = [
         {
            id: 'pm',
            ignore: /pm\.php/,
            afterMove: function (el) {
               $(this.id).select('img').each(function(i) {
                  if (i.src.indexOf('newpm') > 0) {
                     new Effect.Pulsate(el, {
                        duration:99,
                        pulses:  50,
                        from:    0.25
                     });
                  }
               });
            }
         }
      ];
      footermenus.each(function (menu) {
         if ($(menu.id) && (Object.isUndefined(menu.ignore) || !loc.match(menu.ignore))) {
            el = new Bugrain4.footerMenu(menu.id, 'footerlinks');
            if (!Object.isUndefined(menu.afterMove)) {
               menu.afterMove(el.link);
            }
         }
      });

      // Smarten up comments
      $$('.comment-header').each(function(el) {
         new Effect.Move(el, {x: '-'+parseInt(el.getStyle('left'))});
         var w = el.getWidth();
         el = el.next().down('.comment-call-out');
         el.setStyle({backgroundImage: el.getStyle('background-image').replace(/_1/, '_2')});
         new Effect.Move(el, {x: w-10});
      });

      // Find any (currently pseudo) carousels
      $$('.carousel').each(function (el) {
         //el.setStyle({
         //   height:'500px'
         //});
         var lis = el.select('li.carousel');
         lis.each(function (li, ix) {
            // Hide all but the 1st LI
            if (ix) {
               li.hide();
            }
            // Find buttons and watch for clicks
            $$('a[href=#'+li.id+']').each(function(b) {
               b.observe('click', function(ev) {
                  ev.stop();
                  var id = ev.element().href;
                  id = $(id.substr(id.indexOf('#')+1));
                  id.siblings().invoke('hide');
                  id.show();
                  window.console.log(id);
               });
            });
         });
      });

      // Zebra striping
      $$('div.zebra').each(function(d) {
         d.childElements().each(function(c,i) {
            c.addClassName(i%2 ? "zebra_even" : "zebra_odd");
         });
      });

      // Extended news links?
      $$('a.news_extendstring').invoke('observe', 'click', function(ev) {
         ev.stop();
         el = ev.element().next(2);
         el.visible() ? new Effect.BlindUp(el) : new Effect.BlindDown(el);
      });

      // Any search stuff to do?
      if (el = $('enhanced_search')) {
         el.show();
         el.observe('click', function() {
            el = $('enhanced_search_fields');
            el.visible() ? new Effect.SlideUp(el) : new Effect.SlideDown(el);
         });
      }

      // Any PM stuff to do?
      if (el = $('pm_footer')) {
         el.select('ul').invoke('show');
         if (menu = $('sidebar1-wrapper')) {
            el.hide();
            $('pm').down().next().insert(el.select('ul')[0]);
            // Hack because PM menu can't be templated
            el = $$('#pm div.body')[0];
            el.innerHTML = el.innerHTML.replace(/\[ /g, '').replace(/ \]/g, '');
         }
      }

      // Any stats stuff to do?
      if (loc.match(/stats.php/)) {
         el = $$('div.content-body')[0].down();
         if (menu = $('sidebar2-wrapper')) {
            menu = menu.down(1);
            el.next().remove();
            el.next().remove();
            el.hide();
            a = menu.insert(bugrain4.tSidebar1('stats_menu', bugrain4_lan.stats_menu_caption , el.innerHTML.replace(/ \| /g, '<br/>')));
            $('stats_menu').down('.body').childElements().invoke('observe', 'click', function(ev) {
               ev.stop();
               el = ev.element();
               var urlBits = el.href.match(/^(.*)\?(.*)$/);
               var url = urlBits[1] + '?[ajax-content]' + urlBits[2];
               new Ajax.Request(url, {
                  method: 'get',
                  onSuccess: function(transport) {
                     var s = transport.responseText.indexOf('<!--ajax-content-start-->');
                     var e = transport.responseText.indexOf('<!--ajax-content-end-->');
                     $('ajax-content-start').update(transport.responseText.substring(s,e));
                     el = $$('div.content-body')[0];
                     el = el.down();
                     el.next().remove();
                     el.next().remove();
                     el.remove();
                     log(transport.responseText.substring(0,100));
                  }
               });
            });
         }
      }

      // Any forum stuff to do?
      if (el = $('forum_stats')) {
         if (menu = $('sidebar2-wrapper')) {
            el.hide();
            el = el.down().next();
            menu.down(1).insert(bugrain4.tSidebar1('forum_info_menu', bugrain4_lan.forum_info_menu_caption, el.innerHTML.replace(/ \| /g, '<br/>').replace(/ \- /g, '<br/>')));
         }
      }
      if (el = $('forum_navigation')) {
         if (menu = $('sidebar2-wrapper')) {
            el.next().hide();
            el = el.down();
            menu.down(1).insert(bugrain4.tSidebar1('forum_navigation_menu', bugrain4_lan.forum_navigation_menu_caption, el.innerHTML));
         }
      }
      if (el = $('forum_info')) {
         if (menu = $('sidebar2-wrapper')) {
            el.hide();
            menu.down(1).insert(bugrain4.tSidebar1('forum_info_menu', bugrain4_lan.forum_info_menu_caption, el.innerHTML));
         }
      }
      if (el = $('forum_key')) {
         if (menu = $('sidebar2-wrapper')) {
            el.hide();
            menu.down(1).insert(bugrain4.tSidebar1('forum_key_menu', bugrain4_lan.forum_key_menu_caption, ''));
            var mbody = $('forum_key_menu').down().next();
            el.select('td').each(function (d, i) {
               mbody.insert(d.innerHTML);
               mbody.insert(i%2 ? '<br/>' : ' ');
            });
         }
      }
      if (el = $('forum_thread_info')) {
         if (menu = $('sidebar2-wrapper')) {
            el.next().hide();
            el = bugrain4.tSidebar1('forum_thread_info_menu', bugrain4_lan.forum_thread_info_menu_caption, el.innerHTML);
            menu.down(1).insert(el.replace(/ \| /, '<br/>'));
            if (el = $('quick_reply')) {
               menu.down(3).next().down().insert(new Element('br'));
               menu.down(3).next().down().insert(new Element('br'));
               menu.down(3).next().down().insert(new Element('a', {id: 'quick_reply_link', href: '#quick_reply_jump'}).update(bugrain4_lan.forum_quick_reply));
               $('quick_reply_link').observe('click', function(ev) {
                  $('quick_reply').select('textarea')[0].focus();
                  ev.stop();
               });
            }
         }
      }
      if (el = $$('form textarea[name=post]')) {
         el = el[0];
         el.writeAttribute({rows: '10'});
      }
   },
   // sidebar1 menu template
   // @param id - an ID for the menu
   // @param caption - menu caption text
   // @param text - menu content (HTML) as text
   tSidebar1: function (id, caption, text) {
      return new Template("<div class='sidebar-menu' id=#{id}><h1>#{caption}</h1><div class='body'>#{text}</div></div>").
      evaluate({id: id, caption: caption, text: text});
   },
   // private message item check box checking
   // @param checkall true = check all, false = check none, undefined/anything else = toggle
   pmCheck : function(checkall) {
      var cbs = document.getElementsByTagName('input');
      for (var i=0; i<cbs.length; i++) {
         if (cbs[i].name.substring(0,11)=='selected_pm') {
            if (Object.isUndefined(checkall)) {
               cbs[i].checked = !cbs[i].checked;
            } else {
               cbs[i].checked = checkall;
            }
         }
      }
   },
   // private message delete selected (redirect from link to button/form)
   pmDeleteSelected : function() {
      $$('input[name=pm_delete_selected]').invoke('click');
   },
   // clicks we are interested interested in
   clicks : function (ev) {
      el = ev.element();
      if (el.hasClassName('expandable')) {
         ev.stop();
         el = el.tagName == 'A' ? el.up('div').next() : el.next();
         el.visible() ? new Effect.BlindUp(el) : new Effect.BlindDown(el);
      }
   }
}

if (document.observe) document.observe('dom:loaded', bugrain4.domload);

// Event delegation - clicks
document.observe('click', bugrain4.clicks);

var Bugrain4 = {};
Bugrain4.footerMenu = Class.create({
   footerlinkopts: {
      duration: 0.5,
      queue: 'footerlinkqueue'
   },
   initialize: function(menu, footerlinks) {
      this.menu   = $(menu);
      this.footerlinks = $(footerlinks);
      this.link = new Element('a', {href: this.menu.down('a').href, className: 'footerlink'}).update(this.menu.down().innerHTML);
      this.footerlinks.insert(this.link);
      this.menu.hide();
      this.link.insert({after: this.menu});
      this.menu.addClassName('footermenu');
      this.link.observe('click', function(ev) {
         el = ev.element();
         menu = el.next();
         if (menu.visible()) {
            new Effect.Fade(menu, this.footerlinkopts);
         } else {
            menu.setStyle({
               position:   'fixed',
               bottom: (el.viewportOffset().top-this.footerlinks.viewportOffset().top)+this.footerlinks.getHeight()+'px',
               left:    el.viewportOffset().left+'px'
            });
            new Effect.Appear(menu,Object.extend(this.footerlinkopts, {
               afterFinish: function() {
                  if (menu.visible()) {
                     menu.select('a')[0].focus();
                  }
               }.bind(menu)
            }));
         }
         ev.stop();
      }.bind(this));
   }
});