$.fbuilder[ 'typeList' ] = [];
$.fbuilder[ 'categoryList' ] = [];
$.fbuilder[ 'controls' ] = {};
$.fbuilder[ 'preview' ] = function( e )
{
var f = $( e.form );
f.attr( 'target', 'formpopup' ).attr(
'onsubmit',
function( f )
{
var w = screen.width*0.8,
h = screen.height*0.7,
l = screen.width/2 - w/2,
t = screen.height/2 - h/2,
new_window = window.open('', 'formpopup', 'resizeable,scrollbars,width='+w+',height='+h+',left='+l+',top='+t);
$( f ).removeAttr( 'onsubmit' );
new_window.focus();
}
);
$( '' ).appendTo( f );
f[ 0 ].submit();
f.attr( 'target', '_self' ).find( 'input[name="preview"]').remove();
};
$.fbuilder[ 'htmlEncode' ] = function(value)
{
value = $('
').text(value).html()
value = value.replace( /&/g, '&' ).replace(/"/g, """);
return value;
};
$.fbuilder[ 'escape_symbol' ] = function( value ) // Escape the symbols used in regulars expressions
{
return value.replace(/([\^\$\-\.\,\[\]\(\)\/\\\*\?\+\!\{\}])/g, "\\$1");
};
$.fbuilder[ 'parseVal' ] = function( value, thousandSeparator, decimalSymbol )
{
if( value == '' ) return 0;
value += '';
thousandSeparator = new RegExp( $.fbuilder.escape_symbol( ( typeof thousandSeparator == 'undefined' ) ? ',' : thousandSeparator ), 'g' );
decimalSymbol = new RegExp( $.fbuilder.escape_symbol( ( typeof decimalSymbol == 'undefined' ) ? '.' : decimalSymbol ), 'g' );
var t = value.replace( thousandSeparator, '' ).replace( decimalSymbol, '.' ).replace( /\s/g, '' ),
p = /[+-]?((\d+(\.\d+)?)|(\.\d+))/.exec( t );
return ( p ) ? p[0]*1 : '"' + value.replace(/'/g, "\\'").replace( /\$/g, '') + '"';
};
$.fbuilder[ 'showErrorMssg' ] = function( str ) // Display an error message
{
$( '.form-builder-error-messages' ).html( '' + str + '
' );
};
// fbuilder plugin
$.fn.fbuilder = function(options){
var opt = $.extend({},
{
pub:false,
identifier:"",
title:""
},
options, true),
typeList = $.fbuilder.typeList,
categoryList = $.fbuilder.categoryList;
$.fbuilder[ 'getNameByIdFromType' ] = function( id )
{
for ( var i = 0, h = typeList.length; i < h; i++ )
{
if ( typeList[i].id == id )
{
return typeList[i].name;
}
}
return "";
};
for ( var i=0, h = typeList.length; i < h; i++ )
{
var category_id = typeList[ i ].control_category;
if( typeof categoryList[ category_id ] == 'undefined' )
{
categoryList[ category_id ] = { title : '', description : '', typeList : [] };
}
else if( typeof categoryList[ category_id ][ 'typeList' ] == 'undefined' )
{
categoryList[ category_id ][ 'typeList' ] = [];
}
categoryList[ category_id ].typeList.push( i );
}
for ( var i in categoryList )
{
$("#tabs-1").append(''+categoryList[ i ].title+'
');
if( typeof categoryList[ i ][ 'description' ] != 'undefined' && !/^\s*$/.test( categoryList[ i ][ 'description' ] ) )
{
$("#tabs-1").append(''+categoryList[ i ].description+'
');
}
if( typeof categoryList[ i ][ 'typeList' ] != 'undefined' )
{
for( var j = 0, k = categoryList[ i ].typeList.length; j < k; j++ )
{
var index = categoryList[ i ].typeList[ j ];
$("#tabs-1").append(''+typeList[ index ].name+'
');
}
}
}
$("#tabs-1").append('');
$( ".button").button();
// Create a items object
var items = [],
fieldsIndex = {},
calculatedFields = {},
selected = -3;
$.fbuilder[ 'editItem' ] = function( id )
{
selected = id;
try
{
$('#tabs-2').html( items[id].showAllSettings() );
} catch (e) {}
items[id].editItemEvents();
};
$.fbuilder[ 'removeItem' ] = function( index )
{
if( typeof items[ index ][ 'remove' ] != 'undefined' ) items[ index ][ 'remove' ]();
items.splice(index,1);
for ( var i=0, h = items.length; in)
n = n1;
}
if( $( '#field-' + items[ index ].index ).parents( '.fields' ).length )
{
var i = $( '#field-' + items[ index ].index ).parents( '.fields' ).attr( 'id' ).replace( 'field-', '' );
if( typeof items[ i ][ 'duplicateItem' ] != 'undefined' ) items[ i ][ 'duplicateItem' ]( items[ index ].name, 'fieldname'+( n + 1 ) );
}
items.splice( index*1+1, 0, $.extend( true, {}, items[index], { name:"fieldname"+(n+1) } ) );
for ( var i=index*1+1, h = items.length; i';
}
if( typeof template[ 'description' ] != 'undefined' )
{
description = template[ 'description' ];
}
}
$( '#fTemplateThumbnail' ).html( thumbnail );
$( '#fTemplateDescription' ).html( description );
$.fbuilder.reloadItems();
});
};
$.fbuilder[ 'reloadItems' ] = function()
{
for ( var i=0, h = $.fbuilder.showSettings.formlayoutList.length; i < h; i++ )
{
$("#fieldlist"+opt.identifier).removeClass( $.fbuilder.showSettings.formlayoutList[i].id );
}
$("#fieldlist"+opt.identifier).addClass(theForm.formlayout);
$("#formheader"+opt.identifier).html(theForm.display());
$("#fieldlist"+opt.identifier).html("");
if ( parseInt( selected ) == -1 )
{
$(".fform").addClass("ui-selected");
}
else
{
$(".fform").removeClass("ui-selected");
}
fieldsIndex = {};
calculatedFields = {};
for ( var i=0, h = items.length; i < h; i++ )
{
items[i].index = i;
fieldsIndex[ items[i].name ] = i;
if( items[i].ftype == 'fCalculated')
{
calculatedFields[ items[i].name ] = i;
}
$("#fieldlist"+opt.identifier).append(items[i].display());
if ( i == selected )
{
$("#field"+opt.identifier+"-"+i).addClass("ui-selected");
if( $('#tabs').tabs("option", "active") != 1 )
{
$.fbuilder[ 'editItem' ]( i );
}
}
else
{
$("#field"+opt.identifier+"-"+i).removeClass("ui-selected");
}
$("#field"+opt.identifier+"-"+i+" .remove").click(function()
{
$.fbuilder[ 'removeItem' ]($(this).parent().attr("id").replace("field"+opt.identifier+"-",""));
});
$("#field"+opt.identifier+"-"+i+" .copy").click(function()
{
$.fbuilder[ 'duplicateItem' ]($(this).parent().attr("id").replace("field"+opt.identifier+"-",""));
});
}
for ( var i=0, h = items.length; i < h; i++ )
{
if( typeof items[ i ].after_show != 'undefined' ) items[ i ].after_show();
}
if (items.length>0)
{
$(".fields").mouseover(function( evt )
{
$(this).addClass("ui-over");
evt.stopPropagation();
})
.mouseout(function( evt )
{
$(this).removeClass("ui-over");
evt.stopPropagation();
})
.click(function( evt )
{
evt.stopPropagation();
$.fbuilder[ 'editItem' ]($(this).attr("id").replace("field"+opt.identifier+"-",""));
$( '#fieldlist .ui-selected' ).removeClass("ui-selected");
$(this).addClass("ui-selected");
$('#tabs').tabs("option", "active", 1);
});
$(".field").focus(function()
{
$(this).blur();
});
}
$(".fform").mouseover(function()
{
$(this).addClass("ui-over");
})
.mouseout(function()
{
$(this).removeClass("ui-over");
})
.click(function( evt ){
evt.stopPropagation();
$('#tabs').tabs("option", "active", 2);
$.fbuilder.editForm();
$(this).siblings().removeClass("ui-selected");
$(this).addClass("ui-selected");
});
ffunct.saveData("form_structure");
//email list
var str = "",
cu_user_email_field = $('#cu_user_email_field').attr("def").split( ',' );
for ( var i=0, h = items.length; i < h; i++ )
{
var item = items[ i ];
if (item.ftype=="femail" || item.ftype=="femailds")
{
str += '';
}
}
$('#cu_user_email_field').html(str);
// recurrent payments
var str = "",
paypal_recurrent_field = $('[name="paypal_recurrent_field"]').attr("def");
for ( var i=0, h = items.length; i < h; i++ )
{
var item = items[ i ];
if (item.ftype=="fradio" || item.ftype=="fdropdown")
{
str += '';
}
}
$('[name="paypal_recurrent_field"]').html(str);
//destination items list
if (($('#fp_destination_emails_field').length > 0) && ($('#fp_destination_emails_field').is('select')))
{
var str = "";
for (var i=0, h = items.length; i'+item.name+'('+(item.title)+')';
}
$('#fp_destination_emails_field').html(str);
}
//field list for paypal request
if (($('#request_cost').length > 0) && ($('#request_cost').is('select')))
{
var str = "",
request_cost = $('#request_cost').attr("def");
for (var i=0, h = items.length; i'+item.name+'('+(item.title)+')';
}
$('#request_cost').html(str);
}
//request amount list
if ($('#paypal_price_field').length > 0)
{
var paypal_price_field = $('#paypal_price_field').attr("def"),
str = '';
for (var i=0, h = items.length; i < h; i++)
{
var item = items[ i ];
str += '';
}
$('#paypal_price_field').html(str);
}
};
var fform=function(){};
$.extend(fform.prototype,
{
title:"Untitled Form",
description:"This is my form. Please fill it out. It's awesome!",
formlayout:"top_aligned",
formtemplate:"",
evalequations:1,
autocomplete:1,
display:function()
{
return '';
},
showAllSettings:function()
{
var layout = '',
template = '',
thumbnail = '',
description = '',
selected = '';
for ( var i = 0; i< $.fbuilder.showSettings.formlayoutList.length; i++ )
{
layout += '';
}
for ( var i in $.fbuilder.showSettings.formTemplateDic )
{
if( /^\s*$/.test( i ) ) break;
selected = '';
if( $.fbuilder.showSettings.formTemplateDic[i].prefix==this.formtemplate )
{
selected = 'SELECTED';
if( typeof $.fbuilder.showSettings.formTemplateDic[i].thumbnail != 'undefined' )
{
thumbnail = '
';
}
if( typeof $.fbuilder.showSettings.formTemplateDic[i].description != 'undefined' )
{
description = $.fbuilder.showSettings.formTemplateDic[i].description;
}
}
template += '';
}
return '
' + ( ( typeof $.fbuilder.controls[ 'fCalculated' ] != 'undefined' ) ? '' : '' ) + '
'+thumbnail+''+description+'
' ;
}
}
);
var theForm = new fform();
$("#fbuilder").click( function( evt )
{
evt.stopPropagation();
selected = -2;
$(".fform").removeClass("ui-selected")
$( '#fieldlist .ui-selected' ).removeClass("ui-selected");
$('#tabs').tabs("option", "active", 0);
}
);
$("#fieldlist"+opt.identifier).sortable(
{
'connectWith': '.ui-sortable',
'items': '.fields',
'update': function( event, ui )
{
var i, h = items.length;
for( i = 0; i < h; i++ )
{
if( ui.item.hasClass( items[ i ].name ) ) break;
}
if( ui.item.parent().attr( 'id' ) == 'fieldlist' )
{
// receive or change order in fieldlist
var end_pos = parseInt( ui.item.index() );
items.splice( end_pos, 0, items.splice( i, 1 )[ 0 ] );
$.fbuilder.reloadItems();
}
else
{
// remove
items = items.concat( items.splice( i, 1 ) );
}
}
}
);
$('#tabs').tabs(
{
activate: function(event, ui)
{
switch( $(this).tabs( "option", "active" ) )
{
case 0:
$(".fform").removeClass("ui-selected");
break;
case 1:
$(".fform").removeClass("ui-selected");
if (selected < 0)
{
$('#tabs-2').html('No Field Selected
Please click on a field in the form preview on the right to change its properties.');
}
break;
case 2:
$(".fields").removeClass("ui-selected");
$(".fform").addClass("ui-selected");
$.fbuilder.editForm();
break;
}
}
}
);
var ffunct = {
getFieldsIndex: function()
{
return fieldsIndex;
},
getCalculatedFields: function()
{
return calculatedFields;
},
getItems: function()
{
return items;
},
addItem: function(id)
{
var obj = eval("new $.fbuilder.controls['"+id+"']();"),
fBuild = this,
n = 0;
obj.init();
for (var i=0, h = items.length; i < h; i++)
{
n1 = parseInt(items[i].name.replace(/fieldname/g,""));
if (n1>n)
{
n = n1;
}
}
n++;
obj.fBuild = fBuild;
$.extend(obj,{name:"fieldname"+n});
if( selected >= 0 )
{
items.splice( (selected)*1+1, 0, obj );
if( typeof items[ selected ][ 'addItem' ] != 'undefined' )
{
items[ selected ][ 'addItem' ]( obj.name );
}
else
{
selected++;
}
}
else
{
selected = items.length;
items[selected] = obj;
}
$.fbuilder.reloadItems();
return obj;
},
saveData:function(f)
{
var itemsStringified = $.stringifyXX( items ),
theFormStringified = $.stringifyXX( theForm ),
errorTxt = 'The entered data includes invalid characters. Please, if you are copying and pasting from another platform, be sure the data not include invalid characters.',
str;
if( typeof global_varible_save_data != 'undefined' )
{
// If the global_varible_save_data exists clear the form-builder-error-messages
$( '.form-builder-error-messages' ).html( '' );
}
try{
if( $.parseJSON( itemsStringified ) != null && $.parseJSON( theFormStringified ) != null )
{
str = "["+ itemsStringified +",["+ theFormStringified +"]]";
$( "#"+f ).val( str );
$( "#form_structure_crc" ).val( str.length );
}
else
{
$.fbuilder[ 'showErrorMssg' ]( errorTxt );
}
}
catch( err )
{
$.fbuilder[ 'showErrorMssg' ]( errorTxt );
}
global_varible_save_data = true;
},
loadData:function(form_structure, available_templates)
{
var structure = $.parseJSON( $("#"+form_structure).val() ), // JSON data
templates = ( typeof available_templates == 'undefined' ) ? null : $.parseJSON( $("#"+available_templates).val() ),
fBuild = this;
if ( structure )
{
if (structure.length==2)
{
items = [];
for (var i=0;iField Type: '+$.fbuilder[ 'getNameByIdFromType' ]( v )+'
';
},
showTitle: function(v)
{
return '';
},
showShortLabel: function( v )
{
return '';
},
showName: function( v )
{
return ''+
'
';
},
showPredefined: function(v,c)
{
return '
Use predefined value as placeholder.
';
},
showEqualTo: function(v,name)
{
return '';
},
showRequired: function(v)
{
return '';
},
showSize: function(v)
{
var str = "";
for (var i=0;i'+this.sizeList[i].name+'';
}
return '
';
},
showLayout: function(v)
{
var str = "";
for (var i=0;i'+this.layoutList[i].name+'';
}
return '
';
},
showUserhelp: function(v,c)
{
return '
Show as floating tooltip.
';
},
showCsslayout: function(v)
{
return '';
}
};
$.fbuilder.controls[ 'ffields' ] = function(){};
$.extend( $.fbuilder.controls[ 'ffields' ].prototype,
{
form_identifier:"",
name:"",
shortlabel:"",
index:-1,
ftype:"",
userhelp:"",
userhelpTooltip:false,
csslayout:"",
init:function(){},
editItemEvents:function( e )
{
if( typeof e != 'undefined' && typeof e.length != 'undefined' )
{
for( var i = 0, h = e.length; i selector
* e -> event name
* l -> element
* f -> function to apply the value
*/
$(e[i].s).bind(e[i].e, {obj:this, i:e[i]}, function(e){
var v = $(this).val();
if(typeof e.data.i['f'] != 'undefined') v = e.data.i.f($(this));
e.data.obj[e.data.i.l] = v;
$.fbuilder.reloadItems( {'field': e.data.obj} );
});
}
}
if( typeof e != 'undefined' && typeof e.length != 'undefined' )
{
for( var i = 0, h = e.length; i selector
* e -> event name
* l -> element
* f -> function to apply the value
*/
$(e[i].s).bind(e[i].e, {obj:this, i:e[i]}, function(e){
var v = $(this).val();
if(typeof e.data.i['f'] != 'undefined') v = e.data.i.f($(this));
e.data.obj[e.data.i.l] = v;
$.fbuilder.reloadItems( {'field': e.data.obj} );
});
}
}
$("#sTitle").bind("keyup", {obj: this}, function(e)
{
var str = $(this).val();
e.data.obj.title = str.replace(/\n/g,"
");
$.fbuilder.reloadItems();
});
$("#sShortlabel").bind("keyup", {obj: this}, function(e)
{
e.data.obj.shortlabel = $(this).val();
$.fbuilder.reloadItems();
});
$("#sPredefined").bind("keyup", {obj: this}, function(e)
{
e.data.obj.predefined = $(this).val();
$.fbuilder.reloadItems();
});
$("#sPredefinedClick").bind("click", {obj: this}, function(e)
{
e.data.obj.predefinedClick = $(this).is(':checked');
$.fbuilder.reloadItems();
});
$("#sRequired").bind("click", {obj: this}, function(e)
{
e.data.obj.required = $(this).is(':checked');
$.fbuilder.reloadItems();
});
$("#sUserhelp").bind("keyup", {obj: this}, function(e)
{
e.data.obj.userhelp = $(this).val();
$.fbuilder.reloadItems();
});
$("#sUserhelpTooltip").bind("click", {obj: this}, function(e)
{
e.data.obj.userhelpTooltip = $(this).is(':checked');
$.fbuilder.reloadItems();
});
$("#sCsslayout").bind("keyup", {obj: this}, function(e)
{
e.data.obj.csslayout = $(this).val();
$.fbuilder.reloadItems();
});
$(".helpfbuilder").click(function()
{
alert($(this).attr("text"));
});
},
showSpecialData:function()
{
if(typeof this.showSpecialDataInstance != 'undefined')
{
return this.showSpecialDataInstance();
}
else
{
return "";
}
},
showEqualTo:function()
{
if(typeof this.equalTo != 'undefined')
{
return $.fbuilder.showSettings.showEqualTo(this.equalTo,this.name);
}
else
{
return "";
}
},
showPredefined:function()
{
if(typeof this.predefined != 'undefined')
{
return $.fbuilder.showSettings.showPredefined(this.predefined,this.predefinedClick);
}
else
{
return "";
}
},
showRequired:function()
{
if(typeof this.required != 'undefined')
{
return $.fbuilder.showSettings.showRequired(this.required);
}
else
{
return "";
}
},
showSize:function()
{
if(typeof this.size != 'undefined')
{
return $.fbuilder.showSettings.showSize(this.size);
}
else
{
return "";
}
},
showLayout:function()
{
if(typeof this.layout != 'undefined')
{
return $.fbuilder.showSettings.showLayout(this.layout);
}
else
{
return "";
}
},
showRange:function()
{
if(typeof this.min != 'undefined')
{
return this.showRangeIntance();
}
else
{
return "";
}
},
showFormat:function()
{
if(typeof this.dformat != 'undefined')
{
try
{
return this.showFormatIntance();
} catch(e) {return "";}
}
else
{
return "";
}
},
showChoice:function()
{
if(typeof this.choices != 'undefined')
{
return this.showChoiceIntance();
}
else
{
return "";
}
},
showUserhelp:function()
{
return $.fbuilder.showSettings.showUserhelp(this.userhelp,this.userhelpTooltip);
},
showCsslayout:function()
{
return $.fbuilder.showSettings.showCsslayout(this.csslayout);
},
showAllSettings:function()
{
return this.showFieldType()+this.showTitle()+this.showShortLabel()+this.showName()+this.showSize()+this.showLayout()+this.showFormat()+this.showRange()+this.showRequired()+this.showSpecialData()+this.showEqualTo()+this.showPredefined()+this.showChoice()+this.showUserhelp()+this.showCsslayout();
},
showFieldType:function()
{
return $.fbuilder.showSettings.showFieldType(this.ftype);
},
showTitle:function()
{
return $.fbuilder.showSettings.showTitle(this.title);
},
showName:function()
{
return $.fbuilder.showSettings.showName(this.name);
},
showShortLabel:function()
{
return $.fbuilder.showSettings.showShortLabel(this.shortlabel);
},
display:function()
{
return 'Not available yet';
},
show:function()
{
return 'Not available yet';
}
}
);