﻿/*
=========================================================================================================
J. Locke - consolidation of this file based on tfs workitem 808
Included within kaplan.js are the following JQuery libraries (in the order they appear in the file)
- prettyPhoto, version 2.5.6, by http://www.no-margin-for-errors.com
- Superfish, by http://users.tpg.com.au/j_birch/plugins/superfish/
- Supersubs, by http://users.tpg.com.au/j_birch/plugins/superfish/
- Main document.ready, by KIC, this calls the menu and AddThis functions
- initAddThis, by KIC, intialises the AddThis function
- chkSearch, by KIC, clears the text of the search box when clicked on
- doClick, by KIC, ensures the correct form element fires when return get pressed
=========================================================================================================
*/

/* ------------------------------------------------------------------------
Class: prettyPhoto
Use: Lightbox clone for jQuery
Author: Stephane Caron (http://www.no-margin-for-errors.com)
Version: 2.5.6
------------------------------------------------------------------------- */

(function ($) {
	$.prettyPhoto = { version: '2.5.6' };

	$.fn.prettyPhoto = function (settings) {
		settings = jQuery.extend({
			animationSpeed: 'fast', /* fast/slow/normal */
			opacity: 0.70, /* Value between 0 and 1 */
			showTitle: false, /* true/false */
			allowresize: true, /* true/false */
			default_width: 500,
			default_height: 344,
			counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */
			theme: 'facebook', /* light_rounded / dark_rounded / light_square / dark_square / facebook */
			hideflash: false, /* Hides all the flash object on a page, set to TRUE if flash appears over prettyPhoto */
			wmode: 'opaque', /* Set the flash wmode attribute */
			autoplay: true, /* Automatically start videos: True/False */
			modal: false, /* If set to true, only the close button will close the window */
			changepicturecallback: function () { }, /* Called everytime an item is shown/changed */
			callback: function () { }, /* Called when prettyPhoto is closed */
			markup: '<div class="pp_pic_holder"> \
						<div class="pp_top"> \
							<div class="pp_left"></div> \
							<div class="pp_middle"></div> \
							<div class="pp_right"></div> \
						</div> \
						<div class="pp_content_container"> \
							<div class="pp_left"> \
							<div class="pp_right"> \
								<div class="pp_content"> \
									<div class="pp_loaderIcon"></div> \
									<div class="pp_fade"> \
										<a href="#" class="pp_expand" title="Expand the image">Expand</a> \
										<div class="pp_hoverContainer"> \
											<a class="pp_next" href="#">next</a> \
											<a class="pp_previous" href="#">previous</a> \
										</div> \
										<div id="pp_full_res"></div> \
										<div class="pp_details clearfix"> \
											<a class="pp_close" href="#">Close</a> \
											<p class="pp_description"></p> \
											<div class="pp_nav"> \
												<a href="#" class="pp_arrow_previous">Previous</a> \
												<p class="currentTextHolder">0/0</p> \
												<a href="#" class="pp_arrow_next">Next</a> \
											</div> \
										</div> \
									</div> \
								</div> \
							</div> \
							</div> \
						</div> \
						<div class="pp_bottom"> \
							<div class="pp_left"></div> \
							<div class="pp_middle"></div> \
							<div class="pp_right"></div> \
						</div> \
					</div> \
					<div class="pp_overlay"></div> \
					<div class="ppt"></div>',
			image_markup: '<img id="fullResImage" src="" />',
			flash_markup: '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',
			quicktime_markup: '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',
			iframe_markup: '<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',
			inline_markup: '<div class="pp_inline clearfix">{content}</div>'
		}, settings);

		// Fallback to a supported theme for IE6
		if ($.browser.msie && parseInt($.browser.version) == 6) {
			settings.theme = "light_square";
		}

		if ($('.pp_overlay').size() == 0) _buildOverlay(); // If the overlay is not there, inject it!

		// Global variables accessible only by prettyPhoto
		var doresize = true, percentBased = false, correctSizes,

		// Cached selectors
		$pp_pic_holder, $ppt, $pp_overlay,

		// prettyPhoto container specific
		pp_contentHeight, pp_contentWidth, pp_containerHeight, pp_containerWidth,

		// Window size
		windowHeight = $(window).height(), windowWidth = $(window).width(),

		//Gallery specific
		setPosition = 0,

		// Global elements
		scrollPos = _getScroll();

		// Window/Keyboard events
		$(window).scroll(function () { scrollPos = _getScroll(); _centerOverlay(); _resizeOverlay(); });
		$(window).resize(function () { _centerOverlay(); _resizeOverlay(); });
		$(document).keydown(function (e) {
			if ($pp_pic_holder.is(':visible'))
				switch (e.keyCode) {
				case 37:
					$.prettyPhoto.changePage('previous');
					break;
				case 39:
					$.prettyPhoto.changePage('next');
					break;
				case 27:
					if (!settings.modal)
						$.prettyPhoto.close();
					break;
			};
		});

		// Bind the code to each links
		$(this).each(function () {
			$(this).bind('click', function () {
				_self = this; // Fix scoping

				// Find out if the picture is part of a set
				theRel = $(this).attr('rel');
				galleryRegExp = /\[(?:.*)\]/;
				theGallery = galleryRegExp.exec(theRel);

				// Build the gallery array
				var images = new Array(), titles = new Array(), descriptions = new Array();
				if (theGallery) {
					$('a[rel*=' + theGallery + ']').each(function (i) {
						if ($(this)[0] === $(_self)[0]) setPosition = i; // Get the position in the set
						images.push($(this).attr('href'));
						titles.push($(this).find('img').attr('alt'));
						descriptions.push($(this).attr('title'));
					});
				} else {
					images = $(this).attr('href');
					titles = ($(this).find('img').attr('alt')) ? $(this).find('img').attr('alt') : '';
					descriptions = ($(this).attr('title')) ? $(this).attr('title') : '';
				}

				$.prettyPhoto.open(images, titles, descriptions);
				return false;
			});
		});


		/**
		* Opens the prettyPhoto modal box.
		* @param image {String,Array} Full path to the image to be open, can also be an array containing full images paths.
		* @param title {String,Array} The title to be displayed with the picture, can also be an array containing all the titles.
		* @param description {String,Array} The description to be displayed with the picture, can also be an array containing all the descriptions.
		*/
		$.prettyPhoto.open = function (gallery_images, gallery_titles, gallery_descriptions) {
			// To fix the bug with IE select boxes
			if ($.browser.msie && $.browser.version == 6) {
				$('select').css('visibility', 'hidden');
			};

			if (settings.hideflash) $('object,embed').css('visibility', 'hidden'); // Hide the flash

			// Convert everything to an array in the case it's a single item
			images = $.makeArray(gallery_images);
			titles = $.makeArray(gallery_titles);
			descriptions = $.makeArray(gallery_descriptions);

			image_set = ($(images).size() > 0) ? true : false; // Find out if it's a set

			// Hide the next/previous links if on first or last images.
			_checkPosition($(images).size());

			$('.pp_loaderIcon').show(); // Do I need to explain?

			// Fade the content in
			$pp_overlay.show().fadeTo(settings.animationSpeed, settings.opacity);

			// Display the current position
			$pp_pic_holder.find('.currentTextHolder').text((setPosition + 1) + settings.counter_separator_label + $(images).size());

			// Set the description
			if (descriptions[setPosition]) {
				$pp_pic_holder.find('.pp_description').show().html(unescape(descriptions[setPosition]));
			} else {
				$pp_pic_holder.find('.pp_description').hide().text('');
			};

			// Set the title
			if (titles[setPosition] && settings.showTitle) {
				hasTitle = true;
				$ppt.html(unescape(titles[setPosition]));
			} else {
				hasTitle = false;
			};

			// Get the dimensions
			movie_width = (parseFloat(grab_param('width', images[setPosition]))) ? grab_param('width', images[setPosition]) : settings.default_width.toString();
			movie_height = (parseFloat(grab_param('height', images[setPosition]))) ? grab_param('height', images[setPosition]) : settings.default_height.toString();

			// If the size is % based, calculate according to window dimensions
			if (movie_width.indexOf('%') != -1 || movie_height.indexOf('%') != -1) {
				movie_height = parseFloat(($(window).height() * parseFloat(movie_height) / 100) - 100);
				movie_width = parseFloat(($(window).width() * parseFloat(movie_width) / 100) - 100);
				percentBased = true;
			}

			// Fade the holder
			$pp_pic_holder.fadeIn(function () {
				imgPreloader = "";
				// Inject the proper content
				switch (_getFileType(images[setPosition])) {
					case 'image':
						// Set the new image
						imgPreloader = new Image();

						// Preload the neighbour images
						nextImage = new Image();
						if (image_set && setPosition > $(images).size()) nextImage.src = images[setPosition + 1];
						prevImage = new Image();
						if (image_set && images[setPosition - 1]) prevImage.src = images[setPosition - 1];

						$pp_pic_holder.find('#pp_full_res')[0].innerHTML = settings.image_markup;
						$pp_pic_holder.find('#fullResImage').attr('src', images[setPosition]);

						imgPreloader.onload = function () {
							// Fit item to viewport
							correctSizes = _fitToViewport(imgPreloader.width, imgPreloader.height);

							_showContent();
						};

						imgPreloader.onerror = function () {
							alert('Image cannot be loaded. Make sure the path is correct and image exist.');
							$.prettyPhoto.close();
						};

						imgPreloader.src = images[setPosition];
						break;

					case 'youtube':
						correctSizes = _fitToViewport(movie_width, movie_height); // Fit item to viewport

						movie = 'http://www.youtube.com/v/' + grab_param('v', images[setPosition]);
						if (settings.autoplay) movie += "&autoplay=1";

						toInject = settings.flash_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, movie);
						break;

					case 'vimeo':
						correctSizes = _fitToViewport(movie_width, movie_height); // Fit item to viewport

						movie_id = images[setPosition];
						movie = 'http://vimeo.com/moogaloop.swf?clip_id=' + movie_id.replace('http://vimeo.com/', '');
						if (settings.autoplay) movie += "&autoplay=1";

						toInject = settings.flash_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, movie);
						break;

					case 'quicktime':
						correctSizes = _fitToViewport(movie_width, movie_height); // Fit item to viewport
						correctSizes['height'] += 15; correctSizes['contentHeight'] += 15; correctSizes['containerHeight'] += 15; // Add space for the control bar

						toInject = settings.quicktime_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, images[setPosition]).replace(/{autoplay}/g, settings.autoplay);
						break;

					case 'flash':
						correctSizes = _fitToViewport(movie_width, movie_height); // Fit item to viewport

						flash_vars = images[setPosition];
						flash_vars = flash_vars.substring(images[setPosition].indexOf('flashvars') + 10, images[setPosition].length);

						filename = images[setPosition];
						filename = filename.substring(0, filename.indexOf('?'));

						toInject = settings.flash_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{wmode}/g, settings.wmode).replace(/{path}/g, filename + '?' + flash_vars);
						break;

					case 'iframe':
						correctSizes = _fitToViewport(movie_width, movie_height); // Fit item to viewport

						frame_url = images[setPosition];
						frame_url = frame_url.substr(0, frame_url.indexOf('iframe') - 1);

						toInject = settings.iframe_markup.replace(/{width}/g, correctSizes['width']).replace(/{height}/g, correctSizes['height']).replace(/{path}/g, frame_url);
						break;

					case 'inline':
						// to get the item height clone it, apply default width, wrap it in the prettyPhoto containers , then delete
						myClone = $(images[setPosition]).clone().css({ 'width': settings.default_width }).wrapInner('<div id="pp_full_res"><div class="pp_inline clearfix"></div></div>').appendTo($('body'));
						correctSizes = _fitToViewport($(myClone).width(), $(myClone).height());
						$(myClone).remove();
						toInject = settings.inline_markup.replace(/{content}/g, $(images[setPosition]).html());
						break;
				};

				if (!imgPreloader) {
					$pp_pic_holder.find('#pp_full_res')[0].innerHTML = toInject;

					// Show content
					_showContent();
				};
			});

		};

		/**
		* Change page in the prettyPhoto modal box
		* @param direction {String} Direction of the paging, previous or next.
		*/
		$.prettyPhoto.changePage = function (direction) {
			if (direction == 'previous') {
				setPosition--;
				if (setPosition < 0) {
					setPosition = 0;
					return;
				};
			} else {
				if ($('.pp_arrow_next').is('.disabled')) return;
				setPosition++;
			};

			// Allow the resizing of the images
			if (!doresize) doresize = true;

			_hideContent(function () { $.prettyPhoto.open(images, titles, descriptions) });
			$('a.pp_expand,a.pp_contract').fadeOut(settings.animationSpeed);
		};

		/**
		* Closes the prettyPhoto modal box.
		*/
		$.prettyPhoto.close = function () {
			$pp_pic_holder.find('object,embed').css('visibility', 'hidden');

			$('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animationSpeed);

			$pp_overlay.fadeOut(settings.animationSpeed, function () {
				$('#pp_full_res').html(''); // Kill the opened content

				$pp_pic_holder.attr('style', '').find('div:not(.pp_hoverContainer)').attr('style', ''); // Reset the width and everything that has been set.
				_centerOverlay(); // Center it

				// To fix the bug with IE select boxes
				if ($.browser.msie && $.browser.version == 6) {
					$('select').css('visibility', 'visible');
				};

				// Show the flash
				if (settings.hideflash) $('object,embed').css('visibility', 'visible');

				setPosition = 0;
				settings.callback();
			});
			doresize = true;
		};

		/**
		* Set the proper sizes on the containers and animate the content in.
		*/
		_showContent = function () {
			$('.pp_loaderIcon').hide();

			// Calculate the opened top position of the pic holder
			projectedTop = scrollPos['scrollTop'] + ((windowHeight / 2) - (correctSizes['containerHeight'] / 2));
			if (projectedTop < 0) projectedTop = 0 + $ppt.height();

			// Resize the content holder
			$pp_pic_holder.find('.pp_content').animate({ 'height': correctSizes['contentHeight'] }, settings.animationSpeed);

			// Resize picture the holder
			$pp_pic_holder.animate({
				'top': projectedTop,
				'left': (windowWidth / 2) - (correctSizes['containerWidth'] / 2),
				'width': correctSizes['containerWidth']
			}, settings.animationSpeed, function () {
				$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(correctSizes['height']).width(correctSizes['width']);

				// Fade the new image
				$pp_pic_holder.find('.pp_fade').fadeIn(settings.animationSpeed);

				// Show the nav
				if (image_set && _getFileType(images[setPosition]) == "image") { $pp_pic_holder.find('.pp_hoverContainer').show(); } else { $pp_pic_holder.find('.pp_hoverContainer').hide(); }

				// Show the title
				if (settings.showTitle && hasTitle) {
					$ppt.css({
						'top': $pp_pic_holder.offset().top - 25,
						'left': $pp_pic_holder.offset().left + 20,
						'display': 'none'
					});

					$ppt.fadeIn(settings.animationSpeed);
				};

				// Fade the resizing link if the image is resized
				if (correctSizes['resized']) $('a.pp_expand,a.pp_contract').fadeIn(settings.animationSpeed);

				// Callback!
				settings.changepicturecallback();
			});
		};

		/**
		* Hide the content...DUH!
		*/
		function _hideContent(callback) {
			// Fade out the current picture
			$pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility', 'hidden');
			$pp_pic_holder.find('.pp_fade').fadeOut(settings.animationSpeed, function () {
				$('.pp_loaderIcon').show();

				if (callback) callback();
			});

			// Hide the title
			$ppt.fadeOut(settings.animationSpeed);
		}

		/**
		* Check the item position in the gallery array, hide or show the navigation links
		* @param setCount {integer} The total number of items in the set
		*/
		function _checkPosition(setCount) {
			// If at the end, hide the next link
			if (setPosition == setCount - 1) {
				$pp_pic_holder.find('a.pp_next').css('visibility', 'hidden');
				$pp_pic_holder.find('a.pp_arrow_next').addClass('disabled').unbind('click');
			} else {
				$pp_pic_holder.find('a.pp_next').css('visibility', 'visible');
				$pp_pic_holder.find('a.pp_arrow_next.disabled').removeClass('disabled').bind('click', function () {
					$.prettyPhoto.changePage('next');
					return false;
				});
			};

			// If at the beginning, hide the previous link
			if (setPosition == 0) {
				$pp_pic_holder.find('a.pp_previous').css('visibility', 'hidden');
				$pp_pic_holder.find('a.pp_arrow_previous').addClass('disabled').unbind('click');
			} else {
				$pp_pic_holder.find('a.pp_previous').css('visibility', 'visible');
				$pp_pic_holder.find('a.pp_arrow_previous.disabled').removeClass('disabled').bind('click', function () {
					$.prettyPhoto.changePage('previous');
					return false;
				});
			};

			// Hide the bottom nav if it's not a set.
			if (setCount > 1) {
				$('.pp_nav').show();
			} else {
				$('.pp_nav').hide();
			}
		};

		/**
		* Resize the item dimensions if it's bigger than the viewport
		* @param width {integer} Width of the item to be opened
		* @param height {integer} Height of the item to be opened
		* @return An array containin the "fitted" dimensions
		*/
		function _fitToViewport(width, height) {
			hasBeenResized = false;

			_getDimensions(width, height);

			// Define them in case there's no resize needed
			imageWidth = width;
			imageHeight = height;

			if (((pp_containerWidth > windowWidth) || (pp_containerHeight > windowHeight)) && doresize && settings.allowresize && !percentBased) {
				hasBeenResized = true;
				notFitting = true;

				while (notFitting) {
					if ((pp_containerWidth > windowWidth)) {
						imageWidth = (windowWidth - 200);
						imageHeight = (height / width) * imageWidth;
					} else if ((pp_containerHeight > windowHeight)) {
						imageHeight = (windowHeight - 200);
						imageWidth = (width / height) * imageHeight;
					} else {
						notFitting = false;
					};

					pp_containerHeight = imageHeight;
					pp_containerWidth = imageWidth;
				};

				_getDimensions(imageWidth, imageHeight);
			};

			return {
				width: Math.floor(imageWidth),
				height: Math.floor(imageHeight),
				containerHeight: Math.floor(pp_containerHeight),
				containerWidth: Math.floor(pp_containerWidth) + 40,
				contentHeight: Math.floor(pp_contentHeight),
				contentWidth: Math.floor(pp_contentWidth),
				resized: hasBeenResized
			};
		};

		/**
		* Get the containers dimensions according to the item size
		* @param width {integer} Width of the item to be opened
		* @param height {integer} Height of the item to be opened
		*/
		function _getDimensions(width, height) {
			width = parseFloat(width);
			height = parseFloat(height);

			// Get the details height, to do so, I need to clone it since it's invisible
			$pp_details = $pp_pic_holder.find('.pp_details');
			$pp_details.width(width);
			detailsHeight = parseFloat($pp_details.css('marginTop')) + parseFloat($pp_details.css('marginBottom'));
			$pp_details = $pp_details.clone().appendTo($('body')).css({
				'position': 'absolute',
				'top': -10000
			});
			detailsHeight += $pp_details.height();
			detailsHeight = (detailsHeight <= 34) ? 36 : detailsHeight; // Min-height for the details
			if ($.browser.msie && $.browser.version == 7) detailsHeight += 8;
			$pp_details.remove();

			// Get the container size, to resize the holder to the right dimensions
			pp_contentHeight = height + detailsHeight;
			pp_contentWidth = width;
			pp_containerHeight = pp_contentHeight + $ppt.height() + $pp_pic_holder.find('.pp_top').height() + $pp_pic_holder.find('.pp_bottom').height();
			pp_containerWidth = width;
		}

		function _getFileType(itemSrc) {
			if (itemSrc.match(/youtube\.com\/watch/i)) {
				return 'youtube';
			} else if (itemSrc.match(/vimeo\.com/i)) {
				return 'vimeo';
			} else if (itemSrc.indexOf('.mov') != -1) {
				return 'quicktime';
			} else if (itemSrc.indexOf('.swf') != -1) {
				return 'flash';
			} else if (itemSrc.indexOf('iframe') != -1) {
				return 'iframe'
			} else if (itemSrc.substr(0, 1) == '#') {
				return 'inline';
			} else {
				return 'image';
			};
		};

		function _centerOverlay() {
			if (doresize) {
				titleHeight = $ppt.height();
				contentHeight = $pp_pic_holder.height();
				contentwidth = $pp_pic_holder.width();

				projectedTop = (windowHeight / 2) + scrollPos['scrollTop'] - ((contentHeight + titleHeight) / 2);

				$pp_pic_holder.css({
					'top': projectedTop,
					'left': (windowWidth / 2) + scrollPos['scrollLeft'] - (contentwidth / 2)
				});

				$ppt.css({
					'top': projectedTop - titleHeight,
					'left': (windowWidth / 2) + scrollPos['scrollLeft'] - (contentwidth / 2) + 20
				});
			};
		};

		function _getScroll() {
			if (self.pageYOffset) {
				return { scrollTop: self.pageYOffset, scrollLeft: self.pageXOffset };
			} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
				return { scrollTop: document.documentElement.scrollTop, scrollLeft: document.documentElement.scrollLeft };
			} else if (document.body) {// all other Explorers
				return { scrollTop: document.body.scrollTop, scrollLeft: document.body.scrollLeft };
			};
		};

		function _resizeOverlay() {
			windowHeight = $(window).height();
			windowWidth = $(window).width();

			$pp_overlay.css({
				'height': $(document).height()
			});
		};

		function _buildOverlay() {
			// Inject the markup
			$('body').append(settings.markup);

			// Set my global selectors
			$pp_pic_holder = $('.pp_pic_holder');
			$ppt = $('.ppt');
			$pp_overlay = $('div.pp_overlay');

			$pp_pic_holder.attr('class', 'pp_pic_holder ' + settings.theme); // Set the proper theme

			$pp_overlay
				.css({
					'opacity': 0,
					'height': $(document).height()
				})
				.bind('click', function () {
					if (!settings.modal)
						$.prettyPhoto.close();
				});

			$('a.pp_close').bind('click', function () { $.prettyPhoto.close(); return false; });

			$('a.pp_expand').bind('click', function () {
				$this = $(this); // Fix scoping

				// Expand the image
				if ($this.hasClass('pp_expand')) {
					$this.removeClass('pp_expand').addClass('pp_contract');
					doresize = false;
				} else {
					$this.removeClass('pp_contract').addClass('pp_expand');
					doresize = true;
				};

				_hideContent(function () { $.prettyPhoto.open(images, titles, descriptions) });

				$pp_pic_holder.find('.pp_fade').fadeOut(settings.animationSpeed);

				return false;
			});

			$pp_pic_holder.find('.pp_previous, .pp_arrow_previous').bind('click', function () {
				$.prettyPhoto.changePage('previous');
				return false;
			});

			$pp_pic_holder.find('.pp_next, .pp_arrow_next').bind('click', function () {
				$.prettyPhoto.changePage('next');
				return false;
			});
		};

		_centerOverlay(); // Center it
	};

	function grab_param(name, url) {
		name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
		var regexS = "[\\?&]" + name + "=([^&#]*)";
		var regex = new RegExp(regexS);
		var results = regex.exec(url);
		if (results == null)
			return "";
		else
			return results[1];
	}
})(jQuery);

