
var PLAYER_OFF_STATE = -1;
var PLAYER_STARTED_STATE = 3;
var PLAYER_STOPPED_STATE = 1;
var PLAYER_END_STATE = 8;
var PLAYER_OPENED_STATE = 13;

var davPlayState = PLAYER_OFF_STATE; // -1 -> before start, 3 -> started

var DAV_START_EVENT = 0;
var DAV_PING_EVENT = 1;
var DAV_END_EVENT = 2;

var davPlayerObj = "";
var davTimer = "";
var davTitle = "";
var davContainer = "";
var davGroup = "";
var davFreq = 0;

var davCustom = "";

var davPlayedLength = 0;
var davDuration = 0;

var davImg = new Image();
var ScImgSrc;

var scCid="";
var davUrl="";

function davStopTimer() {
	clearInterval(davTimer);
}

function davPing() {
	if (davPlayState == PLAYER_STARTED_STATE) {
		var currentPos = davPlayerObj.controls.currentPosition;
		if (currentPos != davPlayedLength) {
			davPlayedLength = currentPos;
			davGenerateEvent(DAV_PING_EVENT);
		}
	}
}

// called when opening new media.
function davPlayerOpenStateChange(newState) {

	if (newState == PLAYER_OPENED_STATE) {
		// media started
		davPlayState = PLAYER_STARTED_STATE;
		davTitle = davPlayerObj.currentMedia.name;
		davDuration = davPlayerObj.currentMedia.duration;
		davGenerateEvent(DAV_START_EVENT);
	}
}

// called when playstate changes 
function davPlayerStateChange(newState) {

	if (newState == PLAYER_END_STATE) {
		// media ended
		davPlayState = PLAYER_OFF_STATE;

		davGenerateEvent(DAV_END_EVENT);
	} else if (newState == PLAYER_STOPPED_STATE) {
		// media stopped
		davPlayState = PLAYER_OFF_STATE;
	}
}

function davGenerateEvent(davEvent) {


	var ScRandom = Math.ceil(Math.random()*1000000000);
	ScImgSrc = davUrl + '?ci=' + scCid;
       	ScImgSrc += '&cg=' + (davGroup);                              //Content Group 
       	ScImgSrc += '&rp=' + escape(window.top.location);             //Container of Stream

	if (davEvent == DAV_START_EVENT) {
       		ScImgSrc += '&tl=dav0-' + escape(davTitle);                         //Title of the Stream
       		ScImgSrc += '&si=' + escape(davContainer);                          //Container of Stream

		for (count=0; count < davCustom.length; count++) {
			if (davCustom[count] != '') {
				ScImgSrc += '&c' + count + '=' + davCustom[count];
			}
		}
	} else if (davEvent == DAV_PING_EVENT) {
       		ScImgSrc += '&tl=dav1-' + escape(davTitle);                         //Title of the Stream
       		ScImgSrc += '&du=' + escape(Math.round(davPlayedLength));           // Played Length
	} else if (davEvent == DAV_END_EVENT) {
       		ScImgSrc += '&tl=dav2-' + escape(davTitle);                         //Title of the Stream
       		ScImgSrc += '&du=' + escape(Math.round(davDuration));               // Played Length
	} else {
		return;
	} 

       	ScImgSrc += '&cc=1';                                                	    //Cookie Check (Always on)
       	ScImgSrc += '&rnd=' + ScRandom;

	davImg = "";
	davImg = new Image();
	davImg.src = ScImgSrc;

}

function createActiveXObject(id) {

	var error;
  	var control = null;

  	try {
    		if (window.ActiveXObject){
      			control = new ActiveXObject(id);
    		} else if (window.GeckoActiveXObject){
      			control = new GeckoActiveXObject(id);
    		}
  	} catch (error){;}
  	return control;
}

function detectWMPSupport() {

	var wmp64 = "MediaPlayer.MediaPlayer.1";
	var wmp7 = "WMPlayer.OCX.7";
	if((window.ActiveXObject && navigator.userAgent.indexOf('Windows') != -1) || window.GeckoActiveXObject) {
		if(createActiveXObject(wmp7)){ 
			return true;
		} else {
			if(createActiveXObject(wmp64)){
				return true;
			} else {
				return false;
			}
		}
	} else { 
		return false;
	}
}

function davInitStream(playerObj, url, cid, streamName, freq, playerName, container, custom) {

	davPlayerObj = playerObj;
	davUrl = url;
       	scCid = cid;

	davTitle = streamName;
	davGroup = playerName;
	davContainer = container;

	davCustom = new Array();
	for (count=0; count < custom.length; count++) {
		davCustom[count] = custom[count];
	}

	davPlayState = PLAYER_OFF_STATE;
	davStopTimer();
	
	if (!detectWMPSupport()) {
		davGenerateEvent(DAV_START_EVENT);
	}
	if (freq <= 0) {
		return;
	} 
	davFreq = freq * 1000;
	davTimer = setInterval("davPing()", davFreq);

}
