function formShowTab(key,hideKeys)
{
	var tab = document.getElementById(key+'Tab');
	var parent = tab.parentNode;
	var curItem = parent.firstChild;
	
	while(curItem != null)
	{
		curItem.className = '';
		curItem = curItem.nextSibling;
	}
	
	tab.className = 'Active';
	
	this.show(key,hideKeys);
}

function formShow(key,hideKeys)
{
	if(hideKeys != undefined && hideKeys!='')
	{					
		hideKeys = hideKeys.split(',');
		for(var i=0; i<hideKeys.length;i++)
			this.hide(hideKeys[i]);
	}
		
	var object = document.getElementById(key);
	if(object == undefined)
		alert('Failed to show '+key+'!');
	object.style.display = '';

	if(object.parentNode.parentNode.tagName == 'TR')
	{
		var row = object.parentNode.parentNode;					
		row.style.display = '';
	}
}

function formHide(key)
{				
	var object = document.getElementById(key);
	object.style.display = 'none';
	
	if(object.parentNode.parentNode.tagName == 'TR')
	{
		var row = object.parentNode.parentNode;					
		row.style.display = 'none';
	}
}

function formHideValueLabel(key,type)
{
	var field = document.getElementById(key);
	var valueLabel = field.previousSibling;
	
	valueLabel.style.display = 'none';
	if(field.style.display != 'none')
		field.focus();
}

function formShowValueLabel(key,type)
{
	var field = document.getElementById(key);
	
	var valueLabel = field.previousSibling;
	var fieldValue = this.getValue(key,type);
			
	if(fieldValue=='' || (type == 'combo' && fieldValue == 0))
	{
		valueLabel.style.display = '';
		
	} else
	{
		valueLabel.style.display = 'none';
		
	}
}

function formGetValue(key,type,format)
{
	if(format==undefined)
		format='';
	var field = document.getElementById(key);
	
	if(type == 'checkbox')
	{
		var options = field.getElementsByTagName('input');
		var values = Array();
		var j=0;
		for(var i=0; i<options.length; i++)
		{
			if(options[i].checked)
			{			
				values[j] = options[j].value;
				j++;				
			}
		}
		
		if(values.length > 1)
			return values.join(' AND '); 
		else if(values.length == 1)
			return values[0];
		else
			return false;
		
			
	} else if(type == 'radio')
	{
		var options = field.getElementsByTagName('input');
		for(var i=0; i<options.length; i++)
		{
			if(options[i].checked)
				return options[i].value;
		}
		return false;
		
			
	} else if(type == 'file')
	{
		return field.firstChild.value;
		
	} else if(type == 'search')
	{
		if(field.tagName!='INPUT')
			field = field.getElementsByTagName('input')[0];
		return field.value;
		
	} else
	{
		if(format=='')
			return field.value;	
		else
			return this.getFormattedValue(field.value,format,true);
	}	
	
}

function formSetValue(key,type,value,format,httpRequest,condition,params)
{
	if(format==undefined)
		format='';
	if(httpRequest==undefined)
		httpRequest=false;
		
	var field = document.getElementById(key);
					
	if(!httpRequest)
	{
		if(type == 'checkbox')
		{
			if(value)
				field.firstChild.checked = true;
			else
				field.firstChild.checked = false;
				
		} else if(type == 'radio')
		{
			var options = field.getElementsByTagName('input');
			for(var i=0; i<options.length; i++)
			{
				if(options[i].value == value)
					options[i].checked = true;
				else
					options[i].checked = false;				
			}
						
			fields = (field.getElementsByTagName('input'));
			for(i=0; i<fields.length; i++)
			{
				if(fields[i].value == value)
					fields[i].checked = true;
				else
					fields[i].checked = false;				
			}
		
		} else if(type == 'search')
		{
			oValue = value.split('=')[0];
			oLabel = value.split('=')[1];
			
			field.getElementsByTagName('input')[0].value = oValue;
			field.getElementsByTagName('input')[1].value = oLabel;
			
			field.getElementsByTagName('div')[0].style.visibility = 'hidden';
			
			eval(this.id + 'FormUpdate(\'' + key + '\')');
			
		} else if(type == 'browse')
		{
			this.setBrowseField(key,'',value);
						
		} else
		{
			if(format=='')
				field.value = value;
			else
				field.value = this.getFormattedValue(value,format);
		}
		
	} else
	{
		this.httpRequest(key,condition,params,'set')
	}								
}


