﻿/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (MIT_LICENSE.txt)
 * and GPL Version 2 (GPL_LICENSE.txt) licenses.
 *
 * Version: 1.1.1
 * Requires jQuery 1.3+
 * Docs: http://docs.jquery.com/Plugins/livequery
 */
(function($) {
$.extend($.fn, {
    livequery: function(type, fn, fn2) {
        var self = this, q;
        // Handle different call patterns
        if ($.isFunction(type))
            fn2 = fn, fn = type, type = undefined;
        // See if Live Query already exists
        $.each( $.livequery.queries, function(i, query) {
            if ( self.selector == query.selector && self.context == query.context &&
                type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) )
                    // Found the query, exit the each loop
                    return (q = query) && false;
        });
        // Create new Live Query if it wasn't found
        q = q || new $.livequery(this.selector, this.context, type, fn, fn2);
        // Make sure it is running
        q.stopped = false;
        // Run it immediately for the first time
        q.run();
        // Contnue the chain
        return this;
    },
    expire: function(type, fn, fn2) {
        var self = this;
        // Handle different call patterns
        if ($.isFunction(type))
            fn2 = fn, fn = type, type = undefined;
        // Find the Live Query based on arguments and stop it
        $.each( $.livequery.queries, function(i, query) {
            if ( self.selector == query.selector && self.context == query.context &&
                (!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped )
                    $.livequery.stop(query.id);
        });
        // Continue the chain
        return this;
    }
});
$.livequery = function(selector, context, type, fn, fn2) {
    this.selector = selector;
    this.context  = context;
    this.type     = type;
    this.fn       = fn;
    this.fn2      = fn2;
    this.elements = [];
    this.stopped  = false;
    // The id is the index of the Live Query in $.livequery.queries
    this.id = $.livequery.queries.push(this)-1;
    // Mark the functions for matching later on
    fn.$lqguid = fn.$lqguid || $.livequery.guid++;
    if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++;
    // Return the Live Query
    return this;
};
$.livequery.prototype = {
    stop: function() {
        var query = this;
        if ( this.type )
            // Unbind all bound events
            this.elements.unbind(this.type, this.fn);
        else if (this.fn2)
            // Call the second function for all matched elements
            this.elements.each(function(i, el) {
                query.fn2.apply(el);
            });
        // Clear out matched elements
        this.elements = [];
        // Stop the Live Query from running until restarted
        this.stopped = true;
    },
    run: function() {
        // Short-circuit if stopped
        if ( this.stopped ) return;
        var query = this;
        var oEls = this.elements,
            els  = $(this.selector, this.context),
            nEls = els.not(oEls);
        // Set elements to the latest set of matched elements
        this.elements = els;
        if (this.type) {
            // Bind events to newly matched elements
            nEls.bind(this.type, this.fn);
            // Unbind events to elements no longer matched
            if (oEls.length > 0)
                $.each(oEls, function(i, el) {
                    if ( $.inArray(el, els) < 0 )
                        $.event.remove(el, query.type, query.fn);
                });
        }
        else {
            // Call the first function for newly matched elements
            nEls.each(function() {
                query.fn.apply(this);
            });
            // Call the second function for elements no longer matched
            if ( this.fn2 && oEls.length > 0 )
                $.each(oEls, function(i, el) {
                    if ( $.inArray(el, els) < 0 )
                        query.fn2.apply(el);
                });
        }
    }
};
$.extend($.livequery, {
    guid: 0,
    queries: [],
    queue: [],
    running: false,
    timeout: null,
    checkQueue: function() {
        if ( $.livequery.running && $.livequery.queue.length ) {
            var length = $.livequery.queue.length;
            // Run each Live Query currently in the queue
            while ( length-- )
                $.livequery.queries[ $.livequery.queue.shift() ].run();
        }
    },
    pause: function() {
        // Don't run anymore Live Queries until restarted
        $.livequery.running = false;
    },
    play: function() {
        // Restart Live Queries
        $.livequery.running = true;
        // Request a run of the Live Queries
        $.livequery.run();
    },
    registerPlugin: function() {
        $.each( arguments, function(i,n) {
            // Short-circuit if the method doesn't exist
            if (!$.fn[n]) return;
            // Save a reference to the original method
            var old = $.fn[n];
            // Create a new method
            $.fn[n] = function() {
                // Call the original method
                var r = old.apply(this, arguments);
                // Request a run of the Live Queries
                $.livequery.run();
                // Return the original methods result
                return r;
            }
        });
    },
    run: function(id) {
        if (id != undefined) {
            // Put the particular Live Query in the queue if it doesn't already exist
            if ( $.inArray(id, $.livequery.queue) < 0 )
                $.livequery.queue.push( id );
        }
        else
            // Put each Live Query in the queue if it doesn't already exist
            $.each( $.livequery.queries, function(id) {
                if ( $.inArray(id, $.livequery.queue) < 0 )
                    $.livequery.queue.push( id );
            });
        // Clear timeout if it already exists
        if ($.livequery.timeout) clearTimeout($.livequery.timeout);
        // Create a timeout to check the queue and actually run the Live Queries
        $.livequery.timeout = setTimeout($.livequery.checkQueue, 20);
    },
    stop: function(id) {
        if (id != undefined)
            // Stop are particular Live Query
            $.livequery.queries[ id ].stop();
        else
            // Stop all Live Queries
            $.each( $.livequery.queries, function(id) {
                $.livequery.queries[ id ].stop();
            });
    }
});
// Register core DOM manipulation methods
$.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove', 'html');
// Run Live Queries when the Document is ready
$(function() { $.livequery.play(); });
})(jQuery);

