Element.implement({
    toFullQueryString: function(){
        var queryString = [];
        this.getElements('input, select, textarea').each(function(el){
            if (!el.name || el.disabled) return;
            var value = (el.tagName.toLowerCase() == 'select') ?
            Element.getSelected(el).map(function(opt){
                return opt.value;
            }) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
            $splat(value).each(function(val){
                queryString.push(el.name + '=' + encodeURIComponent(val));
            });
        });
        return queryString.join('&');
    }

});

var Joshua = {
    z_index : 1000,
    
    getIndex: function(increment){
        increment = increment || 1;
        return this.z_index += increment;
    }, 
    
    parseKeyValues: function(string){
        var delim = ',', equal = ':';
        var values = string.split(delim);
        var ret = {};
        for(var x = 0, l = values.length; x < l; x++){
            var kv = values[x].split(equal);
            
            if(kv[1].test(/\[(.*)\]/)){
                var vals    = kv[1].match(/\[(.*)\]/);
                kv[1]       = vals[1];
            }
            
            ret[kv[0]] = kv[1];
        }
        return ret;
    }
};