function formHttpRequest(key,condition,params,method)
{
	// load data
	url = this.httprequestUrl;
	if(url.indexOf('&')==-1 && url.indexOf('?')==-1)
		url += '?';
		
	url +=	'key=' + key + 
		   	'&condition=' + condition + 
			'&' + params +
			'&method=' + method +
			'&formName=' + this.name +
			'&formObject=' + this.object;

	// not finished ?			
	if(method == 'options')
	{
		var field = document.getElementById(key);
		//if(field.style.display == 'none')
		this.setOptions(key,'combo',new Array(field.value+'=Bezig met laden...'),field.value);
	}
	
	this.httpQueueRequest(url);	
	
}

function formHttpQueueRequest(url)
{
	//alert(url);
	if(this.httpRequestBusy)
	{
		this.httpRequests.push(url);
		
	} else
	{
		this.httpExecRequest(url);
	}
	
	// make sure calcepc only exists once at the end of the queue
	var q = new Array(); // queue
	var found = false;
	var j=0;
	for(var i=0;i<this.httpRequests.length;i++)
	{
		if(this.httpRequests[i] != 'calcepc')
		{
			q[j] = this.httpRequests[i];
			j++;
		
		} else 
			found = true;
	}
	
	if(found)
		q[j] = 'calcepc';
	this.httpRequests = q;
	//console.debug(q);

}


if(window.XMLHttpRequest === undefined) 
{
	window.XMLHttpRequest = function() 
	{
		return new ActiveXObject('Microsoft.XMLHTTP');
	}
}

function formHttpExecRequest(url)
{
	this.httpRequestBusy = true;
	
	//alert(url);
	
	// code for Mozilla, etc.
	if (window.XMLHttpRequest)
	{
		xmlhttp = new XMLHttpRequest();
		eval('xmlhttp.onreadystatechange=this.httpSet');
		//alert(url);
		xmlhttp.open("GET",url,true);
		xmlhttp.send(null);
	}
	
}

function formHttpSet()
{
	
	if(xmlhttp != null)
	{
		// if xmlhttp shows "loaded"
		if (xmlhttp.readyState==4)
		{
			// if "OK"
			if (xmlhttp.status==200)
			{
				
				if(xmlhttp.responseText.substring(0,6)=='Error:')
				{
					alert(xmlhttp.responseText);

				} else
				{
					debugbar = document.getElementById('debugbar');
					
					if(debugbar != undefined)
					{
						debugbar.innerHTML = xmlhttp.responseText + '<br/>' + debugbar.innerHTML;
					}
					
					//alert(xmlhttp.responseText);
					eval(xmlhttp.responseText);
					
				}
				
				// process rest of queue
				//console.debug(FormObject.httpRequests);
				url = FormObject.httpRequests.shift();
				
				if(url != undefined)
				{
					
					FormObject.httpExecRequest(url);
				}
				else
					FormObject.httpRequestBusy = false;
				
			}
		}
	}
}

function formSetOptions(key,type,options,value,httpRequest,condition,params,settings,script)
{
	var field = document.getElementById(key);
	
	if(field == undefined)
		alert('Failed to set options for '+key+'!');
		
	field.innerHTML = '';
	
	var style = '';
	if(script == undefined)
		var script = '';
		
	script = 'onclick="' + this.id + 'FormUpdate(\''+key+'\'); ' + script + '"';
	var html = '';
	var readOnly = '';
	if(httpRequest==undefined)
		httpRequest=false;
		
	settings = this.getSettings(settings);
	
	if(settings['tabindex'])
		tabindex = 'tabindex="' + settings['tabindex'] + '"';
	else
		tabindex = '';
		
		
	
	if(!httpRequest)
	{	
		for(var i=0; i<options.length; i++)
		{
			
			oValue = options[i];
			oLabel = '';
								
			if(oValue.indexOf('=')!=-1)
			{
				j = options[i].indexOf('=');
				oValue = options[i].substring(0,j);
				oLabel = options[i].substring(j+1);
			}
			
			if(oLabel == '')	
				oLabel = oValue;
				
			if(type == 'combo')
			{
				option = document.createElement("OPTION");
				option.value = oValue;
				option.text = oLabel;
	
				option.selected = (value == oValue ? true : false);
				
				field.options.add(option);	
				
			} else if(type == 'list')
			{
				option = document.createElement("OPTION");
				option.value = oValue;
				option.text = oLabel;
				option.selected = (value.length && value.find(oValue)!=-1?true:false);
										
				field.options.add(option);	
			
			} else if(type == 'radio')
			{
				
				html +=  (settings['orientation'] == 'vertical' ? '<li>' : '')+
						'<input name="'+key+
						'" type="radio" value="'+oValue+
						'" '+(value==oValue?'checked':'')+
						' style="'+style+
						'" '+script+
						' '+readOnly+
						' '+tabindex+
						'/>'+oLabel+
						(settings['orientation'] == 'vertical' ? '</li>' : '');
			
			} else if(type == 'checkbox')
			{
				checked = '';
				
				if(options.length>1)
					checked = (value.length && value.find(oValue)!=-1?'checked':'');
				else
					checked = (value==oValue?'checked':'');
					
				html += 	(settings['orientation'] == 'vertical' ? '<li>' : '')+
							'<input name="'+key+
							(options.length>1?'[]':'')+
							'" type="checkbox" value="'+oValue+
							'" '+checked+
							' style="'+style+
							'" '+script+
							' '+readOnly+
							' '+tabindex+
							'/>'+oLabel+
							(settings['orientation'] == 'vertical' ? '</li>' : '');
			}
							
		}
		
		if(settings['orientation'] == 'vertical' && html != '')
		{
			html = '<ul>' + html + '</ul>';
		}
		
		if(html != '')
		{
			field.innerHTML = html;
		}
		
	} else
	{
		this.httpRequest(key,condition,params,'options')
	}
}

