function emailCheck (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;
}


function UPTvalidateform(thisform) {
//	return (!emailCheck(thisform.email.value));
	return true;
}




// Initialize globals
var page_init = function() {
	signupPanel.init();
	validate.init();
}
Event.observe(window,'load',page_init,false);





// COMPONENT:  signupPanel  *****************************
// ___ REQUIRES:  prototype.js (v.1.6), scriptaculous.js
// ......................................................
var VERBOSE = false;

var signupPanel = {
	init: function() {	
		if (window.document.body.id.match("white")) {
			var submitBtn = $A($$("#signup_submitBtn input"))[0];
			submitBtn.src = "/images/buttons/btn_sign_up_white.gif";
			submitBtn.style.visibility = "visible";
		}
		signupPanel.installListeners();
	},

	installListeners: function() {
		var panel = $('componentSignup');
		if (panel == undefined) return;

		var signupForm = $A($$('#componentSignup form'))[0];
		if (signupForm == undefined) return;

		/* prior to animation, disallow form submission, but save original data */
		/*
		signupForm.originalAction = signupForm.action;
		signupForm.originalOnSubmit = signupForm.onsubmit;
		signupForm.onsubmit = function() { return false; };
		signupForm.action = '';
      */

		//var clickable = $A($$('#componentSignup form','#componentSignup form fieldset input','#componentSignup form h5'));
		var clickable = $A($$('#componentSignup form,#componentSignup form fieldset input,#componentSignup form h5'));
		if (clickable.length == 0) return;

		for (var x=0; x<clickable.length; x++) {
			clickable[x].observe('click', signupPanel.eventClick);
			clickable[x].clickSet = clickable;
			clickable[x].formRef = signupForm;
/*			if (clickable[x].onfocus != null) {
				clickable[x].originalOnFocus = clickable[x].onfocus;
				clickable[x].onfocus = null;
			}*/
		}
		
      var nameField = $A($$('#componentSignup #signup_name'))[0];
		signupPanel.focusFieldValue(nameField);

		var emailField = $A($$('#componentSignup #signup_email'))[0];
		signupPanel.focusFieldValue(emailField);
		
		signupForm.preSubmissionEvent = signupPanel.eventSubmission;
	},
	
	focusFieldValue: function(field) {
		if (field != undefined) {
			if (field.value == "") {
				field.value = field.title;
			}
			field.originalOnFocus = signupPanel.focusField;
			Event.observe(field,'blur',signupPanel.blurField,false);
		}
   },
	
	eventClick: function(e) {
		var target = e.element();
		target.blur();
		var clickable = target.clickSet;
		for (var x=0; x<clickable.length; x++) {
			if (clickable[x].originalOnFocus != undefined) {
				clickable[x].onfocus = clickable[x].originalOnFocus;
			}
			if (!(clickable[x].type == "image" || clickable[x].type == "submit")) {
				clickable[x].stopObserving('click', signupPanel.eventClick);
			}
		}

		if (target.formRef.isDown == true) {
			target.isDown = false;
			if (target.formRef == undefined) return;
			//target.formRef.action = target.formRef.originalAction;
			// target.formRef.onsubmit = target.formRef.originalOnSubmit;
			//target.onclick = target.formRef.submit();

		} else {
			target.formRef.isDown = true;
			target.formRef.addClassName('active');

			if (!document.body.id.match("home")) {
				$('signup_submitBtn').hide();
				Effect.SlideDown('signup_submitBtn', {duration: 0.3,scaleFrom:30,scaleTo: 100});
			}

			setTimeout( function() {
				var isIE	= document.all;
				var isIE7	= isIE && window.XMLHttpRequest && window.ActiveXObject;
				if (isIE && !isIE7) {
					// IE 6 
					Effect.Appear('signup_form_email', {duration:0.8});
					Effect.BlindDown('signup_form_email', {duration:0.2});
				} else {
					Effect.Appear('signup_form_email', {duration:0.6});
					Effect.BlindDown('signup_form_email', {duration:0.6});
				}
			},170);
			
			Event.stop(e);
		}
	},
	
	focusField: function(e) {
		var target = signupPanel.getEventTarget(e);
		if (target.value != "" && target.value == target.title ) {
			target.value = "";
		}
	},

	blurField: function(e) {
		var target = signupPanel.getEventTarget(e);
		if (target.value == "") {
			target.value = target.title;
		}
	},

	eventSubmission: function(e) {
		// these lines cancel the html form submission.  comment them out to allow traditional submission
		// signupPanel.cancelLink(e);
		// signupPanel.cancelClickSafari();

		// PROCESS SUBMISSION: Either send via AJAX, or process to separate page.
		var formRef = this;
		var procUrl = "/signup/signup.php"; // change to use global path vars

		new Ajax.Request(procUrl,
			{
				method:'post',
				parameters: {val_1: formRef.name.value, email: formRef.email.value},
				onSuccess: function(transport){
					var response = transport.responseText || "no response text";
					if (VERBOSE) {
						alert("Success! \n\n" + response);
					}
				},
				onFailure: function(){
					if (VERBOSE) {
						alert('Something went wrong...');
					}
				}
			}
		);
	},
	getEventTarget:function(e){return window.event ? window.event.srcElement:e?e.target:null;},
	cancelClickSafari:function(){return false;},
	cancelLink:function(e){if (window.event){window.event.cancelBubble=true;window.event.returnValue=false;window.event.srcElement.blur();}if(e&&e.stopPropagation&&e.preventDefault){e.stopPropagation();e.preventDefault();e.target.blur();}}
};
// ********************************



