/* thanks to wil eizlini */

	ie = document.all;
	w3 = document.getElementById;
	moz = (w3&&!ie) ? true : false;
	mac = (navigator.userAgent.toLowerCase().indexOf('mac'))!=-1;
	macIE = (ie&&mac);
	var rex = new Array();
	rex['phone#']=/^\(?\d{3}\)?(\s|-|)?\d{3}(\s|-|)\d{4}$/;
	rex['name']=/^\w+$/;
	rex['pass']=/^......*$/;
	rex['char*']=/..*/;
	rex['email']=/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]*@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
	rex['postal']=/^((\d{5}-\d{4})|(\d{5})|([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d[A-Za-z][\s-]?\d[A-Za-z]\d))$/;
	rex['time']=/^(0?[1-9]|1[012])\x20*(:[0-5]\d){0,2}(\x20*[aApP][mM])?$/;
	rex['prov']=/^[a-zA-Z][a-zA-Z]$/;
	rex['dig']=/^\d{1,}/;
	rex['cc']=/[0-9]{15,16}/;

	function makeRegex(reg_string) {
		if (rex[reg_string]) {
			return rex[reg_string];
		} else {
			return new RegExp(reg_string);
		}
	}

	function createErrorNode(errorMessage,fmElementNode,errNodeID,cssClass) {
		if (!document.getElementById(errNodeID)) {			
			err = document.createElement('div');
			err.id = errNodeID;
			err.className = cssClass;
			err.innerHTML = errorMessage;
			fmElementNode.parentNode.insertBefore(err,fmElementNode);
		} else { 
			document.getElementById(errNodeID).innerHTML=errorMessage; 
			document.getElementById(errNodeID).style.display="block";
		}
	}

	function validate(submitElement,theForm) {
		fme = document.getElementById(theForm).elements;
		formValidity = true;
		radioID = null;
		skipElement = new Array();
		for ( i=0 ; i < fme.length ; i++ ) {	
			if (skipElement[fme[i].id])
				continue;
			nd = document.getElementById(fme[i].id);
			errNodeId = fme[i].id+"err";
			validity = true;
			if ( (ie&&nd.required) || (moz&&nd.getAttribute('required')) ) {
				regex = (ie) ? makeRegex(nd.check) : makeRegex(nd.getAttribute('check'));
				error = (ie) ? nd.error : nd.getAttribute('error');
				switch (fme[i].type) {
					case 'text': case 'password': case 'textarea':
						validity = regex.test(fme[i].value);
					break;
					case 'radio':
						validity = false;
						for ( j=0 ; j < fme[fme[i].id].length ; j++ )
							if (fme[fme[i].id][j].checked)
								validity = true;
						skipElement[fme[i].id]=true;
					break;
					case 'select-one': case 'select-multiple': case 'select':
						if (fme[i].selectedIndex<0||fme[i].options[fme[i].selectedIndex].value=="")
							validity = false;
					break;
					if (error==''||error==null||!error) {
						error = errors[nd.check];
					}
				}
				if(theForm=='membersignup' && fme[i].id=='confirm_password' && fme[i].value!=document.getElementById('password').value) {
					error = 'The passwords do not match';
					validity = false;
				}
				if (!validity) {
					formValidity = false;
					createErrorNode(error,nd,errNodeId,"fieldError")
				} else if (document.getElementById(errNodeId))
						document.getElementById(errNodeId).style.display="none";
			}
		}
		formErrID = submitElement.id+"err";
		sn = document.getElementById(submitElement.id);
		if (!formValidity) {
			error = (ie) ? sn.error : sn.getAttribute('error');
			createErrorNode(error,sn,formErrID,"formError");
			formReturnValue=false;
		} else {
			if (document.getElementById(formErrID))
				document.getElementById(formErrID).style.display="none";
				formReturnValue=true;
		}
		return formReturnValue
	}