/*
* Superfish v1.4.8 - jQuery menu widget
* Copyright (c) 2008 Joel Birch
*
* Dual licensed under the MIT and GPL licenses:
* 	http://www.opensource.org/licenses/mit-license.php
* 	http://www.gnu.org/licenses/gpl.html
*
* CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
*/

; (function ($) {
	$.fn.superfish = function (op) {

		var sf = $.fn.superfish,
			c = sf.c,
			$arrow = $(['<span class="', c.arrowClass, '"> &#187;</span>'].join('')),
			over = function () {
				var $$ = $(this), menu = getMenu($$);
				clearTimeout(menu.sfTimer);
				$$.showSuperfishUl().siblings().hideSuperfishUl();
			},
			out = function () {
				var $$ = $(this), menu = getMenu($$), o = sf.op;
				clearTimeout(menu.sfTimer);
				menu.sfTimer = setTimeout(function () {
					o.retainPath = ($.inArray($$[0], o.$path) > -1);
					$$.hideSuperfishUl();
					if (o.$path.length && $$.parents(['li.', o.hoverClass].join('')).length < 1) { over.call(o.$path); }
				}, o.delay);
			},
			getMenu = function ($menu) {
				var menu = $menu.parents(['ul.', c.menuClass, ':first'].join(''))[0];
				sf.op = sf.o[menu.serial];
				return menu;
			},
			addArrow = function ($a) { $a.addClass(c.anchorClass).append($arrow.clone()); };

		return this.each(function () {
			var s = this.serial = sf.o.length;
			var o = $.extend({}, sf.defaults, op);
			o.$path = $('li.' + o.pathClass, this).slice(0, o.pathLevels).each(function () {
				$(this).addClass([o.hoverClass, c.bcClass].join(' '))
					.filter('li:has(ul)').removeClass(o.pathClass);
			});
			sf.o[s] = sf.op = o;

			$('li:has(ul)', this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over, out).each(function () {
				if (o.autoArrows) addArrow($('>a:first-child', this));
			})
			.not('.' + c.bcClass)
				.hideSuperfishUl();

			var $a = $('a', this);
			$a.each(function (i) {
				var $li = $a.eq(i).parents('li');
				$a.eq(i).focus(function () { over.call($li); }).blur(function () { out.call($li); });
			});
			o.onInit.call(this);

		}).each(function () {
			var menuClasses = [c.menuClass];
			if (sf.op.dropShadows && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
			$(this).addClass(menuClasses.join(' '));
		});
	};

	var sf = $.fn.superfish;
	sf.o = [];
	sf.op = {};
	sf.IE7fix = function () {
		var o = sf.op;
		if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity != undefined)
			this.toggleClass(sf.c.shadowClass + '-off');
	};
	sf.c = {
		bcClass: 'sf-breadcrumb',
		menuClass: 'sf-js-enabled',
		anchorClass: 'sf-with-ul',
		arrowClass: 'sf-sub-indicator',
		shadowClass: 'sf-shadow'
	};
	sf.defaults = {
		hoverClass: 'sfHover',
		pathClass: 'overideThisToUse',
		pathLevels: 1,
		delay: 800,
		animation: { opacity: 'show' },
		speed: 'normal',
		autoArrows: true,
		dropShadows: true,
		disableHI: false, 	// true disables hoverIntent detection
		onInit: function () { }, // callback functions
		onBeforeShow: function () { },
		onShow: function () { },
		onHide: function () { }
	};
	$.fn.extend({
		hideSuperfishUl: function () {
			var o = sf.op,
				not = (o.retainPath === true) ? o.$path : '';
			o.retainPath = false;
			var $ul = $(['li.', o.hoverClass].join(''), this).add(this).not(not).removeClass(o.hoverClass)
					.find('>ul').hide().css('visibility', 'hidden');
			o.onHide.call($ul);
			return this;
		},
		showSuperfishUl: function () {
			var o = sf.op,
				sh = sf.c.shadowClass + '-off',
				$ul = this.addClass(o.hoverClass)
					.find('>ul:hidden').css('visibility', 'visible');
			sf.IE7fix.call($ul);
			o.onBeforeShow.call($ul);
			$ul.animate(o.animation, o.speed, function () { sf.IE7fix.call($ul); o.onShow.call($ul); });
			return this;
		}
	});

})(jQuery);