// FORM VALIDATION ***************
var validationSet = {
	'email': {
		'regexp': /^.+?@.+?\..+?$/,
		'error': 'Please enter a valid email address.'
	}
};


var validate = {
	init: function() {
		validate.installListeners();
	},

	installListeners: function() {
		for (var i in validationSet) {
			if (document.getElementsByName(i)) {
				var formField = document.getElementsByName(i)[0];
				if (formField == undefined) continue;
				Event.observe(formField,'blur',validate.checkValid,false);
				if (!formField.form.validateSubmit) {
					Event.observe(formField.form,'submit',validate.checkValidSubmit,false);
					formField.form.onsubmit = validate.checkSubmit; // Safari
					formField.form.validateSubmit = true;
				}
			}
		}
	},

	checkValidSubmit: function(e) {
		var frm = validate.getEventTarget(e);
		if (!frm) return;
		var errList = [];
		for (var i=0; i<frm.elements.length; i++) {
			if (frm.elements[i].name && validationSet[frm.elements[i].name]) {
				var failedE = validate.handleValidity(frm.elements[i]);
				if (failedE) {
					$(frm.elements[i]).addClassName('fieldErr');
					var labels = document.getElementsByTagName('label');
					errList[errList.length] = validationSet[failedE.name]['error'];
					for (x in labels) {
						if (labels[x].htmlFor == frm.elements[i].name) {
							if (!labels[x].className) { labels[x].className = ''; }
							$(labels[x]).addClassName('labelErr');
						}
					}
				} else {
					$(frm.elements[i]).removeClassName('fieldErr');
					var labels = document.getElementsByTagName('label');
					for (x in labels) {
						if (labels[x].htmlFor == frm.elements[i].name)
							$(labels[x]).removeClassName('labelErr');
					}			
				}
			} /* ENDIF */
		} /* ENDFOR */

		var errContainer = document.getElementById('formErrors');
		if (errContainer != undefined) { frm.removeChild(errContainer); }

		if (errList.length > 0) {
			errContainer = document.createElement('div');
			errContainer.id = 'formErrors';
			
			var errMsgContainer = document.createElement('div')
			errMsgContainer.className = 'formErrMsg';
			var errMsg = document.createTextNode('Errors on the form:');
			errMsgContainer.appendChild(errMsg);
			errContainer.appendChild(errMsgContainer);
			
			var errListNode = document.createElement('ul');
			errListNode.className = 'standardList errList';
			for (var errNum=0; errNum<errList.length; errNum++) {
				var errListStr = document.createTextNode(errList[errNum]);
				var errListItem = document.createElement('li');
				errListItem.appendChild(errListStr);
				errListNode.appendChild(errListItem);
			}
			errContainer.appendChild(errListNode);

			frm.insertBefore(errContainer,frm.firstChild);
			
			frm.submitAllowed = false;
			validate.cancelLink(e);
		} else if (frm.preSubmissionEvent) {
			frm.preSubmissionEvent(e);
		} else {
			frm.submitAllowed = true;
		}
	},
	
	checkSubmit: function() {
		if (this.attachEvent) return true;
		return this.submitAllowed;
	},
	
	checkValid: function(e) {
		var target = validate.getEventTarget(e);
		if (!target) return;
		
		var failedE = validate.handleValidity(target);
		if (failedE) {
			target.className += ' fieldErr';
			var labels = document.getElementsByTagName('label');
			for (x in labels) {
				if (labels[x].htmlFor == target.name) {
					if (!labels[x].className) { labels[x].className = ''; }
					labels[x].className += ' labelErr';
				}
			}
		} else {
			target.className = target.className.replace(' fieldErr', '');
			var labels = document.getElementsByTagName('label');
			for (x in labels) {
				if (labels[x].htmlFor == target.name)
					labels[x].className = labels[x].className.replace('labelErr', '');
			}			
		}
	},
	
	handleValidity: function(field) {
		// if (!field.value) return null; /* ignore if note required */
		var re = validationSet[field.name]['regexp'];
		return (!field.value.match(re)) ? field : null;
	},

	getEventTarget:function(e){return window.event ? window.event.srcElement:e?e.target:null;},
	cancelClickSafari:function(){return false;},
	cancelLink:function(e){if (window.event){window.event.cancelBubble=true;window.event.returnValue=false;window.event.srcElement.blur();}if(e&&e.stopPropagation&&e.preventDefault){e.stopPropagation();e.preventDefault();e.target.blur();}}
};






// common functions *****************
var rbx_cmn = {
	get_ancestor_by_tag: function(obj, tag) {
		if (obj == document) return null;
		return (obj.tagName == tag) ? obj : rbx_cmn.get_ancestor_by_tag(obj.parentNode, tag);
	},
	get_ancestor_by_class: function(obj, target_class) {
		if (obj == document) return null;
		return (obj.className.match(target_class)) ? obj : rbx_cmn.get_ancestor_by_class(obj.parentNode, target_class);
	},
	get_inherited_font_size: function(obj) {
		if (obj == document) return -1;
		return ((obj.style.fontSize).length > 0) ? obj.style.fontSize : rbx_cmn.get_inherited_font_size(obj.parentNode);
	}
};


