String.implement({
    keyValToHash: function(delimeter, separator){
        delimeter   = delimeter || ':';
        separator   = separator || ',';
        var hash    = false;
        var split   = this.split(separator);
        
        if(split.length){
            hash = $H();
            
            split.each(function(iter){
                var parts = iter.split(delimeter);
                hash.set(parts[0], parts[1]);
            });
        }
        
        return hash;
    }
});

window.addEvent('domready', function(){
    Selectors.RegExps.splitter = (/\s*([+><~\s])\s*([a-zA-Z#.*:\[])/g)

    Selectors.Getters['<'] = function(found, self, tag, id, uniques){
        while(self = self.parentNode){
            if(self.nodeType == 1){
                if (!Selectors.Utils.chk(self, uniques)) break;
                if (Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
            }
        }
        return found;
    }
    
    $$('a[rel="new_window"]').addEvent('click', function(e){
        e.stop();
        
        window.open(this.get('href'), 'new_window_' + $random(1, 500));
    });
});