function formSetStyle(key,type,style)
{

	var field = document.getElementById(key);
	
	styles = style.split(';');
	
	for(i=0; i<styles.length; i++)
	{
		curStyle = styles[i].split(':');
		styleName = curStyle[0];
		if(styleName != undefined)
		{
			styleName = styleName.replace(/^\s+/,''); // trim
  			styleName = styleName.replace(/\s+$/,'');
  			
			styleValue = curStyle[1];
			
			if(styleValue != undefined)
			{
				styleValue = styleValue.replace(/^\s+/,''); // trim
	  			styleValue = styleValue.replace(/\s+$/,'');
			
				if(styleName != '')
					field.style[styleName] = styleValue;
			}
			
		}
		
	}
	
}

function formSetReadonly(key,type,mode)
{				
	var object = document.getElementById(key);
	object.readOnly = mode;
	if(mode)
		object.className += ' Form2Readonly';
	else
		object.className = object.className.replace(' Form2Readonly','');
}

function formSetFileField(key,value)
{
	var span = document.getElementById(key);
	var field = span.firstChild;
	
	iframe = document.createElement('iframe');
	iframe.src = this.uploadUrl + '?key=' + key + '&file=' + field.value;
	
	iframe.frameBorder = 'no';
	iframe.scrolling = 'no';
	iframe.className = 'Form2File';
	
	span.appendChild(iframe);
	
}

function formSetSearchField(key,value)
{
	
	var span = document.getElementById(key);
	var field = span.firstChild;
	
	// drop down box
	dropdown = document.createElement('div');
	span.appendChild(dropdown);

	// input text field
	input = document.createElement('input');
	input.id = key + '__value';
	input.className = 'Form2Text';
	
	span.appendChild(input);
			
	eval('input.onkeydown = function (e) { formSearchKey(e,\'' + key + '\'); }');
	eval('input.onkeyup = function (e) { ' + this.id + 'FormUpdate(\'' + key + '\'); };');
	eval('input.onblur = function (e) { setTimeout("' + this.object + '.setSearchResults(\'' + key + '\',new Array(),\'\',true);",500); }');
}

function formSearchKey(e,key)
{
	if(!e) 
		var e = window.event;
	if (e.keyCode) 
		var code = e.keyCode;
	else if (e.which) 
		var code = e.which;
		
	if(code == 9)
	{
		document.getElementById(key).getElementsByTagName('div')[0].style.visibility = '';
		return false;
	}
		
	if(code >= 32 && code <=255)
	{
		return true;
		
	} else
	{
		return false;
	}
}

function formSetSearchResults(key,options,params,set)
{
	this.debug('SetSearchResults('+key+','+options+','+params+','+set+');');	
	
	if(!set)
	{
		var condition = options;
		this.httpRequest(key,condition,params,'search');
		
	} else
	{
		var table = '';
		
		field = document.getElementById(key);
		dropdown = field.getElementsByTagName('div')[0];
		
		if(options.length)
		{
			table = '<ul>';
			for(i=0; i<options.length; i++)
			{
				oValue = options[i];
						
				oLabel = '';
								
				if(oValue.indexOf('=')!=-1)
				{
					options[i] = options[i].split('=');
					oValue = options[i][0];
					oLabel = options[i][1];
				}
				
				if(oLabel == '')	
					oLabel = oValue;
					
				value = oValue + '=' + oLabel;
				
				table += '<li><a href="#" onclick="' + this.object + '.setValue(\'' + key + '\',\'search\',\'' + value + '\');return false;">' + oLabel + '</a></li>';
				
			}
			
			table += '</ul>';
						
			dropdown.style.visibility = 'visible';
					
		} else 
		{
			dropdown.style.visibility = '';
		}

		dropdown.innerHTML = table;
		
	}
	
}

