// User-Agent sniffing. Unwanted, but aparently necessary for
// minor positional fixes in Konqueror, Safari, Chrome, et al.
var isKhtml = (0 <= navigator.userAgent.indexOf('KHTML'))

jQuery.noConflict();
jQuery(function($) {

	/***********************************************************************
	 * On the homepage, make the boxes' height equal.
	 */
		var iBoxHeight = 0;
		$('#homeBoxes div.boxMid').each(function() {
			if (iBoxHeight < this.clientHeight) {
				iBoxHeight = this.clientHeight;
			}
		});
		$('#homeBoxes div.boxMid').each(function() {
			$(this).css('height', iBoxHeight + 'px');
		});

	/***********************************************************************
	 * Home Slideshow (uses jquery cycle)
	 */
		if (1 == $('#homeSlideshow').length) {
			// Populate the images as progressive enhancement
			$('#homeSlideshowCtrl li a').each(function() {
				if ($(this).attr('href') != $('#homeSlide').attr('src')) {
					$('#homeSlide').after('<img src="' + this.href + '" />');
				}
			});

			// Strip the links to be replaced by cycle
			var iSlideCnt = $('#homeSlideshowCtrl li').length;
			var aSlideTitles = [];
			var aSlideUrls = [];
			$('#homeSlideshowCtrl li').attr('rel', 'orig');
			$('#homeSlideshowCtrl li a').each(function(i) {
				aSlideTitles.push($(this).text());
				aSlideUrls.push($(this).attr('rel'));
			});

			// Order the slide URLs correctly
			aSlideUrls.push(aSlideUrls.shift());
			aSlideUrls.reverse();

			// Start cycle
			$('#homeSlideshow').cycle({
				fx: 'fade', // transition effect
				pause: 0, // pause when mouse hovers over the image?
				speed: 500, // transition duration
				timeout: 5500, // interval duration
				pager: '#homeSlideshowCtrl', // Slide switcher
				pagerClick: function(id, slide) {
					if (!slideCtrl.paused) {
						slideCtrl.click();
					}
				},
				pagerAnchorBuilder: function(id, slide) {
					$('#homeSlideshowCtrl li[rel=orig]:first-child').remove();
					var id = (0 == id)? id : aSlideTitles.length - id;
					return '<li><a href="' + slide.src +
						'">' + aSlideTitles[id] + '</a></li>';
				}
			});

			// Implement Pause/Play button for cycle
			var slideCtrl = $('<li class="slideCtrlGo"><span></span></li>');
			slideCtrl.pause = function() {
				$('#homeSlideshow').cycle('pause');
				$(slideCtrl).children('span')
					.css('backgroundPosition', '0 -14px');
				slideCtrl.paused = true;
			}
			slideCtrl.resume = function() {
				$('#homeSlideshow').cycle('resume', true);
				$(slideCtrl).children('span')
					.css('backgroundPosition', '0 0');
				slideCtrl.paused = false;
			}
			$(slideCtrl).toggle(slideCtrl.pause, slideCtrl.resume);
			slideCtrl.paused = false;

			// Ensure cycle has completed transforming its pager elements
			var loadSlideCtrl = function() {
				if (iSlideCnt >
				$('#homeSlideshowCtrl li:not([rel=orig])').length) {
					setTimeout(function() {
						loadSlideCtrl();
					}, 25);
				}
				else {
					// Add the play/pause control
					$('#homeSlideshowCtrl li:last-child').after(slideCtrl);
					// Fix CSS after cycle script
					$('#homeSlideshowCtrl li:not(:first-child)')
						.css('marginLeft', '1em')
						.css('paddingLeft', '1em');
					// Positioning Fix for Konqueror, Safari, Chrome, et al.
					if (isKhtml) {
						$('#homeSlideshowCtrl').css('top', '-41px');
						$('.slideCtrlGo span').css('top', '2px');
					}
					// Positioning fix for Firefox 3.5 and up
					if ($.browser.mozilla) {
						$('.slideCtrlGo span').css('top', '1px');
					}
				// Add onclick values for slides
				$('#homeSlideshow img').each(function(i) {
					if (0 < aSlideUrls[i].length) {
						$(this)
							.css('cursor', 'pointer')
							.click(function() {
								document.location.href = aSlideUrls[i];
							});
					}
				});
				}
			}
			loadSlideCtrl();
		};

	/***********************************************************************
	 * Make nav transitions smoother
	 */
		$('.mainNav li:hover ol').hide();
		$('.mainNav li').hover(
			function() { $('ol', this).fadeIn(200) },
			function() { $('ol', this).fadeOut(350) }
		);

	/***********************************************************************
	 * AddThis in the subNav
	 */
		/*@cc_on
		/*@if (@_jscript)
			var sSTEl = '<iframe frameborder="0" allowtransparency="true"' +
				'id="addthis" src="/gadgets/addthis.html"></iframe>';
			switch(@_jscript_version) {
			case 5.6:
				var iSTTop = 145;
				break;
			case 5.7:
				var iSTTop = 132;
				break;
			case 5.8:
			default:
				var iSTTop = 110;
				break;
			}
		@else @*/
			var sSTEl = '<object type="text/html" id="addthis" ' +
				'data="/gadgets/addthis.html"></object>';
			var iSTTop = 105;
		/*@end
		@*/
		$('.subNav').after(sSTEl);
		$('.subNav').append('<li class="addthisLI"><span>Share</span></li>');
		$('.subNav li.addthisLI span').click(function() {
			$('#addthis').css('top', iSTTop + 'px');
		});

	/***********************************************************************
	 * Years DDMs more intreractive
	 */
		$('div.box form.years input[type=submit]').hide();
		$('div.box form.years select').change(function() {
			this.parentNode.parentNode.parentNode.submit();
		});

	/***********************************************************************
	 * Collapsible boxes: accordian style
	 */
		var ignoreAccordianClick = false; // For inner link clickage.
		$('div.collapsible')
			.toggleClass('expanded')
			.toggleClass('collapsed')
			.css('cursor', 'pointer')
			.click(function() {
				if (ignoreAccordianClick) {
					ignoreAccordianClick = false;
				}
				else {
					if (-1 == $(this).attr('class').indexOf('expanded')) {
						$('div.collapsible.expanded')
							.toggleClass('expanded')
							.toggleClass('collapsed')
							.find('.liner, ul, h5').slideToggle('medium');
					}
					$(this)
						.toggleClass('expanded')
						.toggleClass('collapsed')
						.find('.liner, ul, h5').slideToggle('medium');
				}
			})
			.find('.liner, ul, h5').hide();
		$('div.collapsible a').click(function() {
			ignoreAccordianClick = true;
		});

	/***********************************************************************
	 * Users provide feedback
	 */
		var feedbackLink = $('<div class="feedback">' +
			'Please provide us with feedback on this page.</div>');
		$('.feedbackable').append(feedbackLink);
		var feedbackModal = $('<div id="feedbackModal"></div>');
		$('body').append(feedbackModal);
		var enhanceFeedbackForm = function(hash) {
			$('#feedbackForm', hash.w).ajaxForm({
				dataType: 'json',
				success: function(data) {
					// Form response has been received
					if (data.success) {
						// Captcha was successful
						$('#feedbackModal').jqmHide();
					}
					else {
						// Captcha failed; Refresh the captcha
						$('#feedbackModal object.recaptcha').attr('data',
						$('#feedbackModal object.recaptcha').attr('data'));
					}

					// Alert the user to the status
					$('#dialog').text(data.message);
					$('#dialog').dialog({
						title: ((data.success)? "Success" : "Error"),
						width: 350,
						height: 130,
						minHeight: 130,
						zIndex: 3010,
						buttons: {
							"Ok": function() {
								$(this).dialog("close");
							}
						},
						close: function(event, ui) {
							$(this).dialog('destroy');
						}
					});
				}
			});
		};

		var showFeedback = function(hash) {
			hash.w.fadeIn('500', function() {});
			hash.o.fadeIn('800', function() {});
		};

		var hideFeedback = function(hash) {
			hash.w.fadeOut('500', function() {});
			hash.o.fadeOut('800', function() {
				hash.o.remove();
			});
		};

		$('div#feedbackModal')
			.draggable({
				handle: 'h3'
			})
			.jqm({
				trigger: 'div.feedback',
				ajax: '/feedback.asp?' +
				'url=' + escape(document.location.href) +
				'&pageTitle=' + escape(document.title),
				onShow: showFeedback,
				onHide: hideFeedback,
				onLoad: enhanceFeedbackForm
			});

	/***********************************************************************
	 * Positioning Fixes for Konqueror, Safari, Chrome, et al.
	 * The corners script creates some unwanted side-effects in WebKit.
	 */
		if (isKhtml && (0 < $('div.box.dl').length)) {
			$('div.box.dl div.boxMid')
				.css('padding-top', '20px');
			$('div.box.dl h3')
				.css('position', 'absolute')
				.css('top', '13px')
				.css('width', '130px');
			$('div.box.dl h3').each(function() {
				if(16 < $(this).height()) {
					$(this.parentNode).css('padding-top', '33px');
				}
			});
		}

	/***********************************************************************
	 * Allow popup windows
	 */
		$('a.popup').click(function() {
			window.open(this.href);
			return false;
		});

	/***********************************************************************
	 * Help dialogs get miniature fragments of content via AJAX
	 */
		$('a.help').click(function() {
			var oHelp = this;
			$('#dialog').load(oHelp.href + '?fragment=true',
			function(responseText, textStatus, XMLHttpRequest) {
				if ('success' == textStatus) {
					$('#dialog').dialog({
						title: oHelp.title,
						width: 525,
						minHeight: 130,
						zIndex: 3010,
						buttons: {
							"Ok": function() {
								$(this).dialog("close");
							}
						},
						close: function(event, ui) {
							$(this).dialog('destroy');
						}
					});
				}
			});
			return false;
		});

	/***********************************************************************
	 * Embed SWFs
	 */
		$('.swf .liner').each(function() {
			with ($(this).find('a.access:first')) {
				var swfFile = attr('href');
				var swfTitle = text().replace(/[^a-z0-9]/ig, '_');
				var swfSize = attr('rel').split('x');
				replaceWith('<div id="' + swfTitle + '"></div>');
			};
			var flashvars = {};
			var params = {
				wmode: 'transparent',
				allowscriptaccess: 'always'
			};
			var attributes = {};
			swfobject.embedSWF(
				swfFile,
				swfTitle,
				swfSize[0],
				swfSize[1],
				'7',
				'/_swf/expressInstall.swf',
				flashvars,
				params,
				attributes
			);
		});

	/***********************************************************************
	 * Google Analytics
	 */
		try {
			var pageTracker = _gat._getTracker("UA-1038533-1");
			pageTracker._trackPageview();
		}
		catch(err) {
		}

	/***********************************************************************
	 * SalesForce Forms enhancements
	 */
		$("form[action*=salesforce]").submit(function() {
			var gtg = true;
			var fieldToFocus;
			var errorMsg;

			$(this).find(".required").each(function() {
				if (0 === jQuery.trim(this.value).length) {
					gtg = false;
					$(this).css("background", "#FFB");
					if (fieldToFocus === undefined) {
						fieldToFocus = this;
					}
				}
				else {
					$(this).css("background", "#FFF");
				}
			});

			if (!gtg) {
				errorMsg = "One or more required fields are incomplete. " +
					"Please complete each highlighted field.";

				fieldToFocus.focus();
			}

			$(this).find("input#email").each(function() {
				if (!
				/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+\.([a-zA-Z0-9]{2,4})+$/
				.test(jQuery.trim(this.value))) {
					gtg = false;
					$(this).css("background", "#FFB");
					if (fieldToFocus === undefined) {
						fieldToFocus = this;
					}
					badEmilMsg = "Email address failed validation test. " +
						"Please enter an email address that passes.";
					if (errorMsg === undefined) {
						errorMsg = badEmilMsg;
					}
					else {
						errorMsg += "<br /><br />" + badEmilMsg;
					}
				}
				else if (0 < jQuery.trim(this.value).length) {
					$(this).css("background", "#FFF");
				}
			});

			$(this).find("p.error").html(errorMsg);
			return gtg;
		});
});

