		//validate_form
		//text_limit
		//email_mask
		//email_letter_mask
		//name_mask
		//letter_spaces_mask
		//letter_number_mask
		//filename_mask
		//file_mask (left half of file name)
		//text_mask (allows quotes ' ", and dashes -)
		//zip_mask
		//phone_mask
		//date_mask
		//url_mask
		//check_extension
		//copy_data
		//hide_class
		//unhide_class
		//restore_class
		//alert_class
		//table_ruler
		//field_match
		
		
		function validate_form(t)
		//if any nameClasses contain "alert", do not submit the form.
		{var alert_message ="";
		for (i=0; i<t.length;i++){ 
		    if((t[i].id.match(/_reqvar$/) != null) && (t[i].value.length == 0))
			{ t[i].className = t[i].className + '_alert';}
		    if(t[i].className.match(/_alert$/) != null)
			{ alert_message = alert_message + "\n" + t[i].id;}
			if((t[i].className.match(/_alert$/) != null))
			{restore_class(t[i]); t[i].value="";}
		}
		if(alert_message != "")
		{alert_message = alert_message.replace(/_reqvar/gi,' ');
		alert_message = alert_message.replace(/_/gi,' ');
		alert_message = 'Please correct the following fields: ' + alert_message
		alert(alert_message);
		return false;
		} else {
		//display the wait_div
		unhide_class(document.getElementById("wait_div"));
		//disble submit button, submit the form
		for (i=0; i<t.length;i++){ 
			if(t[i].type.toLowerCase()=="submit")
			{ t[i].disabled=true;}
		}
		t.submit();
		return true;
		}}
		
		function text_limit(t, maxlimit) {
		if (t.value.length > maxlimit){ 
		t.value = t.value.substring(0, maxlimit);
		alert('You have exceeded the size limit of ' + maxlimit + ' for this entry field.');
		}}

		function email_mask(t) 
		{var patt1 = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z]{2,6}$/;
		//eliminate illegal characters
		if (t.value.match(/[^A-Za-z0-9\.@-]+/gi))
		t.value = t.value.replace(/[^A-Za-z0-9\.\_@-]+/gi,'');
		var str = t.value;		
		if (str.match(patt1))
		{	
		restore_class(t);
		return true;
		} else {
		alert_class(t);
		return false;
		}}
		
		function email_letter_mask(t) 
		{//eliminate illegal characters
		t.value = t.value.replace(/[\%*\`\$\^\&\)\(#\'\"\+\=\>\<\]\[\}\{]/gi,'');
		t.value = t.value.replace(/\s*/gi,'');
		var str = t.value;
		return true;
		}
		
		function name_mask(t)
		{var patt1 = /^\w+$/;
		//eliminate illegal characters
		if (t.value.match(/[\W\d]/gi))
		{ t.value = t.value.replace(/[\W\d]/gi,'');
		  t.value = t.value.replace(/[\s*]/gi,' ');
		}
		var str = t.value;		
		if (str.match(patt1))
		{	
		restore_class(t);
		return true;
		} else {
		alert_class(t);
		return false;
		}}

		function letter_spaces_mask(t)
		{var patt1 = /\w+/gi;
		//eliminate illegal characters
		t.value = t.value.replace(/\'/gi,'');
		t.value = t.value.replace(/[\_*\**\&*\W*]/gi,' ');
		t.value = t.value.replace(/\s{2,}/gi,' ');
		t.value = t.value.replace(/\s$/i,'');
		var str = t.value;		
		if (str.match(patt1))
		{	
		restore_class(t);
		return true;
		} else {
		alert_class(t);
		return false;
		}}

		function letter_number_mask(t)
		{var patt1 = /\w/gi;
		//eliminate illegal characters
		t.value = t.value.replace(/[\_*\**\&*\W*]/gi,' ');
		t.value = t.value.replace(/\s*/gi,'');
		var str = t.value;		
		if (str.match(patt1))
		{	
		restore_class(t);
		return true;
		} else {
		alert_class(t);
		return false;
		}}
		
		function filename_mask(t)
		{var patt1 = /(\w*\s*\W*\d*)\.\w+/gi;
		//eliminate illegal characters
		t.value = t.value.replace(/[\!\%*\`\$\^\&\)\(#\'\"\+\=\-\>\<\]\[\}\{]/gi,'');
		t.value = t.value.replace(/\s*/gi,'');
		var str = t.value;		
		if (str.match(patt1))
		{	
		restore_class(t);
		return true;
		} else {
		alert_class(t);
		return false;
		}}
		
		//first half of potential filename
		function file_mask(t)
		{var patt1 = /(\w*\s*\W*\d*)/gi;
		//eliminate illegal characters
		t.value = t.value.replace(/[\!\%*\`\$\^\&\)\(#\'\"\+\=\-\>\<\]\[\}\{]/gi,'');
		//t.value = t.value.replace(/\s*/gi,'_');
		var str = t.value;		
		if (str.match(patt1))
		{	
		restore_class(t);
		return true;
		} else {
		alert_class(t);
		return false;
		}}
		
		//allows quotes
		function text_mask(t)
		{var patt1 = /\w+\s*\W*/gi;
		//eliminate illegal characters
		if (t.value.match(/[\%\*\`\$\^\&\)\(#\+\=\>\<\]\[\}\{]/gi))
		t.value = t.value.replace(/[\%\*\`\$\^\&\)\(#\+\=\>\<\]\[\}\{]/gi,'');
		var str = t.value;		
		if (str.match(patt1))
		{	
		restore_class(t);
		return true;
		} else {
		alert_class(t);
		return false;
		}}
		
		function number_mask(t)
		{var patt1 = /^\d+$/;
		//eliminate illegal characters
		if (t.value.match(/[\D]/gi))
		t.value = t.value.replace(/[\D]/gi,'');
		var str = t.value;		
		if (str.match(patt1))
		{	
		restore_class(t);
		return true;
		} else {
		alert_class(t);
		return false;
		}}
		
		function zip_mask(t)
		{var patt1 = /(\d{5}).*(\d{4})/;
		var patt2 = /^(\d{5})-(\d{4})$/;
		var patt3 = /(\d{5})/;
		var str = t.value;
		var result;
		//eliminate illegal characters
		if (t.value.match(/[^\d]/gi))
		t.value = t.value.replace(/[^\d]/gi,'');		
		if (!str.match(patt2))
		{result = str.match(patt1);
		if (result!= null)
		{str = result[1] + '-' + result[2];
		t.value = str;
		}else{
		result = str.match(patt3);
		if (result!= null)
		{str = result[1];
		t.value = str;
		}else{
		alert_class(t);
		return false;
		}}}}

		function phone_mask(t)
		{var patt1 = /(\d{3}).*(\d{3}).*(\d{4})/;
		var patt2 = /^\((\d{3})\).(\d{3})-(\d{4})$/;
		var str = t.value;
		var result;
		//eliminate illegal characters
		if (t.value.match(/[^\d]/gi))
		t.value = t.value.replace(/[^\d]/gi,'');
		str = t.value;
		if (!str.match(patt2))
		{result = str.match(patt1);
		if (result!= null)
		{str = '(' + result[1] + ') ' + result[2] + '-' + result[3];
		t.value = str;
		}else{
		alert_class(t);
		return false;
		}}}
		
		function date_mask(t)
		{var patt1 = /(1[012]|[1-9]|0[1-9]).*([12][0-9]|3[01]|0[1-9]).*((19|20)\d{2})/;
		var patt2 = /^\((1[012]|[1-9]|0[1-9])\).([12][0-9]|3[01]|0[1-9])-((19|20)\d{2})$/;
		var str = t.value;
		var result;
		//eliminate illegal characters
		str = str.replace(/\'*\"*\s*/gi,'');
		str = str.replace(/[^\d]/gi,'');
		if (!str.match(patt2))
		{result = str.match(patt1);
		if (result!= null)
		{
		if (!result[1].match(/\d\d/)){ result[1]='0'+result[1];}
		if (!result[2].match(/\d\d/)) { result[2]='0'+result[2];}
		str = result[1] + '/' + result[2] + '/' + result[3];
		t.value = str;
		}else{
		alert_class(t);
		return false;
		}}}
		
		function url_mask(t)
		{var patt1 = /(^http:\/\/)/gi
		//eliminate illegal characters
		t.value = t.value.replace(/\'*\"*\s*/gi,'');
		if (t.value.length > 150)
		alert("too long");
		var str = t.value;		
		if (str.match(patt1))
		{	
		restore_class(t);
		return true;
		} else {
		alert_class(t);
		return false;
		}}

		function check_extension(t){
		a=t.value.match(/[\w\W]{4}$/);
		if (a==".htm" | a=="html" | a==".jpg" | a=="jpeg" | a==".mp3")
		{t.form.file_extension.value=a;
		 restore_class(t);
		}else{
		alert_class(t);
		alert("extension not allowed");
		return false;
		}}
		
		function copy_data(from,to) 
		{ to.value = from.value; }
		

		/*  put into general use in the showfile.js file
		function hide_class(t)	{
		t.className = t.className.replace(/_hidden$/gi,'');
		t.className = t.className + '_hidden';
		}
		
		function unhide_class(t)
		{t.className = t.className.replace(/_hidden$/gi,'');}
		*/

		function restore_class(t)
		{t.className = t.className.replace(/_alert$/gi,'');}
		
		function alert_class(t)	{
		t.className = t.className.replace(/_alert$/gi,'');
		t.value = '';
		t.className = t.className + '_alert';
		}
		
		//table ruler js
		function table_ruler()
		{
		 if (document.getElementById && document.createTextNode)
		  {
		   var tables=document.getElementsByTagName('table');
		   for (var i=0;i<tables.length;i++)
		   {
		   //dont run script on quick look chart
		    if(tables[i].className != 'chart'){
		     var trs=tables[i].getElementsByTagName('tr');
		     for(var j=0;j<trs.length;j++)
		     {
		      if(trs[j].parentNode.nodeName=='TBODY' && trs[j].parentNode.nodeName!='TFOOT')
		       {
		       trs[j].onmouseover=function(){origClass=this.className;this.className='ruled';return false}
		       trs[j].onmouseout=function(){this.className=origClass;return false}
			   trs[j].onclick=function(){origClass='clicked';this.className='clicked';}
		     }
			}
		   }
		  }
		 }
		}
		
		window.onload=function(){table_ruler();}
		
		//css rules for table ruler display
		//tr.ruled {	background:#9cf; }
		//tr.clicked { background:#9cf; }
		
		//field_match
		function field_match(t,f)
		{var str = t.value;		
		if(!f){	
			f = t.id.replace(/[_dup$]+/gi,'');
			}
			f = document.getElementById(f).value;
			var patt2 = f;
			if (str.match(patt2) && str.length == f.length){
			restore_class(t);
			return true;		
			} else {
			alert_class(t);
			return false;
		}}
