// 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 = $(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 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
    }
  }
}

var map
var streetView
var streetViewClient

function loadMap()
{
  if (!document.getElementById('googlemap')) {
    return
  }
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById('googlemap'))
    map.setMapType(G_NORMAL_MAP)
    map.addControl(new GLargeMapControl())
    map.addControl(new GMapTypeControl())
    map.addControl(new GOverviewMapControl())
    map.setCenter(new GLatLng(54.620282250225365, -6.2125325202941894), 15)

    /*
    streetView = new GStreetviewPanorama(document.getElementById('googlestreetview'))
    var streetViewPos = new GLatLng(54.57965, -5.95028)
    var streetViewPOV = {yaw: 312, pitch: -5}
    streetView.setLocationAndPOV(streetViewPos, streetViewPOV)
    GEvent.addListener(streetView, 'error', handleNoFlash)
    */

    // add icon
    var icon = new GIcon()
    icon.image = "/images/map-logo.png"
    icon.iconSize = new GSize(130, 52)
    icon.iconAnchor = new GPoint(130, 52)
    var point = new GLatLng(54.620282250225365, -6.2125325202941894)
    map.addOverlay(new GMarker(point, icon, true))
  }
}

function handleNoFlash(errorCode)
{
  if (errorCode == 603) {
    alert("Error: Flash doesn't appear to be supported by your browser");
    return;
  }
}

function menuFix()
{
  if (typeof document.body.style.maxHeight != 'undefined' || !document.all) {
    return
  }
  var listItems = document.getElementById('nav').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 startSlideshow()
{
  slideshowId = Moo.$('slideshow') ? 'slideshow' : false
  if (!slideshowId) {
    return false
  }
  var slideshow = new gallery(Moo.$(slideshowId), {
		elementSelector: 'div.slide',
    titleSelector: 'h2',
    timed: true,
		delay: 9000,
		embedLinks: false,
		showInfopane: true,
		showArrows: false
	});
}

function getFirstFormElement()
{
  // Iteratively traverse DOM starting from root given and return first form element
  var root = document.getElementsByTagName('form')[0]
  var s = ''
  var c = root, n = null
  do {
    n = c.firstChild
    if (n == null) {
      if (c.nodeType == 1 && (c.tagName.toUpperCase() == 'INPUT' || c.tagName.toUpperCase() == 'TEXTAREA' || c.tagName.toUpperCase() == 'SELECT')) {
        return c
      }
      n = c.nextSibling
    }
    if (n == null) {
      var tmp = c
      do {
        n = tmp.parentNode
        if (n == root) {
          break
        }
        if (n.nodeType == 1 && (n.tagName.toUpperCase() == 'INPUT' || n.tagName.toUpperCase() == 'TEXTAREA' || n.tagName.toUpperCase() == 'SELECT')) {
          return n
        }
        tmp = n
        n = n.nextSibling
      } while (n == null)
    }
    c = n
  } while (c != root)
  return false
}

function populateForm()
{
  if (window.location.search.length == 0) {
    return false
  }
  // parse URL for GET variables
  var query = window.location.search.substring(1, window.location.search.length)
  var formVars = query.split('&')
  var keyValuePairs = []
  var keyValue
  for (var i = 0; i < formVars.length; i++) {
    keyValue = formVars[i].split('=')
    if (keyValue.length != 2) {
      continue
    }
    keyValuePairs[keyValue[0]] = unescape(keyValue[1])
  }
  // pre-select select options if in keyValuePairs
  var selects = document.getElementsByTagName('select')
  for (var i = 0; i < selects.length; i++) {
    if (typeof keyValuePairs[selects[i].id] != 'undefined') {
      for (var j = 0; j < selects[i].options.length; j++) {
        if (selects[i].options[j].value == keyValuePairs[selects[i].id]) {
          selects[i].selectedIndex = j
          break
        }
      }
    }
  }
  // pre-fill input value if in keyValuePairs
  var inputs = document.getElementsByTagName('input')
  for (var i = 0; i < inputs.length; i++) {
    if (typeof keyValuePairs[inputs[i].id] != 'undefined') {
      inputs[i].value = keyValuePairs[inputs[i].id]
    }
  }
  // give focus to first form element
  var element = getFirstFormElement()
  if (element) {
    element.focus()
  }
}

if (typeof Shadowbox != 'undefined') {
  Shadowbox.init({
    animSequence: 'wh'
  })
}

Cufon.replace([
    'ul#nav li.level1',
    'h1',
    'h2',
    'div#logo h3',
    'div#footer-nav li',
    'div#copyright'
  ], {
    hover: true
  }
)