/*global cGR, GR, $, Zdarzenia, oG_OSA, window, screen, document, location, setInterval, clearInterval, setTimeout, clearTimeout Image, unescape, ado */
var adMiejsce = [];

(function () {
    var tytuly = ["Reklama", "Nasi partnerzy"],
        d = document,
        sS = '%3Cscript%20type%3D%22text%2Fjavascript%22%3E',
        eS = '%3C%2Fscript%3E',
        reklama,
        tryb = 'old',
        reklamaDefinicje;
    
    function generujID() {
        var znaki = "abcdefghijklmnopqrstuvwxyz",
            rc = [], i;
        
        znaki += znaki.toUpperCase();
        
        for (i = 0; i < 10; i += 1) {
            rc.push(znaki.charAt((Math.floor(Math.random() * 10) + 0)));
        }
        return rc.join('');
    }
    
    /**
     * singleton reklama
     */
    reklama = function () {
        var kodMaster;
        if ("undefined" == typeof ado) {
	    return;
	}
        ado.config({
            mode: tryb,
            xml: 'false',
            characterEncoding: 'true',
            protocol: location.protocol
        });
        
        ado.preview({
            enabled: false,
            emiter: oG_OSA.adOceanEmiter,
            id: ''
        });
        
        function pokazUkryjRodzica(ob, fn) {
            var rodzic = ob.parentNode,
                czyTD = (rodzic.tagName.toUpperCase() === "TD"),
                elem = ['OBJECT', 'IFRAME', 'A', 'IMG', 'TABLE'],
                elemLn = elem.length,
                czyElem,
                i,
                timer = null,
                timerLimit = 15,
                timerLicznik = 0,
                timerCzas = 250;
                
            timer = setInterval(function () {
                for (i = 0; i < elemLn; i += 1) {
                    czyElem = !!(rodzic.getElementsByTagName(elem[i])[0]);
                    if (czyElem) {
                        break;
                    }
                }

                timerLicznik += 1;

                if (czyElem) {
                    if (czyTD) {
                        rodzic.style.display = '';
                        rodzic.parentNode.style.display = GR("czyIE") ? "block" : "table-row";
                    }
                    else {
                        rodzic.style.display = "block";
                    }
                    timerLicznik = 0;
                    clearInterval(timer);
                    return;
                }
                rodzic.style.display = "none";
                if (czyTD) {
                    rodzic.parentNode.style.display = 'none';
                }
                if (timerLicznik > timerLimit) {
                    clearInterval(timer);
                    if ('function' === typeof fn) {
                        fn();
                    }
                }
            }, timerCzas);
        }
        
        /**
         * Tworzy kontener dla reklamy i wywoluje ado.slave() w celu jej wstawienia
         *
         * @param {Object}  konf    - obiekt konfiguracyjny wywolania miejsca reklamowego
         */
        function wpisz(konf) {
            var id = adMiejsce[konf.nazwa],
                konfigSlave = {
                    myMaster: kodMaster,
                    // funkcja uruchamiana po zakonczeniu ladowania kreacji
                    onLoad: 'function' === typeof konf.onLoad ? konf.onLoad : null
                };
                
            if (!id) {
                return;
            }
            
            // funkcja uruchamiana, jesli na danym placemencie zostala wyswietlona reklama
            konfigSlave.onServerEmission = function () {
                var ob = $(this.id),
                    rodzic;
                
                if (!ob) {
                    return;
                }
                
                rodzic = ob.parentNode;
                
                // tworzenie tytulu dla bloku
                if (konf.tytul || (konf.tytulWRodzicu && rodzic.children[0].className !== 'adTytul')) {
                    GR('utworzElement', (!konf.tytulWRodzicu ? ob : rodzic), 'span', {
                        'class': 'adTytul'
                    }, 'pierwszy', konf.tytul);
                }
                
                ob.style.display = 'block';
                
                // pokazywanie rodzica
                if (konf.nazwa === 'billboard' || konf.pokazUkryjRodzica) {
                    pokazUkryjRodzica(ob, konf.onServerEmissionEmpty);
                }
                
                if ('function' === typeof konf.onServerEmission) {
                    konf.onServerEmission.call(this);
                }
            };
            
            //  funkcja uruchamiana, jesli na danym placemencie nie zostala wyswietlona reklama
            konfigSlave.onServerEmissionEmpty = function () {
                var ob = $(this.id),
                    rodzic;
                
                if (!ob) {
                    return;
                }
                
                rodzic = ob.parentNode;
                
                if (konf.nazwa === 'billboard' || konf.pokazUkryjRodzica) {
                    if (rodzic.tagName.toUpperCase() === 'TD') {
                        rodzic.parentNode.style.display = 'none';
                    }
                    rodzic.style.display = 'none';
                }
                
                if ('function' === typeof konf.onServerEmissionEmpty) {
                    konf.onServerEmissionEmpty.call(this);
                }
            };
            
            // tworzenie kontenera reklamy i wywolanie funkcji generatora przez ado.slave
            try {
                if (GR('czyReklama', konf.nazwa)) {
                    if (konf.tag !== 'pusty') {
                        d.write('<' + konf.tag + ' id="' + id + '"' + (konf.cssClass ? ' class="' + konf.cssClass + '"' : "") +
                        (konf.cssStyle ? ' style="' + konf.cssStyle + '"' : "") + '>');
                        if ('old' === tryb) {
                            ado.slave(id, konfigSlave);
                        }
                        d.write('</' + konf.tag + '>');
                    }
                    
                    if ('new' === tryb) {
                        ado.slave(id, konfigSlave);
                    }
                    return;
                }
            } 
            catch (oBlad) {
            }
        }
        
        /**
         * Inicjalizuje mastera (ustawia konfiguracje i uruchamia ado.master()
         *
         * @param {String} kod            kod master
         * @param {Array} slowaKluczowe   tablica slow kluczowych (keys)
         * @param {Object} zmienne        zmienne (vars) w postaci obiektu o atrybutach typu nazwa_zmiennej: 'wartosc'
         */
        function inicjalizujMaster(kod, slowaKluczowe, zmienne) {
            kodMaster = kod;
            
            var i, tmp = [];
            
            for (i = 0; i < slowaKluczowe.length; i += 1) {
                tmp = tmp.concat(slowaKluczowe[i].split(','));
            }
            
            ado.master({
                id: kod,
                server: oG_OSA.adOceanEmiter,
                keys: tmp,
                vars: zmienne
            });
        }
        
        return {
            wpisz: wpisz,
            inicjalizujMaster: inicjalizujMaster,
            kodMaster: kodMaster,
            pokazUkryjRodzica: pokazUkryjRodzica
        };
    }();
    
    cGR.prototype.czyReklama = function (n) {
        return (adMiejsce && adMiejsce[n] ? 1 : 0);
    };
    
    /**
     * @param {Object | String} n           - obiekt konfiguracyjny - jezeli to pozostale parametry nie wystepuja;
     *                                        jezeli String to - nazwa miejsca reklamowego
     * @param {String}          cssClass    - nazwa klasy css
     * @param {String}          cssStyle    - reguly css
     * @param {String}          tytul       - tytul reklamy
     * @param {Boolean}         PU          - true - ukrywaj rodzica jak nie ma reklamy
     * @param {String}          tag         - tag HTML kontenera reklamy, pusty - bez taga
     * @param {Function}        PUFn        - referencja do funkcji wykonanej po zaladaowaniu placementu
     */
    cGR.prototype.wstawReklame = function (n, cssClass, cssStyle, tytul, PU, tag, PUFn) {
        var arg = arguments,
            argLn = arg.length, i,
            mapa = ['nazwa', 'cssClass', 'cssStyle', 'tytul', 'pokazUkryjRodzica', 'tag', 'onServerEmissionEmpty', 'onLoad', 'onServerEmission', 'tytulWRodzicu'],
            czyAdo = !!ado,
            konf = {};
        
        if (arg.length === 1 && 'object' === typeof arg[0]) {
            konf = arg[0];
        } else {
            for (i = 0; i < argLn; i += 1) {
                konf[mapa[i]] = arg[i];
            }
        }
        
        if (!konf.tag) {
            konf.tag = 'div';
        }
        
        if (konf.tytul && 'string' !== typeof konf.tytul) {
            konf.tytul = tytuly[konf.tytul] || '';
        }
        
        if (czyAdo && !konf.old) {
            reklama.wpisz(konf);
            return;
        }
        
        if (arg.length === 1 && 'object' === typeof arg[0]) {
            n = konf.nazwa;
            cssClass = konf.cssClass;
            cssStyle = konf.cssStyle;
            tytul = konf.tytul;
            PU = konf.pokazUkryjRodzica;
            tag = konf.tag;
            PUFn = konf.onLoad;
        }
        
        GR('wstawStaraReklama', n, cssClass, cssStyle, tytul, PU, tag, PUFn);
    };
    
    /**
     * @deprecated  Potrzebna jak sie wywali plik ado.js z adOcean lub jak trzeba wstawic reklame z innego adsa
     */
    cGR.prototype.wstawStaraReklama = function (n, cssClass, cssStyle, tytul, PU, tag, puFn) {
        PU = PU || 0;
        tag = tag || "div";

        try {
            tytul = typeof tytul === "string" ? tytul : tytuly[tytul] || "";

            if (GR("czyReklama", n)) {
                if (tag !== "pusty") {
                    d.write('<' + tag + ' id="ad-' + n + '"' + (cssClass ? ' class="' + cssClass + '"' : "") + (cssStyle ? ' style="' + cssStyle + '"' : "") + '>');
                    if (tytul) {
                        d.write('<span class="adTytul">' + tytul + '</' + 'span>');
                    }
                }
                
                d.write(unescape(sS) + 'if (typeof ' + adMiejsce[n] + ' === "function") {' + adMiejsce[n] + '(); }' + unescape(eS));
        
                if (tag !== "pusty") {
                    d.write('</' + tag + '>');
                }
                if ("billboard" === n || PU) {
                    reklama.pokazUkryjRodzica($('ad-' + n), puFn);
                }
                return;
            }
            if ('function' === typeof puFn) {
                puFn();
            }
        }
        catch (oBlad) {
        }
    };
    
    cGR.prototype.wstawReklameButtony = function (tytul, pola, cssClass) {
        var ix = 0, i;
        
        tytul = typeof tytul === "string" ? tytul : tytuly[tytul];
        
        for (i = 0; i < pola.length; i += 1) {
            if (GR("czyReklama", pola[i])) {
                if (ix === 0) {
                    d.write('<div class="adBoks' + (cssClass ? " " + cssClass : "") + '">');
                    ix += 1;
                }
                GR('wstawReklame', {
                    nazwa: pola[i],
                    tytul: tytul,
                    tytulWRodzicu: true
                });
            }
        }
        if (ix === 1) {
            d.write('</div>');
        }
    };
    
    cGR.prototype.wstawReklameTextBox = function (typ, pola, szerokosc, cssClass) {
        var ix = 0, i, b, box = [], box_ilosc, box_szerokosc = 0, box_margines, typy = ["adTekstPion", "adTekstPoziom"];
        
        cssClass = cssClass || null;
        typ = typeof typ === "string" ? typ : typy[typ];
        szerokosc = szerokosc || 747;
        
        for (i = 0; i < pola.length; i += 1) {
            if (GR("czyReklama", pola[i])) {
                if (ix === 0) {
                    d.write('<div class="' + typ + (cssClass ? " " + cssClass : "") + '"' + (szerokosc !== 747 && szerokosc !== "nf" ? ' style="width: ' + szerokosc + 'px;"' : '') + '>');
                }
                box[i] = "ad-" + pola[i];
                GR('wstawReklame', {
                    nazwa: pola[i]
                });
                ix += 1;
            }
        }
        if (ix > 0) {
            d.write('<span class="tytulik">Reklama</' + 'span>');
            d.write('</div>');
        }
        
        if (ix < 4 && ix !== 0 && typ.indexOf('adTekstPion') === -1) {
            box_ilosc = box.length;
            box_szerokosc = box_ilosc < 3 ? Math.floor(szerokosc / 2) : Math.floor(szerokosc / box_ilosc);
            box_margines = box_ilosc < 2 ? Math.floor((szerokosc - (box_szerokosc * box_ilosc)) / 2) : 0;
            for (i = 0; i < box_ilosc; i += 1) {
                b = $(box[i]);
                
                if (!b) {
                    continue;
                }
                
                b.style.width = box_szerokosc + "px";
                if (box_margines) {
                    b.style.marginLeft = (!GR("czyIE") ? box_margines : Math.floor(box_margines / 2)) + "px";
                    b.getElementsByTagName("a")[0].style.textAlign = "center";
                }
            }
        }
        return (szerokosc = undefined);
    };
    
    cGR.prototype.wstawSkyscraper = function (id, top) {
        var pola = ["skyscraper-lewy", "skyscraper-prawy"], w = 0, i, style = "";
        
        try {
            function fn() {
                setTimeout(function () {
                    GR('ustawSkyscraper', id, (parseInt(top, 10) || 0));
                }, 100);
            }
            for (i = 0; i < pola.length; i += 1) {
                if (GR("czyReklama", pola[i])) {
                    //d.write('<div id="ad-' + pola[i] + '">');
                    GR("wstawReklame", {
                        nazwa: pola[i],
                        old: true
                    });
                    //d.write('</' + 'div>');
                    if (!w) {
                        w = 1;
                        GR("dodajOnload", fn);
                    }
                }
            }
        } 
        catch (oBlad) {
        }
    };
    
    cGR.prototype.ustawSkyscraper = function (id, top) {
        var skyL = $("ad-skyscraper-lewy"),
            skyP = $("ad-skyscraper-prawy");
            
        if (skyL || skyP) {
            if (GR("czyIE")) {
                top = parseInt(top, 10) + 70;
            }
            GR("pokazSkyscraper", id, top);
            
            Zdarzenia.zaczep(window, "resize", function () {
                GR('pokazSkyscraper', id, top);
            });
        }
    };
    
    cGR.prototype.rozmiarSkyscraper = function (sky) {
        var i, link, szerokosc = 0, wysokosc = 0, img,
            znacznik, lnZnacznik, znaczniki = ["a", "object", "iframe"];
        
        for (i = 0; i < znaczniki.length; i += 1) {
            znacznik = sky.getElementsByTagName(znaczniki[i]);
            lnZnacznik = znacznik.length;
            if (lnZnacznik > 0) {
                if (i === 0) {
                    img = new Image();
                    
                    if (znacznik[0].childNodes[0].width === 0) {
                        img.src = znacznik[0].childNodes[0].src;
                        szerokosc = parseInt(img.width, 10);
                        wysokosc = parseInt(img.height, 10);
                    }
                    else {
                        szerokosc = parseInt(znacznik[0].childNodes[0].width, 10);
                        wysokosc = parseInt(znacznik[0].childNodes[0].height, 10);
                    }
                }
                else {
                    szerokosc = parseInt(znacznik[0].width, 10);
                    wysokosc = parseInt(znacznik[0].height, 10);
                }
                break;
            }
        }
        return [szerokosc, wysokosc];
    };
    
    cGR.prototype.pokazSkyscraper = function (id, top) {
        var linki, obiekty, skyLrozmiar = [0, 0], skyProzmiar = [0, 0],
            punkt = $(id), skyL = $("ad-skyscraper-lewy"), skyP = $("ad-skyscraper-prawy"),
            sky = $("ad-skyscraper"), bW = d.body.clientWidth, wi = 0,
            tagBody, szerokosc;
            
        if (bW && (skyL || skyP)) {
            tagBody = d.getElementsByTagName("body")[0];
            
            if (skyL) {
                skyLrozmiar = GR("rozmiarSkyscraper", skyL);
            }
            if (skyP) {
                skyProzmiar = GR("rozmiarSkyscraper", skyP);
            }
            
            szerokosc = (parseInt(skyLrozmiar[0], 10) + parseInt(skyProzmiar[0], 10));
            
            wi = parseInt((punkt.width || punkt.offsetWidth), 10);
            top = parseInt(top, 10) || 0;
            if ((bW - wi) / 2 > szerokosc) {
                if (skyP) {
                    GR('ustawReguleCss', sky, 'top: ' + (punkt.offsetTop + top) + 'px; left: ' + (Math.floor((bW - wi) / 2) + wi + 10) + 'px; display: block;');
                }
            }
            else {
                if (skyL) {
                    sky.style.display = "none";
                }
                if (skyP) {
                    sky.style.display = "none";
                }
            }
        }
    };
    cGR.prototype.wywolajReklamy = function (typ, parametr, fn) {
        if (!typ) {
            return;
        }
        reklamaDefinicje = parametr;
        try {
            var src = [], k, tmp = [];
            if (1 === typ) {
                if ('string' === typeof parametr) {
                    src[typ] = location.protocol + '//s1.gratkapl.adocean.pl/_' + (new Date()).getTime() + '/ad.js?id=' + parametr + '/x=' + screen.width + '/y=' + screen.height;
                }
                else {
                    reklama.inicjalizujMaster(parametr.kodMaster, parametr.keys, parametr.vars);
                }
            }
            else {
                src[typ] = parametr;
            }
            
            for (k in src) {
                if (typeof src[k] === "string") {
                    GR("zaladujPlikJS", src[k], "plik", fn);
                }
            }
        } 
        catch (oBlad) {
        }
    };
    
    cGR.prototype.iframeReklama = function (param, atrybuty) {
        var k, i = 0, strParam = [];
        param = param || {};
        atrybuty = atrybuty || {};
        
        if (!param.url) {
            param.url = location.protocol + '//' + location.host + '/';
        }
        
        if (!param.miejsce) {
            param.miejsce = 'button_NxN1';
        }
        if (!atrybuty.id) {
            atrybuty.id = 'ad-iframe-' + param.miejsce;
        }
        if (reklamaDefinicje.vars) {
            i = 1;
            strParam[0] = '';
            for (k in reklamaDefinicje.vars) {
                if ('function' !== reklamaDefinicje.vars[k]) {
                    strParam[i] = k + '=' + reklamaDefinicje.vars[k];
                    i += 1;
                }
            }
        }
        
        atrybuty.src = oG_OSA.iframeReklama + '?id=' + encodeURI(reklamaDefinicje.kodMaster + '/key=' + reklamaDefinicje.keys.join(',') + ',galeria' +  strParam.join('/') + '&' + adMiejsce[param.miejsce]);
        
        GR('utworzIframe', param.cel, atrybuty);
    };
    
    cGR.prototype.iframeReklamaZaladuj = function () {
        var param = decodeURIComponent(location.search).split('&');
        this.wywolajReklamy(1, param[0].replace('?id=', ''));
    };
    
    cGR.prototype.iframkaReklamaWstaw = function () {
        var param = decodeURI(location.search).split('&');
        d.write(unescape(sS) + 'if (typeof ' + param[1] + ' === "function") {' + param[1] + '(); }' + unescape(eS));
        
        GR('dodajOnload', function () {
            var rr = $('reklama-ramka'),
                h = rr.offsetHeight,
                ob = rr.getElementsByTagName('object')[0] || rr.getElementsByTagName('img')[0],
                eb = rr.getElementsByTagName('embed')[0],
                obH = ob.height || ob.offsetHeight || eb.offsetHeight,
                m = Math.floor((h - obH) / 2);
            
            if (m < 0) {
                m = 0;
            }
            
            if (ob && obH) {
                ob.style.marginTop = m + 'px';
                if (eb) {
                    eb.style.marginTop = m + 'px';
                }
                GR('usunCssClass', rr, 'schowaj');
            }
        });
    };
    /**
     * Sluzy do ustawiania paskow na listach ogloszen
     * 
     * przykladowe wywolanie:
     * GR('ustawReklame', "wyniki-wyszukiwania", ['ad-pasek_750xN1', 'ad-pasek_750xN2', 'ad-pasek_750xN3']);
     */
    cGR.prototype.ustawReklame = function (blok /* :HTMLObject | :String */, miejsca /* :Array */) {
        blok = $(blok);
        if (!blok || !miejsca) {
            return;
        }
        
        if ('string' === typeof miejsca) {
            miejsca = miejsca.split(',');
        }
        
        var liczba = GR("czyIE") ? 765 : 755,
            reklamy = $(miejsca),
            reklamyLn = reklamy.length,
            rodzic,
            tmpSzerokosci = [],
            tmpWysokosci = [],
            obj, emb, i, timer, tag;
        
        function ustawReklame() {
            var szerokoscBloku = blok.offsetWidth;
            
            for (i = 0; i < reklamyLn; i += 1) {
                rodzic = null;
                emb = null;
                tag = '';
                if (!reklamy[i]) {
                    continue;
                }
                rodzic = reklamy[i].parentNode;
                
                if (reklamy[i].getElementsByTagName('script')[0]) {
                    rodzic.style.display = '';
                    rodzic.parentNode.style.display = GR('czyIE') ? 'block' : 'table-row';
                }
        
                obj = rodzic.getElementsByTagName("object")[0] || rodzic.getElementsByTagName("img")[0] || rodzic.getElementsByTagName('iframe')[0];
                
                if (!obj && !oG_OSA.debug) {
                    rodzic.style.display = 'none';
                    rodzic.parentNode.style.display = 'none';
                    continue;
                }
                
                tag = obj.tagName.toUpperCase();
                
                if (!GR("czyIE") && tag === 'OBJECT') {
                    emb = rodzic.getElementsByTagName("embed")[0];
                }
                
                if (!tmpWysokosci[i]) {
                    tmpWysokosci[i] = obj.height || (emb ? emb.height : 0);
                    tmpSzerokosci[i] = obj.width || (emb ? emb.width : 0);
                }
                if (szerokoscBloku < liczba) {
                    reklamy[i].style.width = (szerokoscBloku - 40) + "px";
                    obj.height = 18;
                    obj.style.height = '18px';
                    if (emb) {
                        emb.height = 18;
                        emb.style.height = '18px';
                    }
                }
                else {
                    reklamy[i].style.width = '750px';
                    obj.height = tmpWysokosci[i];
                    obj.style.height = tmpWysokosci[i] + 'px';
                    if (emb) {
                        emb.height = tmpWysokosci[i];
                        emb.style.height = tmpWysokosci[i] + 'px';
                    }
                }
            }
        }
        GR('dodajOnload', ustawReklame);
        window.onresize = function () {
            clearTimeout(timer);
            timer = setTimeout(ustawReklame, 150);
        };
    };
    
    cGR.prototype.setScriptAd = function (dane) {
        var ID = generujID();
        
        d.write('<div' + ' id="' + ID + '"></' + 'div>');
        
        setTimeout(function () {
            GR('utworzElement', $(ID), 'script', {
                type: 'text/javascript',
                src: dane.src,
                id: dane.id || ''
            });
        }, 10);
    };
})();

