Mediabiz = {};

Mediabiz.Statistics = {

    generateSeed: function() {

        return (Math.random()*100000);
    },

    /**
     * Reset all relevant count pixels for mediabiz tracking.
     * Currently ivw and own count.
     */
    setCountPixel: function() {

        Mediabiz.Statistics.Emv.refreshPixel();
        Mediabiz.Statistics.Ivw.refreshPixel();
        Mediabiz.Statistics.Rtt.refreshPixel();
    }
};

Mediabiz.Statistics.Emv = {

    baseUrl: '',
    id: 'mediabizPixel',

    setBaseUrl: function(url) {

        this.baseUrl = url;
    },

    refreshPixel: function() {

        var elem = document.getElementById(this.id);
        var seed = Mediabiz.Statistics.generateSeed();
        var newSrc = null;

        if (this.baseUrl.indexOf('?') != -1) {

            newSrc = this.baseUrl + '&seed=' + seed;
        } else {

            newSrc = this.baseUrl + '?seed=' + seed;
        }

        if (elem !== null) {

            elem.src = newSrc;
        }
    },

    refreshMediaPixel: function(u) {

        var elem = document.getElementById(this.id);
        var seed = Mediabiz.Statistics.generateSeed();
        var newSrc = null;

        if (u.indexOf('?') != -1) {

            newSrc = u + '&seed=' + seed;
        } else {

            newSrc = u + '?seed=' + seed;
        }

        if (elem !== null) {

            elem.src = newSrc;
        }
    },

    init: function() {

        this.initAccordion();
        this.initAjaxPaging();
        this.initLinks();
        this.initPaging();
        this.initYuiTabs();
        this.initZoom();
    },

    initAccordion: function() {

        ac1 = YAHOO.util.Dom.getElementsByClassName('accordion');
        ac2 = YAHOO.util.Dom.getElementsByClassName('accordion_v2');
        ta = YAHOO.util.Dom.getElementsByClassName('toggleall_accordion');
        var _this = this;

        for (var i=0; i<ac1.length; i++) {

            children = YAHOO.util.Dom.getChildrenBy(ac1[i], function(el){ return (el.tagName == 'DT'); });
            for (var j=0; j<children.length; j++) {

               YAHOO.util.Event.addListener(children[j], "click", function() { _this.clickedActive(this); });
            }
        }

        for (var i=0; i<ac2.length; i++) {

            children = YAHOO.util.Dom.getChildrenBy(ac2[i], function(el){ return (el.tagName == 'DT'); });
            for (var j=0; j<children.length; j++) {

               YAHOO.util.Event.addListener(children[j], "click", function() { _this.clickedActive(this); });
            }
        }

        for (var i=0; i<ta.length; i++) {

            children = YAHOO.util.Dom.getChildrenBy(ta[i], function(el){ return (el.tagName == 'A'); });
            for (var j=0; j<children.length; j++) {

               YAHOO.util.Event.addListener(children[j], "click", function() { _this.clickedActive(this); });
            }
        }
    },

    initAjaxPaging: function() {

        ap = YAHOO.util.Dom.getElementsByClassName('pager');
        var _this = this;
        for (var i=0; i<ap.length; i++) {

            children = YAHOO.util.Dom.getChildrenBy(ap[i], function(el){ return (el.tagName == 'A'); });
            for (var j=0; j<children.length; j++) {

               YAHOO.util.Event.addListener(children[j], "click", function() { _this.clickedActive(this); });
            }
        }
    },

    initLinks: function() {

        links = YAHOO.util.Dom.getElementsByClassName('countLink');
        var _this = this;

        for (var i=0; i<links.length; i++) {

            YAHOO.util.Event.addListener(links[i], "click", function() { _this.clickedActive(this); });
        }
    },

    initPaging: function() {

        pagingPrev = YAHOO.util.Dom.getElementsByClassName('prev');
        pagingNext = YAHOO.util.Dom.getElementsByClassName('next');
        close = YAHOO.util.Dom.getElementsByClassName('close');
        var _this = this;

        for (var i=0; i<pagingPrev.length; i++) {

            YAHOO.util.Event.addListener(pagingPrev[i], "click", function() { _this.clickedActive(this); });
        }

        for (var i=0; i<pagingNext.length; i++) {

            YAHOO.util.Event.addListener(pagingNext[i], "click", function() { _this.clickedActive(this); });
        }

        for (var i=0; i<close.length; i++) {

            YAHOO.util.Event.addListener(close[i], "click", function() { _this.clickedActive(this); });
        }
    },

    initYuiTabs: function() {

        yuiTabs = YAHOO.util.Dom.getElementsByClassName('yui-nav');
        var _this = this;
        for (var i=0; i<yuiTabs.length; i++) {

            children = YAHOO.util.Dom.getChildren(yuiTabs[i]);
            YAHOO.util.Event.addListener(children, "click", function() { _this.clickedActive(this); });
        }
    },

    initZoom: function() {

        zoom = YAHOO.util.Dom.getElementsByClassName('zoom');
        zoomNoimg = YAHOO.util.Dom.getElementsByClassName('zoomNoimg');
        zoomEan = YAHOO.util.Dom.getElementsByClassName('zoomean');
        var _this = this;

        for (var i=0; i<zoom.length; i++) {

            YAHOO.util.Event.addListener(zoom[i], "click", function() { _this.clickedActive(this); });
        }

        for (var i=0; i<zoomNoimg.length; i++) {

            YAHOO.util.Event.addListener(zoomNoimg[i], "click", function() { _this.clickedActive(this); });
        }

        for (var i=0; i<zoomEan.length; i++) {

            YAHOO.util.Event.addListener(zoomEan[i], "click", function() { _this.clickedActive(this); });
        }
    },

    clickedActive: function(element) {

        if (!YAHOO.util.Dom.hasClass(element, 'active')) {

            this.refreshPixel();
        }
    }
};

