var flv_gemius_proto = 'http://';
if (document.location && document.location.protocol && document.location.protocol=='https:') {
	flv_gemius_proto = 'https://';
}

function flv_gemius_parameters_fn() {
	var d=document;
	var href=new String(d.location.href);
	var ref;
	var f=0;
	var fv='-';
	if (d.referrer) { ref=new String(d.referrer); } else { ref=''; }
	if (typeof Error!='undefined') {
		var fo;
		eval('try { f=(d==top.document)?1:2; if (typeof top.document.referrer=="string") { ref=top.document.referrer } } catch(e) {f=3;}');
		eval('try { fv=navigator.plugins["Shockwave Flash"].description; } catch (e) {}');
		eval('if (typeof ActiveXObject!="undefined") { try { fo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); } catch(e) { try { fo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); fv="X"; fo.AllowScriptAccess="always"; } catch(e) { if (fv=="X") { fv="WIN 6,0,20,0"; }} try { fo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); } catch(e) {} } if ((fv=="-" || fv=="X") && fo) { fv=fo.GetVariable("$version"); }}');
	}
	var url='&fr='+f+'&fv='+escape(fv)+'&tz='+(new Date()).getTimezoneOffset()+'&href='+escape(href.substring(0,499))+'&ref='+escape(ref.substring(0,499));
	if (screen) {
		var s=screen;
		if (s.width) url+='&screen='+s.width+'x'+s.height;
		if (s.colorDepth) url+='&col='+s.colorDepth;
	}
	return url;
}

var flv_gemius_parameters = flv_gemius_parameters_fn();

