/* Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate$
 * $Rev$
 *
 * Version: @VERSION
 *
 * Requires: jQuery 1.2+
 */

(function($){
	
$.dimensions = {
	version: '@VERSION'
};

// Create innerHeight, innerWidth, outerHeight and outerWidth methods
$.each( [ 'Height', 'Width' ], function(i, name){
	
	// innerHeight and innerWidth
	$.fn[ 'inner' + name ] = function() {
		if (!this[0]) return;
		
		var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
		    borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right
		
		return this.css('display') != 'none' ? this[0]['client' + name] : num( this, name.toLowerCase() ) + num(this, 'padding' + torl) + num(this, 'padding' + borr);
	};
	
	// outerHeight and outerWidth
	$.fn[ 'outer' + name ] = function(options) {
		if (!this[0]) return;
		
		var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
		    borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right
		
		options = $.extend({ margin: false }, options || {});
		
		var val = this.css('display') != 'none' ? 
				this[0]['offset' + name] : 
				num( this, name.toLowerCase() )
					+ num(this, 'border' + torl + 'Width') + num(this, 'border' + borr + 'Width')
					+ num(this, 'padding' + torl) + num(this, 'padding' + borr);
		
		return val + (options.margin ? (num(this, 'margin' + torl) + num(this, 'margin' + borr)) : 0);
	};
});

// Create scrollLeft and scrollTop methods
$.each( ['Left', 'Top'], function(i, name) {
	$.fn[ 'scroll' + name ] = function(val) {
		if (!this[0]) return;
		
		return val != undefined ?
		
			// Set the scroll offset
			this.each(function() {
				this == window || this == document ?
					window.scrollTo( 
						name == 'Left' ? val : $(window)[ 'scrollLeft' ](),
						name == 'Top'  ? val : $(window)[ 'scrollTop'  ]()
					) :
					this[ 'scroll' + name ] = val;
			}) :
			
			// Return the scroll offset
			this[0] == window || this[0] == document ?
				self[ (name == 'Left' ? 'pageXOffset' : 'pageYOffset') ] ||
					$.boxModel && document.documentElement[ 'scroll' + name ] ||
					document.body[ 'scroll' + name ] :
				this[0][ 'scroll' + name ];
	};
});

$.fn.extend({
	position: function() {
		var left = 0, top = 0, elem = this[0], offset, parentOffset, offsetParent, results;
		
		if (elem) {
			// Get *real* offsetParent
			offsetParent = this.offsetParent();
			
			// Get correct offsets
			offset       = this.offset();
			parentOffset = offsetParent.offset();
			
			// Subtract element margins
			offset.top  -= num(elem, 'marginTop');
			offset.left -= num(elem, 'marginLeft');
			
			// Add offsetParent borders
			parentOffset.top  += num(offsetParent, 'borderTopWidth');
			parentOffset.left += num(offsetParent, 'borderLeftWidth');
			
			// Subtract the two offsets
			results = {
				top:  offset.top  - parentOffset.top,
				left: offset.left - parentOffset.left
			};
		}
		
		return results;
	},
	
	offsetParent: function() {
		var offsetParent = this[0].offsetParent;
		while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && $.css(offsetParent, 'position') == 'static') )
			offsetParent = offsetParent.offsetParent;
		return $(offsetParent);
	}
});

function num(el, prop) {
	return parseInt($.curCSS(el.jquery?el[0]:el,prop,true))||0;
};

})(jQuery);

// variables for floating menu

var floater = "#sidebar";
var header = "#header";
var footer = ".end";
var main = "main";
var body = "body";
var hero = $("#heroImage").find("img:first");
var slideshow = $(".rslides");
var slideshow = slideshow.length;
var heroHeight;

// get object sizes & distances 
function parameters() {
	pageHeight = $(window).height();
	pageWidth = $(window).width();
	menuHeight = $(floater).height();
	blockHeight = $(header).height();	
	footHeight = $(footer).height();
	floatHeight = blockHeight + 40;
	distance = $(floater).offset();
	topdist = $(main).offset();
	if(slideshow > 0){
		menuYloc = parseInt($(floater).css("top").substring(0,$(floater).css("top").indexOf("px"))) - 200;
	} else {
		menuYloc = parseInt($(floater).css("top").substring(0,$(floater).css("top").indexOf("px")));
	}
	lockPoint = (distance.top-blockHeight);
	if($(hero).length > 0) {
		$("<img/>").attr("src", $(hero).attr("src")).load(function() {heroHeight = this.height;});
	} else {heroHeight = 0;};
}