/*
 * Supersubs v0.2b - jQuery plugin
 * Copyright (c) 2008 Joel Birch
 *
 * Dual licensed under the MIT and GPL licenses:
 * 	http://www.opensource.org/licenses/mit-license.php
 * 	http://www.gnu.org/licenses/gpl.html
 *
 *
 * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of
 * their longest list item children. If you use this, please expect bugs and report them
 * to the jQuery Google Group with the word 'Superfish' in the subject line.
 *
 */

;(function($){ // $ will refer to jQuery within this closure

	$.fn.supersubs = function(options){
		var opts = $.extend({}, $.fn.supersubs.defaults, options);
		// return original object to support chaining
		return this.each(function() {
			// cache selections
			var $$ = $(this);
			// support metadata
			var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
			// get the font size of menu.
			// .css('fontSize') returns various results cross-browser, so measure an em dash instead
			var fontsize = $('<li id="menu-fontsize">&#8212;</li>').css({
				'padding' : 0,
				'position' : 'absolute',
				'top' : '-999em',
				'width' : 'auto'
			}).appendTo($$).width(); //clientWidth is faster, but was incorrect here
			// remove em dash
			$('#menu-fontsize').remove();
			// cache all ul elements
			$ULs = $$.find('ul');
			// loop through each ul in menu
			$ULs.each(function(i) {	
				// cache this ul
				var $ul = $ULs.eq(i);
				// get all (li) children of this ul
				var $LIs = $ul.children();
				// get all anchor grand-children
				var $As = $LIs.children('a');
				// force content to one line and save current float property
				var liFloat = $LIs.css('white-space','nowrap').css('float');
				// remove width restrictions and floats so elements remain vertically stacked
				var emWidth = $ul.add($LIs).add($As).css({
					'float' : 'none',
					'width'	: 'auto'
				})
				// this ul will now be shrink-wrapped to longest li due to position:absolute
				// so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer
				.end().end()[0].clientWidth / fontsize;
				// add more width to ensure lines don't turn over at certain sizes in various browsers
				emWidth += o.extraWidth;
				// restrict to at least minWidth and at most maxWidth
				if (emWidth > o.maxWidth)		{ emWidth = o.maxWidth; }
				else if (emWidth < o.minWidth)	{ emWidth = o.minWidth; }
				emWidth += 'em';
				// set ul to width in ems
				$ul.css('width',emWidth);
				// restore li floats to avoid IE bugs
				// set li width to full width of this ul
				// revert white-space to normal
				$LIs.css({
					'float' : liFloat,
					'width' : '100%',
					'white-space' : 'normal'
				})
				// update offset position of descendant ul to reflect new width of parent
				.each(function(){
					var $childUl = $('>ul',this);
					var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right';
					$childUl.css(offsetDirection,emWidth);
				});
			});
			
		});
	};
	// expose defaults
	$.fn.supersubs.defaults = {
		minWidth		: 9,		// requires em unit.
		maxWidth		: 25,		// requires em unit.
		extraWidth		: 0			// extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
	};
	
})(jQuery); // plugin code ends


