Function.prototype.closure = function(obj){
	if(!window.__objs){window.__objs = [];window.__funs = [];}
	var fun = this;var objId = obj.__objId;if(!objId)__objs[objId=obj.__objId=__objs.length]=obj;var funId = fun.__funId;if(!funId)__funs[funId=fun.__funId=__funs.length]=fun;if (!obj.__closures)obj.__closures = [];var closure = obj.__closures[funId];if(closure)return closure;obj = null;fun = null;
	return __objs[objId].__closures[funId]=function()	{return __funs[funId].apply(__objs[objId], arguments);};
};
var _spyobj;
var _spyhtml;
var _spyiv;
spyRefresh=function(){
	if(_spyobj){
		cleanmem(_spyobj);
		_spyobj.innerHTML=_spyhtml;
	}
}
spyCheck=function(){
	//_spyiv=setInterval("spyRefresh()",1000);
}
mm.mmSpys=[];
mmSpy=function(mode,n,st){
	this._ts=null;this.saj=null;this.stout=null;this.ns=0;this._items=[];this.spy_st=0;this.dump="";this._spyplaying=true;this.spy_idx=null;this.interval=null;
	this.init=function(mode,n,st,interval){
		mm.mmSpys.push(this);
		this.spy_id=mm.mmSpys.length - 1;
		mm.refs["spy"+this.spy_id]=this;
		if(mode == null) this.mode="page";
		else this.mode=mode;
		if(n == null) this.spynb=20;
		else this.spynb=n;
		if(interval == null) this.interval=120000;
		else this.interval=interval;
		if(st == null) this.spy_st=0;
		else this.spy_st=st;
		this.saj=new ajax();
		ajcallbacks[this.saj.ajid]=this;
		this.count=0;
	}
	this.goSpy=function(ts,start){
		this._ts=ts;
		if(start){
			start=start.split("\\n").join("\n");
			start=start.split("\\t").join("\t");
			this._items=this.spyData(start);
			this.stout=setTimeout("mm.mmSpys["+this.spy_id+"].spySend()", this.interval);
		}
	}
	this.spyDebug=function(msg){
		if(d=gel("spydebug")){d.innerHTML=msg;}
	}
	this.spySend=function(nb){
		if(typeof(nb)=="undefined") nb=this.spynb;
		//clearInterval(this.stout);
		var u="spy.ajax.php?ts="+this._ts+"&rnd="+Math.random()+"&nb="+nb+"&st="+this.spy_st;
		if(mmz == "ul") u += "&f=1";
		else u += "&f=0";
		this.saj.setResultHandler(function(raw,me){try{me.spyAdd(raw)}catch(e){alert(e)}});
		this.saj.call(u);
	}
	this.spyReceived=function(raw,me){
		try{me.spyAdd(raw);	}
		catch(e){};
	}
	this.spyAdd=function(raw){
		if(raw.length>0 && this._spyplaying){
			dump=raw;
			var newitems=this.spyData(raw);
			var mergeitems=[];
			if(newitems[0][0]!=this._items[0][0]&& newitems[0][1]!=this._items[0][1]){
				mergeitems=newitems.concat(this._items);
				mergeitems=mergeitems.slice(0,3);
				this._items=mergeitems;
				this.spyShow();
			}
		}
		this.stout=setTimeout("mm.mmSpys["+this.spy_id+"].spySend()", this.interval);
	}
	this.dumpSpyContent=function(items){
		var dbg="";
		for(var i=0;i<items.length;i++){
			dbg+=i+":\t"+items[i]+"\n";
		}
		return dbg;
	}
	this.spyData=function(raw){
		var items=[];
		var l=raw.split("\n");
		for(var i=0 ; i<l.length ; i++){
			var t=l[i].split("\t");
			if(t.length>0){
				for(var j=0;j<t.length;j++) t[j]=unescape(t[j].split("\\").join(""));
				items.push(t);
			}
		}
		return items;
	}
	this.spyTime=function(its){
		var dt=new Date();
		dt.setTime(its*1000);
		var h=dt.getHours();if(h<10) h="0"+h;var m=dt.getMinutes();if(m<10) m="0"+m;var s=dt.getSeconds();if(s<10) s="0"+s;
		return h+":"+m+":"+s;
	}
	this.spyPlay=function(bool){
		if(bool!=this._spyplaying){
			this._spyplaying=bool;
			if(bool==false) clearInterval(this.stout);
			else this.stout=setTimeout("mm.mmSpys["+this.spy_id+"].spySend(1)", this.interval);
		}
	}
	this.spyPageItem=function(t,idx,last){
		var map={ts:0,cb19:1,artists:2,album:3,track:4,tid:5,scoring:6,style:7,f:8,timing:9,artlinks:10};
		var its=t[map['ts']];
		var cs=(its >this._ts)?"spynewitem":"spyitem";
		//var cs="spyitem";
		var cov=t[map['cb19']].substr(0,13);
		var ultrk=((t[map['f']]&1)!=0)?1:0;
		if(ultrk==1)cov="u"+cov;
		var h="";
		var arts=t[map['artists']].split(" / ");
		var links=t[map['artlinks']].split(";");
		var more=false;
		var n=5;
		var narts=arts.length;
		var sampleLink=audioLink30s(t[map['cb19']],"",ultrk);
		if(arts.length>n){more=true;arts=arts.slice(0,n);}
		for(i=0;i<arts.length;i++){if(arts[i]!="Divers"){arts[i]="<a href=\"/"+links[i]+(mmz!="ul"?"/":"")+"\">"+arts[i]+"</a>";}}
		arts=arts.join(" / ")+(more?"...":"");
		if(ultrk==1){
			var ulLink=audioLinkUl(t[map['cb19']],"");
			var dlLink=audioLinkDl(t[map['cb19']],"");
			var ul_stream="<table align=center><tr><td><a class=ultxt "+ulLink+"><img src=\""+pictv41_dir+"ic_stream_21x21.gif"+"\" border=0 width=21 height=21 vspace=0></a></td><td style=\"padding-left:2px;vertical-align:middle\"><a class=ultxt "+ulLink+">"+_timing(t[map['timing']])+"</a></td></tr></table>";
			var ul_dl="<table align=center><tr><td><a class=ultxt "+dlLink+"><img src=\""+pictv41_dir+"ic_dl_21x21.gif"+"\" border=0 width=21 height=21 vspace=0></a></td><td style=\"padding-left:2px;vertical-align:middle\"><a class=ultxt "+dlLink+">"+_dlsize(t[map['timing']])+"</a></td></tr></table>";
		}
		else{
			var ul_stream="&nbsp;";
			var ul_dl="&nbsp;";
		}
		h ="<div id=\"spyitem"+idx+"\" class=\""+cs+"\""+(last?" style=\"border:0\"":"")+"><table class=trktable><tr valign=top><td class=\"spycover\" id=\"spycover"+idx+"\"><div class=cover60 id=\"cov"+idx+"\"><a href=\"/artist.php?cdfocus="+t[map['cb19']].substr(0,13)+"\"><img src=\""+cdCover(cov,60)+"\" height=60 border=0></a></div></td><td class=trkcolinfo><table class=cdtext><tr><td class=cdres align=right><a "+sampleLink+"><img border=0 id=\"i-"+idx+"\" src=\""+pictv41_dir+"play18_std.gif"+"\" width=18 height=18></a></td><td class=cdres></td><td width=100% style=\"padding-top:2px\"><b><a href=#>"+t[map['track']]+"</a></b></td></tr><tr><td class=cdres style=\"padding-top:5px\">Artiste"+(narts>1?"s":"&nbsp;&nbsp;")+"</td><td class=cdres style=\"padding-top:5px\">:</td><td width=100% style=\"padding-top:5px\">"+arts+"</td></tr><tr><td class=cdres>Album</td><td class=cdres>:</td><td width=100%><a href=\"/artist.php?cdfocus="+t[map['cb19']].substr(0,13)+"\">"+t[map['album']]+"</a></td></tr></table></td><td class=trkcolstars><img src=\""+pictv41_dir+"star"+t[map['scoring']]+".gif\" border=0 width=68 height=12 align=absmiddle><br>"+ssts[t[map['style']]]+"</td><td class=trkcolul>"+ul_stream+"</td><td class=trkcoldl>"+ul_dl+"</td></tr></table></div>\n";
		return h;
	}
	this.spyHomeItem=function(t,idx,last){
		var map={ts:0,cb19:1,artists:2,album:3,track:4,tid:5,scoring:6,style:7,f:8,timing:9,artlinks:10,cdlink:11};
		var its=t[map['ts']];
		var cs=(its >this._ts)?"spynewitem":"spyitem";
		var cov=t[map['cb19']].substr(0,13);
		if((t[map['f']]&1)!=0) cov="u"+cov;
		var h="";
		var arts=t[map['artists']].split(" / ");
		var links=t[map['artlinks']].split(";");
		var more=false;
		var n=3;
		if(arts.length>n){more=true;arts=arts.slice(0,n);}
		for(i=0 ; i<arts.length ; i++){if(arts[i]!="Divers"){arts[i]="<a href=\"/"+links[i]+(mmz!="ul"?"/":"")+"\">"+arts[i]+"</a>";}}
		arts=arts.join(" / ")+(more?"...":"");
		h+="<div id=\"spyitem"+idx+"\" class=\""+cs+"\""+(last?" style=\"border:0;padding-bottom:0;margin-bottom:0\"":"")+">\n";
		h+="<table>\n";
		h+="<tr valign=\"top\">\n";
		h+="<td class=\"spycover\" id=\"spycover"+idx+"\" rowspan=3><div class=\"cover60\"><a onmouseover=\"mm.mmSpys["+this.spy_id+"].spyPlay(false)\" onmouseout=\"mm.mmSpys["+this.spy_id+"].spyPlay(true)\" href=\""+t[map['cdlink']]+"\"><img src=\""+cdCover(cov, 60)+"\" height=60 border=0></a></div></td>\n";
		h+="<td><b><a href=\""+t[map['cdlink']]+"\">"+t[map['track']]+"</a></b></td>";
		h+="</tr>";
		h+="<tr><td><div class=\"spyarts\">"+arts+"</div></td></tr>";
		h+="<tr><td>écouté ŕ "+this.spyTime(its)+"</td></tr>";
		h+="</table>";
		//h+="<td><table><tr><td><b><a href=\""+t[map['cdlink']]+"\">"+t[map['track']]+"</a></b></td></tr><tr><td>"+arts+"</td></tr><tr><td>écouté ŕ "+this.spyTime(its)+"</td></tr></table></td>\n";
		//h+="</tr>\n";
		//h+="</table>\n";
		h+="</div>\n";
		return h;
	}
	this.spyShow=function(){
		try{
			if(o=gel("spylist")){
				var h="";
				this.ns=this._items.length;
				var spyItem;
				if(this.mode == "home") spyItem="spyHomeItem";
				else spyItem="spyPageItem";
				for(var i=0 ; i<this.ns ; i++){
					var its=this._items[i][0];
					if(i==0){_ts2=its;if(_ts2 == this._ts) return;}
					try{h+=this[spyItem](this._items[i],i,(i==this.ns-1));}
					catch(err){}
				}
				o.innerHTML = h;
				this.spyFade();
			}
			this._ts=_ts2;
		}
		catch(e){}
	}
	this.spyFade=function(){
		var fades=[];
		for(var i=0 ; i<this.ns ; i++){
			if(o=gel("spyitem"+i)){if(o.className == "spynewitem") fades.push(gel("spycover"+i));	}
		}
		for(var i=0 ; i<fades.length ; i++){var o=fades[i];visfadein(o.id, 0, 100, 500);}
	}
	this.init(mode,n,st);
}
allSpyPlay=function(bool){
	try{
		if(mm&&mm.mmSpys&&mm.mmSpys.length){
			for(var i=0 ; i<mm.mmSpys.length ; i++){
				if(mm.mmSpys[i]){if(mm.mmSpys[i].spyPlay) mm.mmSpys[i].spyPlay(bool)}
			}
		}
	}
	catch(e){};
}