var cdur=0;
var start_play;
var start_buff;
var stop_play;
var tn,bt;
var havesent=false;
var Newstate;

var sc=0;

var ns_hasbuffered=false;

var ns_started=0;
var ns_completed=0;
var ns_playtime=0;
var ns_waittime=0;
var ns_nbuff_events=0;
var ns_nrebuff_events=0;
var ns_pctseen=false;
var isbuffering=false;
var isKeepAlive=false;
var ns_mediabandwidth=false;
var ns_media_size=false;
var ns_userbandwidth=false;
var ns_quality=false;
var ns_buffer_time=0;
var ns_rebuffer_time=0;
var ns_pixel=new Image();


var now2=new Date();
var ns_streamid=parseInt(now2.getTime()/10);
var ns_playlogged=0;
var ns_agt=navigator.appName.toLowerCase();

Opera  = (ns_agt.indexOf('opera')!=-1);
NS     = ((ns_agt.indexOf('netscape')!=-1) && (!Opera));
Mac    = (navigator.userAgent.indexOf("Mac")!=-1);

list=getParamList(window.location.search);
ns_counter=unescape(getParamValue(list,'ns_counter'));
ns_player=getParamValue(list,'ns_player');

function recorddata(text)
{
	var now=new Date();
	ns_pixelUrl='http://'+ns_counter+'&ns_t='+parseInt(now.getTime())+'&ns_streamid='+ns_streamid+'&ns_media='+ns_media+'&ns_mediatype=stream'+text;
	if (NS)
	{
		ns_pixel.src=ns_pixelUrl
	} else {
		ms_pixel=new Image();
		ms_pixel.src=ns_pixelUrl;
	}
	ClearKeepAlive();
	SetKeepAlive();
}


function SetKeepAlive() {
	KeepAliveTimer=setTimeout('DoKeepAlive()',600000);
	isKeepAlive=true;
}

function ClearKeepAlive() {
	if(isKeepAlive) 
    clearTimeout(KeepAliveTimer);
}

function DoKeepAlive() {
	recorddata('&ns_type=hidden&ns_event=keepalive');
}

function Init()
{
	if (NS)
	{
		RegisterEventObservers();
	}
}

function RegisterEventObservers()
{ 
	var MediaPlayer = document.MediaPlayer;
	document.appObs.setByProxyDSScriptCommandObserver(MediaPlayer, true);
	document.appObs.setByProxyDSPlayStateChangeObserver(MediaPlayer, true);
	document.appObs.setByProxyDSNewStreamObserver(MediaPlayer, true);
	document.appObs.setByProxyDSBufferingObserver(MediaPlayer, true);
	document.appObs.setByProxyDSEndOfStreamObserver(MediaPlayer, true);
}

function OnDSScriptCommandEvt(scType, scParam)
{ 
	DoEvent(scType, scParam);
}

function OnDSPlayStateChangeEvt(Oldstate,Newstate)
{
	DoPlayStateEvent(Oldstate,Newstate);
}

function OnDSBufferingEvt(start)
{
	DoWindowsBufferingEvent(start)
}

function OnDSNewStreamEvt(result)
{
	havesent=false;
	ns_media_size=getClipSize();
	cdur=getDuration();
	recorddata('&ns_type=hidden&ns_event=newstream');
}

function OnDSEndOfStreamEvt (result)
{
	ns_completed++;
}


if(ns_player=="rm") {
	useReal=true;
	ns_media="rm";
} else {
	useReal=false;
	ns_media="wm";
}


// ================================================================== //
//
//              Begin Wrapper Functions
//
// ================================================================== //

function getPlayState() {
  if (useReal) {
    return document.MediaPlayer.GetPlayState();
  } else {
  	if(NS) {
	    return document.MediaPlayer.GetPlayState();
	} else {
	    return document.MediaPlayer.playState;
	}
  }
}

function getQuality() {
	if(useReal) {
		pr=document.MediaPlayer.GetPacketsReceived();
		pt=document.MediaPlayer.GetPacketsTotal();
		if (pr>0) 
	    	ns_quality=Math.floor(100*pt/pr+0.5);
		else
	    	ns_quality=false;
	} else {
		if(NS) {
			ns_quality=document.MediaPlayer.GetReceptionQuality();
		} else {
			ns_quality=document.MediaPlayer.ReceptionQuality;		
		}
	}
	return ns_quality;
}