// check if the page fits a floating menu, otherwise default to non-floating
function menuFloat() {
	if ((navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i))) {
		// do nothing
	} else {
		parameters();
		if((pageHeight > (blockHeight+footHeight+menuHeight)) && (pageWidth > 959)) {
			floatIt();
			scrollFloater();
			$(window).scroll(scrollFloater);
		} else {killFloat();}
	}
}

function scrollFloater() {
	if ((navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i))) {
		// do nothing
	} else {
		offset = menuYloc+$(document).scrollTop()+"px";
		offsetNum = parseInt(offset);
		floatLock = (offsetNum - lockPoint)+"px";
		if(pageWidth > 959) {
			if((offsetNum > (heroHeight - 43)) && (offsetNum > (blockHeight - 17))) {
				$(floater).css("padding-top","0");
				floatIt();
			}
			else {
				if(heroHeight == 0){$(floater).css("padding-top","75px");} else {}
				killFloat();
			}
		}
	}
}

function floatIt(){
	$(floater).css("position","fixed");
	$(floater).css("top",floatHeight+"px");
	$(floater).css("left","50%");
	if (pageWidth < 1260) {$(floater).css("margin-left","180px");} else {$(floater).css("margin-left","300px");}
}

function killFloat() {
	$(floater).css("position","relative");
	$(floater).css("top","0");
	$(floater).css("left","0");
	$(floater).css("margin-left","0");
}

function killBar() {
	if ((navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i))) {
		$(header).css("position","relative");
		$(body).css("padding-top","0 !important");
	}
}

function barHeroHide() {
	if($(document).scrollTop() > 0){
		$('#header .container').css('background-position','-999em -999em');
	} else {
		if ($(window).width() < 1260) {
			$('#header .container').css('background-position','bottom center');
		} else {
			$('#header .container').css('background-position','bottom center');
		}
	}	
}

function iPhoneHide() {
	if (navigator.userAgent.match(/iPhone/i)) {
		$(".iphone-hide").css("display","none");
		$(".iphone-show").css("display","block");
		$(".big").removeClass("big");
	}
}

$(document).ready(function(){
	if (navigator.userAgent.indexOf("MSIE 10") > -1) {document.body.classList.add("ie10");}
	iPhoneHide();
	killBar();
	menuFloat();
	scrollFloater();
});
$(window).resize(menuFloat);
$(document).scroll(barHeroHide);

jQuery(document).ready(function($) {
    var regexEmail = /(?![^<]*>)(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)/;
    var regexPhone = /(?![^<]*>)\+?\(?([0-9]*)\)?([ .-]?)([0-9]?)([ .-]?)([0-9][0-9][0-9][0-9]?)([ .-]?)([0-9][0-9][0-9][0-9]?)/;
    var regexSt = /St Luke's|St Luke’s|St Lukes/;
 
 
    $("p").not('a').each(function() {
        $(this).html($(this).html().replace(regexPhone, "<a href=\"tel:$&\" class=\"auto\">$&</a>"));
		$(this).html($(this).html().replace(regexEmail, "<a href=\"mailto:$1\" class=\"auto\">$1</a>"));
		$(this).html($(this).html().replace(regexSt, "<span class=\"nowrap\">$&</span>"));
    });
});
toggleFaq = {
	init : function() {
		$('div.faq p, div.faq ul').toggle();
		$('div.faq .question').click(function() {
                    toggleFaq.toggle(this);
                    $(this).addClass('read');
                });
	},

	toggle : function(faq) {
		$(faq).toggleClass('active');
		$(faq).siblings('p, ul').slideToggle('fast');
	}
}

$(document).ready(function() {toggleFaq.init();});

// fix that pesky youtube z-index problem

function fixYouTube(){
    $("iframe").each(function(){
        var ifr_source = $(this).attr('src');
        var wmode = "wmode=transparent";
        if(ifr_source.indexOf('?') != -1) {
            var getQString = ifr_source.split('?');
            var oldString = getQString[1];
            var newString = getQString[0];
            $(this).attr('src',newString+'?'+wmode+'&'+oldString);
        }
        else $(this).attr('src',ifr_source+'?'+wmode);
    });
}