// for doing some jquery on page load
$(document).ready(function () {

	// for page navigation
	$(".breadcrumbarrow").click(function () {
		$("ul", this).slideDown('fast');
		$("ul", this).mouseleave(
		function () {
			$(".breadcrumbarrow ul").slideUp(400);
		}
	)
	});

	// for the change publication functionality
		$("ul.sf-menu").supersubs({  // call supersubs first, then superfish, so that subs are 
			minWidth:    15,   // minimum width of sub-menus in em units 
			maxWidth:    27,   // maximum width of sub-menus in em units 
			extraWidth:  1     // extra width can ensure lines don't sometimes turn over 
							   // due to slight rounding differences and font-family 
		}).superfish({ 
		// not display:none when measuring. Call before initialising 
		// containing tabs for same reason.
		delay: 1000,                            // one second delay on mouseout 
		animation: { opacity: 'show', height: 'show' },  // fade-in and slide-down animation 
		speed: 'fast',                          // faster animation speed 
		autoArrows: true,                           // disable generation of arrow mark-up 
		dropShadows: false                            // disable drop shadows 
    });

    // to activate the map if it exists
    activateCountryMaps();
	
});

function RunKicTabs() {

    // Default Action
    $(".kictab_content").hide(); //Hide all content
    $("ul.kictabs li:first").next().addClass("active").show(); //Activate first kickictab
    $(".kictab_content:first").show(); //Show first kickictab content

    // On Click Event
    $("ul.kictabs li").click(function () {
        if (!($(this).hasClass('gap'))) {
            $("ul.kictabs li").removeClass("active"); //Remove any "active" class
            $(this).addClass("active"); //Add "active" class to selected kictab
            $(".kictab_content").hide(); //Hide all kictab content
            var activekictab = $(this).find("a").attr("href"); //Find the rel attribute value to identify the active kictab + content
            $(activekictab).fadeIn(); //Fade in the active content
            return false;
        }
    });

    // When there are links to other tabs within the content
    $(".kictab_content a").click(function () {
        var tabId = $(this).attr("href"); // To get the tab that the user is trying to link to

        // only for links that are linking tabs on the same page
        if (tabId.substring(0, 1) == "#") {
            $("ul.kictabs li").removeClass("active"); //Remove any "active" class
            $("ul.kictabs li a[href$='" + tabId + "']").parent().addClass("active"); // Turn on the given tab
            $(".kictab_content").hide(); //Hide all kictab content

            var activekictab = $($("ul.kictabs li a[href$='" + tabId + "']").parent()).find("a").attr("href"); // To find the active tab
            $(activekictab).fadeIn(); //Fade in the active content
            return false;
        }
    });
}

