var flashVersion = swfobject.getFlashPlayerVersion();

document.observe('dom:loaded', function() {
  var sections = $$('#overview > ul');
  
  sections.each(function(section) {
    section.down('li.two .verticalContent').setStyle({ height: section.down('li.one').getHeight() + 'px' });
  });
    
  // Begin by searching for the latest press releases.
  search('press', 1);
  search('event', 1, 2, 'asc');
  
  setupManagement($('management_overview'));
});

function search(type, page, items, sort) {
  type = (type || 'press');
  page = (page || 1);
  items = (items || 3);
  sort = (sort || 'desc');
  
  var url = getBaseUrl() + '/news/search/type/#{type}/page/#{page}/items/#{items}/format/json/sort/#{sort}'.interpolate({ type: type, page: page, items: items, sort: sort });
  new Ajax.Request(url, {
    onComplete: onSearchComplete
  });  
}

function onSearchComplete(e) {
  var response = e.responseJSON;

  // Create/Update Pagination Control
  updatePaginationControl(response); 
  
  switch (response.type) {
    case 'press':
      updateNewsItems(response);
      break;
    case 'event':
      updateEventItems(response);
      break;
  } 
}

function updatePaginationControl(response) {
  var container;
  switch (response.type) {
    case 'press':
      container = $('press_releases_container');
      break;
    case 'event':
      container = $('events_container')
      break;
  }

  var pc = container.select('.paginationControl')[0];
  
  // First check for the existence of the pagination control
  if (pc) {
    pc.stopObserving('click');
    pc.remove();
  }
  
  // If there is only 1 page, then do not show the pagination control
  if (response.total_pages == 1) return;
  
  container.update();
  
  // Create the list of pages
  pc = new Element('ul', {
    className: 'paginationControl'
  });
  
  for (var x = 1; x <= response.total_pages; x++) {
    if (response.current_page == x)
      pc.insert(new Element('li', { className: 'active' }).update(x));
    else
      pc.insert(new Element('li').insert(new Element('a', { href: '#' }).update(x)));
  }
    
  container.insert({ bottom: pc });
  
  container.insert({ bottom: new Element('br', { className: 'clear' }) });
    
  pc.observe('click', function(e) {
    // First stop the event from happening.
    e.stop();
    
    // Get the element which triggered the event.
    var element = e.element();
    
    // Make sure we clicked on an anchor.
    if (/a/i.test(element.tagName))
      search(response.type, element.innerHTML, response.item_count, response.sort);
  });
}

function updateNewsItems(response) {
  var container = $('press_releases_container');  
  var ni = container.select('.newsItems')[0];
  
  if (ni) ni.remove();

  ni = new Element('dl', { className: 'newsItems' });
  
  var items = response.items;
  for (var x = 0; x < items.length; x++) {
    var date = Date.parseEx(items[x].date_created).toFormattedString('dd MMMM yyyy');

    var urlTitle = items[x].title
      .replace(/\s/g, '-') // Replace spaces with dashes
      .stripTags() // Strip all html tags
      .replace(/(&trade;|&reg;)/gi, '') // Remove all trade/reg marks from title
      .replace(/[^a-zA-Z0-9-]/g, ''); // Remove any character other than alpha-numeric and a dash
    var url = buildLink('/news/press/' + Date.parseEx(items[x].date_created).toFormattedString('yyyy/MM/dd') + '/' + urlTitle)
    
    ni.insert(new Element('dt').update(date));
    ni.insert(new Element('dd').insert(new Element('a', { href: url }).update(items[x].title)));
  }
   
  container.insert({ top: ni });
}

function updateEventItems(response) {
  var container = $('events_container');  
  var ei = container.select('.eventItems')[0];
  
  if (ei) ei.remove();
  
  ei = new Element('ul', { className: 'eventItems' });
  
  var items = response.items;
  
  if (items.length == 0)
    ei.insert(new Element('li').update(_('Check back soon!')));
  
  for (var x = 0; x < items.length; x++) {
    ei.insert(new Element('li').update(items[x].title));
    ei.insert(items[x].content);
    
    // If it is the last item in the list, then do not add the classname
    if (x == (items.length - 2))
      ei.select('li:last-child').invoke('addClassName', 'end');    
  }

  container.insert({ top: ei });
}

function setupManagement(el) {
  // Require at least Flash version 9.
  if (flashVersion.major >= 9)
    showManagement(el);
  else
    showFlashInstall(el);
}

function showManagement(el) {
  var flashVars = {
    'faust_xml': encodeURIComponent($('flash_management').toFlashHTML())
  };

  var params = {
    allowFullScreen: 'true',
    allowScriptAccess: 'always'    
  };
  
  var o = new Element('div');
  el.insert(o);
  
  var height = (($('flash_management').select('li').length * 30) + 40);
  
  swfobject.embedSWF(buildUrl('/swf/about_management.swf'), o.identify(), '900', height, '9', '', flashVars, params, {});
}

function showFlashInstall(el)
{
  el.update(
    '<p>Please install the latest Flash Player 9 by <a href="http://www.adobe.com/go/getflashplayer?redirect=' + location.href + '">clicking here</a>.</p>'
  );
}