function getMediaBandwidth() {
	tempvar=0;
	if(useReal) {
		tempvar=document.MediaPlayer.GetBandwidthAverage();
	} else { 
		if(NS) {
			tempvar=document.MediaPlayer.GetBandwidth();
		} else {
			tempvar=document.MediaPlayer.Bandwidth;
		}
	}
	if(tempvar>0) {
		return Math.floor(tempvar/1024)+"k";
	} else {
		return false
	}

}

function getPosition() {
	if(useReal) {
		return document.MediaPlayer.GetPosition();
	} else { 
		if(NS) {
			return 1000*(document.MediaPlayer.GetCurrentPosition());
		} else {
			return 1000*(document.MediaPlayer.CurrentPosition);
		}
	}
}

function getClipSize() {
	if(useReal) {
		cw=document.MediaPlayer.GetClipWidth();
		ch=document.MediaPlayer.GetClipHeight();
	} else {
		if(NS) {
			cw=document.MediaPlayer.GetImageSourceWidth();
			ch=document.MediaPlayer.GetImageSourceHeight();
		} else {
			cw=document.MediaPlayer.ImageSourceWidth;
			ch=document.MediaPlayer.ImageSourceHeight;		
		}
	}
	if(cw>0 & ch>0) {
		return ""+cw+"x"+ch;
	} else {
		return false;
	}
}

function getUserBandwidth() {
	if(useReal) {
		tempvar=document.MediaPlayer.GetConnectionBandwidth();
		tempvar=Math.floor(tempvar/1024)+"k"
		return tempvar;
	} else {
		return false;
	}
}


function getDuration() {
	if(useReal) {
		isLive=document.MediaPlayer.GetLiveState()
		if(!isLive) {
			return document.MediaPlayer.GetLength();		
		}
	} else {
		if(NS) {
			isValid=document.MediaPlayer.GetIsDurationValid()
			if(isValid) {
				return document.MediaPlayer.GetDuration()*1000;
			}
		} else {
			if(document.MediaPlayer.IsDurationValid) {
				return document.MediaPlayer.Duration*1000;
			}
		}
	}
}

// ================================================================== //
//
//              End Wrapper Functions
//
// ================================================================== //

// ================================================================== //
//
//     Begin Realplayer-Specific Functions
//
// ================================================================== //
function DoRealPlayStateEvent(VOldstate, VNewstate) {
	Oldstate=parseInt(VOldstate);
	Newstate=parseInt(VNewstate);
	if (Newstate==1 | Newstate==2 | Newstate==5) {
	   Newstate=-1
	}
	if(Oldstate==1 | Oldstate==2 | Oldstate==5) {
		Oldstate=-1
		};
	if(Oldstate==4) {
		Oldstate=1
		};
	if(Newstate==4) {
		Newstate=1
		};
	if(Oldstate==3) {
		Oldstate=2
		};
	if(Newstate==3) {
		Newstate=2
		};
	if((NS) && (ns_nrebuff_events>0) && Newstate==2 && Oldstate==-1) {
//		recorddata('Navigator rebuffering with Realplayer - No measurement');
	} else {
		DoPlayStateEvent(Oldstate,Newstate);
	}
}

function DoRealBufferingEvent(reason,pct) {
	havesent=false;
	if(!isbuffering) {
		bt=new Date();
		start_buff=bt.getTime();
		isbuffering=true;
	}
	else {
		if(pct==100) {
			bt=new Date();
			end_buff=bt.getTime();
			diff=end_buff-start_buff;
			if(diff>0) {
				if(ns_nbuff_events>0) {
					ns_rebuffer_time+=diff;
					ns_nrebuff_events++;
				} else {
					ns_buffer_time+=diff;				
				}
				ns_nbuff_events++;
				recorddata('&ns_type=hidden&ns_event=realbuffering.bufftime='+ns_buffer_time+'.rebuff='+ns_rebuffer_time+'.ns_nbuff_events='+ns_nbuff_events+'.ns_nrebuff_events='+ns_nrebuff_events);
//
// Last two lines moved within diff>0 section, 03-04-2002
//
			}
			ns_hasbuffered=true;
			isbuffering=false;
		}
	}
}

