"use strict";
let cf7signature_resized=0;
let wpcf7cf_timeout;
let wpcf7cf_change_time_ms=100;
if(window.wpcf7&&!wpcf7.setStatus){
wpcf7.setStatus=(form, status)=> {
form=form.length ? form[0]:form;
const defaultStatuses=new Map([
[ 'init', 'init' ],
[ 'validation_failed', 'invalid' ],
[ 'acceptance_missing', 'unaccepted' ],
[ 'spam', 'spam' ],
[ 'aborted', 'aborted' ],
[ 'mail_sent', 'sent' ],
[ 'mail_failed', 'failed' ],
[ 'submitting', 'submitting' ],
[ 'resetting', 'resetting' ],
]);
if(defaultStatuses.has(status) ){
status=defaultStatuses.get(status);
}
if(! Array.from(defaultStatuses.values()).includes(status) ){
status=status.replace(/[^0-9a-z]+/i, ' ').trim();
status=status.replace(/\s+/, '-');
status=`custom-${ status }`;
}
const prevStatus=form.getAttribute('data-status');
form.wpcf7.status=status;
form.setAttribute('data-status', status);
form.classList.add(status);
if(prevStatus&&prevStatus!==status){
form.classList.remove(prevStatus);
}
return status;
};}
if(window.wpcf7cf_running_tests){
document.querySelectorAll('input[name="_wpcf7cf_options"]').forEach(input=> {
const opt=JSON.parse(input.value);
opt.settings.animation_intime=0;
opt.settings.animation_outtime=0;
input.value=JSON.stringify(opt);
});
wpcf7cf_change_time_ms=0;
}
const wpcf7cf_show_animation={ "height": "show", "marginTop": "show", "marginBottom": "show", "paddingTop": "show", "paddingBottom": "show" };
const wpcf7cf_hide_animation={ "height": "hide", "marginTop": "hide", "marginBottom": "hide", "paddingTop": "hide", "paddingBottom": "hide" };
const wpcf7cf_show_step_animation={ "opacity": "show" };
const wpcf7cf_hide_step_animation={ "opacity": "hide" };
const wpcf7cf_change_events='input.wpcf7cf paste.wpcf7cf change.wpcf7cf click.wpcf7cf propertychange.wpcf7cf changedisabledprop.wpcf7cf';
const wpcf7cf_forms=[];
const Wpcf7cfForm=function(formElement){
const $form=jQuery(formElement);
const options_element=$form.find('input[name="_wpcf7cf_options"]').eq(0);
if(!options_element.length||!options_element.val()){
return false;
}
const form=this;
formElement.addEventListener('submit', function(e){
if(window.wpcf7cf_updatingGroups){
e.preventDefault();
e.stopImmediatePropagation();
const retry=()=> {
if(!window.wpcf7cf_updatingGroups){
$form.off('.wpcf7cf-autosubmit');
formElement.requestSubmit();
}else{
requestAnimationFrame(retry);
}};
$form.on('submit.wpcf7cf-autosubmit', (e)=> e.preventDefault());
retry();
return false;
}}, true);
const submitButtons=formElement.querySelectorAll('button[type=submit], input[type=submit]');
const observer=new MutationObserver(()=> {
const isSubmitting=formElement.classList.contains('submitting');
submitButtons.forEach(button=> {
button.disabled=isSubmitting;
button.classList.toggle('is-disabled', isSubmitting);
});
});
observer.observe(formElement, { attributes: true, attributeFilter: ['class'] });
const form_options=JSON.parse(options_element.val());
form.$form=$form;
form.formElement=formElement;
form.$input_hidden_group_fields=$form.find('[name="_wpcf7cf_hidden_group_fields"]');
form.$input_hidden_groups=$form.find('[name="_wpcf7cf_hidden_groups"]');
form.$input_visible_groups=$form.find('[name="_wpcf7cf_visible_groups"]');
form.$input_repeaters=$form.find('[name="_wpcf7cf_repeaters"]');
form.$input_steps=$form.find('[name="_wpcf7cf_steps"]');
form.unit_tag=$form.closest('.wpcf7').attr('id');
form.conditions=form_options['conditions'];
form.simpleDom=null;
form.reloadSimpleDom=function(){
form.simpleDom=wpcf7cf.get_simplified_dom_model(form.formElement);
}
form.updateSimpleDom=function(){
if(!form.simpleDom){
form.reloadSimpleDom();
}
const inputs=Object.values(form.simpleDom).filter(item=> item.type==='input');
const formdata=new FormData(form.formElement);
let formdataEntries=[... formdata.entries()].map(entry=> [ entry[0], entry[1].name ?? entry[1] ]);
const buttonEntries=Array.from(form.formElement.querySelectorAll('button'), b=> [b.name, b.value]);
formdataEntries=formdataEntries.concat(buttonEntries);
inputs.forEach(simpleDomItem=> {
const newValue=form.getNewDomValueIfChanged(simpleDomItem, formdataEntries);
if(newValue!==null){
form.simpleDom[simpleDomItem.name].val=newValue;
}});
}
form.isDomMatch=function(simpleDomItem, formDataEntries){
const simpleDomItemName=simpleDomItem.name;
const simpleDomItemValues=simpleDomItem.val;
const currentValues=formDataEntries.filter(entry=> entry[0]===simpleDomItemName).map(entry=> entry[1]);
return currentValues.join('|')===simpleDomItemValues.join('|');
}
form.getNewDomValueIfChanged=function(simpleDomItem, formDataEntries){
const simpleDomItemName=simpleDomItem.name;
const simpleDomItemValues=simpleDomItem.val;
const currentValues=formDataEntries.filter(entry=> entry[0]===simpleDomItemName).map(entry=> entry[1]);
return currentValues.join('|')===simpleDomItemValues.join('|') ? null:currentValues;
}
form.get=function (selector){
return jQuery(selector, form.$form);
}
form.getFieldByName=function(name){
return form.simpleDom[name]||form.simpleDom[name+'[]'];
}
for (let i=0; i < form.conditions.length; i++){
const condition=form.conditions[i];
if(!('and_rules' in condition)){
condition.and_rules=[{'if_field':condition.if_field,'if_value':condition.if_value,'operator':condition.operator}];
}}
form.initial_conditions=form.conditions;
form.settings=form_options['settings'];
form.$groups=jQuery();
form.repeaters=[];
form.multistep=null;
form.fields=[];
form.settings.animation_intime=parseInt(form.settings.animation_intime);
form.settings.animation_outtime=parseInt(form.settings.animation_outtime);
if(form.settings.animation==='no'){
form.settings.animation_intime=0;
form.settings.animation_outtime=0;
}
form.updateGroups();
form.updateEventListeners();
form.displayFields();
form.$form.on('reset.wpcf7cf', form, function(e){
const form=e.data;
setTimeout(function(){
form.reloadSimpleDom();
form.displayFields();
form.resetRepeaters();
if(form.multistep!=null){
form.multistep.moveToStep(1, false);
}
setTimeout(function(){
if(form.$form.hasClass('sent')){
jQuery('.wpcf7-response-output', form.$form)[0].scrollIntoView({behavior: "smooth", block:"nearest", inline:"nearest"});
}}, 400);
},200);
});
}
Wpcf7cfForm.prototype.resetRepeaters=function(){
const form=this;
form.repeaters.forEach(repeater=> {
repeater.updateSubs(repeater.params.$repeater.initial_subs);
});
}
Wpcf7cfForm.prototype.displayFields=function(){
const form=this;
const wpcf7cf_conditions=this.conditions;
const wpcf7cf_settings=this.settings;
if(cf7signature_resized===0&&typeof signatures!=='undefined'&&signatures.constructor===Array&&signatures.length > 0){
for (let i=0; i < signatures.length; i++){
if(signatures[i].canvas.width===0){
const $sig_canvas=jQuery(".wpcf7-form-control-signature-body>canvas");
const $sig_wrap=jQuery(".wpcf7-form-control-signature-wrap");
$sig_canvas.eq(i).attr('width',  $sig_wrap.width());
$sig_canvas.eq(i).attr('height', $sig_wrap.height());
cf7signature_resized=1;
}}
}
form.$groups.addClass('wpcf7cf-hidden');
for (let i=0; i < wpcf7cf_conditions.length; i++){
const condition=wpcf7cf_conditions[i];
const show_group=window.wpcf7cf.should_group_be_shown(condition, form);
if(show_group){
form.get('[data-id="'+condition.then_field+'"]').removeClass('wpcf7cf-hidden');
}}
const animation_intime=wpcf7cf_settings.animation_intime;
const animation_outtime=wpcf7cf_settings.animation_outtime;
form.$groups.each(function (index){
const $group=jQuery(this);
if($group.is(':animated')){
$group.finish();
}
if($group.css('display')==='none'&&!$group.hasClass('wpcf7cf-hidden')){
if($group.prop('tagName')==='SPAN'){
$group.show().trigger('wpcf7cf_show_group');
}else{
$group.animate(wpcf7cf_show_animation, animation_intime).trigger('wpcf7cf_show_group');
}
if($group.attr('data-disable_on_hide')!==undefined){
$group.find(':input').prop('disabled', false).trigger('changedisabledprop.wpcf7cf');
$group.find('.wpcf7-form-control-wrap').removeClass('wpcf7cf-disabled');
}}else if($group.css('display')!=='none'&&$group.hasClass('wpcf7cf-hidden')){
if($group.attr('data-clear_on_hide')!==undefined){
const $inputs=jQuery(':input', $group).not(':button, :submit, :reset, :hidden');
$inputs.each(function(){
const $this=jQuery(this);
$this.val(this.defaultValue);
$this.prop('checked', this.defaultChecked);
});
jQuery('option', $group).each(function(){
this.selected=this.defaultSelected;
});
jQuery('select', $group).each(function(){
const $select=jQuery(this);
if($select.val()===null){
$select.val(jQuery("option:first",$select).val());
}});
$inputs.each(function(){this.dispatchEvent(new Event("change",{"bubbles":true}))});
}
if($group.prop('tagName')==='SPAN'){
$group.hide().trigger('wpcf7cf_hide_group');
}else{
$group.animate(wpcf7cf_hide_animation, animation_outtime).trigger('wpcf7cf_hide_group');
}}
});
form.updateHiddenFields();
form.updateSummaryFields();
};
Wpcf7cfForm.prototype.updateSummaryFields=function(){
const form=this;
const $summary=form.get('.wpcf7cf-summary');
if($summary.length==0||!$summary.is(':visible')){
return;
}
const fd=new FormData();
const formdata=form.$form.serializeArray();
jQuery.each(formdata,function(key, input){
fd.append(input.name, input.value);
});
jQuery.each(form.$form.find('input[type="file"]'), function(index, el){
if(! el.files.length) return true;
const fieldName=el.name;
fd.append(fieldName, new Blob() , Array.from(el.files).map(file=> file.name).join(', '));
});
jQuery.ajax({
url: wpcf7cf_global_settings.ajaxurl + '?action=wpcf7cf_get_summary',
type: 'POST',
data: fd,
processData: false,
contentType: false,
dataType: 'json',
success: function(json){
$summary.html(json.summaryHtml);
}});
};
Wpcf7cfForm.prototype.updateHiddenFields=function(){
const form=this;
const hidden_fields=[];
const hidden_groups=[];
const visible_groups=[];
form.$groups.each(function (){
const $group=jQuery(this);
if($group.hasClass('wpcf7cf-hidden')){
hidden_groups.push($group.attr('data-id'));
if($group.attr('data-disable_on_hide')!==undefined){
$group.find('input,select,textarea').each(function(){
const $this=jQuery(this);
if(!$this.prop('disabled')){
$this.prop('disabled', true).trigger('changedisabledprop.wpcf7cf');
}
if(form.$form.find(`[data-class="wpcf7cf_group"]:not(.wpcf7cf-hidden) [name='${$this.attr('name')}']`).length===0){
hidden_fields.push($this.attr('name'));
}})
$group.find('.wpcf7-form-control-wrap').addClass('wpcf7cf-disabled');
}else{
$group.find('input,select,textarea').each(function (){
hidden_fields.push(jQuery(this).attr('name'));
});
}}else{
visible_groups.push($group.attr('data-id'));
}});
form.hidden_fields=hidden_fields;
form.hidden_groups=hidden_groups;
form.visible_groups=visible_groups;
form.$input_hidden_group_fields.val(JSON.stringify(hidden_fields));
form.$input_hidden_groups.val(JSON.stringify(hidden_groups));
form.$input_visible_groups.val(JSON.stringify(visible_groups));
return true;
};
Wpcf7cfForm.prototype.updateGroups=function(){
const form=this;
form.$groups=form.$form.find('[data-class="wpcf7cf_group"]');
form.$groups.height('auto');
form.conditions=window.wpcf7cf.get_nested_conditions(form);
};
Wpcf7cfForm.prototype.updateEventListeners=function(){
const form=this;
form.get('input, select, textarea, button').not('.wpcf7cf_add, .wpcf7cf_remove').off(wpcf7cf_change_events).on(wpcf7cf_change_events,form, function(e){
window.wpcf7cf_updatingGroups=true;
const form=e.data;
clearTimeout(wpcf7cf_timeout);
wpcf7cf_timeout=setTimeout(function(){
window.wpcf7cf.updateMultistepState(form.multistep);
form.updateSimpleDom();
form.displayFields();
window.wpcf7cf_updatingGroups=false;
}, wpcf7cf_change_time_ms);
});
};
window.wpcf7cf={
hideGroup:function($group, animate){
},
showGroup:function($group, animate){
},
updateRepeaterSubHTML:function(html, oldSuffix, newSuffix, parentRepeaters){
const oldIndexes=oldSuffix.split('__');
oldIndexes.shift();
const newIndexes=newSuffix.split('__');
newIndexes.shift();
let returnHtml=html;
if(oldIndexes&&newIndexes &&
oldIndexes.length===parentRepeaters.length &&
newIndexes.length===parentRepeaters.length
){
const parentRepeatersInfo=parentRepeaters.map((repeaterId, i)=> {
return {[repeaterId.split('__')[0]]: [oldIndexes[i], newIndexes[i]]};});
const length=parentRepeatersInfo.length;
let replacements=oldIndexes.map((oldIndex, i)=> {
return [
'__'+oldIndexes.slice(0,length-i).join('__'),
'__'+newIndexes.slice(0,length-i).join('__'),
];
});
for (let i=0; i<length ; i++){
const id=Object.keys(parentRepeatersInfo[i])[0];
const find=parentRepeatersInfo[i][id][0];
const repl=parentRepeatersInfo[i][id][1];
replacements.push([
`<span class="wpcf7cf-index wpcf7cf__${id}">${find}<\\/span>`,
`<span class="wpcf7cf-index wpcf7cf__${id}">${repl}</span>`
]);
}
replacements.forEach(([oldSuffix, newSuffix])=> {
returnHtml=returnHtml.replace(new RegExp(oldSuffix,'g'), newSuffix);
});
}
return returnHtml ;
},
initForm:function($forms){
$forms.each(function(){
const formElement=this;
if(formElement.classList.contains('wpcf7-form') &&
!wpcf7cf_forms.some((form)=>{ return form.$form.get(0)===formElement; })
){
wpcf7cf_forms.push(new Wpcf7cfForm(formElement));
}});
},
getWpcf7cfForm:function ($form){
const matched_forms=wpcf7cf_forms.filter((form)=>{
return form.$form.get(0)===$form.get(0);
});
if(matched_forms.length){
return matched_forms[0];
}
return false;
},
get_nested_conditions:function(form){
const conditions=form.initial_conditions;
form.reloadSimpleDom();
const groups=Object.values(form.simpleDom).filter(function(item, i){
return item.type==='group';
});
let sub_conditions=[];
for(let i=0;  i < groups.length; i++){
const g=groups[i];
let relevant_conditions=conditions.filter(function(condition, i){
return condition.then_field===g.original_name;
});
relevant_conditions=relevant_conditions.map(function(item,i){
return {
then_field:g.name,
and_rules:item.and_rules.map(function(and_rule, i){
return {
if_field:and_rule.if_field+g.suffix,
if_value:and_rule.if_value,
operator:and_rule.operator
};})
}});
sub_conditions=sub_conditions.concat(relevant_conditions);
}
return sub_conditions;
},
get_simplified_dom_model:function(currentNode, simplified_dom={}, parentGroups=[], parentRepeaters=[]){
const type=currentNode.classList&&currentNode.classList.contains('wpcf7cf_repeater') ? 'repeater' :
currentNode.dataset.class=='wpcf7cf_group' ? 'group' :
currentNode.className=='wpcf7cf_step' ? 'step' :
currentNode.hasAttribute('name') ? 'input':false;
let newParentRepeaters=[...parentRepeaters];
let newParentGroups=[...parentGroups];
if(type){
const name=type==='input' ? currentNode.getAttribute('name'):currentNode.dataset.id;
if(type==='repeater'){
newParentRepeaters.push(name);
}
if(type==='group'){
newParentGroups.push(name);
}
if(name.substring(0,6)==='_wpcf7') return {};
const original_name=type==='repeater'||type==='group' ? currentNode.dataset.orig_data_id
: type==='input' ? (currentNode.getAttribute('data-orig_name')||name)
: name;
const nameWithoutBrackets=name.replace('[]','');
const originalNameWithoutBrackets=original_name.replace('[]','');
const val=type==='step' ? [currentNode.dataset.id.substring(5)]:[];
const suffix=nameWithoutBrackets.replace(originalNameWithoutBrackets, '');
if(!simplified_dom[name]){
simplified_dom[name]={name, type, original_name, suffix, val, parentGroups, parentRepeaters}}
if(type==='input'){
if((currentNode.type==='checkbox'||currentNode.type==='radio')&&!currentNode.checked) return {};
if(currentNode.multiple&&currentNode.options){
simplified_dom[name].val=Object.values(currentNode.options).filter(o=> o.selected).map(o=> o.value)
}else{
simplified_dom[name].val.push(currentNode.value);
}}
}
const getter=Object.getOwnPropertyDescriptor(Element.prototype, "children").get;
const children=getter.call(currentNode);
Array.from(children).forEach(childNode=> {
const dom=wpcf7cf.get_simplified_dom_model(childNode, simplified_dom, newParentGroups, newParentRepeaters);
simplified_dom={...dom, ...simplified_dom} ;
});
return simplified_dom;
},
updateMultistepState: function (multistep){
if(multistep==null) return;
if(multistep.form.$form.hasClass('submitting')) return;
const stepsData={
currentStep:multistep.currentStep,
numSteps:multistep.numSteps,
fieldsInCurrentStep:multistep.getFieldsInStep(multistep.currentStep)
};
multistep.form.$input_steps.val(JSON.stringify(stepsData));
multistep.$btn_prev.removeClass('disabled').attr('disabled', false);
multistep.$btn_next.removeClass('disabled').attr('disabled', false);
if(multistep.currentStep==multistep.numSteps){
multistep.$btn_next.addClass('disabled').attr('disabled', true);
}
if(multistep.currentStep==1){
multistep.$btn_prev.addClass('disabled').attr('disabled', true);
}
const $submit_button=multistep.form.$form.find('input[type="submit"]:last').eq(0);
const $ajax_loader=multistep.form.$form.find('.wpcf7-spinner').eq(0);
$submit_button.detach().prependTo(multistep.$btn_next.parent());
$ajax_loader.detach().prependTo(multistep.$btn_next.parent());
if(multistep.currentStep==multistep.numSteps){
multistep.$btn_next.hide();
$submit_button.show();
}else{
$submit_button.hide();
multistep.$btn_next.show();
}
const $dots=multistep.$dots.find('.dot');
$dots.removeClass('active').removeClass('completed');
for(let step=1; step <=multistep.numSteps; step++){
if(step < multistep.currentStep){
$dots.eq(step-1).addClass('completed');
}else if(step==multistep.currentStep){
$dots.eq(step-1).addClass('active');
}}
},
should_group_be_shown:function(condition, form){
let show_group=true;
let atLeastOneFieldFound=false;
for (let and_rule_i=0; and_rule_i < condition.and_rules.length; and_rule_i++){
let condition_ok=false;
const condition_and_rule=condition.and_rules[and_rule_i];
const inputField=form.getFieldByName(condition_and_rule.if_field);
if(!inputField) continue;
atLeastOneFieldFound=true;
const if_val=condition_and_rule.if_value;
let operator=condition_and_rule.operator;
operator=operator==='≤' ? 'less than or equals':operator;
operator=operator==='≥' ? 'greater than or equals':operator;
operator=operator==='>' ? 'greater than':operator;
operator=operator==='<' ? 'less than':operator;
const $field=operator==='function'&&jQuery(`[name="${inputField.name}"]`).eq(0);
condition_ok=this.isConditionTrue(inputField.val,operator,if_val, $field);
show_group=show_group&&condition_ok;
}
return show_group&&atLeastOneFieldFound;
},
isConditionTrue(values, operator, testValue='', $field=jQuery()){
if(!Array.isArray(values)){
values=[values];
}
let condition_ok=false;
const valuesAreEmpty=values.length===0||values.every((v)=> !v&&v!==0);
if(operator==='equals'&&testValue===''&&valuesAreEmpty){
return true;
}
if(operator==='not equals'&&testValue===''&&valuesAreEmpty){
return false;
}
if(valuesAreEmpty){
if(operator==='is empty'){
condition_ok=true;
}}else{
if(operator==='not empty'){
condition_ok=true;
}}
const testValueNumber=isFinite(parseFloat(testValue)) ? parseFloat(testValue):NaN;
if(operator==='not equals'||operator==='not equals (regex)'){
condition_ok=true;
}
if(operator==='function'
&& typeof window[testValue]=='function'
&& window[testValue]($field)
){
condition_ok=true;
}
let regex_patt=/.*/i;
let isValidRegex=true;
if(operator==='equals (regex)'||operator==='not equals (regex)'){
try {
regex_patt=new RegExp(testValue, 'i');
} catch(e){
isValidRegex=false;
}}
for(let i=0; i < values.length; i++){
const value=values[i];
const valueNumber=isFinite(parseFloat(value)) ? parseFloat(value):NaN;
const valsAreNumbers = !isNaN(valueNumber)&&!isNaN(testValueNumber);
if(operator==='equals'&&value===testValue ||
operator==='equals (regex)'&&regex_patt.test(value) ||
operator==='greater than'&&valsAreNumbers&&valueNumber > testValueNumber ||
operator==='less than'&&valsAreNumbers&&valueNumber < testValueNumber ||
operator==='greater than or equals'&&valsAreNumbers&&valueNumber >=testValueNumber ||
operator==='less than or equals'&&valsAreNumbers&&valueNumber <=testValueNumber
){
condition_ok=true;
break;
}else if(operator==='not equals'&&value===testValue ||
operator==='not equals (regex)'&&regex_patt.test(value)
){
condition_ok=false;
break;
}}
return condition_ok;
},
getFormObj($form){
if(typeof $form==='string'){
$form=jQuery($form).eq(0);
}
return wpcf7cf.getWpcf7cfForm($form);
},
getRepeaterObj($form, repeaterDataId){
const form=wpcf7cf.getFormObj($form);
const repeater=form.repeaters.find(repeater=> repeater.params.$repeater.attr('data-id')===repeaterDataId);
return repeater;
},
getMultiStepObj($form){
const form=wpcf7cf.getFormObj($form);
return form.multistep;
},
repeaterAddSub($form,repeaterDataId){
const repeater=wpcf7cf.getRepeaterObj($form, repeaterDataId);
repeater.updateSubs(repeater.params.$repeater.num_subs+1);
},
repeaterAddSubAtIndex($form,repeaterDataId,index){
const repeater=wpcf7cf.getRepeaterObj($form, repeaterDataId);
repeater.addSubs(1, index);
},
repeaterRemoveSubAtIndex($form,repeaterDataId,index){
const repeater=wpcf7cf.getRepeaterObj($form, repeaterDataId);
repeater.removeSubs(1, index);
},
repeaterRemoveSub($form,repeaterDataId){
const repeater=wpcf7cf.getRepeaterObj($form, repeaterDataId);
repeater.updateSubs(repeater.params.$repeater.num_subs-1);
},
repeaterSetNumberOfSubs($form, repeaterDataId, numberOfSubs){
const repeater=wpcf7cf.getRepeaterObj($form, repeaterDataId);
repeater.updateSubs(numberOfSubs);
},
multistepMoveToStep($form, step){
const multistep=wpcf7cf.getMultiStepObj($form);
multistep.moveToStep(step);
},
async multistepMoveToStepWithValidation($form, step){
const multistep=wpcf7cf.getMultiStepObj($form);
const result=await multistep.validateStep(multistep.currentStep);
if(result==='success'){
multistep.moveToStep(step);
}},
};
document.querySelectorAll('.wpcf7-form').forEach(function(formElement){
wpcf7cf_forms.push(new Wpcf7cfForm(formElement));
});
document.addEventListener('DOMContentLoaded', function (){
wpcf7cf_forms.forEach(function(f){
f.displayFields();
});
});<form action="" method="post">
<div id="request-filesystem-credentials-form" class="request-filesystem-credentials-form">
	<h2 id='request-filesystem-credentials-title'>Connection Information</h2><p id="request-filesystem-credentials-desc">
	To perform the requested action, WordPress needs to access your web server. Please enter your FTP or SSH credentials to proceed. If you do not remember your credentials, you should contact your web host.</p>
