//Start Form validation and stuff
setPrint=false;
window.onload=startAll
function startAll()
{	fs=document.forms;
	//Each From
	for(c=0;c<fs.length;c++)
	{	//form Submition
		if(fs[c].onsubmit==null)
		{	fs[c].onsubmit=validateSubmit;	}
		//Each Element
		for(e=0;e<fs[c].length;e++)
		{	//Auto Type
			if(fs[c][e].values!=null || fs[c][e].autotype!=null)
			{	if(fs[c][e].onkeyup==null)
				{	fs[c][e].onkeyup=autoTypeKeyUp;	}
			}//Mask
			if(fs[c][e].mask!=null)
			{	if(fs[c][e].onkeyup==null)
				{	fs[c][e].onkeyup=maskKeyUp;	}
			}//Radio Plus
			//AutoFocus
			if(fs[c][e].initalfocus)
			{	fs[c][e].focus();
			}
		}
	}
	//if Printing
	if(setPrint)
	{	//alert("Printing now");
		window.print();
		if(window.opener)
		{	//alert("would close now");
			window.close();
		}
	}
}

//Radio Plus
function radioPlusSetup(elm)
{	myIndex=0;
	g=eval("document."+elm.form.name+"."+elm.name+"");
	if(g)
	{	for(i=0;i<g.length;i++)
		{	if(g[i]==elm)
			{	myIndex=i;	}
			if(g[i].checked)
			{	g[i].className="radioUp";	}
			else
			{	g[i].className="radio";	}
		}
	}
	if(elm.title!="")
	{	span_name=""+elm.name+"_"+myIndex+""
		elm.outerHTML+="<span id='"+span_name+"' onclick='document."+elm.form.name+"."+elm.name+"["+myIndex+"].click();'>"+elm.title+"</span>";
		sp=eval("document.all."+span_name+"");
		if(sp)
		{	if(elm.checked)
			{	sp.className="radioUp";	}
			else
			{	sp.className="radio";	}
		}
	}
	
}
function radioPlus()
{	plusClick(event.srcElement);
}
function plusClick(elm)
{	var g=null;
	g=eval("document."+elm.form.name+"."+elm.name+"");
	if(g)
	{	for(i=0;i<g.length;i++)
		{	if(g[i].title!="")
			{	g2=eval("document.all."+g[i].name+"_"+i+"");	}
			if(g[i].checked)
			{	g[i].className="radioUp";
				if(g2)
				{	g2.className="radioUp";	}
			}
			else
			{	g[i].className="radio";
				if(g2)
				{	g2.className="radio";	}
			}
		}
	}
	
}
//Mask Functions
function maskKeyUp()
{	return(maskType(event.srcElement));
}
function maskType(elm)
{	mask=elm.mask;
	oval=elm.value;
	val=elm.value;
	coff=0;
	if(val!="" && mask!="" && event.keyCode>47)
	{	for(mc=0;mc<mask.length;mc++)
		{	if(val.charAt(mc)!=mask.charAt(mc) && mask.charAt(mc)!="*")
			{	val=val.substring(0,mc)+mask.charAt(mc)+val.substring(mc,val.length);
				if(mc<oval.length)
				{	coff++;	}
			}
			else if(mask.charAt(mc)=="*" && val.charAt(mc)=="")
			{	val=val.substring(0,mc)+" "+val.substring(mc,val.length);
			}
			if(val.length>mask.lenght)
			{	val=val.substring(0,mask.length);	}
			tr=elm.createTextRange();
			elm.value=val;
			tr.moveStart("character",oval.length+coff);
			tr.select();
		}
	}
	else
	{	window.status=""+event.keyCode+""	}
	return(true);
}
//Auto-Type Functions
function autoTypeKeyUp()
{	return(autoType(event.srcElement));
}
function autoType(elm)
{	list=","+elm.values+",";
	val=elm.value;
	
	if(val!="" && event.keyCode>47 && list!=",,")
	{	sind=list.toLowerCase().indexOf(","+val.toLowerCase())+1+val.length;
		
		if(sind>val.length)
		{	newVal=list.substring(sind-val.length,list.indexOf(',',sind));
			tr=elm.createTextRange();
			elm.value=newVal;
			tr.moveStart("character",val.length);
			tr.select();
		}
		else
		{	if(elm.autotype=="strict" || elm.autotype=="validate" || elm.autotype=="only")
			{	elm.value=val.substring(0,val.length-1);
				autoType(elm);
			}
		}
	}
	else
	{	window.status=""+event.keyCode+""	}
	return(true)
}
//Validation functions
function validate_email(elem)
{	return(elem.value.indexOf("@")>0 && elem.value.indexOf(".")<(elem.value.length-1) && elem.value.indexOf(".")>elem.value.indexOf("@")+1 && elem.value.length>4);	}
function validate_number(elem)
{	return(isNumber(elem.value));	}
function validate_zip(elem)
{	return(isNumber(elem.value) && elem.value.length==5);	}
function validate_text(elem)
{	return(!elem.value=="");	}
function validate_phone(elem)
{	return(isNumber(elem.value.replace("-","").replace("-","")));	}
function validate_money(elem)
{	return(isNumber(elem.value.replace(".","").replace(".","")));	}
function validate_phone2(elem)
{	return(isNumber(elem.value.replace(".","").replace(".","")));	}
function validate_ssn(elem)
{	return(isNumber(elem.value.replace("-","").replace("-","")));	}
function validate_date(elem)
{	return(isDate(elem.value.toLowerCase()));	}
function validate_time(elem)
{	return(isTime(elem.value.toLowerCase()));	}
function validate_datetime(elem)
{	result=true;
	dtval=elem.value.toLowerCase()
	dtvals=dtval.split(" ");
	if(dtvals.length!=2 && dtvals.length!=3)
	{	result=false;	}
	else
	{	if(!isDate(dtvals[0]))
		{	result=false;	}
		if(!isTime(dtvals[1]+" "+dtvals[2]))
		{	result=false;	}
	}
	return(result);
}

