var subscribe = {

	'settings': {
		'errorMsg': '<p class="errorMessage" style="width: 250px;">You have entered an invalid name or e-mail address, or your [Confirm E-mail] address does not match. Please check your information and re-submit.</p>'
	},

	init: function() {
		if (!document.getElementById || !document.getElementsByName) {
			return;
		}
		subscribe.addHTML();
		events.addEvent(document.getElementById("submit"), "click", subscribe.validate, false);
	},
	
	addHTML: function() {
		document.getElementById("confirmEmail").innerHTML = '<span class="required">*</span> Confirm E-mail:';
		document.getElementById("confirmEmailField").innerHTML = '<input type="text" name="email2" />';
		
		var url = window.location.href;
		var nameValue = strings.getParam(url, "name");
		if (nameValue) {
			document.getElementById("subscriberName").value = unescape(nameValue);
		}

		var emailValue = strings.getParam(url, "email");
		if (emailValue) {
			document.getElementsByName("email")[0].value = emailValue;
			document.getElementsByName("email2")[0].value = emailValue;
		}

		var ntValue = strings.getParam(url, "nt");
		if (ntValue && ntValue.toLowerCase() != "html") {
			document.getElementById("text").checked = true;
		}

	},
	
	validate: function(e) {
	
		var hasName = subscribe.checkName(document.getElementById("subscriberName").value);
		var isValid = subscribe.checkEmailPattern(document.getElementsByName("email")[0].value);
		
		var emailStr1 = document.getElementsByName("email")[0].value;
		var emailStr2 = document.getElementsByName("email2")[0].value;
		var isSame = subscribe.checkEmailIsSame(emailStr1, emailStr2);
		
		if (!hasName || !isValid || !isSame) {
			document.getElementById("error").innerHTML = subscribe["settings"]["errorMsg"];
			events.haltPropogation(e);
			return;
		} else {
			var redirectEl = document.getElementsByName("redirection")[0];
			var emailEl = document.getElementsByName("email")[0]
			var newRedirectURL = redirectEl.value + "&email=" + emailEl.value;
			redirectEl.value = newRedirectURL;
		}
	},
	
	checkName: function(nameStr) {
		var hasName = false
		if (nameStr != "") {
			hasName = true;
		}
		return hasName;
	},
	
	checkEmailIsSame: function(emailStr1, emailStr2) {
		var isSame = false;
		if (emailStr1 == emailStr2) {
			isSame = true;
		}
		return isSame;  
	},
	
	checkEmailPattern: function(emailStr) {
		var emailPat = /^(.+)@(.+)$/;
		var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
		var validChars = "\[^\\s" + specialChars + "\]";
		var quotedUser = "(\"[^\"]*\")";
		var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
		var atom = validChars + '+';
		var word="(" + atom + "|" + quotedUser + ")";
		var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
		var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
		var matchArray = emailStr.match(emailPat);
		
		if (matchArray == null) {
			// alert("Email address seems incorrect (check @ and .'s)");
			return false;
		}
		var user = matchArray[1];
		var domain = matchArray[2];
		if (user.match(userPat) == null) {
			// alert("The username doesn't seem to be valid.");
			return false;
		}
		var IPArray = domain.match(ipDomainPat);
		if (IPArray != null) {
			for (var i=1; i<=4; i++) {
				if (IPArray[i] > 255) {
					// alert("Destination IP address is invalid!");
					return false;
				}
			}
			return true;
		}
		var domainArray=domain.match(domainPat);
		if (domainArray==null) {
			// alert("The domain name doesn't seem to be valid.");
		    	return false;
		}
		var atomPat = new RegExp(atom,"g");
		var domArr = domain.match(atomPat);
		var len = domArr.length;
		if ((domArr[domArr.length-1] != "info") &&
			(domArr[domArr.length-1] != "name") &&
			(domArr[domArr.length-1] != "arpa") &&
			(domArr[domArr.length-1] != "coop") &&
			(domArr[domArr.length-1] != "aero")) {
			if (domArr[domArr.length - 1].length < 2 || 
			domArr[domArr.length -1 ].length > 3) {
				// alert("The address must end in a three-letter domain, or two letter country.");
				return false;
			}
		}
		if (len < 2) {
		   var errStr = "This address is missing a hostname!";
		   // alert(errStr);
		   return false;
		}
		return true;
	}

}