$(document).ready(fixYouTube);
jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000))}else{date=options.expires}expires='; expires='+date.toUTCString()}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('')}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}return cookieValue}};
/*! ResponsiveSlides.js v1.54
 * http://responsiveslides.com
 * http://viljamis.com
 *
 * Copyright (c) 2011-2012 @viljamis
 * Available under the MIT license
 */

/*jslint browser: true, sloppy: true, vars: true, plusplus: true, indent: 2 */

(function ($, window, i) {
  $.fn.responsiveSlides = function (options) {

    // Default settings
    var settings = $.extend({
      "auto": true,             // Boolean: Animate automatically, true or false
      "speed": 500,             // Integer: Speed of the transition, in milliseconds
      "timeout": 4000,          // Integer: Time between slide transitions, in milliseconds
      "pager": false,           // Boolean: Show pager, true or false
      "nav": false,             // Boolean: Show navigation, true or false
      "random": false,          // Boolean: Randomize the order of the slides, true or false
      "pause": false,           // Boolean: Pause on hover, true or false
      "pauseControls": true,    // Boolean: Pause when hovering controls, true or false
      "prevText": "Previous",   // String: Text for the "previous" button
      "nextText": "Next",       // String: Text for the "next" button
      "maxwidth": "",           // Integer: Max-width of the slideshow, in pixels
      "navContainer": "",       // Selector: Where auto generated controls should be appended to, default is after the <ul>
      "manualControls": "",     // Selector: Declare custom pager navigation
      "namespace": "rslides",   // String: change the default namespace used
      "before": $.noop,         // Function: Before callback
      "after": $.noop           // Function: After callback
    }, options);

    return this.each(function () {

      // Index for namespacing
      i++;

      var $this = $(this),

        // Local variables
        vendor,
        selectTab,
        startCycle,
        restartCycle,
        rotate,
        $tabs,

        // Helpers
        index = 0,
        $slide = $this.children(),
        length = $slide.size(),
        fadeTime = parseFloat(settings.speed),
        waitTime = parseFloat(settings.timeout),
        maxw = parseFloat(settings.maxwidth),

        // Namespacing
        namespace = settings.namespace,
        namespaceIdx = namespace + i,

        // Classes
        navClass = namespace + "_nav " + namespaceIdx + "_nav",
        activeClass = namespace + "_here",
        visibleClass = namespaceIdx + "_on",
        slideClassPrefix = namespaceIdx + "_s",

        // Pager
        $pager = $("<ul class='" + namespace + "_tabs " + namespaceIdx + "_tabs' />"),

        // Styles for visible and hidden slides
        visible = {"float": "left", "position": "relative", "opacity": 1, "zIndex": 2},
        hidden = {"float": "none", "position": "absolute", "opacity": 0, "zIndex": 1},

        // Detect transition support
        supportsTransitions = (function () {
          var docBody = document.body || document.documentElement;
          var styles = docBody.style;
          var prop = "transition";
          if (typeof styles[prop] === "string") {
            return true;
          }
          // Tests for vendor specific prop
          vendor = ["Moz", "Webkit", "Khtml", "O", "ms"];
          prop = prop.charAt(0).toUpperCase() + prop.substr(1);
          var i;
          for (i = 0; i < vendor.length; i++) {
            if (typeof styles[vendor[i] + prop] === "string") {
              return true;
            }
          }
          return false;
        })(),

        // Fading animation
        slideTo = function (idx) {
          settings.before(idx);
          // If CSS3 transitions are supported
          if (supportsTransitions) {
            $slide
              .removeClass(visibleClass)
              .css(hidden)
              .eq(idx)
              .addClass(visibleClass)
              .css(visible);
            index = idx;
            setTimeout(function () {settings.after(idx);}, fadeTime);
          // If not, use jQuery fallback
          } else {
            $slide
              .stop()
              .fadeOut(fadeTime, function () {
                $(this)
                  .removeClass(visibleClass)
                  .css(hidden)
                  .css("opacity", 1);
              })
              .eq(idx)
              .fadeIn(fadeTime, function () {
                $(this)
                  .addClass(visibleClass)
                  .css(visible);
                settings.after(idx);
                index = idx;
              });
          }
        };

      // Random order
      if (settings.random) {
        $slide.sort(function () {
          return (Math.round(Math.random()) - 0.5);
        });
        $this
          .empty()
          .append($slide);
      }

      // Add ID's to each slide
      $slide.each(function (i) {
        this.id = slideClassPrefix + i;
      });

      // Add max-width and classes
      $this.addClass(namespace + " " + namespaceIdx);
      if (options && options.maxwidth) {
        $this.css("max-width", maxw);
      }

      // Hide all slides, then show first one
      $slide
        .hide()
        .css(hidden)
        .eq(0)
        .addClass(visibleClass)
        .css(visible)
        .show();

      // CSS transitions
      if (supportsTransitions) {
        $slide
          .show()
          .css({
            // -ms prefix isn't needed as IE10 uses prefix free version
            "-webkit-transition": "opacity " + fadeTime + "ms ease-in-out",
            "-moz-transition": "opacity " + fadeTime + "ms ease-in-out",
            "-o-transition": "opacity " + fadeTime + "ms ease-in-out",
            "transition": "opacity " + fadeTime + "ms ease-in-out"
          });
      }

      // Only run if there's more than one slide
      if ($slide.size() > 1) {

        // Make sure the timeout is at least 100ms longer than the fade
        if (waitTime < fadeTime + 100) {return;}

        // Pager
        if (settings.pager && !settings.manualControls) {
          var tabMarkup = [];
          $slide.each(function (i) {
            var n = i + 1;
            var slideId = '#' + slideClassPrefix + i;
            var thumbwidth = Math.floor(($('.rslides').width() - (($slide.length - 1) * 12)) / $slide.length);
            var thumbheight = Math.floor(thumbwidth * .66);
            console.log(thumbwidth);
            tabMarkup +=
              "<li>" +
              "<a href='#' class='" + slideClassPrefix + n + "' style='width:" + thumbwidth +"px; height:" + thumbheight + "px; background-image:url(\"" + $(slideId).find('img').attr('src') + "\");'>" + n + "</a>" +
//              "<a href='#' class='" + slideClassPrefix + n + "'>" + n + "</a>" +
              "</li>";
          });
          $pager.append(tabMarkup);

          // Inject pager
          if (options.navContainer) {$(settings.navContainer).append($pager);} else {$this.after($pager);}
        }

        // Manual pager controls
        if (settings.manualControls) {
          $pager = $(settings.manualControls);
          $pager.addClass(namespace + "_tabs " + namespaceIdx + "_tabs");
        }

        // Add pager slide class prefixes
        if (settings.pager || settings.manualControls) {
          $pager.find('li').each(function (i) {
            $(this).addClass(slideClassPrefix + (i + 1));
          });
        }

        // If we have a pager, we need to set up the selectTab function
        if (settings.pager || settings.manualControls) {
          $tabs = $pager.find('a');

          // Select pager item
          selectTab = function (idx) {
            $tabs
              .closest("li")
              .removeClass(activeClass)
              .eq(idx)
              .addClass(activeClass);
          };
        }

        // Auto cycle
        if (settings.auto) {

          startCycle = function () {
            rotate = setInterval(function () {

              // Clear the event queue
              $slide.stop(true, true);

              var idx = index + 1 < length ? index + 1 : 0;

              // Remove active state and set new if pager is set
              if (settings.pager || settings.manualControls) {selectTab(idx);}

              slideTo(idx);
            }, waitTime);
          };

          // Init cycle
          startCycle();
        }

        // Restarting cycle
        restartCycle = function () {
          if (settings.auto) {
            // Stop
            clearInterval(rotate);
            // Restart
            startCycle();
          }
        };

        // Pause on hover
        if (settings.pause) {
          $this.hover(function () {clearInterval(rotate);}, function () {restartCycle();});
        }

        // Pager click event handler
        if (settings.pager || settings.manualControls) {
          $tabs.bind("click", function (e) {
            e.preventDefault();

            if (!settings.pauseControls) {restartCycle();}

            // Get index of clicked tab
            var idx = $tabs.index(this);

            // Break if element is already active or currently animated
            if (index === idx || $("." + visibleClass).queue('fx').length) {return;}

            // Remove active state from old tab and set new one
            selectTab(idx);

            // Do the animation
            slideTo(idx);
          })
            .eq(0)
            .closest("li")
            .addClass(activeClass);

          // Pause when hovering pager
          if (settings.pauseControls) {
            $tabs.hover(function () {clearInterval(rotate);}, function () {restartCycle();});
          }
        }

        // Navigation
        if (settings.nav) {
          var navMarkup =
            "<a href='#' class='" + navClass + " prev'>" + settings.prevText + "</a>" +
            "<a href='#' class='" + navClass + " next'>" + settings.nextText + "</a>";

          // Inject navigation
          if (options.navContainer) {$(settings.navContainer).append(navMarkup);} else {$this.after(navMarkup);}

          var $trigger = $("." + namespaceIdx + "_nav"),
            $prev = $trigger.filter(".prev");

          // Click event handler
          $trigger.bind("click", function (e) {
            e.preventDefault();

            var $visibleClass = $("." + visibleClass);

            // Prevent clicking if currently animated
            if ($visibleClass.queue('fx').length) {return;}

            //  Adds active class during slide animation
            //  $(this)
            //    .addClass(namespace + "_active")
            //    .delay(fadeTime)
            //    .queue(function (next) {
            //      $(this).removeClass(namespace + "_active");
            //      next();
            //  });

            // Determine where to slide
            var idx = $slide.index($visibleClass),
              prevIdx = idx - 1,
              nextIdx = idx + 1 < length ? index + 1 : 0;

            // Go to slide
            slideTo($(this)[0] === $prev[0] ? prevIdx : nextIdx);
            if (settings.pager || settings.manualControls) {
              selectTab($(this)[0] === $prev[0] ? prevIdx : nextIdx);
            }

            if (!settings.pauseControls) {restartCycle();}
          });

          // Pause when hovering navigation
          if (settings.pauseControls) {
            $trigger.hover(function () {clearInterval(rotate);}, function () {restartCycle();});
          }
        }

      }

      // Max-width fallback
      if (typeof document.body.style.maxWidth === "undefined" && options.maxwidth) {
        var widthSupport = function () {
          $this.css("width", "100%");
          if ($this.width() > maxw) {
            $this.css("width", maxw);
          }
        };

        // Init fallback
        widthSupport();
        $(window).bind("resize", function () {widthSupport();});
      }

    });

  };
})(jQuery, this, 0);



