// 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 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 + "' "
      // don't apply inline-block for curved images at bottom of menus
      if (img.className != 'bottom') {
        var imgStyle = "display:inline-block;" + img.style.cssText
      } else {
        var imgStyle = ''
      }
      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
    }
  }
}

function startGallery()
{
    var myGallery = new gallery(Moo.$('slideshow'), {
        timed: true,
        showCarousel: true,
        textShowCarousel: 'thumbnails',
        thumbWidth: 67,
        thumbHeight: 50,
        titleSelector: 'h1',
        showArrows: false,
        showInfopane: false,
        embedLinks: false,
        fadeDuration: 1500,
        delay: 4000,
        delayStart: 4000
    })
}


$(function() {
    $('a[rel=external]').each(function() {
        $(this).attr('target', '_blank');
    });
    accessibleForms();
    firefoxForms();
    activeXFix();
    pngFix();
    if (typeof calendarInit != 'undefined') {
        calendarInit();
    }
    if (typeof initialiseMaps != 'undefined') {
        initialiseMaps();
    }
    if (!!$('#slideshow').length) {
        startGallery();
    }
    /*
    if (typeof document.body.style.maxWidth == 'undefined') {
        if (document.getElementById('site').clientWidth < 938) {
            document.getElementById('site').style.width = '938px'
        }
    }
  */
    // preload menu images
    $('#menu > ul > li > a > img').each(function() {
        var img = new Image();
        img.src = $(this).attr('src').replace(new RegExp('\.png$'), '_menu.png');
    });
    // configure menu images
    $('#menu > ul > li').mouseover(function() {
        var $img = $(this).find('a img');
        var initialSrc = $img.attr('src');
        $img.attr('src', initialSrc.replace(new RegExp('\.png$'), '_menu.png'));
    });
    $('#menu > ul > li').mouseout(function() {
        var $img = $(this).find('a img');
        var initialSrc = $img.attr('src');
        $img.attr('src', initialSrc.replace(new RegExp('_menu\.png$'), '.png'));
    });

    ribbonPaddingFix = function() {
        var paddingTop;
        var minWidth = 1135;
        var initialPadding = $('#site').css('paddingTop').replace(new RegExp('px$'), '');
        if (minWidth - $(window).width() > 0) {
            paddingTop = Math.min(Math.floor((minWidth - $(window).width())/1.5), 90);
        } else {
            paddingTop = 0;
        }
        $('body').css({'padding-top': paddingTop + 'px'})
    }
    $(function() {
        ribbonPaddingFix();
    });
    $(window).resize(ribbonPaddingFix);
});