Mediabiz.Statistics.Ivw = {

    baseUrl: '',
    id: 'ivwPixel',

    setBaseUrl: function(url) {

        this.baseUrl = url;
    },

    refreshPixel: function() {

        var elem = document.getElementById(this.id);
        var seed = Mediabiz.Statistics.generateSeed();
        var newSrc = null;

        if (this.baseUrl.indexOf('?') != -1) {

            newSrc = this.baseUrl + '&d=' + seed;
        } else {

            newSrc = this.baseUrl + '?d=' + seed;
        }

        if (elem !== null) {

            elem.src = newSrc;
        }
    },

    init: function() {

        this.initAccordion();
        this.initAjaxPaging();
        this.initLinks();
        this.initPaging();
        this.initYuiTabs();
        this.initZoom();
    },

    initAccordion: function() {

        ac1 = YAHOO.util.Dom.getElementsByClassName('accordion');
        ac2 = YAHOO.util.Dom.getElementsByClassName('accordion_v2');
        ta = YAHOO.util.Dom.getElementsByClassName('toggleall_accordion');
        var _this = this;

        for (var i=0; i<ac1.length; i++) {

            children = YAHOO.util.Dom.getChildrenBy(ac1[i], function(el){ return (el.tagName == 'DT'); });
            for (var j=0; j<children.length; j++) {

               YAHOO.util.Event.addListener(children[j], "click", function() { _this.clickedActive(this); });
            }
        }

        for (var i=0; i<ac2.length; i++) {

            children = YAHOO.util.Dom.getChildrenBy(ac2[i], function(el){ return (el.tagName == 'DT'); });
            for (var j=0; j<children.length; j++) {

               YAHOO.util.Event.addListener(children[j], "click", function() { _this.clickedActive(this); });
            }
        }

        for (var i=0; i<ta.length; i++) {

            children = YAHOO.util.Dom.getChildrenBy(ta[i], function(el){ return (el.tagName == 'A'); });
            for (var j=0; j<children.length; j++) {

               YAHOO.util.Event.addListener(children[j], "click", function() { _this.clickedActive(this); });
            }
        }
    },

    initAjaxPaging: function() {

        ap = YAHOO.util.Dom.getElementsByClassName('pager');
        var _this = this;
        for (var i=0; i<ap.length; i++) {

            children = YAHOO.util.Dom.getChildrenBy(ap[i], function(el){ return (el.tagName == 'A'); });
            for (var j=0; j<children.length; j++) {

               YAHOO.util.Event.addListener(children[j], "click", function() { _this.clickedActive(this); });
            }
        }
    },

    initLinks: function() {

        links = YAHOO.util.Dom.getElementsByClassName('countLink');
        var _this = this;

        for (var i=0; i<links.length; i++) {

            YAHOO.util.Event.addListener(links[i], "click", function() { _this.clickedActive(this); });
        }
    },

    initPaging: function() {

        pagingPrev = YAHOO.util.Dom.getElementsByClassName('prev');
        pagingNext = YAHOO.util.Dom.getElementsByClassName('next');
        close = YAHOO.util.Dom.getElementsByClassName('close');
        var _this = this;

        for (var i=0; i<pagingPrev.length; i++) {

            YAHOO.util.Event.addListener(pagingPrev[i], "click", function() { _this.clickedActive(this); });
        }

        for (var i=0; i<pagingNext.length; i++) {

            YAHOO.util.Event.addListener(pagingNext[i], "click", function() { _this.clickedActive(this); });
        }

        for (var i=0; i<close.length; i++) {

            YAHOO.util.Event.addListener(close[i], "click", function() { _this.clickedActive(this); });
        }
    },

    initYuiTabs: function() {

        yuiTabs = YAHOO.util.Dom.getElementsByClassName('yui-nav');
        var _this = this;
        for (var i=0; i<yuiTabs.length; i++) {

            children = YAHOO.util.Dom.getChildren(yuiTabs[i]);
            YAHOO.util.Event.addListener(children, "click", function() { _this.clickedActive(this); });
        }
    },

    initZoom: function() {

        zoom = YAHOO.util.Dom.getElementsByClassName('zoom');
        zoomNoimg = YAHOO.util.Dom.getElementsByClassName('zoomNoimg');
        zoomEan = YAHOO.util.Dom.getElementsByClassName('zoomean');
        var _this = this;

        for (var i=0; i<zoom.length; i++) {

            YAHOO.util.Event.addListener(zoom[i], "click", function() { _this.clickedActive(this); });
        }

        for (var i=0; i<zoomNoimg.length; i++) {

            YAHOO.util.Event.addListener(zoomNoimg[i], "click", function() { _this.clickedActive(this); });
        }

        for (var i=0; i<zoomEan.length; i++) {

            YAHOO.util.Event.addListener(zoomEan[i], "click", function() { _this.clickedActive(this); });
        }
    },

    clickedActive: function(element) {

        if( !YAHOO.util.Dom.hasClass(element, 'active') ) {

            this.refreshPixel();
        }
    }
};