function DoRealClipOpenedEvent(name,url) {
	havesent=false;
	bt=new Date();
	start_buff=bt.getTime();
	ns_userbandwidth=getUserBandwidth();
	ns_media_size=getClipSize();
	cdur=getDuration();
	recorddata("&ns_type=hidden&ns_event=newstream");
}

function DoRealPosLengthEvent(position, length) {
	ip=parseInt(position);
	il=parseInt(length);
	if(il>0 && (ip/il)>0.9) {
		sc=1;
	}
}

// ================================================================== //
//
//     End Realplayer-Specific Functions
//
// ================================================================== //

// ================================================================== //
//
//     Begin Windows Media Player-Specific Functions
//
// ================================================================== //
function DoWindowsBufferingEvent(start) {
	if(start=='false') {
		start=false;  // Thank you, Netscape!!
	}
	havesent=false;
	if(start) {
		bt=new Date();
		start_buff=bt.getTime();
		recorddata('&ns_type=hidden&ns_event=winbuffering.start');
		ns_hasbuffered=true;
//
//  03-04-2002
// BEGIN Time bookkeeping fix: Time before buffering started is
//   saved by calculating ns_waittime
//
		state=getPlayState();
		if(state==2 && ns_nbuff_events==0) {
			curpos=getPosition();
			tn=new Date();
			ns_waittime=tn.getTime()-start_play;
			recorddata('&ns_type=hidden&ns_waittime='+ns_waittime);
		}
//
// END Time bookkeeping fix 
//   03-04-2002
//
	}
	else {
		bt=new Date();
		end_buff=bt.getTime();
		diff=end_buff-start_buff;
		if(diff>0) {
			if(ns_nbuff_events>0) {
				ns_rebuffer_time+=diff;
				ns_nrebuff_events++;
			} else {
				ns_buffer_time+=diff;				
			}
			ns_nbuff_events++;
			recorddata('&ns_type=hidden&ns_event=winbuffering.bufftime='+ns_buffer_time+'.rebuff='+ns_rebuffer_time+'.ns_nbuff_events='+ns_nbuff_events+'.nrebuff_events='+ns_nrebuff_events);
//
// Last two lines moved within diff>0 section, 03-04-2002
//
		}
		isbuffering=false;
	}
}

function DoEvent(scType, scParam)
{	
	havesent=false;
	if (scType == "sitestat")
	{
//		recorddata("&ns_event="+scParam);
	}
}

function DoWinPosLengthEvent(state) {
	state=getPlayState();
	if(state==2) {
		var curpos=getPosition();
		setTimeout('DoWinPosLengthEvent()',100);
		if(cdur>0 && (curpos/cdur)>0.9) {
			sc=1;
		}
	}
}

// ================================================================== //
//
//     End Windows Media Player-Specific Functions
//
// ================================================================== //


// ================================================================== //
//
//     Begin Generic Functions
//
// ================================================================== //

function getParamList(query) {
	if(query.length > 1) {
		query = query.substring(1, query.length);
	}
	else {
		query = null;
	}
	list = new Array();
	if(query) {
		for(var i=0; i < query.split("&").length; i++) {
			this.list[i] = query.split("&")[i];
		}
		return list;
	}
}

function getParamValue(list,search) {
	for(var j=0; j < list.length; j++) {
		if(list[j].split("=")[0] == search)
		return list[j].split("=")[1];
	}
	return false;
}

