	ie = document.all;
	w3 = document.getElementById;
	moz =(w3&&!ie)? true:false;
	mac=(navigator.userAgent.toLowerCase().indexOf('mac'))!=-1;
	macIE=(ie&&mac);
	
	EMPTY_FIELD_ERROR="Required field";
	
	/*form handler */
rex=new Array();
	rex['phone#']=/^\+?[0-9 -.]+$/;
	rex['pass']=/^.....*$/;
	rex['name']=/^[A-Za-z -\.]+$/;
	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])?$/;
	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 updateHiddenElement(name,newName,value)
	{
		//alert(name);
		document.forms[0].elements[name].value=value;
		document.forms[0].elements[name].name=newName;
	}
	submitID="";
	parameters="";
	function _validate(submitElement){
		submitElement.id=submitElement.name; /* new */
		submitID=submitElement.id;
		prefix=(submitElement.name.split("~"))[0];
		fme =document.forms[0].elements;
		formValidity =true; radioID=null; skipElement=new Array()
		for(i=0;i<fme.length;i++)
		{	fme[i].id=fme[i].name; /* new */
			if (skipElement[fme[i].id])
				continue;
			if (!fme[i].name||fme[i].name.indexOf(prefix)==-1)
				continue;
			
			nd=document.getElementById(fme[i].id)
			errNodeId=fme[i].id+"err"; validity=true;
			required=(ie)?nd.required:nd.getAttribute('required')
			if (required&&required.indexOf("(")!="-1"){
				required=eval(required);
				alert(required)
			}
			if(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);
						if(fme[i].value.length==0)
							error = EMPTY_FIELD_ERROR;
					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=="~~ERR")
							validity=false;
					break;
				}
				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";
			
			//updateHiddenElement("_action","_action",prefix);
			parameters = (ie)? sn.parameters : sn.getAttribute('parameters');
			al="";
			if(parameters)
			{	
				params=parameters.split(",");
				if(params.length){
					for(i=0;i<params.length;i++)
					{
						keyval=params[i].split("=>");
						updateHiddenElement("param"+i,prefix+"~"+keyval[0],keyval[1]);
						al +=keyval[0]+"="+keyval[1]+"\n";
					}
				}
			}
			lst=new Array();
			for(i=0;i<document.forms[0].elements.length;i++)
			{
				if(!document.forms[0].elements[i].name||document.forms[0].elements[i].name.indexOf(prefix)==-1)
				{
					if(document.forms[0].elements[i].name)
					lst[lst.length]=document.forms[0].elements[i].id;
				}
				else
				{
					document.forms[0].elements[i].name =
					document.forms[0].elements[i].name.replace(prefix+"~","");
				}
			}
			for (i=0;i<lst.length;i++){
			
				rmel=document.getElementById(lst[i]);
				if(ie)rmel.disabled=true
				else rmel.setAttribute("disabled","true");
			}
			actionURL = (ie) ? sn.script : sn.getAttribute('script');
			actionType = (ie) ? sn.procedure : sn.getAttribute('procedure');
			// mod aug 9, 2004 :
			isMultiPart = (ie) ? sn.multipart : sn.getAttribute('multipart');
			
			if(actionURL.indexOf("?")==-1) /* new */
				actionURL+="?";
			actionURL+="&action="+actionType;
			// mod aug 9,2004 :
			if (isMultiPart=="true")
				document.forms[0].encoding = "multipart/form-data";
			document.forms[0].action=actionURL;
			formReturnValue=true;
		}
		return formReturnValue
	}