

if ( !window.dimedis )          window.dimedis = {};
if ( !window.dimedis.banner )   window.dimedis.banner = {};

dimedis.banner.BannerFiller = Class.create({
    initialize: function(par) {
        this.placeholderName = par.placeholderName || 'it_banner_placeholder';
        this.ticket          = par.ticket;
        this.lang            = par.lang;
        
        
        this.poolCount  = new Hash();

        this.poolWidth  = new Hash();
        this.poolHeight = new Hash();
    },

    fill: function() {
        this.get_placeholders();

        var paramString = '';
        this.poolCount.each(function(pair){
            paramString = paramString + "&pool_count="+ escape(pair.key);
            paramString = paramString + "&pool_count="+ escape(pair.value);
        });
        paramString.replace( /^&/, '' );
        
        if ( paramString == '' ) {
            return;
        }

        this.poolWidth.each(function(pair){
            paramString = paramString + "&pool_width="+ escape(pair.key);
            paramString = paramString + "&pool_width="+ escape(pair.value);
        });
        this.poolHeight.each(function(pair){
            paramString = paramString + "&pool_height="+ escape(pair.key);
            paramString = paramString + "&pool_height="+ escape(pair.value);
        });

        paramString = paramString + "&ticket="+ escape(this.ticket);
        paramString = paramString + "&lang="+ escape(this.lang);


        new Ajax.Request('/cgi-bin/md_ww/lib/pub/advert/banner_filler_ajax.cgi', {
            method: 'post',
            parameters: paramString,
            onSuccess: function(response) {
                var content = response.responseJSON;
                content = $H(content);
                this.fill_placeholders_with_content(content);
            }.bind(this)
        });
    },
    
    
    get_placeholders: function()
    {
        if ( this.placeholderList ) {
            return this.placeholderList;
        }
        
        this.placeholderList = new Array;
        
        var div_list = $$("."+this.placeholderName);

        div_list.each( function(div) {
            var subdiv = div.getElementsByTagName('DIV')[0];
            var pool;
            
            if ( subdiv ) {
                subdiv = $(subdiv);
                pool = subdiv.innerHTML;
                
                // Trimmen des Poolnamens
                pool = pool.replace( /\s+$/, '' );
                pool = pool.replace( /^\s+/, '' );


                this.placeholderList.push( new dimedis.banner.Placeholder({
                    element: div,
                    pool:    pool
                }) );
                
                if ( !this.poolCount.get(pool) ) {
                    this.poolCount.set(pool,0);
                }
                if ( !this.poolWidth.get(pool) ) {
                    this.poolWidth.set(pool,div.getWidth());
                }
                if ( !this.poolHeight.get(pool) ) {
                    this.poolHeight.set(pool,div.getHeight());
                }
                
                this.poolCount.set(pool, this.poolCount.get(pool)+1);
            } else {
                alert("BannerFiller: Could not find subdiv");
            }
        }.bind(this));
    },
    
    
    fill_placeholders_with_content: function(content)
    {
        var html;
        var pool;
        var banner_hash_list;
        var banner_hash;
        
        this.placeholderList.each(function(ph){
            pool = ph.pool;
            banner_hash_list = content.get(pool);
            if ( banner_hash_list ) {
                banner_hash = banner_hash_list.shift();
                
                if ( banner_hash ) {
                    ph.element.update( banner_hash.html);
                } else {
                    ph.element.hide();
                }
            }
            
            
        });
        
    },
    
    cleanup: function() {
        this.placeholderList = null;
        this.poolCount = null;
    }
});

dimedis.banner.Placeholder = Class.create({
    initialize: function(par) {
        this.element = par.element;
        this.pool    = par.pool;

    }
});
