var

esPhinx;

(function($) {

"use strict";

$.prototype.extend({

    // params: function () {
    //     var
    //         resolvedParams = {},
    //         // numbersOnlyPattern = /^[0-9]+(?!.)/,
    //         trailPattern = /^[^[]+|[^[]+(?=\])/g,
    //         // trailWithoutIndexPattern = /^[^[]+|(?![0-9])[^[]+(?=\])/g,
    //         count,
    //         trail,
    //         trailWithoutIndex,
    //         //objectName,
    //         //nestedObjectName,
    //         index,
    //         name,
    //         param,
    //         key,
    //         //merged,
    //         attr,
    //         nested_attr,
    //         attributeName,

    //         resolveParam = function (name, value) {
    //             value = value || "";

    //             var
    //                 structure = name,
    //                 parsed;

    //             index = structure.split(/\[([0-9]+)/)[1];

    //             structure = "{\"" + structure;
    //             // object[nested_object][0-9+][indexed_attr_collection_type][]
    //             if (/.+\[.+\]\[[0-9]+\]\[.+\]\[\](?!.)/.test(name)) {
    //                 structure = structure
    //                     .replace(/(\]\[(?=.)(?!\]))|(\[(?!\]))/g,
    //                     "\":{\"").replace(/(\]\[\])$/, "\":[\"" + value +
    //                                       "\"]}}}}");
    //             // obj[nested_object][][attr_collection_type][]
    //             } else if (/.+\[.+\]\[\]\[.+\]\[\](?!.)/.test(name)) {
    //                 structure = structure
    //                     .replace(/\]\[\]\[/, "\":[{\"")
    //                     .replace(/\[(?![\{\]])/, "\":{\"")
    //                     .replace(/\]\[\]/, "\":[\"" + value +
    //                              "\"]}]}}");
    //             // below the two more used
    //             // obj[nested_object][0-9+][indexed_attr]
    //             } else if (/.+\[.+\]\[[0-9]+\]\[.+\](?!.)/.test(name)) {
    //                 structure = structure
    //                     .replace(/\]\[(?=.)(?!\])|\[(?!\])/g, "\":{\"")
    //                     .replace(/\]$/, "\":\"" + value + "\"}}}}");
    //             // obj[nested_object][][attr]
    //             } else if (/.+\[.+\]\[\]\[.+\](?!.)/.test(name)) {
    //                 structure = structure
    //                     .replace(/\]\[\]\[/, "\":[{\"")
    //                     .replace(/\[(?![\{])/g, "\":{\"")
    //                     .replace(/\]$/g, "\":\"" + value + "\"}]}}");
    //             // indexed_attr_collection_type[0-9+][]
    //             } else if (/.+\[[0-9]+\]\[\](?!.)/.test(name)) {
    //                 structure = structure
    //                     .replace(/(\]\[(?=.)(?!\]))|(\[(?!\]))/g,
    //                     "\":{\"").replace(/\]\[\]/, "\":[\"" + value +
    //                                       "\"]}}");
    //             // obj[attr_collection_type][]
    //             } else if (/.+\[.+\]\[\](?!.)/.test(name)) {
    //                 structure = structure
    //                     .replace(/\]\[/, "\":[\"")
    //                     .replace(/\[(?!\")/g, "\":{\"")
    //                     .replace(/\]$/g, value + "\"]}}");
    //             // obj[attr]
    //             } else if (/.+\[.+\](?!.)/.test(name)) {
    //                 structure = structure
    //                     .replace(/\[/, "\":{\"")
    //                     .replace(/\]$/, "\":\"" + value + "\"}}");
    //             // attr_collection_type[]
    //             } else if (/.+\[\](?!.)/.test(name)) {
    //                 structure = structure
    //                     .replace(/\[\]/, "\":[\"" + value + "\"]}");
    //             // attr
    //             } else {
    //                 structure += "\":\"" + value + "\"}";
    //             }

    //             parsed = JSON.parse(structure);
    //             if (parsed) {
    //                 return parsed;
    //             }
    //             return false;
    //         };

    //     // debugger

    //     // to adapt to:
    //     // obj[nested_attr][0-9+][indexed_attr_collection_type][]
    //     // obj[nested_attr][][attr_collection_type][]
    //     // obj[attr_collection_type][]
    //     // attr_collection_type[]
    //     this.each(function (form) {
    //         if (form instanceof HTMLFormElement) {
    //             $.each(form.elements, function (e, i) {
    //                 name = e.name;
    //                 if (name) {

    //                     count = name.match(trailPattern).length;

    //                     if (trailWithoutIndex.length === 1) {
    //                         attributeName = trail.first();
    //                     }

    //                     param = resolveParam(e.name, e.value);
    //                     if (param) {
    //                         key = Object.keys(param)[0];
    //                         if (resolvedParams[key]) {
    //                             // talvez seja interessante iterar usando Iterator.each e ir verificando o tipo de objeto que está sendo retornado pelo iterador
    //                             attr = Object.keys(param[key])[0];
    //                             if (resolvedParams[key][attr] instanceof
    //                                 Array) {

    //                                 index = Object
    //                                     .keys(resolvedParams[key][attr])
    //                                         .last();

    //                                 nested_attr = Object
    //                                     .keys(param[key][attr][0])[0];

    //                                 if (resolvedParams[key][attr][index][nested_attr]) {
    //                                     param[key][attr] = resolvedParams[key][attr]
    //                                         .concat(param[key][attr]);
    //                                 } else {
    //                                     resolvedParams[key][attr][index] = Object.merge(resolvedParams[key][attr][index], param[key][attr][0]);
    //                                     param[key][attr] = resolvedParams[key][attr];
    //                                 }
    //                             } else if (resolvedParams[key]
    //                                        [attr] instanceof Object) {
    //                                 param[key][attr][index] = $.Object.merge(resolvedParams[key][attr][index], param[key][attr][index]);
    //                                 param[key][attr] = $.Object.merge(resolvedParams[key][attr], param[key][attr]);
    //                             }
    //                             param[key] = Object
    //                                 .merge(resolvedParams[key], param[key]);
    //                         }
    //                         resolvedParams = $.Object.merge(resolvedParams, param);
    //                     }
    //                 }
    //             });
    //         }
    //     });

    //     return resolvedParams;
    // }

});

}(esPhinx));