function flv_gemius_escape(str,limit) {
	function Hex(n) {
		var hexMap = "0123456789ABCDEF";
		return hexMap.charAt(n>>4)+hexMap.charAt(n&0xF);
	}
	var c,s,uc,ul;
	var dst = "";
	for (var i=0 ; i<str.length ; i++) {
		c = str.charCodeAt(i);
		if ((c>=0xDC00)&&(c<0xE000)) continue;
		if ((c>=0xD800)&&(c<0xDC00)) {
			i++;
			if (i>=str.length) continue;
			s = str.charCodeAt(i);
			if ((s<0xDC00)||(s>=0xE000)) continue;
			c = ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
		}
		if (c<0x80) {
			uc = escape(String.fromCharCode(c)).replace(/\+/g,"%2B").replace(/\//g,"%2F");
			if (c<=0x20) {
				ul=3;
			} else {
				ul=1;
			}
		} else if (c<0x800) {
			uc = "%u"+Hex(c>>8)+Hex(c&0xFF);
			ul = 2;
		} else if (c<0x10000) {
			uc = "%u"+Hex(c>>8)+Hex(c&0xFF);
			ul = 3;
		} else {
			uc = "%U"+Hex((c>>24)&0xFF)+Hex((c>>16)&0xFF)+Hex((c>>8)&0xFF)+Hex(c&0xFF);
			ul = 4;
		}
		limit -= ul;
		if (limit<0) {
			return dst;
		}
		dst+=uc;
	}
	return dst;
}

/*
*
* Events
*
*/

var FLV_eventListener = {
    init: function() {

        me = FLV_eventListener;

        me.flashObjectsArray = new Array();
        me.moviesArray = new Array();

        me.FLVTimeArray = new Object();
        me.FLVTimeArrayJS = new Object();

        me.lineNumber = 0;
        me.timeout = 300000;
        me.maxLength = 200;
        me.output = null;
        me.lastMovie = null;
        if (window.addEventListener) {
            window.addEventListener('unload', me.myOnUnload, true);
        } else if (window.attachEvent) {
            window.attachEvent('onunload', me.myOnUnload);
        }

        me.session_player = (new Date()).getTime().toString(36) + Math.round(Math.random() * 100000000).toString(36) + Math.round(Math.random() * 100000000).toString(36);

        setInterval('me.timeCheck();', me.timeout);
    },

    movieData: function(content_id, content_name, totalTime, userTime, customPackage) {

        
        if (me.lastMovie != null) {
            me.sendMovieData(me.lastMovie);
        }

        totalTime = Math.round(totalTime / 1000);
        var curr = me.moviesArray.length;
        me.lastMovie = curr;

        me.moviesArray[curr] = new Array();

        var customPackageStr = "";
        if (customPackage != undefined) {
            for (var i = 0; i < customPackage.length; i++) {
                if (i < customPackage.length - 1) {
                    customPackageStr += customPackage[i] + ";";
                } else {
                    customPackageStr += customPackage[i];
                }
            }
        }

        me.moviesArray[curr]["content_name"] = content_name;
        me.moviesArray[curr]["content_id"] = content_id;
        me.moviesArray[curr]["lastPlayTime"] = "";
        me.moviesArray[curr]["currentTime"] = "";
        me.moviesArray[curr]["totalTime"] = totalTime;
        me.moviesArray[curr]["lastTimeStamp"] = "";
        me.moviesArray[curr]["firstTimeStamp"] = Math.round((new Date()).getTime() / 1000);
        me.moviesArray[curr]["movieInfo"] = me.session_player + ";" + Math.round(totalTime) + ";" + me.moviesArray[curr]["firstTimeStamp"] + "|" + content_id + ";" + content_name + ";" + customPackageStr;
        me.moviesArray[curr]["data"] = "";

        trace("movieData: " + content_id + " , " + content_name + " , " + totalTime + " , " + customPackage, 1);
    },

    closeMovieData: function(content_id, movieTime) {
        movieTime = Math.round(movieTime / 1000);
        var curr = me.findElement(content_id);

        var tempTime = movieTime;

        if (me.FLVTimeArrayJS[content_id] !== undefined && me.moviesArray[curr]["lastPlayTime"] < me.FLVTimeArrayJS[content_id]) {
            var playLength = Math.round(movieTime - me.moviesArray[curr]["lastPlayTime"]);
            if (playLength > 0 && playLength != NaN) {
                me.moviesArray[curr]["data"] += "|" + me.moviesArray[curr]["lastTimeStamp"] + ";" + Math.round(me.moviesArray[curr]["lastPlayTime"]) + ";" + playLength;
            }
            me.moviesArray[curr]["lastPlayTime"] = "";
        } else if (me.moviesArray[curr]["lastPlayTime"] !== "" && me.FLVTimeArrayJS[content_id] === undefined) {
            var playLength = Math.round(movieTime - me.moviesArray[curr]["lastPlayTime"]);
            if (playLength > 0 && playLength !== NaN) {
                me.moviesArray[curr]["data"] += "|" + me.moviesArray[curr]["lastTimeStamp"] + ";" + Math.round(me.moviesArray[curr]["lastPlayTime"]) + ";" + playLength;
            }
            me.moviesArray[curr]["lastPlayTime"] = "";
        }
        trace("closeMovieData: " + content_id + " , " + movieTime, 1);
    },

    findElement: function(content_id) {
        var i = me.moviesArray.length - 1;

        for (i = me.moviesArray.length - 1; i > -1; i--) {
            if (me.moviesArray[i]["content_id"] == content_id) {
                return i;
            }
        }

        return -1;
    },

    eventListener: function(content_id, movieTime, userTime, eventType) {
        movieTime = Math.round(movieTime / 1000);
        userTime = Math.round(userTime / 1000);
        var curr = me.findElement(content_id);

        var playLength = Math.round(movieTime - me.moviesArray[curr]["lastPlayTime"]);
        var lastString = "|" + me.moviesArray[curr]["lastTimeStamp"] + ";" + Math.round(me.moviesArray[curr]["lastPlayTime"]) + ";" + playLength;
        if (playLength <= 0) {
            playLength = 0;
            lastString = "";
        }

        trace("eventListener: " + content_id + " , " + movieTime + " , " + eventType);

        if (eventType === "playing") {
            me.moviesArray[curr]["lastTimeStamp"] = Math.round((new Date()).getTime() / 1000) - me.moviesArray[curr]["firstTimeStamp"];
            me.moviesArray[curr]["lastPlayTime"] = movieTime;
        } else if (eventType === "complete") {
            if (window.opera) {
                me.sendMovieData(curr);
                me.moviesArray[curr]["data"] = "";
                me.moviesArray[curr]["lastPlayTime"] = "";
            }
        } else if (eventType !== "playing" && me.moviesArray[curr]["lastPlayTime"] !== "") {
            if (me.checkLength(curr, lastString) > me.maxLength) {
                me.sendMovieData(curr);
                me.moviesArray[curr]["data"] = "";
                me.moviesArray[curr]["lastPlayTime"] = "";
            } else {
                me.moviesArray[curr]["data"] += lastString;
                me.moviesArray[curr]["lastPlayTime"] = "";
            }
        }
        if (eventType === "complete") {
            me.sendMovieData(curr);
        }
    },

    setTime: function(content_id, movieTime) {
        movieTime = Math.round(movieTime / 1000);
        var curr = me.findElement(content_id);
        me.moviesArray[curr]["currentTime"] = movieTime;
    },

    traceData: function(id) {
        var outputData = "v=1|" + me.moviesArray[id]["movieInfo"] + me.moviesArray[id]["data"];

        trace("traceData: " + me.moviesArray[id]["content_id"] + " , " + outputData, 3);

        if (typeof window.flv_gemius_images == 'undefined') {
            window.flv_gemius_images = new Array();
        }

        var gemius_l = window.flv_gemius_images.length;
        window.flv_gemius_images[gemius_l] = new Image();
        window.flv_gemius_images[gemius_l].src = flv_gemius_proto + flv_gemius_host + '/_' + (new Date()).getTime() + '/redot.gif?id=' + flv_gemius_identifier + '&sarg=' + flv_gemius_escape(outputData, 240) + flv_gemius_parameters;
    },

    sendMovieData: function(id) {
        me.completeMovieData(id);

        if (me.moviesArray[id]["data"] != "") {
            me.traceData(id);
        }
        me.moviesArray[id]["data"] = "";
    },

    sendAllMovieData: function() {
        for (var i = 0; i < me.moviesArray.length; i++) {
            me.completeMovieData(i);
            if (me.moviesArray[i]["data"] != "") {
                me.traceData(i);
                me.moviesArray[i]["data"] = "";
            }
        }
    },

    completeMovieData: function(id) {
        var tempTime;
        if (window.opera) {
            for (var i = 0; i < me.flashObjectsArray.length; i++) {
                var element;
                element = document.getElementsByName(me.flashObjectsArray[i])[me.flashObjectsArray[i]];
                var tmpArr = element.getMovieTime();
                if (tmpArr[0] == me.moviesArray[id]["content_id"]) {
                    tempTime = Math.round(tmpArr[1] / 1000);
                    break;
                }
            }
        } else {
            tempTime = me.moviesArray[id]["currentTime"];
        }
        if (me.moviesArray[id]["lastPlayTime"] !== "") {
            var playLength = Math.round(tempTime - me.moviesArray[id]["lastPlayTime"]);
            var lastPlayTimeTemp = Math.round(me.moviesArray[id]["lastPlayTime"]);
            if (playLength < 0) {
                playLength = 0;
            }
            me.moviesArray[id]["lastPlayTime"] = tempTime;
            if (playLength > 0) {
                if (me.FLVTimeArrayJS[me.moviesArray[id]["content_id"]] != undefined) {
                    if (lastPlayTimeTemp < me.FLVTimeArrayJS[me.moviesArray[id]["content_id"]]) {
                        me.moviesArray[id]["data"] += "|" + me.moviesArray[id]["lastTimeStamp"] + ";" + lastPlayTimeTemp + ";" + playLength;
                    }
                } else {
                    me.moviesArray[id]["data"] += "|" + me.moviesArray[id]["lastTimeStamp"] + ";" + lastPlayTimeTemp + ";" + playLength;
                }
            }
        }
    },

    checkLength: function(id, newData) {
        if (me.moviesArray[id]["data"] !== undefined) {
            var data = me.moviesArray[id]["data"];
            var info = me.moviesArray[id]["movieInfo"];
            var mylength = data.length + newData.length + info.length;
            return mylength;
        } else {
            return 0;
        }
    },

    timeCheck: function() {
        trace("timeCheck", 2);
        me.sendAllMovieData();
    },

    registerFLVTime: function(content_id, time) {
        me.FLVTimeArray[content_id] = Math.round(time);
        me.FLVTimeArrayJS[content_id] = Math.round(time);
    },

    registerFlashObject: function(name) {
        me.flashObjectsArray.push(name);
    },

    getFLVTimeArray: function() {
        return me.FLVTimeArray;
    },

    myOnUnload: function() {
        me.sendAllMovieData();
        var start = (new Date()).getTime();
        while (start + 200 > (new Date()).getTime());
    },

    checkBrowser: function() {
        if (window.opera) {
            return "Opera";
        } else {
            return "Other";
        }
    }
};
FLV_eventListener.init();

function trace(str,errorLevel){
	var color;
	switch(errorLevel){
		case undefined:
		color="#aaaaaa";
		break;
		case 0:
		color="#aaaaaa";
		break;
		case 1:
		color="#ff3333";
		break;
		case 2:
		color="#00bb00";
		break;
		case 3:
		color="#3333ff";
		break;
	}
	document.getElementById("trace").innerHTML+= "<font style='color: "+color+"; font-size: 11px; font-family:Arial;'>"+str+"<br /></font>";	
	var objDiv = document.getElementById("trace");
	objDiv.scrollTop = objDiv.scrollHeight;
}

