////////////////////////////////////////////////////////////////////////////////
///// VIC'S NERVLIGHTBOX (JQUERY PLUGIN) ///////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

/**
 * nervLightbox
 *
 * @author      Vic Jerczynski
 * @copyright   2011 Vic Jerczynski
 * @link        https://github.com/jerczu/vicBox
 * @license     MIT/X11 <http://j.mp/mit-license>
 * @license     GPL     <http://www.gnu.org/licenses/gpl.html>
 */
(function(a){imagelist=[],titles=[],messages=[],a.fn.nervLightbox=function(b){function k(b,c){var d=(a(window).height()-b.height())/2,e=(a(window).width()-b.width())/2;b.css({position:"absolute",top:"5%",left:"50%",marginLeft:"-"+(c/2+10)+"px",width:c,zoom:1})}function j(){a("#nerv-dialog-modal").fadeOut(),a("#nerv-dialog-overlay").fadeOut()}function i(b,c){if(a("#nerv-dialog-modal").length>0){a("#nerv-modal-image").empty(),a("#nerv-modal-image").html(b[c]),b[c].complete?a("#nerv-dialog-modal").show():setTimeout(function(){i(b,c)},10),theImage=a("#nerv-modal-image").find("img"),theImage.outerWidth()>1e3?theImage.outerWidth(1e3):theImage.outerWidth(theImage.innerWidth()),a("#nerv-dialog-overlay").fadeIn(),a("#nerv-modal-title").width(a("#nerv-modal-image").find("img").innerWidth()*.95),a("#nerv-modal-message").width(a("#nerv-modal-image").find("img").innerWidth()*.95),a("#nerv-dialog-overlay").css("height",a(document).height());if(titles.length>0){var e=c+1;a("#nerv-modal-title").html("<span>"+e+"</span> / "+numImages+"&#160;&#160;&#160;"+titles[0])}else a("#nerv-modal-title").html(d.title);if(messages.length>0){var f=messages[0];a("#nerv-modal-message").html(f+"..."),a("#nerv-modal-message").hasClass("dark")&&(a("#nerv-modal-message").height(170),a("#nerv-modal-text").height(170))}}k(a("#nerv-dialog-modal"),a("#nerv-modal-image").find("img").outerWidth())}function h(){a("#nerv-dialog-modal").length>0&&(a("#nerv-dialog-modal").remove(),a("#nerv-dialog-overlay").remove());switch(d.set){case null:a("body").prepend('<div id="nerv-dialog-modal"><div id="nerv-dialog-wrapper"><div id="nerv-modal-image"></div><div id="nerv-modal-prev" class="replace"></div> <div id="nerv-modal-next" class="replace"></div><div id="nerv-modal-text"><div id="nerv-modal-title"></div><div id="nerv-modal-message"></div></div><div id="nerv-modal-close" class="replace"></div></div></div><div id="nerv-dialog-overlay"></div>');if(imagelist.length<=1){$('#nerv-modal-next,#nerv-modal-prev').hide();}}}function g(b){if(b==0){i(imagelist,imagelist.length-1);return imagelist.length-1}i(imagelist,b-1);return b-1}function f(a){if(a<imagelist.length-1){i(imagelist,a+1);return a+1}i(imagelist,0);return 0}var c={set:null,title:"Image title",message:"Lorem ipsum...",textContainer:"",titleContainer:"",messageContainer:"",scale:!1,imageAry:null},d=a.extend({},c,b),e=0;this.each(function(b,c){var f=a(this);f.click(function(b){e=0,titles=[],messages=[],imagelist=[],numImages=0,d.imageAry==null?(f.parent().find("img").each(function(){var b=new Image;b.src=a(this).attr("rel"),imagelist.push(b)}),e=f.index()):imagelist=d.imageAry,numImages=imagelist.length;for(var c=0;c<=imagelist.length-1;c++)titles.push(a(imagelist[c]).attr("title"));h(),i(imagelist,e)})}),a("#nerv-modal-close,#nerv-modal-close-dark, #nerv-dialog-overlay").live("click",function(){j()}),a("#nerv-modal-next,#nerv-modal-next-dark").live("click",function(){e=f(e)}),a("#nerv-modal-prev,#nerv-modal-prev-dark").live("click",function(){e=g(e)})}})(jQuery);

////////////////////////////////////////////////////////////////////////////////
///// TWITTER FOR JQUERY (PLUGIN) //////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