function formSetHtmlField(key,settings)
{
	settings = this.getSettings(settings);	
		
	// init TinyMCE compressor
	/*tinyMCE_GZ.init({
		plugins : 'table,save,advhr,advimage,advlink,iespell,insertdatetime,preview,zoom,searchreplace,print,paste,directionality,fullscreen,noneditable,contextmenu,layer,pagebreak,inlinepopups,spellchecker,template',
		themes : 'advanced',
		languages : 'en,nl',
		disk_cache : false,
		debug : false});*/
		
	// init TinyMCE
	tinyMCE.init({
		valid_elements : 'oa*[*],a[accesskey|charset|class|coords|dir<ltr?rtl|href|hreflang|id|lang|name|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|rel|rev|shape<circle?default?poly?rect|style|tabindex|title|target|type],abbr[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],acronym[class|dir<ltr?rtl|id|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],address[class|align|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],applet[align<bottom?left?middle?right?top|alt|archive|class|code|codebase|height|hspace|id|name|object|style|title|vspace|width],area[accesskey|alt|class|coords|dir<ltr?rtl|href|id|lang|nohref<nohref|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|shape<circle?default?poly?rect|style|tabindex|title|target],base[href|target],basefont[color|face|id|size],bdo[class|dir<ltr?rtl|id|lang|style|title],big[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],blockquote[dir|style|cite|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],body[alink|background|bgcolor|class|dir<ltr?rtl|id|lang|link|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onload|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onunload|style|title|text|vlink],br[class|clear<all?left?none?right|id|style|title],button[accesskey|class|dir<ltr?rtl|disabled<disabled|id|lang|name|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|tabindex|title|type|value],caption[align<bottom?left?right?top|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],center[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],cite[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],code[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],col[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|span|style|title|valign<baseline?bottom?middle?top|width],colgroup[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|span|style|title|valign<baseline?bottom?middle?top|width],dd[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],del[cite|class|datetime|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],dfn[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],dir[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],div[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],dl[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],dt[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],em/i[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],fieldset[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],font[class|color|dir<ltr?rtl|face|id|lang|size|style|title],form[accept|accept-charset|action|class|dir<ltr?rtl|enctype|id|lang|method<get?post|name|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onreset|onsubmit|style|title|target],frame[class|frameborder|id|longdesc|marginheight|marginwidth|name|noresize<noresize|scrolling<auto?no?yes|src|style|title],frameset[class|cols|id|onload|onunload|rows|style|title],h1[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],h2[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],h3[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],h4[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],h5[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],h6[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],head[dir<ltr?rtl|lang|profile],hr[align<center?left?right|class|dir<ltr?rtl|id|lang|noshade<noshade|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|size|style|title|width],html[dir<ltr?rtl|lang|version],iframe[align<bottom?left?middle?right?top|class|frameborder|height|id|longdesc|marginheight|marginwidth|name|scrolling<auto?no?yes|src|style|title|width],img[align<bottom?left?middle?right?top|alt|border|class|dir<ltr?rtl|height|hspace|id|ismap<ismap|lang|longdesc|name|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|src|style|title|usemap|vspace|width],input[accept|accesskey|align<bottom?left?middle?right?top|alt|checked<checked|class|dir<ltr?rtl|disabled<disabled|id|ismap<ismap|lang|maxlength|name|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onselect|readonly<readonly|size|src|style|tabindex|title|type<button?checkbox?file?hidden?image?password?radio?reset?submit?text|usemap|value],ins[cite|class|datetime|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],isindex[class|dir<ltr?rtl|id|lang|prompt|style|title],kbd[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],label[accesskey|class|dir<ltr?rtl|for|id|lang|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],legend[align<bottom?left?right?top|accesskey|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],li[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title|type|value],link[charset|class|dir<ltr?rtl|href|hreflang|id|lang|media|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|rel|rev|style|title|target|type],map[class|dir<ltr?rtl|id|lang|name|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],menu[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],meta[content|dir<ltr?rtl|http-equiv|lang|name|scheme],noframes[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],noscript[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],object[align<bottom?left?middle?right?top|archive|border|class|classid|codebase|codetype|data|declare|dir<ltr?rtl|height|hspace|id|lang|name|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|standby|style|tabindex|title|type|usemap|vspace|width],ol[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|start|style|title|type],optgroup[class|dir<ltr?rtl|disabled<disabled|id|label|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],option[class|dir<ltr?rtl|disabled<disabled|id|label|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|selected<selected|style|title|value],p[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],param[id|name|type|value|valuetype<DATA?OBJECT?REF],pre/listing/plaintext/xmp[align|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title|width],q[cite|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],s[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],samp[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],script[charset|defer|language|src|type],select[class|dir<ltr?rtl|disabled<disabled|id|lang|multiple<multiple|name|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|size|style|tabindex|title],small[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],span[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],strike[class|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],strong/b[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],style[dir<ltr?rtl|lang|media|title|type],sub[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],sup[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],table[align<center?left?right|bgcolor|border|cellpadding|cellspacing|class|dir<ltr?rtl|frame|height|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|rules|style|summary|title|width],tbody[align<center?char?justify?left?right|char|class|charoff|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title|valign<baseline?bottom?middle?top],td[abbr|align<center?char?justify?left?right|axis|bgcolor|char|charoff|class|colspan|dir<ltr?rtl|headers|height|id|lang|nowrap<nowrap|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|rowspan|scope<col?colgroup?row?rowgroup|style|title|background|valign<baseline?bottom?middle?top|width],textarea[accesskey|class|cols|dir<ltr?rtl|disabled<disabled|id|lang|name|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onselect|readonly<readonly|rows|style|tabindex|title],tfoot[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title|valign<baseline?bottom?middle?top],th[abbr|align<center?char?justify?left?right|axis|bgcolor|char|charoff|class|colspan|dir<ltr?rtl|headers|height|id|lang|nowrap<nowrap|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|rowspan|scope<col?colgroup?row?rowgroup|style|title|valign<baseline?bottom?middle?top|width],thead[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title|valign<baseline?bottom?middle?top],title[dir<ltr?rtl|lang],tr[abbr|align<center?char?justify?left?right|bgcolor|char|charoff|class|rowspan|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title|valign<baseline?bottom?middle?top],tt[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],u[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title],ul[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title|type],var[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]',
        mode : 'exact',
	    elements : key,
	    theme : 'advanced',
		language : this.language,
		content_css : settings['stylesheet'],
		apply_source_formatting : true,
		convert_urls : false,
		cleanup: true,
		theme_advanced_styles : settings['classes'],
		theme_advanced_toolbar_location : 'top',
		editor_selector : 'FormContentEditor',
		theme_advanced_buttons1_add_before : 'print,separator,fullscreen,separator,cut,copy,paste,pastetext,pasteword,separator,search,replace,separator',
		theme_advanced_buttons2_add : 'separator,insertdate,inserttime,preview,zoom,separator,forecolor,backcolor,liststyle,separator,insertlayer,moveforward,movebackward,absolute,pagebreak',
		theme_advanced_buttons3_add_before : 'tablecontrols,separator',
		theme_advanced_buttons3_add : 'separator,emotions,lorem,advhr,separator,ltr,rtl,spellchecker,template',
		theme_advanced_toolbar_align : 'left',
		theme_advanced_statusbar_location : 'bottom',
		plugins: 'table,save,advhr,advimage,advlink,iespell,insertdatetime,preview,zoom,searchreplace,print,paste,directionality,fullscreen,noneditable,contextmenu,layer,pagebreak,inlinepopups,spellchecker,template',
		pagebreak_separator : '<div style="page-break-after;"></div>',
		plugin_insertdate_dateFormat : '%d-%m-%Y',
		plugin_insertdate_timeFormat : '%H:%M:%S',
		spellchecker_languages : '+Nederlands=nl,Engels=en',
		template_external_list_url : this.httprequestUrl + 'method=templateList&reference='+settings['templatesRef'],
		file_browser_callback : this.object + '.htmlBrowse',
		width: '100%'});	
		
		this.debug(this.browserUrl);
		
}

