function formUtils()
{
	this.rtformname = null;
	this.waitmsgcurrent = '';
	this.waitmsg = '';
	this.submitwaitmsg;
	this.checkRequired = function(obj)
	{
		if (!obj) 
		{
			alert(obj.name + ' is required for this function.');
			return false;
		}
		return true;
	}
	//@field = field object to autofill
	//@objectarray = array of objects to pull autofill values from
	//@property = property of object to get value
	//@force = force match
	this.autoFill = function(field, objectarray, property, force) 
	{
		var found = false;
		for (var i = 0; i < objectarray.length; i++) 
		{
			if (objectarray[i][property].toUpperCase().indexOf(field.value.toUpperCase()) == 0) 
			{
				found=true; 
				break;
			}
		}
		if (field.createTextRange) 
		{
			if (force && !found) 
			{
				field.value=field.value.substring(0,field.value.length-1); 
				return;
			}
			var cursorKeys ="8;46;37;38;39;40;33;34;35;36;45;";
			if (cursorKeys.indexOf(event.keyCode+";") == -1) 
			{
				var rangeStart = field.createTextRange();
				var oldText = rangeStart.text;
				var newText = found ? objectarray[i][property] : oldText;
				if (newText != field.value) 
				{
					field.value = newText;
					var rangeNew = field.createTextRange();
					rangeNew.moveStart('character', oldText.length) ;
					rangeNew.select();
				}
			}
		}
	}
	// generates cookie name for storing form preferences
	this.getCookieName = function(src)
	{
		var cookiename = escape(src.form.name + '_' + src.name);
		var id = src.id;
		if (id.length > 0) cookiename += '_' + id;
		// alert(cookiename);
		return cookiename;
	}
	// saves selected value
	this.saveDefault = function(src)
	{
		var cookiename = this.getCookieName(src);
		var savevalue = this.getValue(src);
		setCookie(cookiename,savevalue);
		//alert(cookiename + ',' + savevalue);  //@debug
	}
	// sets form values to saved defaults
	this.setDefaults = function(d, idsrc)
	{
		if (idsrc == null || idsrc.value > 0) return false;
		var cookiename = '';
		var objvalue = '';
		for (i = 0; i < d.elements.length; i++)
		{
			cookiename = this.getCookieName(d.elements[i]);
			objvalue = getCookie(cookiename);
			//alert(cookiename + ',' + objvalue);  //@debug
			if (objvalue != null && objvalue.length > 0)
			{
				this.setValue(d.elements[i], objvalue);
			}
		}
	}
	// savea defaults
	this.saveDefaults = function(srcform,fieldlistarray)
	{
		for (i = 0; i < fieldlistarray.length; i++)
		{
			if (srcform[fieldlistarray[i]]) 
				this.saveDefault(srcform[fieldlistarray[i]]);
		}
	}
	// sets form values to saved defaults
	this.clearDefaults = function(srcform)
	{
		for (i = 0; i < srcform.elements.length; i++)
		{
			// alert(srcform.elements[i].name);
			if (srcform.elements[i].form)
			{
				var cookiename = this.getCookieName(srcform.elements[i]);
				delCookie(cookiename);
			}
		}
	}
	// gets single object value
	this.getSingleValue = function(obj,def_val) 
	{
		if (!this.checkRequired(utils)) return;
		switch(obj.type)
		{
			case 'radio': case 'checkbox': return(((def_val)?obj.defaultChecked:obj.checked)?obj.value:null);
			case 'text': case 'hidden': case 'textarea': return(def_val)?obj.defaultValue:obj.value;
			case 'password': return((def_val)?null:obj.value);
			case 'select-one':
				if (obj.options==null) return null;
				if(def_val)
				{
					var o=obj.options;
					for(var i=0;i<o.length;i++){if(o[i].defaultSelected){return o[i].value;}}
					return o[0].value;
				}
				if (obj.selectedIndex<0) return null;
				return(obj.options.length>0)?obj.options[obj.selectedIndex].value:null;
			case 'select-multiple': 
				if (obj.options==null) { return null; }
				var values=new Array();
				for(var i=0;i<obj.options.length;i++) {
					if((def_val&&obj.options[i].defaultSelected)||(!def_val&&obj.options[i].selected)) {
						values[values.length]=obj.options[i].value;
						}
					}
				return (values.length==0)?null:utils.arrayToBoundedString(values);
		}
		return null;
	}
	// sets single object to value
	this.setSingleValue = function(obj, value) 
	{
		if (!this.checkRequired(utils)) return;
		switch(obj.type)
		{
			case 'radio': case 'checkbox': if(obj.value==value){obj.checked=true;return true;}else{obj.checked=false;return false;}
			case 'text': case 'hidden': case 'textarea': case 'password': obj.value=value;return true;
			case 'select-one': 
				var o=obj.options;
				for(var i=0;i<o.length;i++)
				{
					if(o[i].value==value){o[i].selected=true;}
					else{o[i].selected=false;}
				}
				return true;
			case 'select-multiple': 
				var o=obj.options;
				for(var i=0;i<o.length;i++)
				{
					var boundedvalue = utils.DELIM + o[i].value + utils.DELIM;
					if(value.indexOf(boundedvalue)>-1){o[i].selected=true;}
					else{o[i].selected=false;}
				}
				return true;
		}
		return false;
	}
	// gets value of an array of objects
	this.getValue = function(obj) 
	{
		if (!this.checkRequired(utils)) return;
		var def_value=(arguments.length>1)?arguments[1]:false;
		if (utils.isArray(obj) && (typeof(obj.type)=="undefined")) 
		{
			var values=new Array();
			for(var i=0;i<obj.length;i++)
			{
				var v = this.getSingleValue(obj[i],def_value);
				if(v != null){values[values.length]=v;}
			}
			return utils.arrayToString(values);
		}
		return this.getSingleValue(obj,def_value);
	}
	// sets value of an array of objects
	this.setValue = function(obj,value) 
	{
		if(utils.isArray(obj)&&(typeof(obj.type)=="undefined"))
		{
			for(var i=0; i<obj.length; i++){ this.setSingleValue(obj[i],value); }
		}
		else
		{
			this.setSingleValue(obj,value);
		}
	}
	this.parseNameEmail = function(src,firstsrc,lastsrc,emailsrc)
	{
		if (!this.checkRequired(utils)) return;
		var nameArr = src.value.split(utils.SPACE);
		var email = '';
		if(nameArr.length > 0) firstsrc.value = nameArr[0];
		if(nameArr.length > 1) lastsrc.value = nameArr[1];
		if(nameArr.length > 2) email = nameArr[2];
		email = email.replace('<','');
		email = email.replace('>','');
		emailsrc.value = email;
	}
	this.submitWait = function(objform)
	{
		this.rtformname = objform.name;
		hideDiv(this.rtformname + '_form');
		showDiv(this.rtformname + '_wait');
		this.setWaitMsg();
		setInterval('formutils.setWaitMsg()', 250);
	}
	this.setWaitMsg = function()
	{	
		if (this.waitmsgcurrent.length == 0 || this.waitmsgcurrent.length > 200)
			this.waitmsgcurrent = this.waitmsg;
			
		this.waitmsgcurrent += '.';
		// alert(this.waitmsgcurrent);
		updateDiv(this.waitmsgcurrent, this.rtformname + '_waittext');
	}
}
var formutils = new formUtils();