/**
 * Statistic JS helper for Rtt tracking.
 */
Mediabiz.Statistics.Rtt = {

    baseUrl: '',
    id: 'rttPixel',

    setBaseUrl: function(url) {

        this.baseUrl = url;
    },

    refreshPixel: function() {

        var elem = document.getElementById(this.id);
        var seed = Mediabiz.Statistics.generateSeed();
        var newSrc = null;

        if (this.baseUrl.indexOf('?') != -1) {

            newSrc = this.baseUrl + '&seed=' + seed;
        } else {

            newSrc = this.baseUrl + '?seed=' + seed;
        }

        if (elem !== null) {

            elem.src = newSrc;
        }
    }
};

/**
 * lädt die IVW relevanten zahlen aus der Tabelle mediabiz_de.countvalues
 * @notice: punkte werden durch _ ersetzt
 * sprich aus ivw.year wird ivw_year
 *
 * um die funktion getAllIvw aufzurufen muss im template ein Callback objekt definiert werden
 */
Mediabiz.Statistics.Countvalues = {

    requestUrl: '/statistics/countvalues/',

    /**
     * hier muss ein Callback objeckt übergeben werden, dass success (und failure) implementiert, in diesem werden
     * dann alle werde abgearbeitet die vom AjaxController des Moduls Statistic (action: countvalues) zurückgeliefert
     * werden
     *
     * @param callback class
     */
    getAllIvw: function(cb) {

        if ('undefined' == typeof(cb)) {

            cb = Mediabiz.Statistics.Countvalues.Callback;
        }

        YAHOO.util.Connect.asyncRequest('GET', this.requestUrl + 'allIvw', cb, null);
    }
};

Mediabiz.Statistics.Countvalues.Callback = {

    success: function(o) {

        alert('please implement callback (now using Mediabiz.Statistics.Countvalues.Callback from statistics.js)');
    },

    failure: function(o) {}
};