function isNumber(value)
{	mvalue=removeLeadingZero(value.toLowerCase());
	return((parseInt(""+mvalue+"") && ""+parseInt(""+mvalue+"")==""+mvalue) || value=="0");
}
function isDate(val)
{	result=true;
	count=0;
	cind=0;
	fc="/"
	splitCH=new Array("/","\\",".");
	for(i=0;i<splitCH.length;i++)
	{	if(val.indexOf(splitCH[i])>=0)
		{	fc=""+splitCH[i]+"";	}
	}
	vals=val.split(fc)
	for(i=0;i<vals.length;i++)
	{	if(i!=2)
		{	if(vals[i].length>2 || vals[i].length<1)
			{	result=false;	}
		}else
		{	if(vals[i].length!=2 && vals[i].length!=4)
			{	result=false;	}
		}
		if(!isNumber(vals[i]))
		{	result=false;	}
	}
	if(vals.length!=3)
	{	result=false;	}
	return(result);
}
function isTime(val)
{	result=true;
	count=0;
	cind=0;
	vs=val.split(" ");
	val=vs[0];
	if(vs[1]!="am" && vs[1]!="pm" && vs[1]!="")
	{	result=false;	}
	fc="/"
	splitCH=new Array(":",".");
	for(i=0;i<splitCH.length;i++)
	{	if(val.indexOf(splitCH[i])>=0)
		{	fc=""+splitCH[i]+"";	}
	}
	vals=val.split(fc)
	for(i=0;i<vals.length;i++)
	{	if(vals[i].length>2 || vals[i].length<1)
		{	result=false;	}
		if(!isNumber(vals[i]))
		{	result=false;	}
	}
	if(vals.length!=2 && vals.length!=3)
	{	result=false;	}
	return(result);
}
function removeLeadingZero(val)
{	while(val.indexOf("0")==0)
	{	val=val.substring(1,val.length);	}
	return(val);
}
//Form Validation
function validateSubmit()
{	return doSubmit(this);	}

function doSubmit(form)
{	err=new Err();
	for(eind=0;eind<form.length;eind++)
	{	e=form[eind];
		if(e.validate)
		{	validate(e,err);
		}
	}
	return(err.display())
}

function validate(formElement,errorObj)
{	goodVals="text, email, date, number, time, datetime, phone, phone2, ssn, zip , money";
	fe=formElement;
	name=fe.name;
	vt=""+fe.validate+""
	message=""+fe.message+""
	if(goodVals.indexOf(vt.toLowerCase())<0)
	{	vt="Text";	}
	if(!eval("validate_"+vt.toLowerCase()+"(fe)"))
	{	vv=1;
		req=(""+fe.required+"").toLowerCase()
		if(req=="no")
		{	vv=0;
			if(message=="undefined"){message=""+name+" Should to be a "+vt+"";}
		}
		else
		{	if(message=="undefined"){message=""+name+" needs to be a "+vt+"";}	}
		errorObj.add(message,vv,fe);
	}
}

//Error Handeling
function addErr(Msg)
{	addErr(Msg,1);	}
function addErr(Msg,level)
{	addErr(Msg,level,null);	}
function addErr(Msg,level,elm)
{	this.errMsg+=Msg+"\n";
	this.level=Math.max(this.level,level);
	if(elm!=null && this.thenFocus==null)
	{	this.thenFocus=elm;	}
}
function emptyErr()
{	this.errMsg="";	}
function getErr()
{	return(this.errMsg);	}
function dispErr()
{	if(this.level>=0)
	{	if(this.level<1)
		{	if(confirm(this.toString()+"\nWould you like to submit anyway?"))
			{	return(true);	}
			else
			{	if(this.thenFocus!=null)
				{	this.thenFocus.focus();	}
				return(false);
			}
		}
		else
		{	alert(this.toString());
			if(this.thenFocus!=null)
			{	this.thenFocus.focus();	}
			return(false);
		}
	}
	return(true);
}

function Err()
{	//methods
	this.add=addErr;
	this.empty=emptyErr;
	this.toString=getErr;
	this.display=dispErr;
	
	//members
	this.errMsg="";
	this.level=-1;
	this.thenFocus=null;
}

//Debug
function infoOn(obj)
{	out="";
	for(i in obj)
	{	out+=""+i+":"+obj[i]+"<br>\n"
	}
	return out;
}