$.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 '

'+this.title+'

'+this.description+'
'; }, 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'; } } );