<label for="hostname">
	<span class="field-title">Hostname</span>
	<input name="hostname" type="text" id="hostname" aria-describedby="request-filesystem-credentials-desc" class="code" placeholder="example: www.wordpress.org" value="212.91.32.153:1927" />
</label>
<div class="ftp-username">
	<label for="username">
		<span class="field-title">FTP/SSH Username</span>
		<input name="username" type="text" id="username" value="asotech" />
	</label>
</div>
<div class="ftp-password">
	<label for="password">
		<span class="field-title">FTP/SSH Password</span>
		<input name="password" type="password" id="password" value="" spellcheck="false" />
		This password will not be stored on the server.	</label>
</div>
<fieldset>
<legend>Connection Type</legend>
		<label for="ftp">
		<input type="radio" name="connection_type" id="ftp" value="ftp"  checked='checked'  />
		FTP	</label>
			<label for="ftps">
		<input type="radio" name="connection_type" id="ftps" value="ftps"   />
		FTPS (SSL)	</label>
			<label for="ssh">
		<input type="radio" name="connection_type" id="ssh" value="ssh"   />
		SSH2	</label>
		</fieldset>
	<fieldset id="ssh-keys" class="hidden">
<legend>Authentication Keys</legend>
<label for="public_key">
	<span class="field-title">Public Key:</span>
	<input name="public_key" type="text" id="public_key" aria-describedby="auth-keys-desc" value="" />
</label>
<label for="private_key">
	<span class="field-title">Private Key:</span>
	<input name="private_key" type="text" id="private_key" value="" />
</label>
<p id="auth-keys-desc">Enter the location on the server where the public and private keys are located. If a passphrase is needed, enter that in the password field above.</p>
</fieldset>
			<p class="request-filesystem-credentials-action-buttons">
		