function formHtmlBrowse(field_name, url, type, win)
{
	this.debug("Field_Name: " + field_name + "\nURL: " + url + "\nType: " + type + "\nWin: " + win);

    if(type == 'image')		typeParam = 'images';
    else if(type =='file') 	typeParam = 'pages';

    var cmsURL = this.browserUrl + '&method=html&type=' + typeParam + '&typeNames=' + typeParam;    // script URL - use an absolute path!
    
    tinyMCE.activeEditor.windowManager.open({
        file : cmsURL,
        title : 'Browse',
        width : 600,  // Your dimensions may differ - toy around with them!
        height : 600,
        resizable : "yes",
        inline : "yes",  // This parameter only has an effect if you use the inlinepopups plugin!
        close_previous : "no"
    }, {
        window : win,
        input : field_name
    });
    return false;
	
}

function formSetBrowseField(key,type,value,previewValue)
{
	
	if(key==undefined||key=='')
		return null;
	
	// get field
	var span = document.getElementById(key);
	var fields = span.getElementsByTagName('input');
	var preview = span.getElementsByTagName('div')[0];
	var field = fields[0];
	var browse = fields[1];
	var remove = fields[2];

	// get value
	if(value==undefined)
		value = '';
	if(value=='')
		remove.style.display = 'none'; // hide remove button
	else if(value!='')
		remove.style.display = ''; // display remove button

	// set field value
	field.value = value;
	this.debug('previewValue: ' + previewValue);
	// get browser type
	if(type==undefined)
		type = '';
		
	preview.innerHTML = '';

	// set preview
	if(value!='')
	{
		if(type == 'images')
		{
			var previewObj = document.createElement('img');
			previewObj.src = this.imageUrl + value;
			preview.appendChild(previewObj);
		
		} else
		{
			if(previewValue==undefined)
			{
				this.httpRequest(key,'',key + '=' + value,'preview');
				
			} else
			{
				preview.innerHTML = previewValue;
			}
		}
		
	}
		
	this.debug(key+'='+field.value);
	
	eval('browse.onclick = function(e) { window.open("' + this.browserUrl + '&method=' + this.object + '.setBrowseField(\'' + key + '\',\'' + type + '\',\'{PARAMS}\')&typeNames=' + type + '&type=' + type + '"); }');
	eval('remove.onclick = function(e) { ' + this.object + '.setBrowseField("' + key + '","' + type + '",""); }');
	
	eval(this.id + 'FormUpdate(\'' + key + '\')');
	
}

