Video = {};

Video.Statistics = {

    generateSeed: function() {

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

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

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

Video.Statistics.Emv = {

    baseUrl: '',
	id: 'videoPixel',

	setBaseUrl: function(url) {

	    this.baseUrl = url;
	},

	refreshPixel: function() {
	    
		var elem = document.getElementById(this.id);
	    var seed = Video.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;
		}
	}
};

/**
 * Statistic JS helper for Rtt tracking
 * automaticaly adds events to refresh pixel on yui tab change and caroussel changes.
 */
Video.Statistics.Rtt = {

    baseUrl: '',
    id: 'rttPixel',

    setBaseUrl: function(url) {

        this.baseUrl = url;
    },

    refreshPixel: function() {

        var elem = document.getElementById(this.id);
        var seed = Video.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;
        }
    },

    init: function() {

        this.initYuiTabs();
    },

    initYuiTabs: function() {

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

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

    clickedActive: function(element) {

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

            this.refreshPixel();
        }
    }
};

Video.Statistics.Rtt.Subelement = function(baseUrl, containerId) {
		
    this.baseUrl     = baseUrl;
    this.id          = 'rttPixel_' + containerId;
    this.containerId = containerId;

    this.getId = function() {
    	
    	return this.id;
    };
    
    this.getContainerId = function() {
    	
    	return this.containerId;
    };

    this.refreshPixel = function() {

        var elem = document.getElementById(this.getId());      
        var seed = Video.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;
        } else if(document.getElementById(Video.Statistics.Rtt.id) != null) {
        	
        	elem = document.createElement('img');
        	elem.setAttribute('id'    , this.getId());
        	elem.setAttribute('src'   , newSrc);
        	elem.setAttribute('width' , 1);
        	elem.setAttribute('height', 1);
        	elem.setAttribute('alt'   , '');
    		document.getElementById(Video.Statistics.Rtt.id).appendChild(elem);
        }
    };

    this.addEventListeners = function() {

    	elem  = YAHOO.util.Dom.get(this.containerId);
    	this.findChildrenByClassName(elem);
    };
    
    this.findChildrenByClassName = function(elem) {

    	var subElements = YAHOO.util.Dom.getChildren(elem);    	
    	
    	for(var j=0; j<subElements.length; j++) {
    		
    		if( YAHOO.util.Dom.hasClass(subElements[j], 'paginatorLink') ) {
    			
    			var _this = this;
    			YAHOO.util.Event.addListener(subElements[j], "click", function() { _this.refreshPixel(); });
    		}
    		this.findChildrenByClassName(subElements[j]);
    	}
    };
};

Video.Statistics.Ivw = {

    baseUrl: '',
	id: 'ivwPixel',

	setBaseUrl: function(url) {

	    this.baseUrl = url;
	},

	refreshPixel: function() {

	    var elem = document.getElementById(this.id);
		var seed = Video.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.initYuiTabs();
        this.initCarousel();
        this.initPaginator();
        this.initZoom();
    },

    initCarousel: function() {

        caroussels = YAHOO.util.Dom.getElementsByClassName('caroussel');
        var _this = this;

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

            YAHOO.util.Event.addListener(caroussels[i], "DOMNodeInserted", function() { _this.refreshPixel(); });
        }
    },

    initYuiTabs: function() {

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

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

    initPaginator: function() {

        paginators = YAHOO.util.Dom.getElementsByClassName('paginatorLink');
        var _this = this;

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

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

    initZoom: function() {

        zooms = YAHOO.util.Dom.getElementsByClassName('zoom');
        var _this = this;

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

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

    clickedActive: function(element) {

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

            this.refreshPixel();
        }
    }
};