function DoPlayStateEvent(Oldstate,Newstate)
{
	var curpos=getPosition();
	havesent=false;
	if(Newstate ==0) {
		recorddata('&ns_type=hidden&ns_event=stop');
		if(Oldstate==2) {
			tn=new Date();
			stop_play=tn.getTime();
			ns_playtime+=stop_play-start_play;
		}
		if(sc==1) {
			ns_pctseen=100;
			ns_completed++;
			sc=0;
		}
		if(Oldstate==2 || Oldstate==1) {
			DoClipClosedEvent();
		}
	}
	else if(Newstate ==1) {
		tn=new Date();
		stop_play=tn.getTime();
		ns_playtime+=stop_play-start_play;
		recorddata('&ns_type=hidden&ns_event=pause');
		ns_playlogged=0; // TP added reset to playlogged
	}
	else if(Newstate ==2 ) { // TP buffering is not neeeded - && ns_hasbuffered 
		if(Oldstate!=1) {
			ns_started++;
		}
		sc=0;
		tn=new Date();
		start_play=tn.getTime();
		if (ns_streamid != ns_playlogged) {
			ns_playlogged = ns_streamid;
			recorddata('&ns_type=hidden&ns_event=play');
			}
		if(!useReal) {
			DoWinPosLengthEvent(Newstate);
		}
	}
}

function DoClipClosedEvent() {
	havesent=false;
	ns_hasbuffered=false;
	ns_mediabandwidth=getMediaBandwidth();
	ns_quality=getQuality();
	DoEndPixel();
	ClearKeepAlive();
}

function DoUnload() {
	state=getPlayState();
	if(state>0 && state!=4) {
		tn=new Date();
		stop_play=tn.getTime();
		ns_playtime+=stop_play-start_play;
	}
	ns_mediabandwidth=getMediaBandwidth();
	ns_quality=getQuality();
	DoEndPixel();
}

function delay(gap){ /* gap is in millisecs */
	var then,now; 
	then=new Date().getTime();
	now=then;
	while((now-then)<gap)
	{now=new Date().getTime();}
}


function DoBeginPixel() {
	url='';
	url+='&ns_event=begin';
	recorddata(url);
}

function DoEndPixel() {
	if(havesent) return;
	url='&ns_event=end';
	if(ns_mediabandwidth) {
		url+='&ns_mediabandwidth='+ns_mediabandwidth;
		ns_mediabandwidth=false;
	}
	if(ns_quality) {
		url+='&ns_quality='+ns_quality;
		ns_quality=false;
	}
	if(ns_buffer_time) {
		totbuftime=ns_buffer_time+ns_rebuffer_time;
		url+='&ns_buffer_time='+totbuftime; 
		if(!useReal) {
			ns_playtime=ns_playtime-ns_buffer_time-ns_rebuffer_time-ns_waittime;
		} else {
			ns_playtime=ns_playtime-ns_rebuffer_time;		
		}
		ns_buffertime=0; ns_rebuffer_time=0;
		nbuff_events=0; nrebuff_events=0;
		if(ns_playtime<0) ns_playtime=0;
	}

	if(!ns_pctseen) {
		if(cdur>0) {
			ns_pctseen=Math.floor(100*ns_playtime/cdur+0.5);
		} else {
			ns_pctseen=false;
		}
	}

	if(ns_playtime) {
		url+='&ns_playtime='+ns_playtime; ns_playtime=0;
	}
	if(ns_userbandwidth) {
		url+='&ns_userbandwidth='+ns_userbandwidth;
		ns_userbandwidth=false;
	}
	if(ns_pctseen) {
		if(ns_pctseen>100) ns_pctseen=100;
		url+='&ns_pctseen='+ns_pctseen;
		ns_pctseen=false;
	}	
	if(ns_player) {
		url+='&ns_player='+ns_player;
		ns_player=false;
	}
	if(ns_media_size) {
		url+='&ns_media_size='+ns_media_size;
		ns_mediasize=false;
	}
	url+='&ns_started='+ns_started; ns_started=0;
	if(cdur>0) {
		url+='&ns_completed='+ns_completed; ns_completed=0;
	}
	recorddata(url);

//
//  Next 4 lines included to reset buffering after end.
//    03-04-2002
//
	ns_nbuff_events=0;
	ns_nrebuff_events=0;
	ns_buffer_time=0;
	ns_rebuffer_time=0;
	havesent=true;
	now2=new Date();
	ns_streamid=parseInt(now2.getTime()/10);	
}

// DoBeginPixel();

// ================================================================== //
//
//     End Generic Functions
//
// ================================================================== //


