// 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
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 activeXFix()
{
  if (document.all) {
    objs = document.getElementsByTagName('object')
    for (var i = 0; i < objs.length; i++) {
      objs[i].outerHTML = objs[i].outerHTML
    }
  }
}

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 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'
    }
  }
}

function firefoxForms()
{
  if (!document.addEventListener) {
    return false
  }
  var fieldsets, labels, labelContent, labelWidth, labelSpan
  var forms = document.getElementsByTagName('form')
  for (var i = 0; i < forms.length; i++) {
    if (forms[i].className != 'accessible') {
      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++) {
        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 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 imageSwap(e, imgSrc)
{
  var overText = '_on'
  imgSrc = imgSrc == null ? this.src : imgSrc
  var dirs = imgSrc.split('index.html')
  var path = ''
  for (var i = 0; i < dirs.length - 1; i++) {
    path += dirs[i] + '/'
  }
  var fileParts = dirs[dirs.length - 1].split('.')
  if (e == 'preload') {
    return path + fileParts[0] + overText + '.' + fileParts[1]
  }
  var e = !e ? window.event : e
  if (e.type == 'mouseover') {
    this.src = path + fileParts[0] + overText + '.' + fileParts[1]
  } else if (e.type == 'mouseout') {
    this.src = path + fileParts[0].replace(new RegExp(overText + '$'), '') + '.' + fileParts[1]
  }
}

function initImageSwap(id)
{
  if (!document.getElementById(id)) {
    return false
  }
  images = document.getElementById(id).getElementsByTagName('IMG')
  preloads = []
  for (var i = 0; i < images.length; i++) {
    preloads[i] = new Image
    preloads[i].src = imageSwap('preload', images[i].src)
    images[i].onmouseover = imageSwap
    images[i].onmouseout = imageSwap
  }
}

menuOver = function() {
  // run menuOver only for IE < 7
  if (typeof document.body.style.maxHeight != 'undefined' || !document.all) {
    return false
  }
  var listItems = document.getElementById('navigation').getElementsByTagName('LI')
  for (var i = 0; i < listItems.length; i++) {
    listItems[i].onmouseover = function() { this.className += ' hover' }
    listItems[i].onmouseout = function() { this.className = this.className.replace(new RegExp(' hover\\b'), '') }
  }
}

function pngFix()
{
  // IE6 only
  if (typeof document.body.style.maxHeight != 'undefined' || !document.all) {
    return
  }
  for(var i = 0; i < document.images.length; i++) {
    var img = document.images[i]
    var imgName = img.src.toUpperCase()
    if (imgName.substring(imgName.length-3, imgName.length) == "PNG") {
      var imgID = (img.id) ? "id='" + img.id + "' " : ""
      var imgClass = (img.className) ? "class='" + img.className + "' " : ""
      var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
      var imgStyle = "display:inline-block;" + img.style.cssText
      if (img.align == "left") imgStyle = "float:left;" + imgStyle
      if (img.align == "right") imgStyle = "float:right;" + imgStyle
      if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
      var strNewHTML = "<span " + imgID + imgClass + imgTitle
      + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
      + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
      + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
      img.outerHTML = strNewHTML
      i = i - 1
    }
  }
}