function externalLinks()
{
  if (!document.getElementsByTagName) {
    return
  }
  var anchor
  var anchors = document.getElementsByTagName('a')
  for (var i = 0; i < anchors.length; i++) {
    anchor = anchors[i]
    if (anchor.getAttribute('href') && anchor.getAttribute('rel') == 'external') {
      anchor.target = '_blank'
    }
  }
}

// This fix is only required for Firefox
// - rewritten version of cmsform() from http://www.alistapart.com/articles/prettyaccessibleforms
//   by C Kernan on 24/10/2007 to avoid having to use JQuery
if (document.addEventListener) {
  document.addEventListener('DOMContentLoaded', firefoxForms, false)
}

function firefoxForms()
{
  var fieldsets, labels, labelContent, labelWidth, labelSpan
  var forms = document.getElementsByTagName('form')
  for (var i = 0; i < forms.length; i++) {
    if (forms[i].className.indexOf('accessible') == -1) {
      continue
    }
    fieldsets = forms[i].getElementsByTagName('fieldset')
    for (var j = 0; j < fieldsets.length; j++) {
      labels = fieldsets[j].getElementsByTagName('label')
      for (k = 0; k < labels.length; k++) {
        if (labels[k].className == 'nostyle') {
          continue
        }
        labelContent = labels[k].innerHTML
        labelWidth = labels[k].style.width
        labelSpan = document.createElement('span')
        labelSpan.style.display = 'block'
        labelSpan.style.width = document.defaultView.getComputedStyle(labels[k], '').getPropertyValue('width')
        labelSpan.innerHTML = labelContent
        labels[k].style.display = '-moz-inline-box'
        labels[k].innerHTML = null
        labels[k].appendChild(labelSpan)
      }
    }
    forms[i].style.display = 'block'
  }
}

function accessibleForms()
{
  var inputs, textareas
  var forms = document.getElementsByTagName('form')
  for (var i = 0; i < forms.length; i++) {
    if (forms[i].className != 'accessible') {
      continue
    }
    inputs = forms[i].getElementsByTagName('input')
    for (var j = 0; j < inputs.length; j++) {
      if (inputs[j].type != 'text' && inputs[j].type != 'password') {
        continue
      }
      inputs[j].onfocus = function () {
        this.className += ' focused'
      }
      inputs[j].onblur = function () {
        this.className = this.className.replace(/ focused/g, '')
      }
    }
    textareas = forms[i].getElementsByTagName('textarea')
    for (var j = 0; j < textareas.length; j++) {
      textareas[j].onfocus = function () {
        this.className = 'focused'
      }
      textareas[j].onblur = function () {
        this.className = null
      }
    }
  }
}

function checkForm(form)
{
  var re, match, element, elementName, elementCount, elementChecked
  var elements = getValidationElements(form)
  for (var i = 0; i < elements.length; i++) {
    // check all input type=text are not empty
    if (elements[i].type == 'text' && elements[i].value == '') {
      alert('Please complete ' + elements[i].name.replace(/_/g, ' '))
      elements[i].focus()
      return false
    // check all <input type=radio> and <input type=checkbox> have one option checked
    } else if ((elements[i].type == 'checkbox' || elements[i].type == 'radio') && !elements[i].checked) {
      // all radio and checkboxes buttons have ids ending _1 or similar
      re = new RegExp('(.+)_([0-9]+)$', 'g')
      match = re.exec(elements[i].id)
      // match[1] is element name, match[2] is element number
      if (match && parseInt(match[2]) == 1) {
        elementName = match[1]
        elementCount = 1
        elementChecked = false
        while (element = document.getElementById(elementName + '_' + elementCount)) {
          if (element.checked) {
            elementChecked = true
            break
          }
          elementCount++
        }
        if (!elementChecked) {
          alert('Please select ' + elementName.replace(/_/g, ' '))
          window.location.hash = elementName + '_1'
          return false
        }
      }
    } else if (elements[i].type == 'select-one' && elements[i].options[elements[i].options.selectedIndex].value == '') {
      alert('Please select ' + elements[i].name.replace(/_/g, ' '))
      elements[i].focus()
      return false
    }
  }
  return true
}

