// ***************** market tabs ******************

var marketTabLinks;
var marketTabs;

addEvent(window,'load',function() {
  var marketsDiv = getElementById('market-nav');
  if (marketsDiv) {

    marketTabLinks = getElementsByTagName(marketsDiv,'a');
    for (var i=0;i < marketTabLinks.length;i++) {
      var href= marketTabLinks[i].href;
      marketTabLinks[i].href = 'javascript:setMarketTab(' + i + ');';
    }

    marketTabs = getElementsByClassName(getElementById('world-markets'),'div','market-tab');
  }
});

function setMarketTab(index) {
  for (var i=0;i < marketTabLinks.length;i++) {
    if (i == index) marketTabLinks[i].className = 'selected';
    else marketTabLinks[i].className = '';
  }
  for (var i=0;i < marketTabs.length;i++) {
    if (i == index) marketTabs[i].style.display = 'block';
    else marketTabs[i].style.display = 'none';
  }
}

// ***************** general utility functions ******************

function elementHasClass(element, className) {
  //return true if the element has the given class name
  className = className.replace(/\-/g, '\\-');
  var re = new RegExp('(^|\\s)' + className + '(\\s|$)');
  return re.test(element.className);
}

function applyClass(element, className) {
  //add a class to an element
  if (!elementHasClass(element, className)) element.className += ' ' + className;
}

function removeClass(element, className) {
  //remove a class from an element
  className = className.replace(/\-/g, '\\-');
  var re = new RegExp('(^|\\s)' + className + '(\\s|$)');
  element.className = element.className.replace(re,'');
}

function getElementById(id) {
  //get element with a given id
  return (document.all)? document.all[id] : document.getElementById(id);
}

function getElementsByTagName(container, tagName) {
  //get all html nodes of a given type within a given container
  if (container) return container.getElementsByTagName(tagName);
  else return new Array();
}

function getElementsByClassName(container, tagName, className) {
  //get all html nodes of a given type and class within a given container
  var elements = getElementsByTagName(container, tagName);
  var result = new Array();
  for(var i=0;i < elements.length;i++) {
    var e = elements[i];
    if (elementHasClass(e,className)) result.push(e);
  }
  return result;   
}

function addEvent(element, event, func) {
  //add an event to the specified element, preserving any existing events that are attached
  if (!element) return;
  if (element.addEventListener) {
    element.addEventListener(event, func, false);
    return true;  
  } else {
    var oldFn = element['on' + event];
    var fn;
    if (oldFn) {
      fn = function() {
        return oldFn();
        return func();
      }
    } else {
      fn = func;
    }
    if (element.attachEvent) return element.attachEvent('on' + event, fn);
    else element['on' + event] = fn;
  }
}