/**
 * Twitter for jQuery.
 *
 * @version     1.5
 * @author      Damien du Toit
 * @link        http://coda.co.za/blog/2008/10/26/jquery-plugin-for-twitter
 * @license     Creative Commons Attribution-Non-Commercial 3.0 Unported License
 */
(function(a){a.fn.getTwitter=function(b){a.fn.getTwitter.defaults={userName:null,numTweets:1,loaderText:"Loading tweet...",slideIn:!1,showHeading:!0,headingText:"Latest Tweets",showTimestamp:!0};var c=a.extend({},a.fn.getTwitter.defaults,b);return this.each(function(){var b=a(this);b.empty().addClass("twitted"),c.showHeading&&b.append("<h2>"+c.headingText+"</h2>");var d='<ul id="twitter_update_list"><li></li></ul>';b.append(d);var e=a("#twitter_update_list");e.hide();var f=a('<p class="preLoader">'+c.loaderText+"</p>");b.append(f);if(c.showProfileLink){var g='<p class="profileLink"><a href="http://twitter.com/'+c.userName+'">http://twitter.com/'+c.userName+"</a></p>";b.append(g)}a.getScript("http://twitter.com/javascripts/blogger.js"),a.getScript("http://twitter.com/statuses/user_timeline/"+c.userName+".json?callback=twitterCallback2&count="+c.numTweets,function(){a(f).remove(),c.showTimestamp||e.find("li").each(function(){var b=a(this).children("a"),c=b.html();b.remove(),a(this).attr("title",c)});if(c.slideIn){var b=e.data("originalHeight");b||(b=e.show().height(),e.data("originalHeight",b),e.hide().css({height:0})),e.show().animate({height:b},c.slideDuration)}else e.show();e.find("li:first").addClass("firstTweet"),e.find("li:last").addClass("lastTweet")})})}})(jQuery);

////////////////////////////////////////////////////////////////////////////////
///// BEGIN MAIN JAVASCRIPT FILE FOR INSPECT & ADAPT ///////////////////////////
////////////////////////////////////////////////////////////////////////////////

