/*
 * Port of the ad code for use in 3rd party applications (like Bitpipe).
 */
// Ads ============================================================================================
var loggedIn = (function (v5sid) {
	var allcookies = document.cookie;
	var indexProps = allcookies.indexOf("Datav2");
	var SiteList = unescape(allcookies.substring(allcookies.indexOf("Site", indexProps) + 4));
	var thisSite = (v5sid && SiteList.indexOf("," + v5sid + ","));
	return (indexProps != -1 && thisSite != -1) ? 1 : -1;
})(window.SITE_v5sid);

var adDebug = (getURLParamValue("adString") == "on") ? true : false;

// Interstitial override
var dcopt = (function () {
	var on = (typeof interstitialSwitch == "undefined" || interstitialSwitch);
	var dc = (typeof dcopt == "undefined" && "ist" || dcopt);
	var urlOverride = getURLParamValue("int");
	if (!on || dc != "ist" || urlOverride == "off") {
		return "";
	}
	return "ist";
})();
var dcopt_holder = dcopt;
var ad_dbString = new String();

// Dart Utility Class
function DartUtil() {
	this.log = [],
	// Cache these properties when the object is instantiated, so that
	// each call to getDartString does not have to recalculate them
	this.acct  = window.accountAbbr || "null",
	this.zone  = getURLParamValue("parentZone") || window.zone || "null",
	this.pth   = getURLParamValue("parentPth") || window.location.pathname.substring(1).replace(/\//g, "."),
	this.kw    = getURLParamValue("parentKw") || window.kw || (function () {
		var query = getURLParamValue("query") || getURLParamValue("q");
		if (query != "") {
			query = unescape(query).toLowerCase().
			replace(/[\s\+]+&[\s\+]+/g, "+"). // replace standalone ampersands
			replace(/[\s\+]+/g, "+"). // replace multipe spaces with a single space
			// replace spaces with +and+
			// protect +or+ from becoming +and+or+and+
			replace(/\+(?!(or\+))/g, function () {
				// no backreferences in js so must use this method
				return (RegExp.leftContext.substr(-3) == "+or") ? "+" : "+and+";
			});
			return escape(query);
		}
	})() || "", // keyword
	this.gci   = getURLParamValue("parentGci") || window.gci || "", // ad_id of a CI
	this.taxHelper = {
		taxLevel: function () {
			var pathArray = window.location.pathname.substring(1).split("/");
			var lvl = pathArray.length; 
			if (lvl > 0) {
				if (ENV_isStage && pathArray[0] == SITE_name) {
					return lvl - 1;
				}
			}
			return lvl;
		}
	},
	this.tax   = (function (o) { // ad_id of a CI primary topic or a channel
		if (document.referrer.indexOf("informationCenter") != -1) {
			// test for topicTax override cookie
			var topicTax = getCookieValue("topicTax");
			if (topicTax != "") {
				topicTax = topicTax.split(":");
				// set clu
				o.clu = (topicTax.length > 0) ? topicTax[1] : "NONE";
				return topicTax[0];
			}
		}
		return "";
	})(this) || (function (o) {
		var gci = window.gci || "";
		var zn = window.zone || "";
		if (gci != "" || (zn == "TOPICS" && o.taxHelper.taxLevel() > 1) || (zn == "FORUM" && window.tax != "")) {
			// page is a CI page or Topics page that isn't topicsMain
			return window.tax;
		}
		return "";
	})(this) || getURLParamValue("parentTax") || (function (o) {
		var zn = window.zone || "";
		if ((zn == "AIOG" || zn == "ATE" || zn == "TIPS") && o.taxHelper.taxLevel() > 1) {
			// handles targeting we used to do by oid _tax
			return window.defaultTax;
		}
		return "";
	})(this) || "",
	this.clu   = this.clu || window.clu || getURLParamValue("parentClu") || "", // ad_id of a cluster
	this.adg   = getURLParamValue("adg") || window.adg || "", // channel override ad group
	this.ptile = 0,
	this.iid   = window.iid || getURLParamValue("parentIid") || "", // infocenter id
	this.iin   = getURLParamValue("parentIin") || (function () {
		if (typeof hbxMLC != "undefined" && hbxMLC.indexOf("infoCenter") != -1) {
			return hbxMLC.substring(1, hbxMLC.indexOf(";"));
		}
		return "";
	})(), // infocenter name
	this.rci   = window.rci || getURLParamValue("parentRci"), // resourcecenter id
	this.nl    = getURLParamValue("ad"), // newsletter ad id
	this.ses   = getURLParamValue("ses"), // persistent ad id
	this.track = getURLParamValue("track"), // track ad id
	this.ptag  = getURLParamValue("ptag"), // itkeptag
	this.tag   = getURLParamValue("tag"), // itketag
	this.blog  = getURLParamValue("blog") // itkeblog
	this.ord   = getURLParamValue("ordValue") || Math.round(Math.random() * 100000000),
	this.getDBString = function() {
	 //demandbase information
		var ad_db = null;
		var dbString = new String();
		if (typeof $.parseJSON != "undefined") { //because we don't know if all sites are using the same version of jQuery. :(
			ad_db = $.parseJSON(unescape(getCookieValue('co')));
			if (ad_db != null) {
				dbString += (ad_db.dbSic != "UNKNOWN") ? ";db=" + ad_db.dbSic : ""; //DB internal company identifier
				dbString += (ad_db.industryId != "UNKNOWN") ? ";dbi=" + ad_db.industryId : ""; //DB industry identifier
				dbString += (ad_db.empSizeId != "UNKNOWN") ? ";dbsz=" + ad_db.empSizeId : ""; // DB company-employee size identifier
				dbString += (ad_db.revenueId != "UNKNOWN") ? ";dbrv=" + ad_db.revenueId : ""; // DB company-revenue identifier
				dbString += (ad_db.f1000 != "UNKNOWN" && ad_db.f1000 != "false") ? ";dbf1=" + ad_db.f1000 : ""; // fortune 1000 company
				dbString += (ad_db.f2000 != "UNKNOWN" && ad_db.f2000 != "false") ? ";dbf2=" + ad_db.f2000 : ""; //fortune 2000 company
				dbString += (ad_db.type != "UNKNOWN" && ad_db.type != "none") ? ";dbtp=" + ad_db.type : ""; //DB company-type 
			}
		} 
		return dbString;
		},
	window.ad_dbString = this.getDBString(),
	this.getDartString = function (adi, sz, ptile, zone, env, host, ses) {
		var zone = zone || this.zone;
		var env = env || this.env;
		var ord = this.ord;
		var adString = new String();
		if (adi == "adi") ord += "?";
		adString = "http://ad.doubleclick.net/" + adi + "/" + this.acct + "/" + zone;
		adString += ";pos=0" + ";pth=" + this.pth + ";sz=" + sz + ";tile=" + ptile;
		adString += (dcopt == "ist") ? ";dcopt=ist" : "";
		adString += (this.kw != "") ? ";kw=" + this.kw : "";
		adString += (this.gci != "") ? ";gci=" + this.gci : "";
		adString += (this.tax != "") ? ";tax=" + this.tax : "";
		adString += (this.clu != "NONE") ? ";clu=" + this.clu : "";
		adString += (this.adg != "") ? ";adg=" + this.adg : "";
		adString += (this.iid != "") ? ";iid=" + this.iid : "";
		adString += (this.iin != "") ? ";iin=" + this.iin : "";
		adString += (this.rci != "") ? ";rci=" + this.rci : "";
		adString += (this.nl != "") ? ";nl=" + this.nl : "";
		adString += (ses != "" && this.ses != "") ? ";ses=" + (ses || this.ses) : "";
		adString += (this.track != "") ? ";track=" + this.track : "";
		adString += (this.ptag != "") ? ";ptag=" + this.ptag : "";
		adString += (this.tag != "") ? ";tag=" + this.tag : "";
		adString += (this.blog != "") ? ";blog=" + this.blog : "";
		adString += (env && typeof env == "string") ? ";env=" + env.toLowerCase() : "";
		adString += (host && typeof host == "string") ? ";host=" + host : "";
		adString += window.ad_dbString;
		adString += ";ord=" + ord;
		return adString;
	},
	this.getLeaderboard = function () {
		var ptile = ++this.ptile;
		dcopt = "";
		var name = "leaderboard_" + ptile;
		var sz = "728x90";
		var adjAds = window.dgADJads || "on";
		var src = this.getDartString("adj", sz, ptile);
		var leaderboardString = new String();
		if (adjAds == "on") {
			leaderboardString = '<scr';
			leaderboardString += 'ipt type="text/javascript" src="' + src + '"></scr';
			leaderboardString += 'ipt>';
		} else {
			src = "/vgn-ext-templating/html/leaderboard.html?" + escape(src);
			leaderboardString = '<iframe src="' + src + '" name="frame_' + name + '" width="728" height="90" border="0" marginheight="0" marginwidth="0" frameborder="0" scrolling="no"></iframe>';
		}
		if (adDebug) this.log.push("Ad: " + name + "<ul><li>" + src + "</li></ul>");
		return leaderboardString;
	},
	this.getVendorOffer = function () {
		var ptile = ++this.ptile;
		var name = "vendorOffer_" + ptile;
		var sz = "550x33,550x45";
		var adjAds = window.dgADJads || "on";
		var adType = (adjAds == "on") ? "adj" : "adi";
		var src = this.getDartString(adType, sz, ptile);
		var vendorOfferString = new String();
		if (adjAds == "on") {
			vendorOfferString = '<scr';
			vendorOfferString +='ipt type="text/javascript" src="' + src + '"></scr';
			vendorOfferString += 'ipt>';
		} else {
			vendorOfferString = '<iframe src="' + src + '" name="frame_' + name + '" width="550" height="45" border="0" marginheight="0" marginwidth="0" frameborder="0" scrolling="no"></iframe>';
		}
		if (adDebug) this.log.push("Ad: " + name + "<ul><li>" + src + "</li></ul>");
		return vendorOfferString;
	},
	this.getSkyscraper = function () {
		var ptile = ++this.ptile;
		dcopt = "";
		var name = "skyscraper_" + ptile;
		var sz = "160x600";
		var adjAds = window.dgADJads || "on";
		var adType = (adjAds == "on") ? "adj" : "adi";
		var src = this.getDartString(adType, sz, ptile);
		var skyscraperString = new String();
		if (adjAds == "on") {
			skyscraperString = '<scr';
			skyscraperString += 'ipt type="text/javascript" src="' + src + '"></scr';
			skyscraperString += 'ipt>';
		} else {
			skyscraperString = '<iframe src="' + src + '" name="frame_' + name + '" width="160" height="600" border="0" marginheight="0" marginwidth="0" frameborder="0" scrolling="no"></iframe>';
		}
		if (adDebug) this.log.push("Ad: " + name + "<ul><li>" + src + "</li></ul>");
		return skyscraperString;
	},
	this.getJsInterstitial = function () {
		var ptile = ++this.ptile;
		var name = "interstitial_" + ptile;
		var sz = "2x1";
		dcopt = dcopt_holder;
		// note: we also need to convert the adi parameter to adj in the dart string
		var interstitialAdSrc = this.getDartString("adj", sz, ptile);
		var interstitialAdScript = '<scr';
		interstitialAdScript += 'ipt type="text/javascript" id="' + name + '" src="' + interstitialAdSrc + '"><\/scr';
		interstitialAdScript += 'ipt>';
		if (adDebug) this.log.push("Ad: " + name + "<ul><li>" + interstitialAdSrc + "</li></ul>");
		dcopt = "";
		return interstitialAdScript;
	},
	this.getBigAd = function (baZone, baPos) {
	 	dcopt = "";
		var baZone = baZone || this.zone;
		var baPos = baPos || 0;
		var ptile = ++this.ptile;
		if (getURLParamValue("ordValue")) ptile = 8;
		var name = "bigAd_" + ptile;
		var sz = "300x250";
		var adjAds = window.dgADJads || "on";
		var adType = (adjAds == "on") ? "adj" : "adi";
		var src = this.getDartString(adType, sz, ptile, baZone);
		if (baPos != 0) src=src.replace('pos=0', 'pos='+baPos);
		var bigAdString = new String();
		if (adjAds == "on") {
			bigAdString = '<scr';
			bigAdString += 'ipt type="text/javascript" src="' + src + '"></scr';
			bigAdString += 'ipt>';
		} else {
			bigAdString = '<iframe src="' + src + '" name="frame_' + name + '" width="300" height="250" border="0" marginheight="0" marginwidth="0" frameborder="0" scrolling="no"></iframe>';
		}
		if (adDebug) this.log.push("Ad: " + name + " <ul><li>" + src + "</li></ul>");
		return bigAdString;
	},
	this.getCltAd = function (moExists) {
		deleteCookie("ugcCltHeight", "/", SITE_domain); // clear previous resize
		dcopt = "";
		var moExists = moExists || 0;
		var ptile = ++this.ptile;
		var name = "cltAd_" + ptile;
		var adjAds = window.dgADJads || "on";
		var cltAdString = new String();
		var sz = new String();
		var src = new String();
		sz = "300x600";
		src = this.getDartString("adj", sz, ptile);
		cltAdString = '<scr';
		cltAdString += 'ipt type="text/javascript" src="' + src + '"></scr';
		cltAdString += 'ipt>';
		if (adDebug) this.log.push("Ad: " + name + "<ul><li>" + src + "</li></ul>");
		return cltAdString;
	}
}
// This function controls functional leaderboard
// Do not rename! Called from inside Dart placement
function setLeaderBoard(clickCommand) {
	var positioned = ($("#leaderboard").css("position") == "absolute");
	$("#leaderboard").addClass("functional");
	$("#leaderboard div").append('<p id="leaderboardToggle" />');
	$("p#leaderboardToggle").toggle(function () {
		$(this).toggleClass("collapse").append("<img />").
		// in order to trigger the click command we append an image
		// and remove it each time the lb is opened
		find("img").load(function () {
			$(this).remove();
		}).css("display", "none").attr("src", clickCommand);
		if (positioned) {
			$("#loginBand").each(function () {
				if (!$(this).data("css")) {
					$(this).data("css", {
						mb: parseInt($(this).css("margin-bottom"))
					});
				}
				$(this).animate({
					marginBottom: ($(this).data("css").mb + 210) + "px"
				}, 1500);
			});
		}
		$("#leaderboard div, #leaderboard iframe").animate({height:"300px"}, 1500);
	}, function () {
		$(this).toggleClass("collapse");
		$("#leaderboard iframe, #leaderboard div").animate({height:"90px"}, 1500);
		if (positioned) {
			$("#loginBand").animate({
				marginBottom: $("#loginBand").data("css").mb + "px"
			}, 1500);
		}
	});
	// Leaderboard will auto expand once per user session based on cookie
	if (cookieExists("adv") == -1) {
		setSessionCookie("adv", 1);
		$("p#leaderboardToggle").click(); // trigger auto expand
	}
}
var dartUtil = new DartUtil();
(function () {
	// Call all ad placements in order for correct ptile
	$(document).ready(function ($) {
	 	var adjAds = (typeof window.dgADJads == "undefined") ? "on" : window.dgADJads;
	 	if (typeof window.dgADJads == "undefined") {var dgADJads = "on";}
		$("#leaderboard").each(function() {
			if (typeof leaderboardSwitch == "undefined" || leaderboardSwitch && adjAds != "off") {
				$(this).addClass("on").writeCapture().html(dartUtil.getLeaderboard());
			}
		});
		$("#leaderboard2").each(function() {
			if (typeof leaderboardSwitch == "undefined" || leaderboardSwitch && adjAds != "off") {
				$(this).addClass("on").writeCapture().html(dartUtil.getLeaderboard().replace(";pos=0",";pos=lower"));
			}
		});
		$("#vendorOffer").each(function () {
			if (typeof vendorofferSwitch == "undefined" || vendorofferSwitch) {
				$(this).addClass("on").writeCapture().html(dartUtil.getVendorOffer());
			}
		});
		$("#bigAd1").each(function () {
			if (typeof bigadSwitch == "undefined" || bigadSwitch) {
				$(this).addClass("on").writeCapture().html(dartUtil.getBigAd(zone, "top"));
			}
		});
		$("#cltAd").each(function () {
			if (typeof cltadSwitch == "undefined" || cltadSwitch) {
			 //pass existence of MO form to suppress certain ad types that interfere with MO form
				$(this).addClass("on").writeCapture().html(dartUtil.getCltAd($("#inlineRegistration").length));
			}
		});
		$("#bigAd2").each(function () {
			if (typeof bigadSwitch == "undefined" || bigadSwitch) {
				$(this).addClass("on").writeCapture().html(dartUtil.getBigAd("lowermu", "bottom"));
			}
		});
		$("#bigAd").each(function () {
			if (typeof bigadSwitch == "undefined" || bigadSwitch) {
				$(this).addClass("on").writeCapture().html(dartUtil.getBigAd(zone));
			}
		});
		$("#skyscraper").each(function () {
			if (typeof skyscraperSwitch == "undefined" || skyscraperSwitch) {
				$(this).addClass("on").writeCapture().html(dartUtil.getSkyscraper());
			}
		});
		$("#adjInterstitial").each(function() {
			if (dcopt_holder == "ist" && !(window.forMembersOnly || window.is404)) {
				$(this).writeCapture().html(dartUtil.getJsInterstitial());
			}
		});
		//this function manages col3 overflow for adj sites that may have expandable ads
		if (adjAds == "on") {
			$(".col3").css("overflow","visible");
		}
		//ad information
		if (adDebug) {
		 	if (typeof $.parseJSON == "undefined") dartUtil.log.push(".parseJSON is undefined");
		 	if (window.ad_dbString == "") dartUtil.log.push("empty demandbase, or UNKNOWN values");
		 	var adDebugString = '<ul>';
			for (var i = 0; i < dartUtil.log.length; i++) {
				adDebugString += '<li>' + dartUtil.log[i].replace("http://ad.doubleclick.net/adj/", "/") + '</li>';
			}
			adDebugString += '</ul>'
			$("body").prepend("<div id='adAlert'></div><div id='adOpen'></div>");
			$("#adAlert,#adOpen").css({"height" : "auto", "width" : "100%","background" : "black","color" : "white","line-height": "1","font-weight" : "normal","display" : "none"});
			//$("#adAlert").css({"min-height" : "120px"});$("#adOpen").css({"min-height" : "40px"});
			$("#adAlert").html("<span style='cursor: pointer;color:white;font-weight:bold'>ADVERTISING INFO</span><br><br>" + adDebugString + "<br><br><span id='adCloseClick'style='cursor: pointer;color:white;font-weight:bold'>CLICK TO CLOSE</span><br><br>");
			$("#adOpen").html("<span id='adOpenClick' style='cursor:pointer;color:white;font-weight:bold'>CLICK TO OPEN ADVERTISING INFO</span><br><br>");
			$("#adOpen").slideDown("slow");
			$("#adCloseClick").click(function () {$("#adAlert").hide();$("#adOpen").slideDown("slow");});
			$("#adOpenClick").click(function() {$("#adOpen").hide();$("#adAlert").slideDown("slow");});
		}
	});
})();
// Watermark
var watermark = (function () {
	var on = (typeof watermarkSwitch != "undefined" && watermarkSwitch);
	if (on) {
		var onlyHome = (typeof watermarkHomeOnly != "undefined" && watermarkHomeOnly);
		if (onlyHome && !window.isHome) {
			return false; // not the home page so exit
		}
		var url = (typeof watermarkURL == "undefined") ? "" : watermarkURL;
		var track = (typeof watermarkTrackingImageURL == "undefined") ? "" : watermarkTrackingImageURL;
		if (url != "" && track != "") {
			$(document).ready(function ($) {
				if (watermark) {
					$(document.body).
					css("background-image", "url(" + url + ")").
					append('<img src="' + track + '" class="track" />');
				}
			});
		}
	}
	return on;
})();
//Used in embedded CLT ads
function cltSubmitForm (form) {
 	var errMsgs = [];
 	var newsletter_count = 0;
	if (typeof form.newsletters.length == "undefined") {
		// only 1 newsletter in widget
		if(form.newsletters.checked) {
			newsletter_count++;
		}		
	} else {
		for (i=0;i < form.newsletters.length; i++) {
			if(form.newsletters[i].checked) {
				newsletter_count++;
			}
		}	
	}
	if (newsletter_count == 0) {
		errMsgs.push("No newsletters have been selected.");
	}
	// EMAIL ADDRESS
	if (typeof form.email != "undefined") {
		if (form.email.value == '') {
			errMsgs.push("Please enter an Email address.");
			form.email.focus();
		} else {
			emailStatus = checkEmail(form.email.value);
			if (emailStatus != 'good') {
				errMsgs.push(emailStatus);
				form.email.focus();
			}
		}
	
	}
	// show errors or submit form
	if (errMsgs.length > 0) {
		alert(errMsgs.join("\n"));
	} else {
		form.submit();
		// clear input entries
		form.target = "_top";
		form.email.value = "";	
		return true;
	}
	return false;
}
$(document).ready(function ($) {
	var prepop = getCookieValue("WebXuser") || "Your E-mail Address";
	$("input:text[name='email']").val(prepop).focus(function () {
		if ($(this).val() == "Your E-mail Address") {
			$(this).val("");
		}
	});

	$("#emailUpdatesForm,#cltAdForm").submit(function () {
		var errMsgs = [];
		// check newsletters selected
		if ($("input:checked[name='newsletters']", this).length == 0) {
			errMsgs.push("No newsletters have been selected.");
		}
		// check e-mail
		var field = $("input:text[name='email']", this); 
		var addr = field.val();
		if (/\s+|Your E-mail Address/.test(addr)) {
			errMsgs.push("Please enter an Email address.");
			field.focus();
		} else {
			var status = checkEmail(addr);
			if (status != "good") {
				errMsgs.push(status);
				field.focus();
			}
		}
		if (errMsgs.length > 0) {
			alert(errMsgs.join("\n"));
		} else {
			this.target = "_top";
			this.submit();
			return true;
		}
		return false;
	});
	$('#networkSiteWhatisSearch').attr('action', 'http://whatis.techtarget.com/wsearchResults/0,,sid9,00.html');
});

// Util methods
function getURLParamValue(param) {
    var paramValue = param.toLowerCase() + "=";
    var searchValue = window.location.search.toLowerCase();
    var searchValueParam = "";
    if (searchValue.indexOf(paramValue) != -1) {
        searchValueParam = window.location.search.substring(searchValue.indexOf(paramValue), searchValue.length);
        if (searchValueParam.indexOf("&") != -1) {
            searchValueParam = searchValueParam.substring(0, searchValueParam.indexOf("&"));
        }
    }
    searchValueParam = searchValueParam.substring(param.length + 1, searchValueParam.length);
    return searchValueParam;
}
function cookieExists(name) {return document.cookie.indexOf(name + "=")}
function getCookieValue(name) {
	var cookie = document.cookie;
	var pos = cookie.indexOf(name + "=");
	if (pos != -1) {
		var start = pos + name.length + 1;
		var end = cookie.indexOf(";", start);
		if (end == -1) end = cookie.length;
		var value = cookie.substring(start, end);
		return value;
	} else {
		return "";
	}
}
function deleteCookie(name, path, domain){
	if(cookieExists(name)){
   		setCookie(name, "", -30, path, domain);
	}
}
function checkEmail(emailStr) {
    var num_error = 0;
    var NewemailStr = "";
    var emailPat = /^(.+)@(.+)$/;
    var specialChars = "\\(\\)\\{\\}\/%?\\$\\*\\^\\|\\.=&`~#!<>@,;:\\\\\\\"\\.\\[\\]";
    var invalidchars = "\\(\\)\\{\\}\/%?\\$\\s\\^~#!&`\\*\\|=@<>,;:\\\\\\\"\\[\\]'";
    var validChars = "[^\\s" + specialChars + "]";
    var validChars1 = "[^\\s" + invalidchars + "]";
    var quotedUser = /(\"[^\"]*\"\')/;
    var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
    var atom = validChars + "+";
    var atom1 = validChars1 + "+";
    var word = "(" + atom + "|" + quotedUser + ")";
    var word1 = "(" + atom1 + "|" + quotedUser + ")";
    var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
    var domainPat = new RegExp("^" + word1 + "(" + word1 + ")*$");
    if (emailStr == "") {
        return "An email address is required";
    } else {
        var NewemailStr = emailStr;
    }
    var matchArray = NewemailStr.match(emailPat);
    if (matchArray == null) {
        return "E-mail address is not a valid format (check @ and .'s)";
    }
    var user = matchArray[1];
    var domain = matchArray[2];
    if (user.match(userPat) == null) {
        return "The username in the email address doesn't seem to be valid.";
    }
    var IPArray = domain.match(ipDomainPat);
    if (IPArray != null) {
        for (var i = 1; i <= 4; i++) {
            if (IPArray[i] > 255) {
                return "Destination IP address in the email address is invalid!";
            }
        }
        return true;
    }
    var domainArray = domain.match(domainPat);
    if (domainArray == null) {
        return "The domain name in the email address doesn't seem to be valid.";
    }
    if (domain.length > 0) {
        if (domain.charAt(0) == ".") {
            return "The domain name in the email address doesn't seem to be valid.";
        } else if (domain.charAt(domain.length - 1) == ".") {
            return "The domain name in the email address doesn't seem to be valid.";
        } else {
            var errors = 0;
            for (var k = 1; k < domain.length; k++) {
                if (domain.charAt(k) == ".") {
                    errors++;
                }
                if (domain.charAt(k) == "." && domain.charAt(k + 1) == ".") {
                    errors = errors + 5;
                    k = domain.length;
                }
            }
            if (errors > 4) {
                return "The domain name in the email address doesn't seem to be valid.";
            }
        }
    }
    var atomPat = new RegExp(atom, "g");
    var domArr = domain.match(atomPat);
    var len = domArr.length;
    if (domArr[domArr.length - 1].length < 2) {
        return "The email address must end in a valid domain.";
    }
    if (len < 2) {
        return "This email address is missing a hostname!";
    }
    return "good";
}
function validateEmail(emailAddr) {
    var emailAlert = checkEmail(emailAddr);
    if (emailAlert == "good") {
        return true;
    } else {
        alert(emailAlert);
        return false;
    }
}