/**
 * @author stuart.hopper
 * amended by v.hanesse - 16.05.08
 */

function show() {
var viewby = document.getElementById('viewBy');
//viewby.style.position='relative';
//viewby.style.left='0px';
viewby.style.display='block';
var c1 = document.getElementById('c1');
c1.style.display='block';
//c1.style.visibility='visible';
var c2 = document.getElementById('c2');
c2.style.display='block';
//c2.style.visibility='visible';
document.getElementById('hide').style.display='inline';
document.getElementById('show').style.display='none';
}

function hide() {
var viewby = document.getElementById('viewBy');
//viewby.style.position='absolute';
//viewby.style.left='-9999px';
viewby.style.display='none';
var c1 = document.getElementById('c1');
c1.style.display='none';
//c1.style.visibility='hidden';
var c2 = document.getElementById('c2');
c2.style.display='none';
//c2.style.visibility='hidden';
document.getElementById('hide').style.display='none';
document.getElementById('show').style.display='inline';
}

/* A to Z section
v.hanesse - 16.05.08
*/

function resetLetters(){//hide all letter section on the page
 var letters = new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
 var i=0;
 var letterDiv = null;
 for (i=0;i<26;i++){
  letterDiv = document.getElementById("letter"+letters[i]);
  if (letterDiv) { 
   letterDiv.style.display = "none";
  }
 }
}

function resetPaginationClasses(){//reset page, classesto null on pagination line
 var letters = new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
 var i=0;
 var page = null;
 var attributeClass = (window.ActiveXObject)?"className":"class";//if IE attribute is called className else class
 for (i=0;i<26;i++){
  page = document.getElementById("page"+letters[i]);
  if (page) {
   page.setAttribute(attributeClass,"");
  }
 }
}

function setPageClass(letter){//set the page, class to active on pagination line
 var attributeClass = (window.ActiveXObject)?"className":"class";//if IE attribute is called className else class
 var page = document.getElementById("page"+letter);
 if (page) {
  page.setAttribute(attributeClass,"active");
 }
}

function showLetter(letter){
 resetPaginationClasses();
 setPageClass(letter);
 resetLetters();
 var letterDiv = document.getElementById("letter"+letter);
 if (letterDiv) {
  letterDiv.style.display = "block";
 }
}

/**
 * @author lance.cooper
 * 
 */
$(document).ready(function() {
    
    /* Case studies - highlight map options */
    $('#viewBy .map-option input:checked').parents('#viewBy .map-option').addClass('selected');     
    $('#viewBy .map-option input[type=checkbox]').livequery('click', function (event) {
        if ($(this).is(':checked')) {
            $(this).parent('#viewBy .map-option').addClass('selected');
        }
        else {
            $(this).parent('#viewBy .map-option').removeClass('selected');
        }
    });
    $('#viewBy .map-option').hover(function() {
      $(this).addClass('hover');
    }, function() {
      $(this).removeClass('hover');
    });
    
    /* Jump menu for region */
    $('.dropdownJump').change( function() {
        window.location = $(".dropdownJump option:selected").val();
    });
    
    $('body.casestudy #sliders').cycle({
        timeout: 0,
        speed:   0,
        pager:  '.buttonList',
        pagerAnchorBuilder: function(idx, slide) {
            // return selector string for existing anchor
            return '.buttonList li:eq(' + idx + ') a';
        }
    });
    $('body.casestudy #libutton1').hover(function() {
        $('body.casestudy #sliders').cycle(0);
        return false;
    });
    $('body.casestudy #libutton2').hover(function() {
        $('body.casestudy #sliders').cycle(1);
        return false;
    });
    $('body.casestudy #libutton3').hover(function() {
        $('body.casestudy #sliders').cycle(2);
        return false;
    });
    $('body.casestudy #libutton4').hover(function() {
        $('#sliders').cycle(3);
        return false;
    });
    $('body.casestudy #libutton5').hover(function() {
        $('body.casestudy #sliders').cycle(4);
        return false;
    });
});
