/* denmat.js */

$(document).ready(function () {

	function printPage (evt) {
		evt = evt || window.event;
		evt.stopPropagation();
		
		window.print();
		return false;
	}
	
	function emailPage (evt) {
		evt = evt || window.event;
		evt.stopPropagation();
		
		location.href = 'mailto:?subject=' + encodeURIComponent(document.title) + 
			'&body=' + encodeURIComponent(location.href);
		return false;
	}
	
	function canBookmarkPage () {
		return (window.sidebar && window.sidebar.addPanel) ||
				(window.external && typeof window.external.AddFavorite === 'unknown');
			// ...&& window.external.AddFavorite);
			// IE doesn't support this property or method!
	}
	
	function bookmarkPage (evt) {
		var title = document.title,
			url = location.href;
			
		evt = evt || window.event;
		evt.stopPropagation();
		
		if (window.sidebar && window.sidebar.addPanel) {
			window.sidebar.addPanel(title, url, '');
		} else {
			if (window.external && typeof window.external.AddFavorite === 'unknown') {
				window.external.AddFavorite(url, title);
			}
		}
		return false;
	}

	function dmSignInTransmogrify () {

		var $signInContainer = $('#hdr-signIn');
		if ($signInContainer.find('form').length === 1) {
			OCMS.signInTransmogrifier({
				selector: $signInContainer,
				//newTemplate: "{user}{password}<p><a href='#' id='signUp'>Sign Up!</a>{forgot}</p>{signIn}",
				newTemplate: '{user}{password}<p>{forgot}</p>{signIn}<div class="signInError" data-errorcode="{errorMessageClass}">{errorMessage}</div>',
				addClasses: true,
				text: {
					signIn: 'Sign In',
					forgot: 'Forgot Password?'
					}
				
			});
			
			if ($signInContainer.length === 1) {
				$(".txtUser")
					.focus(function () {
						$("#signInHead").hide();
					})
					.blur(function () {
						if ($(this).val().length === 0 && $('.IE7').length === 0) {
							// IE7 bad, doesn't get the user's head image
							$("#signInHead").show();
						}
					});
			}			
		} else {
			$signInContainer = $('#widePortal');
			
			if ($signInContainer.find('form tr').length === 1 || ($('.messageTable').length && $signInContainer.find('form tr').length === 3 )) {
			
				OCMS.signInTransmogrifier({
					selector: $signInContainer,
					newTemplate: '<p>{forgotPasswordLabel}<br>{forgotPassword}</p><p>{btnForgotPassword}</p><p><div class="signInError" data-errorcode="{errorMessageClass}">{errorMessage}</div>',
					addClasses: true
				});
				
				//$('label', $signInContainer).eq(0).text('User name');
				//$('.txtUser').focus();
			}
			else if ($signInContainer.find('form tr').length === 5 || $signInContainer.find('form tr').length === 7) {
			
				OCMS.signInTransmogrifier({
					selector: $signInContainer,
					newTemplate: '<p>{userLabel}<br>{user}</p><p>{passwordLabel}<br>{password}</p><p>{signIn}</p><p>{forgot}</p><div class="signInError" data-errorcode="{errorMessageClass}">{errorMessage}</div>',
					addClasses: true,
					text: {
						signIn: 'Sign In',
						forgot: 'Forgot Password?'
						}
				});
				
				$('label', $signInContainer).eq(0).text('User name');
				$('.txtUser').focus();
			}
			else if ($signInContainer.find('form tr').length === 4) {
			
				OCMS.signInTransmogrifier({
					selector: $signInContainer,
					newTemplate: '<p>{oldPasswordLabel}<br>{oldPassword}</p><p>{newPasswordLabel}<br>{newPassword}</p><p>{confirmPasswordLabel}<br>{confirmPassword}</p><p>{changePassword}</p><div class="signInError" data-errorcode="{errorMessageClass}">{errorMessage}</div>',
					addClasses: true
					
				});
				
				//$('label', $signInContainer).eq(0).text('User name');
				//$('.txtUser').focus();
			}
			else if ($signInContainer.find('form tr').length === 3) {
			
				OCMS.signInTransmogrifier({
					selector: $signInContainer,
					newTemplate: '<p>{newPasswordLabel}<br>{newPassword}</p><p>{confirmPasswordLabel}<br>{confirmPassword}</p><p>{changePassword}</p><div class="signInError" data-errorcode="{errorMessageClass}">{errorMessage}</div>',
					addClasses: true
				
				});
				
				//$('label', $signInContainer).eq(0).text('User name');
				//$('.txtUser').focus();
			}
			
			
			
			
		}		
	}	// dmSignInTransmogrify
	
	
	function prepareMainMenu () {
		var myMenuBounds = null,
		    dmMenu = function () {
			var $openSubMenu = null,
				$mainNavTitles = $mainNav.find(".root-level-item > a"),
				$glassPane = $("#glassPane");
			
			function subMenuShow () {
				var $target = $(this).next(".bigSubMenuContainer");
				
				if ($openSubMenu === null) {
					// there's no open sheet: hide the bubble nav and reveal our destination sheet
					$openSubMenu = $target;
					$target.fadeIn('slow');
					hideSplashBubbles();

					$("body").bind("mousemove", subMenuHideMaybe);
				} else {
					// must compare HTML elements, not the jQuery objects
					if ($openSubMenu.get(0) !== $target.get(0))	{
						// switch to a different sheet
						$openSubMenu.hide();
						$openSubMenu = $target;
						$target.fadeIn('fast');
					}
				}

				// only have to do this once ever; all $targets (.bigSubMenuContainer) will have
				// the same co-ordinates; need $target to be visible before getting its bounds
				if (myMenuBounds === null) {
					myMenuBounds = OCMS.boundsChecker($mainNav.add($target));
				}

				$mainNavTitles.removeClass("open");
				$(this).addClass("open");			
			}
	
			function subMenuHide () {
				if ($openSubMenu) {
					$openSubMenu.hide();
					$openSubMenu = null;
					$("body").unbind("mousemove", subMenuHideMaybe);
				}				
				$mainNavTitles.removeClass("open");
				showSplashBubbles();
			}
	
			function subMenuHideMaybe (evt) {
				evt = evt || window.event;
				if (myMenuBounds.isOutside(evt)) {
					subMenuHide();
				}
			}	
			
			function hideSplashBubbles () {
				// ...and show sub-menu glassPane
				if ($bubbles) {
					$bubbles.stop(true, true).fadeOut('slow');
					if ($bnArrows.data('show')) {
						$bnArrows.fadeOut('slow');
					}
				}
				$glassPane.slideDown('slow');
//.animate({opacity: 0.95}, 500);
			}
		
			function showSplashBubbles () {
				// ...and hide sub-menu glassPane
				if ($bubbles) {
					$bubbles.fadeIn('slow');
					if ($bnArrows.data('show')) {
						$bnArrows.fadeIn('slow');
					}
				}
				$glassPane.slideUp('slow');
//.animate({opacity: 0}, 500);
			}
	
			return {
				show: subMenuShow,
				hide: subMenuHide,
				hideMaybe: subMenuHideMaybe
				}
		}();	// dmMenu
	
	
		// main menu items that have our large sub-menu sheet will have an li.level-1-list within their a	
		$mainNav.find(".root-level-item").each(function () {
			if ($(this).find(".level-1-list").size() === 1) {
				$(this).find(">a").mouseenter(dmMenu.show);

				// each wrapped list was hidden during loading, and still will be until their
				// container is shown during menu'ing
				$(this).find(".level-1-list").wrap("<div class='bigSubMenuContainer'></div>");
			} else {
				$(this).find(">a").mouseenter(dmMenu.hide);				
			}
		});

		// remove the href="#" that Orchestra assumed should be added to empty links
		$mainNav.find('a[href="#"]').removeAttr('href');		
	}	// prepareMainMenu	
	
	
	/* --- begin $().ready() --- */
	
	var bIsLocal = (location.href.indexOf("localhost") >= 0 || location.href.indexOf("file:") === 0);
	var emptyCounter = 0;
	
	OCMS.addAuthorClasses();
	OCMS.addBrowserClasses();	/* we just need to flag IE7 and that's done by default */

	// these convenience variables will be used by a couple of functions within this closure
	var $bubbles = $("#bubbles"),
		$bnArrows = $('.bnArrow'),
	    $mainNav = $("#main-nav");
		
	prepareMainMenu();

	// outerMenu also needs a special menuPanel	backdrop
	$('#outerMenu .level-1-list').wrap('<div class="outerSubMenuContainer"></div>');

	$('#outerMenu .root-level-item > a').mouseenter(function () {
		var $outerMenuRoots = $(this).parent();

		function outerSubMenuHideMaybe (evt) {
			evt = evt || window.event;
			if (outerMenuBounds.isOutside(evt)) {
				$outerMenuRoots.removeClass('active');
				$('body').unbind("mousemove", outerSubMenuHideMaybe);
			}
		}

		$outerMenuRoots.siblings().removeClass('active');
		$outerMenuRoots.addClass('active');

		var outerMenuBounds = OCMS.boundsChecker($('#outerMenu, #outerMenu .outerSubMenuContainer:visible'));

		$('body').bind('mousemove', outerSubMenuHideMaybe);		
	});
	

	// rearrange sign-in form fields the way we want them
	dmSignInTransmogrify();
	$('.txtUser, .txtPassword').keydown(function (evt) {
		if (evt.keyCode === 13) {
			if ($('.txtUser').val() !== '' && $('.txtPassword').val() != '') {
				$(this).closest('form').find('input[type=submit]').click();
			} else {
				emptyCounter++;
				if (emptyCounter > 2) {
					alert('DenMat.com\n\nYour user name and password cannot be blank.');
					emptyCounter = -1;
				}
			}
			return false;
		}
	});
	
	// if we're not in the Orchestra Page Editor, do some portal sign in trickery
	if (!OCMS.inPageEditor) {
		var $aSign = $('#hdr-signInStatus a');
		if ($aSign.length === 2) {	
			// SIGNED IN
			// we get:
			//	<div style="text-align: right;">
			//		{user name} &nbsp; | &nbsp; <a href="...">Logout</a>
			//	</div>

			var signOutLink = $aSign.eq(0).attr('href');
			$aSign.eq(0).parent()
				.addClass('signedInMsg')
				.removeAttr('style')	
				.next().remove();			// remove the unneeded not signed in div

			var u = $('.signedInMsg').contents().eq(0).text();
			u = u.replace(/\|/g, '').trim();
			
			$aSign.eq(0).parent().html('<p class="welcome">Welcome, ' + u + 
				'</p><p class="signOut"><a href="' + signOutLink + '">Sign Out</a></p>');
			
			$('#hdr-signIn').hide();
			$('#hdr-signInStatus').show();
		} else {
			// when only 1 link within the portal login component we are NOT SIGNED IN
			// we'll use just our built-in sign in form
			$('#hdr-signInStatus').hide();	// our default state, actually
			
			if (!bIsLocal) {
				if ($('.signInError').text().length > 0) {
					// .attr('data-errorcode')
					$('.signInError').click(function () { $(this).fadeOut(); }).delay(750).slideDown();
					setTimeout(function () { $('.signInError').slideUp(); }, 10000);
				}
				
				try {
					// after a failed sign in attempt the user name field will still be populated
					if ($('.txtUser').val().length > 0) {
						$("#signInHead").hide();
					}
				} catch (ex) {
					if (typeof console === 'object') {
						console.info('no .txtUser field - really?');
					}
				}
			}
		}
	}	
	
	// prepare search field
	$("#hdr-search input[type=text]").hintText("Search");

	// create multiple lists (for side-by-side placement) from 
	//	- the main nav's sub-menu, for our large menu sheets
	//	- the products, procedures, and manage account menus in the bottom nav area
	//  - the top-right-most outerMenu
	OCMS.listSplitter("#main-nav .level-1-list, #bnTable ul, #outerMenu .level-1-list");

	// now that these are safely wrapped in a new, hidden container, show the large menu sheets
	// (each of which was initially hidden so they wouldn't show while the page was loading)
	$mainNav.find(".level-1-list").show();
	

	/* product and procedure pages have TabbedPanels for 'sub-page' content */
	$('.tab-content-inner > div').each(function (nIt) {
		var $t = $(this).find('h1.document-1-title');
		if ($t.length === 1) {
			$('.tabset a').eq(nIt).html($t.text());
			$t.remove();
		}
	});
	$('.tabset a').click(function () {
		var tId;
		
		if (!$(this).hasClass('active')) {
			tId = $(this).attr('href') || '';
			if (tId.length > 0) {
				$(this).data('tabId', tId).removeAttr('href');
			} else {
				tId = $(this).data('tabId');
			}

			$('.tab-content-inner > div').removeClass('active').hide();
			$(tId).fadeIn().addClass('active');
			
			$('.tabset a').removeClass('active');
			$(this).addClass('active');
		}
	});
	$('.tab-content-inner > div:first-child').addClass('active');
	
	// if a link includes {#blah} then remove from text and append #blah to its href
	// used to target the techniques tab on product pages
	// ALSO... look for our utility menu links and hook them up
	$('a').each(function () {
		var $a = $(this),
			href = $a.attr('href'),
			t,
			matches;
			
		if (href === '{print}') {
			$a.click(printPage);
		} else if (href === '{email}') {
			$a.click(emailPage);
		} else if (href === '{bookmark}') {
			if (canBookmarkPage()) {
				$a.click(bookmarkPage);
			} else {
				$a.remove();
			}
		} else {
			t = $a.text();
			matches = /(.+?)\s*\{#(.+)\}/.exec(t);
		
			if (matches) {
				$a.text(matches[1]);
				$a.attr('href', $a.attr('href') + '#' + matches[2]);
			}
		}		
	});
	
	$('a.scrollTo').click(function () {
		var starget = $(this).attr('href'),
			$target = $(starget);
			
		if ($target.length === 0) {
			$target = $('a[name=' + starget.slice(1) + ']');
		}
		
		$('html, body').animate({scrollTop: $target.offset().top}, 750);
		return $target.length === 0;
	});

	OCMS.g_videoPlayerDefaultSiteSettings = {
		swfUrl: 	'http://swfmachine.com/players/jw/player.swf',
//		swfUrl: 	'http://d1y1fk9jqs4xmk.cloudfront.net/player.swf',
		flashvars: {
			streamer: 'rtmp://video.denmat.com/cfx/st',
			autostart: 'true'
		},
		width: 500,
		height: 375
	};


});