function formSetDateField(key,settings)
{

	settings = this.getSettings(settings);
	var field = document.getElementById(key);
}

function formFormat(key,format,reverse)
{
	var field = document.getElementById(key);
	field.value = this.getFormattedValue(field.value,format,reverse);
}

function formGetFormattedValue(value,format,reverse)
{

	if(reverse==undefined)
		reverse = false;

	// date format
	if(format == 'date')
	{
		// remove illegal characters
		value = value.replace(/[a-z]/gi,'');
							
		var d,m,y;
	
		// split day,month and year
		if(value.indexOf('-')!=-1)
			value = value.split('-');
		else if(value.indexOf('/')!=-1)
			value = value.split('/');
		else if(value.indexOf('.')!=-1)
			value = value.split('.');
			
		if(!reverse)
		{
			if(value[0] > 31)
			{
				y = value[0];
				m = value[1];
				d = value[2];
				
			} else
			{
				// get date format (dd-mm or mm-dd)
				if(value[0] <= 31 && value[1] <= 12)
				{
					d = value[0];
					m = value[1];
				} else
				{
					d = value[1];
					m = value[0];
				}
				
				// get date year
				if(value.length>2)		
				{				
					y = value[2];
					if(y>50&&y<=99)	
						y = parseInt(y) + 1900;
					else if(y<=50)
						y = parseInt(y) + 2000;
					
				} else {
					tmp = new Date();
					y = tmp.getFullYear();
				}
			}
			
		} else
		{
			d = value[0];
			m = value[1];
			y = value[2];
		}
		
		//alert(d+'/'+m+'/'+y);
		
		// create new date object
		date = new Date();
		date.setYear(y);
		date.setMonth((m - 1));
		date.setDate(d);
		
		
		
		// check if date format is illegal after all
		if(!isNaN(date.getDate()))
		{	
			// get day of week name
			//day = date.toLocaleString().slice(0,2);
			
			// set value
			if(reverse)
				return date.getFullYear()+'-'+(date.getMonth() + 1)+'-'+date.getDate();
			else
				return date.getDate()+'-'+(date.getMonth() + 1)+'-'+date.getFullYear();
		} else
		{
			return '';
		}
		
	// integer
	} else if(format == 'integer')
	{
		// remove illegal characters
		value = value.toString();
		value = parseInt(value.replace(/[^0-9]/gi,''));
		
		if(!isNaN(value))
			return value;
		else
			return '';
	
	// float
	} else if(format.substring(0,5) == 'float')
	{
		var decimals = format.substring(5).replace(/[^0-9]/gi,'');
		if(decimals=='')
			decimals = 2;
		
		// remove illegal characters
		value = String(value);
		value = value.replace(/[^0-9\.,]/gi,'');
		
		// replace , with .
		value = value.replace(/\,/,'.');
		
		// make float
		value = parseFloat(value);
		
		// round
		_decimals = (Math.pow(10,decimals));
		value = Math.round(value*_decimals)/_decimals;
		
		if(reverse)
		{
			return value;

		} else
		{
			if(!isNaN(value))
			{
				
				// replace .with ,
				value = String(value);
				value = value.replace(/\./g,',');
				if(decimals > 0)
				{
					
					var i = value.indexOf(',');
					if(i==-1)
					{
						value += ',';
						n = decimals;
					} else
					{
						n = decimals - (value.length - i - 1);
					}
					//alert(decimals);
					for(i=0;i<n;i++)
						value += '0';
				}
			
				return value;
			} else
				return '';
		}
		
	} else if(format == 'currency')
	{
		value = this.getFormattedValue(value,'float',reverse);
		
		if(reverse)
		{
			return value;
		} else
		{
			value = '€ '+value;
			return value;
		}
		
	} else if(format == 'uppercase')
	{
		return value.toUpperCase();
		
	} else if(format == 'lowercase')
	{
		return value.toLowerCase();
		
	} else
	{
		return value;
	}
	
}

