YAHOO.namespace('dmg');

YAHOO.dmg.ads = function () {
    var yuE = YAHOO.util.Event,
        tilenum,
        ord,
        base_url,
        ad_cache = [];
    
    var make_new_ord = function () {
        tilenum = 1;
        ord = Math.floor(Math.random()*10000);
    };
    make_new_ord();
    
    var makeURL = function (wh, kwl) {
        if(!base_url){
            var err = new Error();
            err.name = "Advertising error";
            err.message = "Base url must be set before placing an ad";
            throw(err);
        }
        var r = base_url;
        var l = kwl.length;
        if (l) {
            r += 'kw=';
            r += kwl.join('+') + ';';
        }
        r += 'pgtype=index;';
        r += 'tile=' + tilenum + ';';
        tilenum += 1;
        r += 'sz=' + wh[0] + 'x' + wh[1] + ';';
        r += 'ord=' + ord + '?';
        return r;
    };
    
    var newIFrame = function (wh, kwl) {
        var f = document.createElement('iframe');
        f.src = makeURL(wh, kwl);
        f.width = wh[0];
        f.height = wh[1];
        f.border = 0; 
        f.frameBorder = 0;
        f.scrolling = "no";
        f.marginheight = 0;
        f.marginwidth = 0;
        return f;
    };

    return {
        set_base_url : function(str){
            base_url = str;
        },
        Ad : function (el, wh, kwl) {
            ad_cache.push(this);
            var thisAd = this; 
            this.loadAd = function() {
                yuE.onDOMReady(function () {
                    // Doing this on the dom ready is a cheap async loading trick
                    if (this.element && this.element.parentNode) {
                        this.element.parentNode.removeChild(this.element);
                    }
                    var page_kws = document.location.pathname.toString().true_split('/');
                    page_kws.push('level' + page_kws.length.toString());
                    this.element = newIFrame(wh, kwl.concat(page_kws));
                    el.appendChild(this.element);
                }, {}, this);
            };
            
            var init = function () {
                thisAd.loadAd();
            }.apply(this);
        },
        ads : ad_cache,
        make_new_ord : make_new_ord,
        ord : ord,
        reloadAds : function () {
            make_new_ord();
            for (var i = 0; i < ad_cache.length; i += 1) {
                ad_cache[i].loadAd();
            }
        }
    };
}();

String.prototype.true_split = function (val) {
    var ret = [];
    var raw_list = this.split(val);
    for (var i = 0; i < raw_list.length; i += 1) {
        if (raw_list[i]) {
            ret.push(raw_list[i]);
        }
    }
    return ret;
};