(function($) {

  // True if IE6+.
  window.ie = !!(document.compatMode && document.all);

  window.nervRegex = {
    'url': /^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
    'email': /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i
  };

  /**
   * Field Auto-Fill
   */
  var autoFill = function(input, preClass) {
    preClass = typeof preClass == 'string' ? preClass : false;
    input = $(input);
    if(input.length == 0) {
      return false;
    }
    var rel = 'focused';
    $.each(input, function(index, element) {
      var input = $(element);
      var defaultval = input.attr('value');
      input.addClass(preClass);
      input.bind('focus', function(event) {
        if(input.attr('rel') != rel) {
          defaultval = input.attr('value');
          input.attr('value', '');
          input.attr('rel', rel);
          input.addClass('focus');
          input.removeClass(preClass);
        }
      });
      input.bind('blur', function(event) {
        if(input.attr('value') == '') {
          input.attr('value', defaultval);
          input.attr('rel', '');
          input.removeClass('focus');
          input.addClass(preClass);
        }
      });
      var form = input.parents('form');
      if(form.length != 0) {
        form = $(form.get(0));
        form.bind('reset', function(event) {
          setTimeout(function() {
            input.attr('value', '');
            input.trigger('blur');
          }, 1);
        });
      }
    });
  };

  /**
   * IE6 Hover Classes
   */
  var addIE6hovers = function(selector) {
    selector = $(selector);
    selector.bind('mouseenter', function(event) {
      $(this).addClass('ie6hover');
    });
    selector.bind('mouseleave', function(event) {
      $(this).removeClass('ie6hover');
    });
  };

  /**
   * Multiple Accordion
   * Show/Hide Content via their handles.
   */
  var multiAccordion = function(handles, contentSelector) {
    handles = $(handles);
    if(handles.length == 0) {
      return false;
    }
    $.each(handles, function(index, element) {
      var handle = $(element);
      var content = (typeof contentSelector == 'string') ? handle.next() : handle.next(contentSelector);
      if(content.length == 0) {
        return true;
      }
      content = $(content.get(0));
      handle.bind('click', function(event) {
        event.preventDefault();
        content.toggle();
        handle.toggleClass('closed');
        return false;
      });
      handle.trigger('click');
    });
    return true;
  };

  /**
   * iSelect
   */
  window.iSelect = function(selects, title, handler) {
    var selectedClass = 'radioSelected';
    var containerClass = 'radioSelectContainer';
    var dropdownClass = 'radioSelectDropdown';
    selects = $(selects);
    title = typeof title == 'string' ? title : false;
    if(selects.length == 0) {
      return false;
    }
    var ID = 'iSelectRadioOption';
    var IDs = [];
    $.each(selects, function(index, selectDom) {
      var select = $(selectDom);
      // If it already has a sibling with the class ".radioSelectContainer" it
      // means the function has already run on this select :)
      if(!!select.siblings(".radioSelectContainer").length) {
        return true;
      }
      var parentSpan = select.parent('span');
      var options = select.children('option');
      var defaultOption = $(document.createElement('p'));
      if(title) {
        options[0] = undefined;
        defaultOption.text(title);
      }
      else {
        defaultOption.text($(options[0]).text());
      }
      var container = $(document.createElement('div'));
      defaultOption.appendTo(container);
      container.addClass(containerClass);
      var dropdown = $(document.createElement('div'));
      dropdown.addClass(dropdownClass);
      if(!select.hasClass('disabled')) {
        defaultOption.bind('click', function(event) {
          event.preventDefault();
          dropdown.toggle();
          if(dropdown.is(':hidden')) {
            container.removeClass('focus');
            parentSpan.removeClass('focus');
          }
          else {
            container.addClass('focus');
            parentSpan.addClass('focus');
          }
          return false;
        });
      }
      else {
        container.addClass('disabled');
        parentSpan.addClass('disabled');
      }
      $.each(options, function(index, optionDom) {
        var option = $(optionDom);
        if(option.length != 1) {
          return true;
        }
        var radio = $(document.createElement('input'));
        var label = $(document.createElement('label'));
        var thisID = IDs.length;
        IDs[thisID] = {
          'radio': radio,
          'label': label
        };
        radio.attr({
          'id': ID + thisID,
          'value': option.attr('value'),
          'name': select.attr('name'),
          'type': 'radio'
        });
        label.attr({'for': ID + thisID});
        label.text(option.text());
        radio.appendTo(dropdown);
        label.appendTo(dropdown);
        if(option.attr('selected')) {
          defaultOption.text(label.text());
          label.addClass(selectedClass);
        }
        label.bind('click', function(event) {
          defaultOption.text(label.text());
          defaultOption.addClass('active');
          container.trigger('selectNone');
          label.addClass(selectedClass);
          defaultOption.trigger('click');
          if(typeof handler == 'function') {
            // Trigger handler with label text, and radio value.
            handler(label.text(), radio.val());
          }
        });
        radio.hide();
      });
      dropdown.appendTo(container);
      container.insertAfter(select);
      select.hide();
      select.attr('name', '');
      container.bind('selectNone', function() {
        $(this).find('label').removeClass(selectedClass);
      });
      $(document).bind('click', function(event) {
        if(!dropdown.is(':hidden')) {
          defaultOption.trigger('click');
        }
      });
      dropdown.hide();
    });
    return true;
  }

  /**
   * Span Focus Class
   */
  var spanFocusClass = function(inputs, focusClass) {
    inputs = $(inputs);
    if(inputs.length == 0) {
      return false;
    }
    $.each(inputs, function(index, inputDom) {
      var input = $(inputDom);
      var span = input.parent('span');
      if(span.length != 1) {
        return true;
      }
      input.bind('focus', function(event) {
        span.addClass(focusClass);
      });
      input.bind('blur', function(event) {
        span.removeClass(focusClass);
      });
    });
    return true;
  }

  /**
   * Centre Me
   *
   * Simple jQuery plugin to centre an element in the middle of the browser
   * window. Also takes into account window resizing due to percentage
   * positioning.
   */
  $.fn.centreMe = function(stop) {
    $.each(this, function(index, item) {
      var $this = $(item);
      $this.css({
        'position': 'absolute',
        'top': 50 + '%',
        'left': 50 + '%',
        marginLeft: '-' + ($this.width() / 2) + 'px',
        marginTop: '-' + ($this.height() / 2) + 'px'
      });
    });
  };

  /**
   * Photo Lightbox Slideshow
   *
   * @access public
   * @return jQuery
   */
  $.fn.inspectAndAdaptGallery = function(imgURL) {
    if(typeof imgURL != "string" || imgURL.length == 0) {
      return false;
    }
    $.each(this, function(index, item) {
      $this = $(item);
      var resource = $this.parents(".resource");
      var slideshow = resource.children('.slideshow');
      if(slideshow.length == 0) {
        return true;
      }
      slideshow = $(slideshow.get(0));
      var description = $(resource.find(".description").get(0)).text();
      slideshow.hide();
      // When all images have been set for this album, initiate the
      // nervLightbox.
      var allImages = slideshow.find('img');
      // When "A.slidestarter" has been clicked, initiate the nervLightbox.
      $this.nervLightbox({
        'scale': true,
        'imageAry': allImages
      });
    });
  };

  /**
   * nerv Tabs
   */
  $.fn.nervTabs = function(options) {
    var defaults = {
      'container': '.tabLoader',
      'activeClass': 'active'
    };
    // This is the regular expression taken from the jQuery Validation plugin.
    var settings = $.extend({}, defaults, options);
    var contentContainer = $(settings.container);
    // If the content container does not exist, there is no point carrying on.
    if(contentContainer.length == 0) {
      return false;
    }
    // We only want one content container!
    contentContainer = $(contentContainer[0]);
    if(window.ie) {
      contentContainer.css({'background-color': '#f8f8f8'});
    }
    var all = $(this);
    $.each(all, function(index, item) {
      var $this = $(item);
      var $parent = $this.parent();
      var fetchURL = $this.attr('rel');
      // If the rel attribute is not a valid URL, continue onto the next item in
      // the iteration.
      if(typeof fetchURL != 'string') {
        return true;
      }
      $this.bind('click', function(event) {
        event.preventDefault();
        if($parent.hasClass(settings.activeClass)) {
          return false;
        }
        all.parents().removeClass(settings.activeClass);
        $parent.addClass(settings.activeClass);
        contentContainer.animate({'opacity': 0.2}, {'complete': function() {
          $.get(fetchURL, function(data) {
            contentContainer.html(data);
            contentContainer.animate({'opacity': 1});
            DOMReadyRepeats();
          });
        }});
        return false;
      });
    });
  };

  /**
   * Video Slider
   */
  $.fn.videoSlider = function(options) {
    if(this.length == 0) {
      return false;
    }
    var defaults = {};
    var settings = $.extend({}, defaults, options);
    $.each(this, function(index, item) {
      var $this = $(item);
      if($this.hasClass('none')) {
        $this.css({
          'curosr': 'normal',
          'opacity': 0.4
        });
        return true;
      }
      var videoCode = $this.attr('rel');

      // If there is no YouTube video code in the rel attribute of the action
      // button, continue with the next item in the iteration.
      if(typeof videoCode != 'string' || videoCode == '') {
        return true;
      }
      // Create a variable declaring whether we have loaded this video or not,
      // because we don't want to load a video if the iFrame has already been
      // inserted.
      var loaded = false;
      var $parent = $this.parent();
      // Grab the video container, or create a new one if it does not already
      // exist.
      var videoContainer = $parent.find('.video');
      if(videoContainer.length == 0) {
        videoContainer = $(document.createElement('div'));
        videoContainer.addClass('video');
        videoContainer.appendTo($parent);
        var resourcedata = $parent.parent().find('.resourcedata');
        resourcedata = resourcedata.length == 0
                     ? $parent
                     : $(resourcedata.get(0));
        videoContainer.insertAfter(resourcedata);
      }
      else {
        videoContainer = $(videoContainer[0]);
      }
      videoContainer.hide();
      var iFrameHTML = '';
      if($this.hasClass('youtube')) {
        iFrameHTML = '<div class="clear"></div><iframe title="YouTube video player" width="620" height="379" src="http://www.youtube.com/embed/'
                       + videoCode
                       + '?rel=0" frameborder="0" allowfullscreen></iframe>';
      }
      else if($this.hasClass('vimeo')) {
        iFrameHTML = '<iframe src="http://player.vimeo.com/video/'
                       + videoCode
                       + '" width="620" height="379" frameborder="0"></iframe>';
      }
      $this.bind('click', function(event) {
        event.preventDefault();
        if($this.hasClass('open')) {
          $this.removeClass('open').html('Watch');
          videoContainer.slideUp(function() {
            videoContainer.html('');
          });
        }
        else {
          $this.addClass('open').html('Close');
          videoContainer.html(iFrameHTML);
          videoContainer.slideDown();
        }
        return false;
      });
    });
  };

  // Define the validation methods.
  var validationMethods = {
    'date': function(value, input) {return !!/^[0-9]{2}\/[0-9]{2}\/[1-2][0-9]{3}$/.test(value);},
    'description': function(value, input) {return !!(typeof value == 'string' && value != '');},
    'comment': function(value, input) {return !!(typeof value == 'string' && value != '');},
    'email': function(value, input) {return !!window.nervRegex.email.test(value);},
    'enquiry': function(value, input) {var c=!1;$.each($('.aside form input[type="radio"]'),function(x,i){if($(i).is(':checked')||i.checked){c=!0;return !1;}});return c;},
    'name': function(value, input) {return !!(typeof value == 'string' && value != '');}
  };
  var formValidation = function() {
    var inputSelector = [];
    var i = 0;
    $.each(validationMethods, function(index, item) {
      inputSelector[i] = 'input[name="' + index + '"]'; i++;
      inputSelector[i] = 'textarea[name="' + index + '"]'; i++;
    });
    inputSelector = inputSelector.join();
    var forms = $('form');
    if(forms.length == 0) {
      return false;
    }
    $.each(forms, function(index, item) {
      var form = $(item);
      // Grab the inputs, and make sure at least one is there.
      var inputs = form.find(inputSelector);
      if(inputs.length == 0) {
        return true;
      }
      $.each(inputs, function(index, item) {
        var input = $(item);
        input.bind('blur', function(event) {
          var displayContainer;
          if(input.get(0).tagName.toLowerCase() == 'textarea') {
            displayContainer = input;
          }
          else if(input.attr('type') == 'radio') {
            displayContainer = input.parent().parent();
          }
          else {
            displayContainer = input.parent();
          }
          displayContainer.removeClass('validationFail');
          displayContainer.removeClass('dpvf');
          // Grab the ID and value of the input.
          var id = input.attr('name');
          var val = !!(input.hasClass('default') && id != 'date') ? '' : input.val();
          if(id == 'date') {
            val = '01/01/1970';
            input.bind('keyup', function(event) {
              event.preventDefault();
              return false;
            });
          }
          var validates = validationMethods[id](val, input);
          if(!validates) {
            displayContainer.addClass('validationFail');
            if(id == 'date') {
              displayContainer.addClass('dpvf');
            }
          }
        });
      });
      form.bind('submit', function(event) {
        inputs.trigger('blur');

        // Special validation for the datepicker because it doesn't work onBlur.
        var checkDatePicker = form.find('input[name="date"]');
        if(checkDatePicker.length == 1) {
          if(!validationMethods.date(checkDatePicker.val(), checkDatePicker)) {
            checkDatePicker.parent().addClass('validationFail');
          }
        }
        // Count how many failures there were, if there were none. Don't bother
        // sending the form data, it's invalid.
        var fails = form.find('.validationFail');
        if(fails.length > 0) {
          return false;
        }
        if(form.hasClass('noajax')) {
          return true;
        }
        var timeout = null, contactAjaxMessage = $('.contactAjaxMessage'), duration = 500;
        var displayAjaxMessage = function(text, reset) {
          if(typeof timeout == 'number') {
            clearTimeout(timeout);
          }
          contactAjaxMessage.hide(0, function() {
            contactAjaxMessage.html(text);
            contactAjaxMessage.slideDown(duration);
          });
          timeout = setTimeout(function() {
            contactAjaxMessage.slideUp(duration);
          }, 5000);
          if(reset === true) {
            inputs.val('');
            inputs.trigger('blur');
            // Remove all failed validation classes on the displayContainers.
            inputs.removeClass('validationFail');
            inputs.parent().removeClass('validationFail');
            inputs.parent().parent().removeClass('validationFail');
          }
        };
        $.ajax({
          'url': form.attr('action'),
          'data': form.serialize(),
          'type': 'POST',
          'success': function() {
            displayAjaxMessage('Your contact request has been successfully submitted.', true);
          },
          'error': function() {
            displayAjaxMessage('Sorry, there was a problem trying to submit your contact request, please try again.');
          }
        });
        return false;
      });
    });
  };

  var flagComment = function() {
    var flags = $('.flagpost');
    if(flags.length == 0) {
      return false;
    }
    $.each(flags, function(index, item) {
      var flag = $(item);
      var clicked = false;
      flag.bind('click', function(event) {
        event.preventDefault();
        if(clicked) {
          return false;
        }
        $.get(flag.attr('href'));
        flag.fadeTo(500, 0.35);
        clicked = true;
        return false;
      });
    });
  };

// ------------------------------------

  window.DOMReadyRepeats = function() {
    iSelect('.content span.select select');
    addIE6hovers(".content span.select label");
    $('a.slidestarter').inspectAndAdaptGallery('../lightbox.php');
    $('.loadVideo').videoSlider();
  };

  /**
   * DOM Ready
   */
  $(document).ready(function() {
    formValidation();
    autoFill('#searchquery', 'default');
    autoFill('span.text input, textarea', 'default');
    addIE6hovers('div.twitter');
    multiAccordion('.accordion h3');
    iSelect('.main .aside form span.select select', 'Enquiry Type...');
    iSelect(
      '.main .content .perpage span.select select',
      null,
      function(text, value) {
        $('#search-page').val(1);
        $('#search-perpage').val(value);
        $('#search-form').submit();
      }
    );
    spanFocusClass('input, textarea', 'focus');
    spanFocusClass('.datepicker input', 'dp_focus');
    addIE6hovers("span.select label");
    // Prevent disabled anchor tags from doing anything on the chance that their
    // event is triggered.
    $('a.disabled').bind('click', function(event) {
      event.preventDefault();
      return false;
    });
    // jQuery UI Date Picker for the Coaching Contact form.
    datepickerElements = $('span.datepicker input');
    if(datepickerElements.length != 0 && typeof $.fn.datepicker == 'function') {
      datepickerElements.datepicker({
        dateFormat: 'dd/mm/yy',
        minDate: '-0d'
      });
    }
    // LightBox Slideshow for the Photo Resources page.
    $('a.slidestarter').inspectAndAdaptGallery('../lightbox.php');
    $('.tabs li a').nervTabs();
    $('.loadVideo').videoSlider();
    flagComment();

    // Get tweet.
    $("#twitterContent").getTwitter({
      userName: "geoffcwatts",
      numTweets: 1,
      loaderText: "Loading tweet...",
      slideIn: false,
      showHeading: false,
      showProfileLink: false
    });

  });

})(jQuery);

