var Ariel = {}
Element.extend({
    setHTML: function(){
        Garbage.trash(this.getElementsByTagName('*')); 
        this.innerHTML = $A(arguments).join('');
        return this;
    },
    empty: function(){
        return this.setHTML('');
    },
    hide: function() {
        this.setStyle('display','none');
        return this;
    },
    show: function() {
        this.setStyle('display','');
        return this;
    },
    toggle: function() {
        if (this.getStyle('display')=='none') {
            this.show();
        }
        else {
            this.hide();
        }
    },
    adoptAll: function(element) {
        while ( element.hasChildNodes() )
            this.appendChild( element.firstChild );
        return this;
    },
    loadContent: function(url,options) {
        new Ajax(url,Object.extend({
            update:this
        },options || {})).request();
    }
    ,
    effectChain: function(property,options) {
        var fx = new Fx.Style(this,property,options);
        var start = arguments[2] || this.getStyle(property);
        fx.chain(fx.start.pass([start,arguments[3]],fx));
        for (var i=4,l=arguments.length; i<l; i++) {
            fx.chain(fx.start.pass(arguments[i] || start,fx));
        }
        if (options && options.onChainComplete) {
            fx.chain(options.onChainComplete.pass(this,10));
        }
        return fx;
    },
    effectsChain: function(options) {
        var fx = new Fx.Styles(this,options);
        for (var i=1,l=arguments.length; i<l; i++) {
            fx.chain(fx.start.pass(arguments[i],fx));
        }
        if (options && options.onChainComplete) {
            fx.chain(options.onChainComplete.pass(this,10));
        }
        return fx;
    },
    highlight: function(color){
        var style = this.getStyle('background-color');
        style = (style == 'transparent') ? '#ffffff' : style;
        new Fx.Style(this,'background-color').start(color || '#face8f', style);
        return this;
    },
    disapear:function(options) {
        options = options || {};
        options.onComplete = function(element) {element.setStyle('display','none')};
        this.effects(options).start({'height':1,'width':1,'opacity':0});
    },
    loadOptions: function(url, options) {
        if (this.getTag() != 'select') return;
        this.loadingOptions = true;
        this.options.length = 0;
        options = Object.extend({
            onComplete :function(response){
                var data = response.data;
                for (var i=0,l=data.length; i<l; i++) {
                    var option = data[i];
                    this.options[this.options.length] = new Option(option.text,option.value,option.defaultSelected,option.selected);
                }
            this.loadingOptions = null;
            if (options.onAfterLoad) options.onAfterLoad.call(this,response);
            if (this.onchange && options.cascade) this.onchange();
        }.bind(this)},options || {});
        if(options.onBeforeLoad) options.onBeforeLoad.call(this)
        new Json.Remote(url,options).send(); 
    },
    surroundWith:function(tagName,options) {
        var tag = new Element(tagName,options);
        this.replaceWith(tag);
        tag.adopt(this);
        return this;
    }
});
String.extend({
    stripTags: function() {
        return this.replace(/<[^>]>/g,'');
    }
}); 
/*
Garbage.setCollect = function(b){Garbage.collect = b ? Garbage._collect_ : Garbage._nocollect_;}
Garbage._collect_ = Garbage.collect;
Garbage._nocollect_ = function(el){ 
    if (!el.$tmp){
        el.$tmp = {'opacity': 1};
    }
    return el;
}
Garbage.collect = Garbage._collect_;
function $_(element) {
    Garbage.setCollect(true)
    var result = $(element);
    Garbage.setCollect(false)
    return result;
}
function $$_() {
    Garbage.setCollect(true)
    var result = $$.apply(this, arguments);
    Garbage.setCollect(false)
    return result;
}
*/
Garbage.empty = function(){
    //var start = $time();
    Garbage.collect(window);
    Garbage.collect(document);
    //var proto=[];
    //for (var d in Element.prototype) proto.push(d); 
    for (var i = 0, els = Garbage.elements, j = els.length, el; i < j; i++){
        el = els[i];
        if (el.$events) el.fireEvent('trash').removeEvents();
        for (var p in el.$tmp) el.$tmp[p] = null;
        //for (var d in proto) el[d] = null;
        //for (var a=0, b=proto.length; a<b; a++) el[proto[a]]=null;
        els[i] = el.htmlElement = el.$tmp = el.$events = el = null;
    }
    els.length = 0;
    //console.log('start',$time()-start); 
    //alert('end: '+($time() - start)+'ms');
        //Garbage.trash(Garbage.elements);
    }

Date.prototype.isLeap = function() {
    var year = parseInt(this.getFullYear()); 
    return (year % 400==0) || ((year % 4 == 0) && !(year % 100 ==0));
}