function chkSearch() {
	if (document.getElementById('ctl00_PageHeaderContentPlaceHolder_search1_mainsearch').value = '<%=GetResourceString("c_Search_Text")%>')
		document.getElementById('ctl00_PageHeaderContentPlaceHolder_search1_mainsearch').value = '';
}

//the purpose of this function is to allow the enter key to point to the correct button to click.
function doClick(buttonName, e) {
	var key;

	if (window.event)
		key = window.event.keyCode;     //IE
	else
		key = e.which;     //firefox

	if (key == 13) {
		//Get the button the user wants to have clicked
		var btn = document.getElementById(buttonName);
		if (btn != null) { //If we find the button click it
			if (btn.getAttribute("href") == null) {
				btn.click();
			}
			else {
				eval(btn.getAttribute('href'));
			}
			event.keyCode = 0;
		}
	}
}

// for the country maps if one location has more than one school
// this will only show if the div tag exists
function activateCountryMaps() {

    if ($("#ukmap").length > 0) {
        $("#london").tooltip({ effect: 'slide', offset: [20, 0], relative: true, tipClass: 'londonTip', opacity: 0.9 });
    }

    if ($("#australiamap").length > 0) {
        $("#sydney").tooltip({ effect: 'slide', offset: [20, 0], relative: true, tipClass: 'sydneyTip', opacity: 0.9 });
    }

    if ($("#usamap").length > 0) {
        $("#seattle").tooltip({ effect: 'slide', offset: [20, 0], relative: true, tipClass: 'seattleTip', opacity: 0.9 });
        $("#boston").tooltip({ effect: 'slide', offset: [20, 0], relative: true, tipClass: 'bostonTip', opacity: 0.9 });
        $("#sanFran").tooltip({ effect: 'slide', offset: [20, 0], relative: true, tipClass: 'sanFranTip', opacity: 0.9 });
        $("#losAngel").tooltip({ effect: 'slide', offset: [20, 0], relative: true, tipClass: 'losAngelTip', opacity: 0.9 });
        $("#chicago").tooltip({ effect: 'slide', offset: [20, 0], relative: true, tipClass: 'chicagoTip', opacity: 0.9 });
        $("#ny").tooltip({ effect: 'slide', offset: [20, 0], relative: true, tipClass: 'nyTip', opacity: 0.9 });
    }
}