////////////////////////////////////////////////////////////////////////////////
///// RESOURCES GLOBAL FUNCTIONS ///////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

var on_page = 10;
var page = 1;
var total = 0;
var pages = 0;
var res_next = 0;
var res_prev = 0;

/**
 * RES Init
 */
function res_init(new_on_page) {
  if(new_on_page != false) {
    on_page = new_on_page;
  }
  page = 1;
  total = $('.resource').length;
  if(total > 0) {
    res_pagination();
    res_show();
    $('#results-count').html(total);
  }
}

/**
 * RES Show
 */
function res_show() {
  var start = (page-1) * on_page;
  var end = start + on_page;
  $('.resource').each(function(i) {
    !!(i >= start && i < end) ? $(this).show() : $(this).hide();
  });
}

/**
 * RES Pagination
 */
function res_pagination() {
  // initialise pagination
  var html = '';
  pages = Math.floor(total / on_page);
  if(total % on_page > 0) {
    pages++;
  }
  res_prev = 0;
  res_next = 0;
  if(pages > 1) {
    res_next = 2;
    res_prev = pages;
    html += '<a href="#" id="res-previous" title="Previous Page" onclick="res_page(res_prev)">Previous&#160;&#160;</a>';
    for(var i = 1; i <= pages; i++) {
      html += ' <a href="#" title="Page ' +i+ '"';
      if (i == 1) {
        html += ' class="current"'
      }
      html += ' onclick="res_page(' + i + ');" id="page-' + i + '">' + i + '</a> ';
    }
    html += '<a href="#" title="Next Page" id="res-next" onclick="res_page(res_next)">&#160;&#160;Next</a>';
  }
  $('#res-pagination').html(html);
}

/**
 * RES Page
 */
function res_page(new_page) {
  if(new_page > 0) {
    page = new_page;
    res_next = page + 1;
    res_prev = page - 1;
    if(res_next > pages) {
      res_next = 1;
    }
    if(res_prev < 1) {
      res_prev = pages;
    }
    $('.current').removeClass('current');
    $('#page-' + page).addClass('current');
    res_show();
  }
}


function flagbutton(id, url)
{
	$('#'+id).attr("href", url.split("").reverse().join(""));
}
