
(function() {
    if(typeof pf == "undefined"){
		pf = {};
	}

    pf.formToObject = function(formNode) {
        formNode = dojo.byId(formNode);

        if ('FORM' == formNode.tagName.toUpperCase()) {
            return dojo.formToObject(formNode);
        }

        var nodes  = dojo.query('input,select,textarea', formNode)
            values = {};

        dojo.forEach(nodes, function(node) {
            if ('type' in node && (node.type == 'checkbox' || node.type == 'radio') && 'checked' in node && ! node.checked) return;
            values[node.name] = node.value;
        });

        return values;
    }

    /**
     * Unlike dojo.objectToQuery, this handles sub-objects
     */
    pf.objectToQuery = function(map) {
        for (var name in map) {
            if (dojo.isObject(map[name])) {
                map[name] = dojo.objectToQuery(map[name]);
            }
        }

        return dojo.objectToQuery(map);
    };

    /**
     * @param {String|Element} container_id
     */
    pf.unloadWYSIWYG = function(container_id) {
        if (PF_IS_WYSIWYG_PRO) {
            PF_wproUpdateValues();
        } else if (PF_IS_TINYMCE) {
            unloadAllTinyMce(container_id || document.body);
        }
    };

    /**
     * Replica of PF_StringUtil_001::toSlug
     * 
     * @param {String} str
     * @param {String} regx_charset
     * @param {String} space_char    '-'
     * @param {String} bad_char      ''
     */
    pf.toSlug = function(str, regx_charset, space_char, bad_char)
    {
        space_char = space_char || '-';
        bad_char   =   bad_char || '';

        var sc_regx = new RegExp(space_char, 'g');

        str = str.replace(/[^-._a-zA-Z0-9 ]+/g, bad_char);
        str = str.replace(sc_regx, ' ');
        str = str.replace(/[ ]+/g, ' ');
        str = str.replace(/[ ]/g, space_char);

        return str.toLowerCase();
    };

    pf.findSyntaxEditor = function(editor_id)
    {
        if (! 'CodeMirror' in window || window.cmSyntaxEditors.length <= 0)
            return;

        var result = dojo.filter(window.cmSyntaxEditors, function(item) {
            return item.domNode.id == editor_id;
        });

        if (result.length > 0)
            return result[0].editor;
        else
            return false;
    };

    // generic aliases
    pf.require = dojo.require;
    pf.ready   = dojo.ready;
})();

