﻿// Utilities
var Utils = {
	ExternalLinks: function() {
		/* XHTML Compliant Open Window */
		$('a.external').each(function() {
			$(this).attr("target", "_blank");
		});
	},
	Ie6NavHelper: function() {
		// Son of Suckerfish IE 6 Dropdown Helper
		$("#nav_main li").each(function() {
			var currentLi = $(this);

			currentLi.mouseover(function() {
				currentLi.addClass("ieHover");
			}).mouseout(function() {
				currentLi.removeClass("ieHover");
			});
		});
	},
	PreloadImages: function() {
		/* Image Pre-Loader */
		if (document.images) {
			if (typeof (document.preload) == 'undefined') {
				document.preload = new Object();
			}

			document.preload.loadedimages = new Array();
			var arglength = arguments.length;

			for (arg = 0; arg < arglength; arg++) {
				document.preload.loadedimages[arg] = new Image();
				document.preload.loadedimages[arg].src = arguments[arg];
			}
		}
	},
	WriteSafeEmail: function(username, hostname, tld) {
		// Generate SPAM Safe E-Mails
		var atSign = "&#64;";
		var appearance = "";

		/* Optional 4th argument for appearance */
		if (arguments[3] == null) {
			appearance = username + atSign + hostname + "." + tld;
		}
		else {
			appearance = arguments[3];
		}

		var addr = username + atSign + hostname + "." + tld;
		document.write("<" + "a" + " " + "href=" + "mail" + "to:" + addr + " \/>" + appearance + "<\/a>");
	},
	ShowDocTypes: function() {
		var docTypes = new Array('doc', 'pdf', 'xls');

		$('a').each(function(idx) {
			for (var idx = 0; idx < docTypes.length; idx++) {
				if (this.href.indexOf('.' + docTypes[idx]) > -1 &&
					!$(this).hasClass('link-' + docTypes[idx])) {
					$(this).addClass('link-' + docTypes[idx]);
				}
			}
			if (
				(this.href.indexOf('http://') > -1 || this.href.indexOf('https://') > -1) &&
				this.href.indexOf(top.location.href.substring(0, 20)) == -1 &&
				!$(this).hasClass('link-external') &&
				$(this).children().length == 0) {
				$(this).addClass('link-external');
			}
		});
	}
};

// Messages
var Messages = {
	FadeOutTime: "1500",
	MessageContainer: '#primary',
	MessageWrapper: null,
	AddGood: function(messageText, displayTime) {
		Messages.AddMessage({ message: messageText, cssClass: 'good', displayTime: displayTime });
	},
	AddAlert: function(messageText, displayTime) {
		Messages.AddMessage({ message: messageText, cssClass: 'alert', displayTime: displayTime });
	},
	AddError: function(messageText, displayTime) {
		Messages.AddMessage({ message: messageText, cssClass: 'bad', displayTime: displayTime });
	},
	AddMessage: function(message) {
		if (Messages.MessageWrapper == null) {
			Messages.MessageWrapper = $('<div></div>').addClass('message-wrapper');
			if ($(Messages.MessageContainer)) {
				$(Messages.MessageContainer).prepend(Messages.MessageWrapper);
			}
			else {
				$('body').append(Messages.MessageWrapper);
			}
		}
		var newMessage = $('<div></div>')
		    .addClass('message')
		    .addClass(message.cssClass)
		    .html(message.message);
		$(Messages.MessageWrapper).append(newMessage);
		if (message.displayTime != null) {
			newMessage.addClass("displayTime_" + message.displayTime);
			Messages.ApplyTimeout();
		}
		newMessage = null;
	},
	FadeOutMessages: function(msgHolder) {
		$(msgHolder).fadeOut(Messages.FadeOutTime);
	},
	ClearMessages: function() {
		$(".message").fadeOut(Messages.FadeOutTime, function() {
			$(this).remove();
		});
	},
	ApplyTimeout: function() {
		var elapsedTime = new Number();
		elapsedTime = 3000; // Set the inital elasped interval

		$(".message[class*=displayTime]").each(function() {
			var displayTimeString = new String();
			var displayTime = new Number();
			displayTimeString = $(this).attr("class");

			// If the displayTime_ class exists, parse the string and return the number
			if (displayTimeString.indexOf("displayTime_") != -1) {
				displayTime = displayTimeString.substring(displayTimeString.indexOf("displayTime_") + 12);
			}
			else {
				displayTime = elapsedTime;
				elapsedTime += 1000;
			}

			var thisPointer = this; // Create a pointer for this.
			var displayTimeItem = setTimeout(function() {
				Messages.FadeOutMessages(thisPointer);
			}, displayTime);
		});
	},
	Trace: function(msg) {
		if (console) {
			console.log(msg);
		}

	}
};

// Load Functions
$(function() {
	// Custom Timeout
	Messages.ApplyTimeout();
});