function getById(elementID) {
	/*
	 * cross-browser compliant version of document.getElementById()
	 *
	 * this function is depracated
	 * jQuery's $("#id") should be used instead
	 */

	if (document.getElementById) {
		return document.getElementById(elementID);
	} else if (document.all) {
		return document.all(elementID);
	} else {
		return null;
	}
}

/* fnTrapKD prevents the enter key from submitting the page if it was used to select an item from the drop-down list of previous entries */
var previousKeyPressed;
function fnTrapKD(btnId, event) {
	var btn = getById(btnId);
	var keyPressed = null;
	if (event.keyCode) {
		keyPressed = event.keyCode;
	} else if (event.which) {
		keyPressed = event.which;
	}
	if (keyPressed == 13 && previousKeyPressed != 38 && previousKeyPressed != 40) {
		if (window.event) {
			window.event.returnValue = false;
		} else {
			if (event.cancelable) {
				event.preventDefault();
			}
			if (!event.cancelBubble) {
				event.stopPropagation();
			}
		}

		btn.click();

		return false;
	} else {
		previousKeyPressed = keyPressed;
	}
}

/*
   derekWinfield 2009-01-23 - the respond function and document.onkeypress doesn't seem to be needed any more
								the default action behavior of forms is working without it
var defaultButton = null;
function respond(evt) {
	var keyPressed = null;
	if (window.event) {
		keyPressed = window.event.keyCode;
	} else if (evt.keyCode) {
		keyPressed = evt.keyCode;
	} else if (evt.which) {
		keyPressed = evt.which;
	}
	if (keyPressed == 13 && defaultButton != null) {
		if (window.event) {
			window.event.returnValue = false;
		} else {
			if (evt.cancelable) {
				evt.preventDefault();
			}
			if (!evt.cancelBubble) {
				evt.stopPropagation();
			}
		}

		defaultButton.click();

		return false;
	}
}
if (document.captureEvents) {
	document.captureEvents(Event.KEYPRESS);
}
document.onkeypress = respond;
*/

function quickSearch(searchTerm, searchURL, compareText) {
	if (searchTerm.length > 0 && searchTerm != compareText) {
	    window.location.href = searchURL.replace(/searchterm/, encodeURIComponent(searchTerm).replace(/%20/g, '+'));
	}
	return false;
}

function MLquickSearch(searchTerm, searchURL, comparetext) {
	return quickSearch(searchTerm, searchURL, comparetext);
}

function resetTextCommon(elemName, defaultText) { 
	var	ename =	getById(elemName);
	if (ename && (ename.value == "" || ename.value == defaultText)) {
		ename.value = defaultText;
		ename.style.color = "#aaa";
	}
}

function clearTextCommon(elemName, defaultText) { 
	var ename =	getById(elemName);
	if (ename && ename.value == defaultText) {	
		ename.value = "";	
		ename.style.color = "black";
	}	    
}

// declared as a global variable because it is used in other scripts on the site
var defaultSearchText = "enter font name or key terms";

$(function() {
    /* on document ready - like window.onload, only better! */

    resetTextCommon("navSearchField", defaultSearchText);

    // initialize the drop-down navigation menus
    var siteNav = $("#siteNav");
    if (siteNav.length > 0) {
        siteNav.superfish({
            animation: { opacity: "show", height: "show" }
        });
    }

});

function togglePopup(id, offsetElmnt, topAdjust, leftAdjust) {
	/* show/hide the element id passed in */

	var div = $("#" + id);
	if (offsetElmnt != null) {
		var offset = $(offsetElmnt).offset();
		var topPos = offset.top - topAdjust;
		if (topPos < 1) {
			topPos = 10;
		}
		var leftPos = offset.left - leftAdjust;
		if (leftPos < 1) {
			leftPos = 10;
		}
		div.css({ top: topPos, left: leftPos });
	}
	div.toggle();
}

function logError(exception, where) {
	/*
	 * write to the Event Log on the server using a hidden iframe to make the call
	 * this function purposely has no dependency on a JavaScript library or the XmlHttpRequest object (AJAX)
	 * in case either of these things are causing the error that needs to be logged
	 */

	if (document.createElement) {
		var url = "/services/service.ashx?method=logError&error=" + escape(exception.message) + "&where=" + escape(where);
		var ifrm = document.createElement("iframe");
		ifrm.setAttribute("src", url);
		ifrm.style.display = "none";
		document.body.appendChild(ifrm);
	}
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(";");
	for (var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0) == " ") {
			c = c.substring(1, c.length);
		}
		if (c.indexOf(nameEQ) == 0) {
			return c.substring(nameEQ.length, c.length);
		}
	}
	return "";
}
	
function createCookie(name, value, days) {
	var expires = "";
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		expires = "; expires=" + date.toGMTString();
	}
	document.cookie = name + "=" + value + expires + "; path=/";
}

// change/add a querystring value to the current url
function changeQsValue(name, value, resetPage) {
    var url = window.location.href.replace(window.location.hash, "");
    if (url.indexOf(name + "=") > -1) {
        var regExp = new RegExp(name + "=([^&#]*)", "i");
        url = url.replace(regExp, name + "=" + value);
    } else {
        if (url.indexOf("?") > -1) {
            url = url + "&" + name + "=" + value;
        } else {
            url = url + "?" + name + "=" + value;
        }
    }
    if (resetPage && name != "pg")
        url = url.replace(/&+pg=([^&#]*)/, "");
    
    window.location.href = url;
    return false;
}

// used to change the currency and language instead of using links on the page so Googlebot doesn't crawl pages with these querystrings
function changeCur(cur) { return changeQsValue("cur", cur, false); }
function changeLang(lang) { return changeQsValue("lang", lang, false); }

/*
 * dynamically add a confirmation popup to all external links on the page
 * this functionality is enclosed in a "namespace" so it doesn't conflict with any other scripts
 */
var monotypeExternalLinks = function () {
	var internalDomain = "fonts.com";
	var confirmationMessage = "You are leaving the Fonts.com Web site. You may\nreturn to the Fonts.com Web site by closing\nthe window to the third-party Web site\nthat you have opened.\n\nDo you wish to continue?";

	var addListener = function () {
		if (window.addEventListener) {
			return function (el, type, fn) {
				el.addEventListener(type, fn, false);
			};
		} else if (window.attachEvent) {
			return function (el, type, fn) {
				var f = function () {
					fn.call(el, window.event);
				};
				el.attachEvent('on' + type, f);
			};
		} else {
			return function (el, type, fn) {
				el['on' + type] = fn;
			};
		}
	}();
	function confirmExit(e) {
		if (!confirm(confirmationMessage)) {
			if (e.preventDefault) {
				e.preventDefault();
			} else {
				e.returnValue = false;
			}
			return false;
		} else {
			return true;
		}
	}
	function markExternalLinks() {
		var pattern = new RegExp("^\\w+:\\/\\/(\\w+\\.)?(test)?" + internalDomain + "\\/");
		var pattern2 = new RegExp("^\\w+:\\/\\/" + window.location.hostname + "\\/");
		var links = document.getElementsByTagName("a");
		for (var i = 0; i < links.length; i++) {
			if (!pattern.test(links[i].href) && !pattern2.test(links[i].href) && links[i].href.substring(0, 7) != "mailto:" && links[i].href.substring(0, 11) != "javascript:" && links[i].href.substring(0, 14) != "http://msg2svc") {
				links[i].setAttribute('target', '_blank');
				addListener(links[i], "click", confirmExit);
			}
		}
	}

	addListener(window, "load", markExternalLinks, false);
}();