function getValidationElements(root)
{
  // Iteratively traverse DOM starting from root given and return an array of form element objects with class="required"
  var count = 0
  var s = ''
  var c = root, n = null
  var validateElements = []
  do {
    n = c.firstChild
    if (n == null) {
      if (c.nodeType == 1 && c.className.indexOf('required') != -1 && (c.tagName.toUpperCase() == 'INPUT' || c.tagName.toUpperCase() == 'TEXTAREA' || c.tagName.toUpperCase() == 'SELECT')) {
        validateElements[count++] = c
      }
      n = c.nextSibling
    }
    if (n == null) {
      var tmp = c
      do {
        n = tmp.parentNode
        if (n == root) {
          break
        }
        if (n.nodeType == 1 && n.className.indexOf('required') != -1 && (n.tagName.toUpperCase() == 'INPUT' || n.tagName.toUpperCase() == 'TEXTAREA' || n.tagName.toUpperCase() == 'SELECT')) {
          validateElements[count++] = n
        }
        tmp = n
        n = n.nextSibling
      } while (n == null)
    }
    c = n
  } while (c != root)
  return validateElements
}

function getCookie(name) {
  var nameEQ = name + '='
  var ca = document.cookie.split(';')
  for(var i = 0; i < ca.length; i++) {
    var c = ca[i]
    while (c.charAt(0)==' ') {
      c = c.substring(1,c.length)
    }
    if (c.indexOf(nameEQ) == 0) {
      return c.substring(nameEQ.length, c.length)
    }
  }
  return null;
}

function setCookie(name, value, days) {
  var expires
  if (days) {
    var date = new Date()
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000))
    expires = '; expires=' + date.toGMTString()
  } else {
    expires = '; expires=Thu, 01-Jan-1970 00:00:01 GMT'
  }
  document.cookie = name + '=' + value + expires + '; path=/'
}

function startSlideshow()
{
  var slideshow = new gallery(Moo.$('slideshow'), {
		timed: true,
    showArrows: false,
    showCarousel: false,
    delay: 5000
	});
}

jQuery(function() {
  externalLinks()
  // initialise calendars
  if (typeof calendarInit != 'undefined') {
    backdated = typeof backdatesAllowed != 'undefined' && backdatesAllowed ? true : false
    calendarInit(backdated)
  }
  if (document.getElementById('slideshow')) {
    startSlideshow()
  }
})

jQuery(function() {
  jQuery('#toggle-font-size a').click(function(e) {
    jQuery('head link[href^="/css/size"]').remove()
    var fontSize = jQuery(this).attr('rel')
    if (fontSize > 1) {
      jQuery('head').append('<link rel="stylesheet" type="text/css" media="all" href="/css/size' + fontSize + '.css" />')
      setCookie('fontStyle', 'size' + fontSize, 365)
      alert('Font size successfully changed')
    } else {
      setCookie('fontStyle')
    }
    e.preventDefault()
  })
})

// menu configuration
jQuery(function() {
  // hide ULs
  jQuery('#navigation > ul > li:not(.selected)').each(function() {
    jQuery(this).parent().find('ul').hide()
  });
  // show any sub selected ULs
  jQuery('li.selected > ul').show()
  if (jQuery('li.selected').hasClass('submenu-closed')) {
    jQuery('li.selected').removeClass('submenu-closed')
    jQuery('li.selected').addClass('submenu-open')
  }
  // show UL parent path of selected LI
  jQuery('li.selected').parents().each(function() {
    if (jQuery(this).is(':hidden')) {
      jQuery(this).parent().removeClass('submenu-closed')
      jQuery(this).parent().addClass('submenu-open')
      jQuery(this).show()
    }
  });
  // configure click event
  jQuery('#navigation ul > li:has(ul) > a').click(function(e) {
    e.preventDefault()
    // toggle self closed if open
    if (jQuery(this).parent().find('ul').is(':visible')) {
      // close visible child ULs in reverse order
      var visibleULs = []
      jQuery(this).parent().find('ul:visible').each(function() {
        visibleULs.unshift(jQuery(this))
      });
      jQuery.each(visibleULs, function() {
        this.slideToggle('slow')
        this.parent().removeClass('submenu-open')
        this.parent().addClass('submenu-closed')
      });
      return false
    }
    // open clicked UL
    jQuery(this).parent().find('ul:first').slideToggle('slow')
    jQuery(this).parent().removeClass('submenu-closed')
    jQuery(this).parent().addClass('submenu-open')
  });
});