function formSetLength(key,type,max)
{
	
	if(type == 'text' || type == 'textarea' || type == 'password')
	{
		var field = document.getElementById(key);
		
		if(max != undefined)
		{
			var length = field.value.length;
			max = parseInt(max);
			if(length > max)
				field.value = field.value.substring(0,max);
		}

	}
	
}

function formSetRequired(key,required)
{
	var field = document.getElementById(key);
					
	if(required==undefined)
		required = true;

	//field.className = (required?'Form2Required':'Form2Text');
	
	var label = this.getLabel(key);
	if (label) 
	{
		label.className = (required?'Form2Required':'');

		var requiredText = this.rc['form.required'];
		var requiredSpanId = key + '__required';
		
		if(required)
		{			
			var requiredSpan = document.getElementById(requiredSpanId);
			if(requiredSpan == undefined)
			{
				requiredSpan = document.createElement('span');
	
				requiredSpan.setAttribute('id',requiredSpanId);
				requiredSpan.innerHTML = requiredText;
				label.appendChild(requiredSpan);
			}
			
		} else
		{
			requiredSpan = document.getElementById(requiredSpanId);
			if(requiredSpan != undefined)
				label.removeChild(requiredSpan);
			
		}
				
	}
		
}

function formGetLabel(key)
{
	with(this);
	
	labels = document.getElementsByTagName('label');
	for(var i=0; i<labels.length; i++)
	{
		if(labels[i].htmlFor==key)
			return labels[i];
	}
	
	return false;
	
}

function formSetErrorMessage(key,type,message,label)
{
	
	var className = ' Form2Error';
	if(message == undefined)
		message = '';

	var field = document.getElementById(key);
	
	if(message!='')
	{
		field.className += className;

		if(label==undefined)
		{
			var label = this.getLabel(key);
			
			if(label)
			{
				label.className += className;
				label = label.innerHTML;
			} else
			{
				label = key;	
			}	
		
		}
	} else
	{
		field.className = field.className.replace(className,'');		
		
	}
	
	if(this.errorDisplay.indexOf('field')!=-1)
	{	
		var fieldMsg = document.getElementById('Error'+key);
		fieldMsg.innerHTML = message;	
	}
	
	
	var formMsgContainer = document.getElementById(this.name + 'Error');
	
	if(this.errorDisplay.indexOf('summary')!=-1)
	{
		
		if(formMsgContainer.style.display == 'none' && message!='')
		{
			formMsgContainer.style.display = '';	
			formMsgContainer.innerHTML = this.rc['form.message.summary'];
		}
		
		msgKey = this.formName + 'Error' + key;
		formMsg = document.getElementById(msgKey);
				
		if(formMsg == null)
		{	
			formMsg = document.createElement('DIV');
			formMsg.id = msgKey;
			formMsg.className = className;
			formMsgContainer.appendChild(formMsg);
		}
		
		if(message!='')
			message = label.replace(this.rc['form.required'],'') + ': ' + message;
		
		formMsg.innerHTML = message;
	}

	// hide error container if no messages
	var hide = true;
	for(i=0; i<formMsgContainer.getElementsByTagName('div').length; i++)
	{
		if(formMsgContainer.getElementsByTagName('div')[i].innerHTML != '')
			hide = false;
	}
	if(hide)
		formMsgContainer.style.display = 'none';
	
}

function formValRequired(key,type,format)
{
	if(this.getValue(key,type,format)!='')
	{
		this.setErrorMessage(key);
		return true;
	}
		
	this.setErrorMessage(key,type,this.rc['form.message.required']);
	return false;
}

function formValExpression(key,type,format,expression,message)
{
	if(eval(expression))
	{
		this.setErrorMessage(key);
		return true;
	}
		
	this.setErrorMessage(key,type,(message != undefined && message != '' ? message : this.rc['form.message.expression']));
	
	return false;
}

function formValRegex(key,type,format,expression)
{
	if(eval('/' + expression + '/gi.test(this.getValue(key,type,format))'))
	{
		this.setErrorMessage(key);
		return true;
	}
		
	this.setErrorMessage(key,type,this.rc['form.message.regex']);
	return false;
}