$(".rslides").responsiveSlides({
  auto: true,             // Boolean: Animate automatically, true or false
  speed: 1500,            // Integer: Speed of the transition, in milliseconds
  timeout: 6000,          // Integer: Time between slide transitions, in milliseconds
  pager: true,           // Boolean: Show pager, true or false
  nav: false,             // Boolean: Show navigation, true or false
  random: false,          // Boolean: Randomize the order of the slides, true or false
  pause: true,           // Boolean: Pause on hover, true or false
  pauseControls: true,    // Boolean: Pause when hovering controls, true or false
  prevText: "Previous",   // String: Text for the "previous" button
  nextText: "Next",       // String: Text for the "next" button
  maxwidth: "1180",           // Integer: Max-width of the slideshow, in pixels
//  navContainer: "",       // Selector: Where controls should be appended to, default is after the 'ul'
//  manualControls: "",     // Selector: Declare custom pager navigation
//  namespace: "rslides",   // String: Change the default namespace used
//  before: function(){},   // Function: Before callback
//  after: function(){}     // Function: After callback
});
// Text size controls

function textControls() {
	pageWidth = $(window).width();
	if (pageWidth > 959) {$("#txtSize").css("display","block");} else {$("#txtSize").css("display","none");}
}

$(document).ready(function() {
	if($.cookie('TEXT_SIZE')) {$('#main').addClass($.cookie('TEXT_SIZE'));}
	$('#txtSize li').click(function() {
		var textSize = $(this).attr('class');
		$('#main').removeClass('txtSml txtMid txtBig').addClass(textSize);
		$.cookie('TEXT_SIZE',textSize, { path: '/', expires: 10000 });
		return false;
	});
});

$(document).ready(textControls);
$(window).resize(textControls);

$(".news_gallery .extra_images img").click(function(){
	var woo = $(this).parent().parent().parent().attr('id');
    $('.'+woo).attr('src',$(this).attr('src'));
    $('#'+woo+'_link').attr('href',$(this).attr('name'));
    Shadowbox.setup('#'+woo+'_link', {
		gallery:		"gallery",
		handleOversize:	"resize",
	});
});
$('.toggle_parent').click( function(){
	console.log('happening!');
	$(this).siblings('.toggle').slideToggle();
})

