﻿
var dynamic_forms=
{
	cache	: {},
	missing	:[],
	
	submit: function(form_name,container,url,append,run_command)
	{
		if(form_name==undefined)
			form_name=document.forms[0].name;
		
		if(this.check(form_name))
			ajax.submit(form_name,container,url,append,run_command);
	},
	
	populate: function(form_name,data,failed)
	{
		var f=_form.getFormByName(form_name);
		if(!f)
		{
			if(failed==undefined) //form might not have loaded try again
				return setTimeout(function(){dynamic_forms.populate(form_name,data,true)},1000);
			else
				return false;
		}
		for(var x in data)
		{
			
			if(typeof(data[x])=='number')
				data[x]=data[x]+''; //force string
			
			if(data[x]==null)
				data[x]=''; 
			
			var field=f.elements[x];
			if(field)
			{
				if(($(field).attr('type')=='checkbox' || $(field).attr('type')=='radio') && $(field).val()==data[x])
					$(field).attr('checked',true);
				else if(($(field).attr('type')!='checkbox' && $(field).attr('type')!='radio'))
					$(field).val(data[x]);
				continue;
			}
			
			var field=f.elements[x+'[]'];
			if(field)
			{
				if(($(field).attr('type')=='checkbox' || $(field).attr('type')=='radio') && $(field).val()==data[x])
					$(field).attr('checked',true)
				else if(($(field).attr('type')!='checkbox' && $(field).attr('type')!='radio'))
					$(field).val(data[x]);
				continue;
			}	
			
			//if not field name match and data isnt array continue;
			if(!php.is_array(data[x]))
				continue;
			
			for(var a=0;a<data[x].length;a++)
			{
				if(php.is_array(data[x][a]))
				{
					for(var b=0;b<data[x][a].length;b++)
					{
						var x1		=x+'['+a+']['+b+']';
						var field=f.elements[x1];
						if(!field) continue;
						
						if(($(field).attr('type')=='checkbox' || $(field).attr('type')=='radio') && $(field).val()==data[x][a][b])
							$(field).attr('checked',true)
						else if(($(field).attr('type')!='checkbox' && $(field).attr('type')!='radio'))
							$(field).val(data[x][a][b]+'');
					}
				}
				else
				{
					x1			=x+'['+a+']';
					var field=f.elements[x1];
					if(!field) continue;
					
					if(($(field).attr('type')=='checkbox' || $(field).attr('type')=='radio') && $(field).val()==data[x][a])
						$(field).attr('checked',true);
					else if(($(field).attr('type')!='checkbox' && $(field).attr('type')!='radio'))
						$(field).val(data[x][a]+'');
				}
			}
		}
	},
	
	check: function(form_name)
	{
		
		var f=$('form[name="'+form_name+'"] [format]')
		for(x=0;x<f.length;x++)
		{
			var format=$(f[x]).attr('format');
			if(format=='')
				continue;
				
			$(f[x]).val(this.format($(f[x]).val(),format))
			
		}
		
		this.missing	=[];
		var f		=$('form[name="'+form_name+'"] [required]');
		for(x=0;x<f.length;x++)
		{
			
			var fieldname	=$(f[x]).attr('required');
			var fields		=$('#'+f[x].id+' [name^="'+fieldname+'"]');
			for(y=0;y<fields.length;y++)
			{
				var value=$(fields[y]).val();
				if(value!=null && value!='') continue;
				var label=$('#'+f[x].id+' label').html();
				if(!php.in_array(php.str_replace(':','',label),this.missing))
				{
					this.missing[this.missing.length]=php.str_replace(':','',label);
					$(f[x]).addClass('missing_required');
				}
			}	
		}		
		
		if(this.missing.length > 0)
			return false;
			
		return true;	
	},
	
	format: function(val,criteria)
	{
		if(criteria==undefined)
			return false;
			
		if(val=='') return '';
		
		var criteria=criteria.indexOf(',')!=-1 ? criteria.split(',') : new Array(criteria);
		for(var i =0;i<criteria.length;i++ )
		{
			
			switch(criteria[i])
			{
				case 'Lowercase':
					val=val.toLowerCase();
				break;
				
				case 'Capitalize':
					val=php.ucwords(val);
				break;
				
				case 'Phone Number':
					if(val!=utils.phoneFormat(val))
					{
						alert('Please enter a valid phone number.');
						return val;
					}
				break;
				
				case 'Email':					
					var reg= new RegExp('bad:',"i");	
					if(val.match(reg) !=null)
						return;
					val=php.preg_replace("[^a-zA-Z0-9_.\\-@]",'',val);
					if(!php.preg_match("^([a-zA-Z0-9_.\\-])+\@(([a-zA-Z0-9_\\-])+\.)+([a-zA-Z0-9]{2,4})+$",val))
					{
						alert('Please enter a valid email address.');
						return val;
					}
					
				break;
				
				case 'Decimal':
					val=php.preg_replace("[^0-9.\-]",'',val);
				break;
				case 'Money':
					val=php.preg_replace("[^0-9.\-]",'',val);
					val=(val*1).toFixed(2);
				break;
				case 'Integer':
				{
					val=php.preg_replace('[^0-9.\-]','',val);
					var tmp=php.explode('.',val,2);
					val=tmp[0];					
				}
				break;
				
				case 'QuerySafe':					
					val=php.preg_replace("[^a-z0-8 #.\-]",'',val);
					break;
				case 'Simple Text':
					val=php.preg_replace("<[^>]*>[^<]*<[^>]*>",'',val); //strip tags
					val=php.preg_replace("<[^>]*>",'',val); //strip tags
					val=php.preg_replace('[^0-9a-zA-Z\\^\\. ,_\\-\\?]','',val);
				break;
				case 'Text':
					val=php.preg_replace("<[^>]*>[^<]*<[^>]*>",'',val); //strip tags
					val=php.preg_replace("<[^>]*>",'',val); //strip tags
					val=php.preg_replace('[^0-9a-zA-Z\\^\\. ,_\\-\\?#@!%&*\\(\\)\\\'":\n]','',val);
				break;
				case 'Simple HTML':
					
				break;
				case 'Jpeg':
					if(!val.toLowerCase().substring((val.length-4))=='.jpg' || !val.toLowerCase().substring((val.length-5))=='.jpeg')
					{
						alert('You must select a jpg image.');
						return '';
					}
				break;
				case 'Gif':
					if(!val.toLowerCase().substring((val.length-4))=='.gif')
					{
						alert('You must select a gif image.');
						return '';
					}
				break;
				case 'Zip':
					if(!val.toLowerCase().substring((val.length-4))=='.zip')
					{
						alert('You must select a zip file.');
						return '';
					}
				break;
				case 'CSV':
					if(!val.toLowerCase().substring((val.length-4))=='.csv')
					{
						alert('You must select a zip file.');
						return '';
					}
				break;
				default : 
				break;
			}
		}
		return val;
	},
	
	category_collapse: function(obj)
	{
		if(obj.innerHTML.indexOf('Collapse')<0)
			obj.innerHTML=php.preg_replace("Expand","Collapse",obj.innerHTML);
		else
			obj.innerHTML=php.preg_replace("Collapse","Expand",obj.innerHTML);
		
		$(obj).next().slideToggle(500);
		
		return;
	},
	
	autotab: function(event)
	{	
		var e			=event.target;
		var name		=e.name;
		var maxLength	=e.maxLength
		
		if((e.type!=undefined && e.type!='text') || e.value==null || e.value==undefined)
			return;
		
		var length		=e.value.length;
		
		if(maxLength<0 || length<maxLength)
			return;
			
		var elements=$('[name]:enabled').get();
		for(var x=0;x<elements.length;x++)
		{
			if(elements[x].name==name)
			{
				elements[x+1].focus();
				elements[x+1].select();
				return;
			}
		}
	},
			
	generate: function(formObject,target)
	{
		var target		=(target==undefined || !$(target)) ? document.getElementsByTagName('Body')[0] : document.getElementById(target);
		var form		=this.Form(formObject);
		form			=this.addit_features(formObject,form,formObject.name);
		
		$((_validation.is_ie() ? document : window)).keyup(function(event){dynamic_forms.autotab(event)})
		
		for(group in formObject.groups)
		{
			var category		=formObject.groups[group];
			var fieldset		=document.createElement('fieldset');
			var label			=document.createElement('a');
			var ol				=document.createElement('ol');
			
			$(label).css('display','block');
			label.innerHTML		=category.label;
			label				=this.addit_features(category,label,formObject.name);
			
			
			//give fieldset an id
			$(fieldset).attr('id',php.preg_replace("^[0-9]",'',php.preg_replace("[^0-9a-zA-Z]",'',category.label.toLowerCase())));
			
			//toggle group visiblility
			if(category.collapsible)
			{
				//hide fieldset
				if(category.collapsed)
				{
					$(label).prepend('<span>Expand</span>');
					category.collapsible=true;
					$(ol).css('display','none');
				}
				else
					$(label).prepend('<span>Collapse</span>');
				
				$(label).attr('href',"Javascript:void(0);");
				$(label).click(function(){dynamic_forms.category_collapse(this);});
				
			}
			
			
			for(field in category.fields)
			{
				//create li
				var f		=category.fields[field];
				var li		=document.createElement('li');
				var l		=document.createElement('label');
				
				f.id		='_'+f.name;
				$(l).attr('for',f.id);
				
				if(f.name==undefined)
					$(li).attr('id','undefined');
				else
					$(li).attr('id',php.preg_replace("^[0-9]",'',php.preg_replace("[^0-9a-zA-Z]",'',f.name)));
				$(l).html(f.label);
				
				if(f.type!='Javascript')
					$(li).append(l);
				
				if(php.empty(f.default_value))
					f.default_value='';
				
				//insert field
				var el=new Object();
				eval('el=this.'+php.str_replace(' ','_',f.type)+'(f,formObject);');
				
				//set default id for label clicking
				$(el).attr('id',f['id']);
				//set optional events and features
				if(!php.in_array(f.type,new Array('Text Between','Dollar Amount Between','Select Between','Javascript','Time_HH_MM_AM_Between','Time_HH_MM_AM','Date_M_D_Y','Years Between','Date_M_D_Y_Between','Phone_Number')))
					el=this.addit_features(f,el,formObject.name);
				
				$(li).append(el);
				
				//insert required *
				if(f.required)
				{
					$(li).attr('required',f.name);
					var span=document.createElement('span');
					$(span).addClass('required').html('*');
					$(li).append(span);
				}
				
				$(ol).append(li);
			}
			
			//add clear div for floats
			var div=document.createElement('div');
			$(div).css('clear','both');
			$(ol).append(div);
			$(fieldset).append(label).append(ol).append(div);
			$(form).append(fieldset);
			
		}
		var div=document.createElement('div');
		$(div).css('clear','both');
		$(form).append(div);
		$(target).append(form);
	},
	
	check_filters: function(formID,fieldName,format)
	{
		if(format==undefined || format=='')
			return false;
		
		var field=$('form[id='+formID+'] [name="'+fieldName+'"]');
		field.val(this.format(field.val(),format));
	},
	
	addit_features: function(model,ell,formName)
	{
		if(php.is_array(model.events))
		{
			for(var ev in model.events)
				utils.addEvent(ell,ev,model.events[ev]);
		}
		
		if(model.disabled)
			$(ell).attr('disabled','disabled');
		
		
		if(php.is_array(model.addit_attributes))
		{
			for(x in model.addit_attributes)
			{
				switch(x)
				{
					case 'class':	$(ell).addClass(model.addit_attributes[x]); break;
					case 'style':	$(ell).css(model.addit_attributes[x]); break;
					case 'checked':	$(ell).attr('checked',true); break;
					default: 		$(ell).attr(x,model.addit_attributes[x]);
				}
			}	
		}	
		
		if(!php.empty(model.format))
		{
			if(!php.is_array(model.format))
				model.format=model.format.split(',');
			
			//apply multiple formats
			for(var i=0;i<model.format.length;i++)
			{
				var e='keyup';
				if(model.format[i]=='Phone Number' || model.format[i]=='Email' || model.format[i]=='Money' || model.format[i]=='Jpeg' || model.format[i]=='Gif' || model.format[i]=='Zip' || model.format[i]=='CSV')
					var e='change';
				eval("$(ell).bind(e,function(){dynamic_forms.check_filters('"+php.preg_replace("^[0-9]",'',php.preg_replace("[^0-9a-zA-Z]",'',formName))+"','"+model.name+"','"+model.format[i]+"');})");
			}
			
			$(ell).attr('format',model.format.join(','));
		}
		return ell;
	},
	
	
	
	//elements
	
	Form: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<form onsubmit='void(0);return false;' name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('form');
			$(el).attr('name',obj.name);
		}
		
		$(el).attr('id',php.preg_replace("^[0-9]",'',php.preg_replace("[^0-9a-zA-Z]",'',obj.name))).attr('action',obj.action).attr('method',obj.method);		
		for(x in obj.addit_attributes)
			$(el).attr(x,obj.addit_attributes[x]);
		
		$("el").submit(function(event){event.preventDefault();});
		//$(el).submit(function(){void(0);return false;});
		return el;	
	},
	
	Text: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input  name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);	
		}
		
		el.setAttribute('type','text');	
		el.setAttribute('value',obj.default_value);
		el.className+='textfield';
		return el;	
	},
	
	Text_Between: function(obj,formObject)
	{
		var el=document.createElement('span');
		
		var tmp=utils.clone(obj);
		tmp.name+='[0]';
		var tx=this.Text(tmp,formObject);
		tx=this.addit_features(tmp,tx,formObject.name);
		el.appendChild(tx);
		
		var tx=document.createTextNode(' And ');
		el.appendChild(tx);
		
		
		var tmp=utils.clone(obj);
		tmp.name+='[1]';
		var tx=this.Text(tmp,formObject);
		tx=this.addit_features(tmp,tx,formObject.name);
		el.appendChild(tx);
		return el;	
	},

	Dollar_Amount: function(obj)
	{
		var el=document.createElement('span');
		el.innerHTML='$';
		el.appendChild(this.Text(obj));
		return el;	
	},


	Dollar_Amount_Between: function(obj,formObject)
	{
		var el=document.createElement('span');
		
		var tmp=utils.clone(obj);
		tmp.name+='[0]';
		el.innerHTML='$';
		var tx=this.Text(tmp,formObject);
		tx=this.addit_features(tmp,tx,formObject.name);
		el.appendChild(tx);
		
		var tx=document.createTextNode(' And $');
		el.appendChild(tx);
		
		var tmp=utils.clone(obj);
		tmp.name+='[1]';
		var tx=this.Text(tmp,formObject);
		tx=this.addit_features(tmp,tx,formObject.name);
		el.appendChild(tx);
		return el;	
	},

	Hidden: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input  name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);	
		}
		el.setAttribute('type','hidden');	
		el.setAttribute('value',obj.default_value);
		return el;	
	},
	
	Textarea: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<textarea name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('textarea');
			el.setAttribute('name',obj.name);	
		}
		
		el.className+='textarea';
		el.innerHTML=obj.default_value;
		return el;	
	},
	
	
	Radio: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input type='radio' name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);
			el.setAttribute('type','radio');	
		}
		
		el.className+='radio';
		el.setAttribute('value',obj.default_value);
		return el;	
	},
	
	Select: function(obj,formObject,multiple)
	{
		if(_validation.is_ie())
			var el=document.createElement("<select name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('select');
			el.setAttribute('name',obj.name);	
		}
		
		el.className+='select';	
		
		multiple=multiple==undefined || multiple!=true ? false : true;
		
		if(multiple)
		{
			el.setAttribute('multiple','multiple');	
			el.setAttribute('size',4);	//can be overrided in the attributes section or with css
			el.className+=' multiselect';		
		}
		
		if(obj.default_value==undefined || obj.default_value=='' || (typeof(obj.default_value)!='object' && !php.is_array(obj.default_value,true)))
			return el;
		
		
		
		//ajax lookup
		if(typeof(obj.default_value)=='object' && obj.default_value['lookup']!=undefined)
		{
			obj.default_value.selected	=obj.default_value.selected==undefined ? [] : obj.default_value.selected;
			obj.default_value.label		=obj.default_value.label==undefined ? '' : obj.default_value.label;
			if(this.cache[obj.default_value.lookup]!=undefined)
				_form.select.populate(el,obj.default_value['selected'],php.array_keys(this.cache[obj.default_value['lookup']]),php.array_values(this.cache[obj.default_value['lookup']]),obj.default_value['label']);
			else
			{
				if((obj.default_value['async']!=undefined && !obj.default_value['async']) || (obj.default_value['async']==undefined && formObject.async_lookups!=undefined && !formObject.async_lookups))
				{
					ajax.get(obj.default_value['lookup'],'',false,"dynamic_forms.cache['"+obj.default_value['lookup']+"']=r;",true,false);
					_form.select.populate(el,obj.default_value.selected,php.array_keys(this.cache[obj.default_value['lookup']]),php.array_values(this.cache[obj.default_value['lookup']]),obj.default_value['label']);
				}
				else
					ajax.get(obj.default_value['lookup'],'',false,"dynamic_forms.cache['"+obj.default_value['lookup']+"']=r; _form.select.populate($('form[name=\""+formObject['name']+"\"] [name=\""+obj['name']+"\"]').get(0),"+JSON.stringify(obj.default_value['selected'])+",php.array_keys(r),php.array_values(r),'"+obj.default_value['label']+"');",true,true);
			}
			
			return el;
		}
		
		var label=obj.default_value.label==undefined ? '' : obj.default_value.label;
		
		if(typeof(obj.default_value)=='object' && obj.default_value.options!=undefined)
			obj.default_value=obj.default_value.options;
		
		if(php.is_array(obj.default_value,true))
			_form.select.populate(el,new Array(),php.array_values(obj.default_value),php.array_values(obj.default_value),label);
		else if(typeof(obj.default_value)=='object')
			_form.select.populate(el,new Array(),php.array_keys(obj.default_value),php.array_values(obj.default_value),label);
		
		return el;	
	},
	
	Select_Between: function(obj,formObject)
	{
		var el=document.createElement('span');
		
		var tmp=utils.clone(obj);
		tmp.name+='[0]';
		
		var tx=this.Select(tmp,formObject);
		tx=this.addit_features(tmp,tx,formObject.name);
		el.appendChild(tx);
		
		
		var tx=document.createTextNode(' And ');
		el.appendChild(tx);
		
		
		var tmp=utils.clone(obj);
		tmp.name+='[1]';
		var tx=this.Select(tmp,formObject);
		tx=this.addit_features(tmp,tx,formObject.name);
		el.appendChild(tx);
		
		
		return el;	
	},
	
	
	Multi_Select: function(obj,formObject)
	{
		var el=document.createElement('select');
		
		//append brackets for posting multiselect arrays to php
		if(obj.name.indexOf('[')<0 )
			obj.name+='[]';
		
		return this.Select(obj,formObject,true);	
	},
	
	State_Dropdown: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<select name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('select');
			el.setAttribute('name',obj.name);	
		}
		el.className+='select';	
		var list={"AL":"ALABAMA","AK":"ALASKA","AZ":"ARIZONA","AR":"ARKANSAS","CA":"CALIFORNIA","CO":"COLORADO","CT":"CONNECTICUT","DE":"DELAWARE","DC":"DISTRICT OF COLUMBIA","FL":"FLORIDA","GA":"GEORGIA","GU":"GUAM","HI":"HAWAII","ID":"IDAHO","IL":"ILLINOIS","IN":"INDIANA","IA":"IOWA","KS":"KANSAS","KY":"KENTUCKY","LA":"LOUISIANA","ME":"MAINE","MD":"MARYLAND","MA":"MASSACHUSETTS","MI":"MICHIGAN","MN":"MINNESOTA","MS":"MISSISSIPPI","MO":"MISSOURI","MT":"MONTANA","NE":"NEBRASKA","NV":"NEVADA","NH":"NEW HAMPSHIRE","NJ":"NEW JERSEY","NM":"NEW MEXICO","NY":"NEW YORK","NC":"NORTH CAROLINA","ND":"NORTH DAKOTA","OH":"OHIO","OK":"OKLAHOMA","OR":"OREGON","PA":"PENNSYLVANIA","PR":"PUERTO RICO","RI":"RHODE ISLAND" ,"SC":"SOUTH CAROLINA","SD":"SOUTH DAKOTA","TN":"TENNESSEE","TX":"TEXAS","UT":"UTAH","VT":"VERMONT","VA":"VIRGINIA","WA":"WASHINGTON","WV":"WEST VIRGINIA","WI":"WISCONSIN","WY":"WYOMING"};
		
		_form.select.populate(el,new Array(),php.array_keys(list),php.array_values(list),obj.default_value,'');
		
		return el;	
	},
	
	Checkbox: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input  name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);	
		}
		el.setAttribute('type','checkbox');
		el.className+='checkbox';	
		el.setAttribute('value',obj.default_value);	
		return el;	
	},

	Input_Button: function(obj,formObject)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input  name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);	
		}
		el.setAttribute('type','button');
		el.setAttribute('value',obj.default_value);
		return el;	
	},

	Button: function(obj,formObject)
	{
		if(_validation.is_ie())
			var el=document.createElement("<button name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('button');
			el.setAttribute('name',obj.name);		
		}
		
		el.innerHTML=obj.default_value;	
		return el;	
	},

	Submit: function(obj,formObject)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input  name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);	
		}
		el.setAttribute('type','submit');
		el.setAttribute('value',obj.default_value);
		el.className+='submit';
		utils.addEvent(el,'click',"dynamic_forms.submit('"+formObject.name+"','"+formObject.return_target_id+"');return false;");
		
		return el;	
	},
	
	Reset: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input  name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);	
		}
		el.setAttribute('type','reset');
		el.setAttribute('value',obj.default_value);
		el.className+='reset';
		return el;	
	},
	
	
	Upload: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input  name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);	
		}
		el.setAttribute('type','file');
		el.className+='upload';
		return el;	
	},
	
	Password: function(obj)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input  name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);	
		}
		el.setAttribute('type','password');
		el.className+='textfield password';
		
		return el;	
	},
	
	Image: function(obj)
	{
		var el=document.createElement('img');
		
		if(!obj.default_value)
			return el;
		el.setAttribute('src',obj.default_value);
		return el;	
	},
	
	Submit_Image: function(obj,formObject)
	{
		if(_validation.is_ie())
			var el=document.createElement("<input  name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',obj.name);	
		}
		el.setAttribute('type','image');
		el.setAttribute('src',obj.default_value);
		el.className+='submit_image';
		utils.addEvent(el,'onclick',"dynamic_forms.submit('"+formObject.name+"','"+formObject.return_target_id+"');");	
		return el;	
	},
	
	Plain_Text: function(obj)
	{
		var el=document.createElement('p');
		el.innerHTML=obj.default_value;
		
		return el;	
	},
	Link: function(obj)
	{
		var el=document.createElement('a');
		el.innerHTML=obj.default_value;
		return el;	
	},
	Date_M_D_Y: function(obj,formObject)
	{
		//get labels
		obj.default_value=!php.empty(obj.default_value) ? obj.default_value : ['Mon','Day','Year'];
		
		if(!php.is_array(obj.default_value))
			obj.default_value=obj.default_value.split(',');
		
		var s=document.createElement('span');
		
		var tmp	=utils.clone(obj);
		tmp.name+='[0]';
		if(_validation.is_ie())
			var el=document.createElement("<select name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('select');
			el.setAttribute('name',tmp.name);	
		}
		el.setAttribute('size','1');
		el.className+='select groupselect Date_M_D_Y Date_M_D_Y0';	
		el=this.addit_features(tmp,el,formObject.name);
		_form.select.populate(el,obj.default_value[0],new Array(1,2,3,4,5,6,7,8,9,10,11,12),new Array("Jan","Feb","Mar","Apr","May","June","July","Aug","Sept","Oct","Nov","Dec"),tmp.default_value[0]);
		s.appendChild(el);
		
		var tmp=utils.clone(obj);
		tmp.name+='[1]';
		if(_validation.is_ie())
			var el=document.createElement("<select name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('select');
			el.setAttribute('name',tmp.name);	
		}
		el.setAttribute('size','1');
		el.className+='select groupselect Date_M_D_Y Date_M_D_Y1';	
		el=this.addit_features(tmp,el,formObject.name);
		var days=new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31);
		_form.select.populate(el,obj.default_value[1],days,days,tmp.default_value[1]);
		s.appendChild(el);
		
		var tmp=utils.clone(obj);
		tmp.name+='[2]';
		if(_validation.is_ie())
			var el=document.createElement("<select name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('select');
			el.setAttribute('name',tmp.name);	
		}
		el.setAttribute('size','1');
		el.className+='select groupselect Date_M_D_Y Date_M_D_Y2';	
		el=this.addit_features(tmp,el,formObject.name);
		
		var years	=new Array();
		var d		= new Date();
		var year	=d.getFullYear();
		for(var y=year;y>(year-100);y--)
			years[years.length]=y;
		
		_form.select.populate(el,obj.default_value[2],years,years,tmp.default_value[2]);
		s.appendChild(el);
		
		return s;		
	},
	
	
	
	Date_M_D_Y_Between: function(obj,formObject)
	{
		var s=document.createElement('span');
		
		//get labels
		obj.default_value=!php.empty(obj.default_value) ? obj.default_value : ['Mon','Day','Year','Mon','Day','Year'];
		
		if(!php.is_array(obj.default_value))
			obj.default_value=obj.default_value.split(',');
		
		
		var tmp=utils.clone(obj);
		tmp.name+='[0]';
		s.appendChild(this.Date_M_D_Y(tmp,formObject.name));
		
		var tx=document.createTextNode(' And ');
		s.appendChild(tx);
		
		var tmp=utils.clone(obj);
		tmp.name+='[1]';
		
		tmp.default_value[0]=tmp.default_value[3];
		tmp.default_value[1]=tmp.default_value[4];
		tmp.default_value[2]=tmp.default_value[5];
		
		s.appendChild(this.Date_M_D_Y(tmp,formObject.name));
		
		return s;		
	},
	
	Years: function(obj,formObject)
	{
		if(_validation.is_ie())
			var el=document.createElement("<select name='"+obj.name+"'>");
		else
		{
			var el=document.createElement('select');
			el.setAttribute('name',obj.name);	
		}
		el.setAttribute('size','1');
		el.className+='select Years';	
		
		var years	=new Array();
		var d		= new Date();
		var year	=d.getFullYear();
		for(var y=year;y>(year-100);y--)
			years[years.length]=y;
		
		_form.select.populate(el,obj.default_value,years,years,obj.default_value);
		
		return el;		
	},
	
	Years_Between: function(obj,formObject)
	{
		var s=document.createElement('span');
		
		//get labels
		obj.default_value=!php.empty(obj.default_value) ? obj.default_value : new Array('Year','Year');
		
		if(!php.is_array(obj.default_value))
			obj.default_value=obj.default_value.split(',');
		
		var tmp=utils.clone(obj);
		tmp.name+='[0]';
		tmp.default_value=tmp.default_value[0];
		var el=this.Years(tmp,formObject);
		el=this.addit_features(tmp,el,formObject.name);
		s.appendChild(el);
		
		var tx=document.createTextNode(' And ');
		s.appendChild(tx);
		
		var tmp=utils.clone(obj);
		tmp.name+='[1]';
		tmp.default_value=tmp.default_value[1];
		
		var el=this.Years(tmp,formObject);
		el=this.addit_features(tmp,el,formObject.name);
		s.appendChild(el);

		return s;		
	},
	
	
	Phone_Number: function(obj,formObject)
	{
		var s=document.createElement('span');
		
		var el=document.createTextNode('(');
		s.appendChild(el);
		
		for(x in obj.addit_attributes)
			s.setAttribute(x,obj.addit_attributes[x]);
		
		if(php.is_array(obj.default_value))
			obj.default_value=obj.default_value.join('');
		
		obj.default_value=php.preg_replace("[^0-9]",'',obj.default_value);
		
		var tmp=utils.clone(obj);
		tmp.name+='[0]';
		
		if(_validation.is_ie())
			var el=document.createElement("<input maxlength='3' name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',tmp.name);
			el.setAttribute('maxlength','3');
		}
		
		el.setAttribute('type','text');
		el.setAttribute('size','4');
		el.className+='textfield Phone_Number Phone_Number0';
		el.setAttribute('value',tmp.default_value.substring(0,3));
		el=this.addit_features(tmp,el,formObject.name);
		s.appendChild(el);
		
		var el=document.createTextNode(') ');
		s.appendChild(el);
		
		
		var tmp=utils.clone(obj);
		tmp.name+='[1]';
		if(_validation.is_ie())
			var el=document.createElement("<input maxlength='3' name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',tmp.name);
			el.setAttribute('maxlength','3');
		
		}
		el.setAttribute('type','text');
		el.className+='textfield Phone_Number Phone_Number1';
		el.setAttribute('size','4');
		el.setAttribute('value',tmp.default_value.substring(3,6));
		el=this.addit_features(tmp,el,formObject.name);
		s.appendChild(el);
		
		var el=document.createTextNode(' - ');
		s.appendChild(el);
		
		var tmp=utils.clone(obj);
		tmp.name+='[2]';
		if(_validation.is_ie())
			var el=document.createElement("<input maxlength='4' name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',tmp.name);	
			el.setAttribute('maxlength','4');
		}
		el.setAttribute('type','text');
		
		el.className+='textfield Phone_Number Phone_Number2';
		el.setAttribute('size','5');
		el.setAttribute('value',tmp.default_value.substring(6,10));
		el=this.addit_features(tmp,el,formObject.name);
		s.appendChild(el);
		
		return s;		
	},
	
	
	Social_Security: function(obj,formObject)
	{
		var s=document.createElement('span');
		
		for(x in obj.addit_attributes)
			s.setAttribute(x,obj.addit_attributes[x]);
		
		if(php.is_array(obj.default_value))
			obj.default_value=obj.default_value.join('');
		
		obj.default_value=php.preg_replace("[^0-9]",'',obj.default_value);
		
		var tmp=utils.clone(obj);
		tmp.name+='[0]';
		
		if(_validation.is_ie())
			var el=document.createElement("<input maxlength='3' name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',tmp.name);
			el.setAttribute('maxlength','3');
		}
		
		el.setAttribute('type','text');
		el.setAttribute('size','4');
		el.className+='textfield Social_Security Social_Security0';
		el.setAttribute('value',tmp.default_value.substring(0,3));
		el=this.addit_features(tmp,el,formObject.name);
		s.appendChild(el);
		
		var el=document.createTextNode(' - ');
		s.appendChild(el);
		
		
		var tmp=utils.clone(obj);
		tmp.name+='[1]';
		if(_validation.is_ie())
			var el=document.createElement("<input maxlength='2' name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',tmp.name);
			el.setAttribute('maxlength','2');
		
		}
		el.setAttribute('type','text');
		el.className+='textfield Social_Security Social_Security1';
		el.setAttribute('size','4');
		el.setAttribute('value',tmp.default_value.substring(3,6));
		el=this.addit_features(tmp,el,formObject.name);
		s.appendChild(el);
		
		var el=document.createTextNode(' - ');
		s.appendChild(el);
		
		var tmp=utils.clone(obj);
		tmp.name+='[2]';
		if(_validation.is_ie())
			var el=document.createElement("<input maxlength='4' name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('input');
			el.setAttribute('name',tmp.name);	
			el.setAttribute('maxlength','4');
		}
		el.setAttribute('type','text');
		
		el.className+='textfield Social_Security Social_Security2';
		el.setAttribute('size','5');
		el.setAttribute('value',tmp.default_value.substring(6,10));
		el=this.addit_features(tmp,el,formObject.name);
		s.appendChild(el);
		
		return s;		
	},
	
	Time_HH_MM_AM: function(obj,formObject)
	{
		//get labels
		if(php.empty(obj.default_value))
			obj.default_value=new Array('Hour','Min','');
		
		if(!php.is_array(obj.default_value))
			obj.default_value=obj.default_value.split(',');
				
		var s=document.createElement('span');
		
		var tmp=utils.clone(obj);
		tmp.name+='[0]';
		if(_validation.is_ie())
			var el=document.createElement("<select name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('select');
			el.setAttribute('name',tmp.name);		
		}
		el.setAttribute('size','1');
		el.className+='select groupselect Time_HH_MM_AM0';
		el=this.addit_features(tmp,el,formObject.name);
		var hours=new Array();
		for(var y=1;y<13;y++)
			hours[hours.length]=y;
		_form.select.populate(el,tmp.default_value[0],hours,hours,tmp.default_value[0]);
		s.appendChild(el);
		
		var tmp=utils.clone(obj);
		tmp.name+='[1]';
		if(_validation.is_ie())
			var el=document.createElement("<select name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('select');
			el.setAttribute('name',tmp.name);		
		}
		el.setAttribute('size','1');
		el.className+='select groupselect Time_HH_MM_AM1';
		el=this.addit_features(tmp,el,formObject.name);
		
		var min=new Array('00','01','02','03','04','05','06','07','08','09');
		for(var y=10;y<59;y++)
			min[min.length]=y;
		
		_form.select.populate(el,tmp.default_value[1],min,min,tmp.default_value[1]);
		s.appendChild(el);
		
		var tmp=utils.clone(obj);
		tmp.name+='[2]';
		if(_validation.is_ie())
			var el=document.createElement("<select name='"+tmp.name+"'>");
		else
		{
			var el=document.createElement('select');
			el.setAttribute('name',tmp.name);		
		}
		el.setAttribute('size','1');
		el=this.addit_features(tmp,el,formObject.name);
		el.className+='select groupselect Time_HH_MM_AM2';
		var part=new Array('AM','PM');
		_form.select.populate(el,tmp.default_value[2],part,part);
		s.appendChild(el);
		
		return s;
	},
	Time_HH_MM_AM_Between: function(obj,formObject)
	{
		var s=document.createElement('span');
		
		//get labels
		obj.default_value=!php.empty(obj.default_value) ? obj.default_value : new Array('Hour','Minute','','Hour','Minute','');
		
		if(!php.is_array(obj.default_value))
			obj.default_value=obj.default_value.split(',');
		
		var tmp		=utils.clone(obj);
		tmp.name	+='[0]';
		s.appendChild(this.Time_HH_MM_AM(tmp,formObject));
		
		var tx=document.createTextNode(' And ');
		s.appendChild(tx);
		
		var tmp		=utils.clone(obj);
		tmp.name	+='[1]';
		
		tmp.default_value[0]=tmp.default_value[3];
		tmp.default_value[1]=tmp.default_value[4];
		tmp.default_value[2]=tmp.default_value[5];
		
		s.appendChild(this.Time_HH_MM_AM(tmp,formObject));
		return s;
	},
	Javascript : function(obj,formObject)
	{
		var s=document.createElement('script');
		s.innerHTML=obj.default_value;
		return s;
	},
	
	MDY_HMS: function(obj,formObject)
	{
		var s		=document.createElement('span');
		var tmp		=utils.clone(obj);
		tmp.name	+='[0]';
		s.appendChild(this.Date_M_D_Y(tmp,formObject));
		
		var tmp			=utils.clone(obj);
		tmp.name		+='[1]';
		tmp.default_value[0]=tmp.default_value[3];
		tmp.default_value[1]=tmp.default_value[4];
		tmp.default_value[2]=tmp.default_value[5];
		s.appendChild(this.Time_HH_MM_AM(tmp,formObject));
		return s;
	}
	
	
	
};



var dynamic_form=dynamic_forms;


		