window.onload = function() {
	// check dom
	if (!document.getElementById) { return; }
	setUpBehaviors();
	showCorrectType();
	showOther();
}

function setUpBehaviors() {
	var network = document.getElementById("network");
	var type = document.getElementById("type");
	var request_form = document.getElementById("request_form");
	if (network) {
		network.onclick = showOther;
		network.onkeypress = showOther;
	}
	if (type) {
		type.onclick = showCorrectType;
		type.onkeypress = showCorrectType;
	}
	if (request_form) {
		request_form.onsubmit = function() {
			return checkform(request_form) && checksubscribe();
		}
	}
}

function showCorrectType() {
	var type = document.getElementById("type");
	if (type) {
		for (var i = 1; i < type.options.length; i++) {
			if (type.options[i].value == type.options[type.selectedIndex].value) {
				document.getElementById("div_" + type.options[i].value).style.display = "block";
			}
			else {
				document.getElementById("div_" + type.options[i].value).style.display = "none";
			}
		}
	}
}

function showOther() {
	var network = document.getElementById("network");
	var other = document.getElementById("other");
	if (network && other) {
		if (network.options[network.selectedIndex].value == "Other") {
			other.style.visibility = "visible"
		}
		else {
			other.style.visibility = "hidden"
		}
	}
}

function checksubscribe() {
	var subscribe = document.getElementById("subscribe");
	var error = document.getElementById("errormsg");
	if (subscribe && !error) {
		if (subscribe.checked) {
			var email = document.getElementById("email").value;
			var first_name = document.getElementById("first_name").value;
			var zip_code = document.getElementById("zip_code").value;
			newWin = window.open("http://www.informz.net/twc_albany/profile.asp?email=" + email + "&personal_646=" + first_name + "&personal_650=" + zip_code, "Subscribe", "width=600,height=400,resizable=yes,scrollbars=yes");
			newWin.focus();
		}
	}
}
function checkform(of) {
	if(!document.getElementById || !document.createTextNode) { return; }
	if(!document.getElementById("required")) { return; }

	// Define error messages and split the required fields
	var errorID="errormsg";
	var errorClass="error"
	var errorText="Required";
	var errorMsg="Please enter or change the fields marked with '" + errorText + "'";
	var reqfields=document.getElementById("required").value.split(",");

	// if there is an old errormessage field, delete it
	if(document.getElementById(errorID)) {
		var em=document.getElementById(errorID);
		em.parentNode.removeChild(em);
	}
	// remove old images and classes from the required fields
	for(var i=0; i < reqfields.length; i++) {
		var f = document.getElementById(reqfields[i]);
		if(!f) { continue; }
		f.className = "";
	}
	// loop over required fields
	for(var i=0; i < reqfields.length; i++) {
		// check if required field is there
		var f=document.getElementById(reqfields[i]);
		if (!f) { continue; }
		// test if the required field has an error, 
		// according to its type
		switch(f.type.toLowerCase()) {
			case "text":
				if(f.value=="" && f.id!="email") { 
					f.focus();
					f.style.backgroundColor="red";
					cf_adderr(f); }
				else if(f.value!=""){
						f.style.backgroundColor="white";
					}
				if(f.id=="email" && !cf_isEmailAddr(f.value)) {
					f.focus();
					f.style.backgroundColor="red";
					cf_adderr(f); }
				else if(cf_isEmailAddr(f.value)){
						f.style.backgroundColor="white";
					}
				if(f.id=="zip_code" && !cf_isZip(f.value)) { 
					f.focus();
					f.style.backgroundColor="red";
					cf_adderr(f); }
				else if(cf_isZip(f.value)){
						f.style.backgroundColor="white";
					}

				if(f.id=="phone_number" && !cf_isPhone(f.value)) { 
					f.focus();
					f.style.backgroundColor="red";
					cf_adderr(f); }
				else if(cf_isPhone(f.value)){
						f.style.backgroundColor="white";
					}

				break;
			case "textarea":
				if (f.value=="") { 
					f.focus();
					f.style.backgroundColor="red";
					cf_adderr(f); }
				else if(f.value!=""){
						f.style.backgroundColor="white";
					}

				break;
			case "select-one":
				if (f.value=="") { 
					f.focus();
					f.style.backgroundColor="red";
					cf_adderr(f); }
				else if(f.value!=""){
						f.style.backgroundColor="white";
					}
				break;
			case "password":
				if (f.value=="") { cf_adderr(f); }
				break;
			case "checkbox":
				if (!f.checked) { cf_adderr(f); }
				break;
		}
	}
	return !document.getElementById(errorID);

	/************************
	*	Tool methods	*
	************************/
	function cf_adderr(o) {
		o.className = errorClass;
		// Check if there is no error message
		if(!document.getElementById(errorID)) {
		// create errormessage and insert before submit button
			var em = document.createElement("div");
			em.id = errorID;
			em.innerHTML = "Before resubmitting, fix the marked fields.";
			// find the submit button 
			for(var i=0; i < of.getElementsByTagName("input").length; i++) {
				if(/submit/i.test(of.getElementsByTagName("input")[i].type)) {
					var sb = of.getElementsByTagName("input")[i];
					break;
				}
			}
			if(sb) {
				sb.parentNode.insertBefore(em,sb);
			}	
		}
	}
	function cf_isEmailAddr(str) {
		return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
	}

	function cf_isZip(zip) {
		return zip.match(/^\d{5}$/);
	}

	function cf_isPhone(phone) {
		return phone.match(/^\d{3}-\d{3}-\d{4}$/);
	}
}