function formValLength(key,type,max,min)
{
	
	if(type == 'text' || type == 'textarea' || type == 'password')
	{
		var field = document.getElementById(key);
		var length = field.value.length;
		
		if(max != undefined)
		{
			max = parseInt(max);
			if(length > max)
			{
				this.setErrorMessage(key,type,this.rc['form.message.lengthmax'].replace('{max}',max));
				return false;
			}
		}
		
		if(min != undefined)
		{
			min = parseInt(min);
			if(length < min)
			{
				this.setErrorMessage(key,type,this.rc['form.message.lengthmin'].replace('{min}',min));
				return false;
			}
		}
	}
	
	this.setErrorMessage(key);
	return true;
	
}

//
// helper functions
//

function formDebug(msg)
{
	div = document.getElementById(this.object + 'formdebug');
	if(div!=null)
		div.value = msg + '\n' + div.value;
}

Array.prototype.find = function (element) 
{
  for (var keys in this) 
  {
    if (this[keys] == element) 
    {
      return keys;
      break;
    }  
  }
  return -1;
};

/**
 * Converts 'param1: value1; param2: value2; etc..' to array('param1' => 'value1', 'param2' => 'value2', etc..)
 **/
function formGetSettings(settings)
{	
	var _settings = new Array();
	if(settings != undefined)
	{
		settings = settings.split(';');
		for(i=0; i<settings.length; i++)
		{
			setting = settings[i].split(':');
			if(setting.length>1)
			{
				setting[0] = setting[0].replace(/^\s+|\s+$/g,""); // trim
				setting[1] = setting[1].replace(/^\s+|\s+$/g,"");
				_settings[setting[0]] = setting[1];
			}
		}
	}
	
	return _settings;
}

function formRefresh()
{
	// set refresh flag
	field = document.getElementById(this.id + 'refresh');
	if(field != undefined)
		field.value = '1';
	
	// submit form
	form = document.forms[this.name];
	form.submit();
}

/**
 * Form2 constructor
 *
 * @param string formName
 * @param string object
 * @param string httprequesthandler
 * @param string filehandler
 * @param string language ('nl','en')
 * @param string errorDisplay ('[field],[summary]')
 * @param bool debug
 **/
function Form2(id,name,object,httprequestUrl,uploadUrl,browserUrl,imageUrl,language,errorDisplay,debug)
{	
	
	// vars
	this.rc 				= new Array();

	this.id 				= id;
	this.name 				= name;
	this.object 			= object;
	this.language 			= language;
	this.errorDisplay 		= errorDisplay;
	this.httprequestUrl		= httprequestUrl;
	this.uploadUrl 			= uploadUrl;
	this.browserUrl 		= browserUrl;
	this.imageUrl 			= imageUrl;
	this.xmlhttp			= null;

	this.httpRequests 		= [];
	this.httpRequestIndex 	= 0;
	this.httpRequestBusy 	= false;
	
	// methods
	this.showTab 			= formShowTab;
	this.show 				= formShow;
	this.hide 				= formHide;
	this.hideValueLabel 	= formHideValueLabel;
	this.showValueLabel 	= formShowValueLabel;
	this.getValue 			= formGetValue;
	this.setValue 			= formSetValue;
	
	
	this.httpRequest 		= formHttpRequest;
	this.httpSet 			= formHttpSet;
	this.httpQueueRequest = formHttpQueueRequest;
	this.httpExecRequest = formHttpExecRequest;


	
	
	
	this.setOptions 		= formSetOptions;
	this.setStyle			= formSetStyle;
	this.setReadonly		= formSetReadonly;
	this.setFileField 		= formSetFileField;
	this.setSearchField 	= formSetSearchField;
	this.setSearchResults 	= formSetSearchResults;
	this.setHtmlField 		= formSetHtmlField;
	this.htmlBrowse 		= formHtmlBrowse;
	this.setDateField 		= formSetDateField;
	this.setBrowseField 	= formSetBrowseField;
	this.format 			= formFormat;
	this.getFormattedValue 	= formGetFormattedValue;
	this.setLength 			= formSetLength;
	this.setRequired 		= formSetRequired;
	this.getLabel 			= formGetLabel;
	this.setErrorMessage 	= formSetErrorMessage;
	this.valRequired 		= formValRequired;
	this.valExpression		= formValExpression;
	this.valRegex 			= formValRegex;
	this.valLength 			= formValLength;
	this.getSettings		= formGetSettings;
	this.refresh			= formRefresh;
	this.debug 				= formDebug;
	
	// init form error message container
	if(document.getElementById(this.name + 'Error') != undefined)
	{
		var formMsgContainer = document.getElementById(this.name + 'Error');
		formMsgContainer.style.display = 'none';
	}

	// create debug layer
	if(debug)
		document.write('<div>Debug:</div><textarea id="' + this.object + 'formdebug" style="width: 100%; height: 200px; font-family: courier; background-color: black; color: white;"></textarea>');
	
}
