var lyre=function(){var maxid=-1;var sync=new XMLHttpRequest();var sync_on=false;var sync_init=true;var async=new XMLHttpRequest();var sid=0;var errorcount=0;var async_ready=true;var async_queue=new Array();var callbacks=new Array();var urlprefix="";var rw_user_id=1;var rw_apikey="";var that={};that.catcherrors=false;that.sync_stop=false;that.sync_time=0;that.sync_extra={};that.setURLPrefix=function(newprefix){urlprefix=newprefix;};that.setStationID=function(newsid){sid=newsid;};that.setUserID=function(user_id){rw_user_id=user_id;};that.setKey=function(key){rw_apikey=key;};that.clockSync=function(time){return;};that.errorCallback=function(json){return;};that.jsErrorCallback=function(caught,json){return;};that.serialize=function(obj){var str=[];for(var p in obj){str.push(p+"="+encodeURIComponent(obj[p]));}
return str.join("&");}
var cloneObject=function(){var nobj={}
for(var i=0;i<arguments.length;i++){for(var p in arguments[i]){nobj[p]=arguments[i][p]}}
return nobj;}
var lyreClockHandle=function(response){if(response['time']){that.sync_time=response['time'];that.clockSync(that.sync_time);}};var sync_get=function(params){if(!params)params={}
var actionurl=sync_init?"init":"sync"
var url=urlprefix+"/sync/"+sid+"/"+actionurl;sync.open("POST",url,true)
sync.onreadystatechange=sync_complete;sync.setRequestHeader("Content-type","application/x-www-form-urlencoded");var fparams=cloneObject(params,that.sync_extra);fparams['user_id']=rw_user_id;fparams['key']=rw_apikey;fparams['in_order']="true";var sfparams=that.serialize(fparams);sync.send(sfparams);};var sync_complete=function(){var response;var synctimeout=1000;if(that.stop_sync){}
else if((sync.readyState==4)&&(sync.status==200)){errorcount=0;try{if(JSON)response=JSON.parse(sync.responseText);else eval("response = "+sync.responseText);}
catch(err){that.errorCallback({"code":500,"text":"Error decoding JSON from API."});}
if(response){sync_on=true;sync_init=false;performCallbacks(response);}}
else if(sync.readyState==4){errorcount++;if(errorcount>1){response=[{"error":{"code":sync.status,"text":"HTTP Error.  Synchronization has stopped."}}];performCallbacks(response);}
synctimeout=5000;sync_init=true;}
if(response&&response[0]&&response[0].error&&response[0].error.code){if(response[0].error.code==403){that.sync_stop=true;}
else{synctimeout=5000;sync_init=true;}}
if(sync.readyState==4){if(that.sync_stop){sync_on=false;sync_stop=false;}
if(sync_on){setTimeout(sync_get,synctimeout);}}};var async_complete=function(){var response;if((async.readyState==4)&&(async.status==200)){if(JSON)response=JSON.parse(async.responseText);else eval("response = "+async.responseText);if(response)performCallbacks(response);}
else if(async.readyState==4){response=[{"error":{"code":async.status,"text":"HTTP Error on asynchronous request."}}];performCallbacks(response);}
if(async.readyState==4){if(!async_queueCheck(true))async_ready=true;}};var async_queueAdd=function(action,params){var temp={};temp['action']=action;temp['params']=params;async_queue.push(temp);};var async_queueCheck=function(override){if((async_queue.length>0)&&(async_ready||override)){that.async_get(async_queue[0]['action'],async_queue[0]['params'],true);async_queue.shift();return true;}
return false;};var performCallbacks=function(json){var cb,i;var sched_synced=false;var sched_presynced=false;for(var i=0;i<json.length;i++){for(var j in json[i]){if(j.indexOf("sched")==0){sched_synced=true;if(!sched_presynced){performCallback({},"sched_presync");sched_presynced=true;}}
performCallback(json[i][j],j);}}
if(sched_synced)performCallback({},"sched_sync");};var performCallback=function(json,segment){if(callbacks[segment]){for(var cb=0;cb<callbacks[segment].length;cb++){if(callbacks[segment][cb]){if(that.catcherrors){try{callbacks[segment][cb](json);}
catch(err){that.jsErrorCallback(err,json);that.sync_stop=true;return;}}
else{callbacks[segment][cb](json);}}}}};that.sync_start=function(exparams){if(sync_on===true)return false;if(exparams)exparams['refresh']="full";else exparams={"refresh":"full"}
sync_get(exparams);return true;};that.async_get=function(action,params,override){if(!params)params={}
if(async_ready||override){async_ready=false;var url="/async/"+sid+"/"+action;if(action=="login")url="/auth/login.php";async.open("POST",urlprefix+url,true);async.onreadystatechange=async_complete;async.setRequestHeader("Content-type","application/x-www-form-urlencoded");var fparams=cloneObject(params)
fparams['user_id']=rw_user_id;fparams['key']=rw_apikey;fparams['in_order']="true";async.send(that.serialize(fparams));}
else{async_queueAdd(action,params);}};that.addCallback=function(method,lyreelement){maxid++;if(!callbacks[lyreelement])callbacks[lyreelement]=[];callbacks[lyreelement][maxid]=method;return maxid;};that.removeCallback=function(lyreelement,cbid){if(callbacks[lyreelement]){if(callbacks[lyreelement][cbid]){delete(callbacks[lyreelement][cbid]);return true;}}
return false;}
that.addCallback(lyreClockHandle,"lyre");return that;}();
var prefs=function(){var newsectioncb=[];var newprefcb=[];var that={};that.p={};var heavyencode=false;if(navigator.userAgent.toLowerCase().indexOf("opera")>0)heavyencode=true;that.saveCookie=function(name,object){var today=new Date();var expiry=new Date(today.getTime()+28*24*60*60*1000*13);var sfied=JSON.stringify(object);if(heavyencode){sfied=encodeURIComponent(sfied);}
else{sfied=sfied.replace("%","%25");sfied=sfied.replace("+","%2B");sfied=sfied.replace("=","%3D");sfied=sfied.replace(";","%3B");sfied=sfied.replace(",","%2C");}
var thecookie=name+"="+sfied;document.cookie=thecookie+";path=/;domain="+COOKIEDOMAIN+";expires="+expiry.toGMTString();};that.loadCookie=function(name){var dc=document.cookie;var cname=name+"=";var begin=dc.indexOf("; "+cname);if(begin==-1){begin=dc.indexOf(cname);if(begin!=0)return null;}
else{begin+=2;}
var end=document.cookie.indexOf(";",begin);if(end==-1){end=dc.length;}
var mmm_cookie=dc.substring(begin,end);if(!mmm_cookie)return null;mmm_cookie=mmm_cookie.substring(mmm_cookie.indexOf("=")+1);if(heavyencode){mmm_cookie=decodeURIComponent(mmm_cookie);}
else{mmm_cookie=mmm_cookie.replace("%3B",";");mmm_cookie=mmm_cookie.replace("%3D","=");mmm_cookie=mmm_cookie.replace("%2B","+");mmm_cookie=mmm_cookie.replace("%25","%");mmm_cookie=mmm_cookie.replace("%2C",",");}
var cookieobj=null;try{cookieobj=JSON.parse(mmm_cookie);}
catch(err){}
return cookieobj;};that.loadPrefs=function(){var loadedprefs=that.loadCookie("r3prefs");if(!loadedprefs)that.p={};else if(loadedprefs.edi&&loadedprefs.edi.wipeall&&loadedprefs.edi.wipeall.value)that.p={};else that.p=loadedprefs;};that.savePrefs=function(){var p={};for(var section in that.p){p[section]={};for(var name in that.p[section]){if(!that.p[section][name].sessiononly){p[section][name]={"value":that.p[section][name].value};}}}
that.saveCookie("r3prefs",p);};that.getPref=function(section,name){if(!that.p)return;if(!that.p[section])return;if(!that.p[section][name])return;return that.p[section][name].value;}
that.changePref=function(section,name,value,nocallbacks){if(!that.p[section])return false;if(!that.p[section][name])return false;if(typeof(that.p[section][name].verify)=="function"){if(!that.p[section][name].verify(value))return false;}
that.p[section][name].value=value;if(!nocallbacks)that.doCallback(that.p[section][name]);that.savePrefs();if(that.p[section][name].refresh||that.p[section][name].reload){window.location.reload();}
return true;};that.addPref=function(section,prefdata){prefdata.callbacks=[];if(prefdata.callback){if(prefdata.callbackobj){prefdata.callbacks.push({"object":prefdata.callbackobj,"method":prefdata.callback});delete(prefdata.callbackobj);}
else if(prefdata.callback){prefdata.callbacks.push({"method":prefdata.callback});delete(prefdata.callback);}}
if(!that.p[section])that.newSection(section);if(!that.p[section][prefdata.name]){prefdata.value=prefdata.defaultvalue;that.p[section][prefdata.name]=prefdata;}
else{prefdata.value=that.p[section][prefdata.name].value;that.p[section][prefdata.name]=prefdata;}
for(var i=0;i<newprefcb.length;i++){newprefcb[i].method.call(newprefcb[i].object,section,prefdata);}
that.doCallback(prefdata);};that.newSection=function(section){that.p[section]={};for(var i=0;i<newsectioncb.length;i++){newsectioncb[i].method.call(newsectioncb[i].object,section);}};that.addNewSectionCallback=function(object,method){newsectioncb.push({"object":object,"method":method});};that.addNewPrefCallback=function(object,method){newprefcb.push({"object":object,"method":method});};that.addPrefCallback=function(section,name,method,object){if(object)that.p[section][name].callbacks.push({"object":object,"method":method});else that.p[section][name].callbacks.push({"method":method});};that.doCallback=function(pref){if(!pref.callbacks)return;for(var i=0;i<pref.callbacks.length;i++){if(typeof(pref.callbacks[i].object)=="object"){pref.callbacks[i].method.call(pref.callbacks[i].object,pref.value);}
else if(typeof(pref.callbacks[i].method)=="function"){pref.callbacks[i].method(pref.value);}}};that.loadPrefs();return that;}();
var svg=function(){var that={};that.capable=false;that.isElSVG=function(el){if(!that.capable)return false;if(el.namespaceURI.indexOf("svg")>0)return true;return false;};if(!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")){return that;}
that.capable=true;var ns="http://www.w3.org/2000/svg";var xlinkns="http://www.w3.org/1999/xlink";var xmlns="http://www.w3.org/2000/xmlns/";var webkit=false;if(RegExp(" AppleWebKit/").test(navigator.userAgent))webkit=true;else if(RegExp(" Chrome/").test(navigator.userAgent))webkit=true;else if(RegExp(" Safari/").test(navigator.userAgent))webkit=true;var linkcount=0;that.setAttribs=function(el,attribs){if((typeof(attribs)=="object")||(typeof(attribs)=="array")){for(var i in attribs){if(webkit&&(i=="shape_rendering"))continue;else if(i=="textContent")el.textContent=attribs[i];else el.setAttribute(i.replace(/_/g,"-"),attribs[i]);}}};that.make=function(attribs){var newsvg=document.createElementNS(ns,"svg");newsvg.setAttributeNS(xmlns,"xmlns:xlink",xlinkns);that.setAttribs(newsvg,attribs);return newsvg;};that.makeEl=function(type,attribs){var newel=document.createElementNS(ns,type);if(attribs)that.setAttribs(newel,attribs);return newel;};that.makeLine=function(x1,y1,x2,y2,attribs){var newel=that.makeEl("line");newel.setAttribute("x1",x1);newel.setAttribute("y1",y1);newel.setAttribute("x2",x2);newel.setAttribute("y2",y2);that.setAttribs(newel,attribs);return newel;};that.makeRect=function(x,y,width,height,attribs){var newel=that.makeEl("rect");newel.setAttribute("x",x);newel.setAttribute("y",y);newel.setAttribute("width",width);newel.setAttribute("height",height);that.setAttribs(newel,attribs);return newel;};that.makeImage=function(href,x,y,width,height,attribs){var newel=that.makeEl("image");newel.setAttribute("x",x);newel.setAttribute("y",y);newel.setAttribute("width",width);newel.setAttribute("height",height);newel.setAttribute("fill","none");newel.setAttributeNS(xlinkns,"xlink:href",href);that.setAttribs(newel,attribs);return newel;};that.makeGradient=function(type,id,x1,y1,x2,y2,spreadmethod){var newel=that.makeEl(type+"Gradient");newel.setAttribute("id",id);newel.setAttribute("x1",x1);newel.setAttribute("y1",y1);newel.setAttribute("x2",x2);newel.setAttribute("y2",y2);newel.setAttribute("spreadmethod",spreadmethod);return newel;};that.makeStop=function(offset,color,opacity){var newel=that.makeEl("stop");newel.setAttribute("offset",offset);newel.setAttribute("stop-color",color);newel.setAttribute("stop-opacity",opacity);return newel;};that.linkify=function(el,href,samewindow,textcolor){linkcount++;el.style.cursor="pointer";if(href){if(samewindow)el.addEventListener("click",function(){location.href=href},true);else el.addEventListener("click",function(){window.open(href,"rw_link_"+linkcount,'');},true);}};that.linkifyText=that.linkify;return that;}();
var fx=function(){var that={};that.enabled=true;var requestFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame;var browsersupport=true;if(!requestFrame){browsersupport=false;requestFrame=function(callback){window.setTimeout(callback,40);};}
that.extend=function(name,func){that[name]=func;};that.make=function(func,el,duration){duration=duration*0.8;var newfx;if(arguments.length>3){var args=[el];for(var i=3;i<arguments.length;i++)args.push(arguments[i])
newfx=func.apply(this,args);}
else{newfx=func(el);}
var from=0;var to=0;var now=0;var delta=0;var started=0;newfx.duration=duration;newfx.unstoppable=false;if(!("onStart"in newfx))newfx.onStart=false;if(!("onComplete"in newfx))newfx.onComplete=false;if(!("onSet"in newfx))newfx.onSet=false;var step=function(steptime){if(!browsersupport||!steptime)steptime=new Date().getTime();if((steptime<(started+duration))&&(now!=to)){var timeoverduration=(steptime-started)/duration;now=-(to-from)*timeoverduration*(timeoverduration-2)+from;newfx.update(now);newfx.now=now;requestFrame(step);}
else{now=to;newfx.update(now);newfx.stop();}};newfx.stop=function(){if(newfx.onComplete)newfx.onComplete(now);newfx.now=now;};newfx.set=function(nn){now=nn;to=nn;if(newfx.onSet)newfx.onSet(now);newfx.update(nn);newfx.now=now;};newfx.start=function(stopat){var temptime=new Date().getTime();if(arguments.length==2){now=arguments[0];stopat=arguments[1];}
if(temptime<(started+duration)){if(newfx.unstoppable)return;if(to==stopat)return;newfx.stop();}
started=temptime;to=stopat;from=now;delta=to-from;if(newfx.onStart)newfx.onStart(now);if(!that.enabled)now=to;step();};return newfx;};that.SVGAttrib=function(element,attribute,unit){if(!unit)unit="";var svgafx={};svgafx.update=function(now){element.setAttribute(attribute,now+unit);};return svgafx;};that.SVGTranslateY=function(element,x){var svgyfx={};svgyfx.update=function(now){element.setAttribute("transform","translate("+x+", "+Math.floor(now)+")");};return svgyfx;};that.SVGTranslateX=function(element,y){var svgxfx={};svgxfx.update=function(now){element.setAttribute("transform","translate("+Math.floor(now)+", "+y+")");};return svgxfx;};that.CSSNumeric=function(element,attribute,unit){var cssnfx={};if(!unit)unit="";if(attribute=="opacity"){cssnfx.update=function(now){element.style[attribute]=now.toFixed(2)+unit;};}
else if(unit=="px"){cssnfx.update=function(now){element.style[attribute]=Math.round(now)+unit;};}
else{cssnfx.update=function(now){element.style[attribute]=now+unit;};}
return cssnfx;};that.OpacityRemoval=function(element,owner){var orfx={};element.style.opacity="0";var added=false;orfx.onSet=function(now){if((now>0)&&!added){orfx.addToEl();added=true;}
else if((now==0)&&added){orfx.removeFromEl();added=false;}};orfx.removeFromEl=function(){owner.removeChild(element);};orfx.addToEl=function(){owner.appendChild(element);};orfx.onStart=function(now){if((now==0)&&!added){orfx.addToEl();added=true;}};orfx.update=function(now){element.style.opacity=now.toFixed(2);};orfx.onComplete=function(now){if((now==0)&&added){orfx.removeFromEl();added=false;}
if(typeof(orfx.onComplete2)=="function")orfx.onComplete2();};return orfx;};that.OpacityHide=function(element,owner){var orfx=that.OpacityRemoval(element,owner);orfx.removeFromEl=function(){element.style.display="none";};orfx.addToEl=function(){element.style.display="block";};return orfx;};that.BackgroundPosX=function(element){var bx={};if(!element._fx_bkgy)element._fx_bkgy=0;bx.update=function(now){element.style.backgroundPosition=now+"px "+element._fx_bkgy+"px";element._fx_bkgx=now;};return bx;};that.BackgroundPosY=function(element){var by={};if(!element._fx_bkgx)element._fx_bkgx=0;by.update=function(now){element.style.backgroundPosition=element._fx_bkgx+"px "+now+"px";element._fx_bkgy=now;};return by;};var CSSTransform=function(el){if(!el._fx_csstrans){el._fx_csstrans={"scale":1,"translatex":0,"translatey":0};}
var transkey=false;var threed=false;if("webkitTransform"in el.style){transkey='webkitTransform';threed=true;}
if("OTransform"in el.style){transkey="OTransform";}
else return false;var csstfx={};csstfx.doTransform=function(){var t="";t+="scale("+el._fx_csstrans.scale+") ";t+="translate("+el._fx_csstrans.translatex+"px, "+el._fx_csstrans.translatey+"px)";if(threed)t+="translate3d(0,0,0) ";el.style[transkey]=t;};return csstfx;}
that.CSSScale=function(el){var scalefx=CSSTransform(el);if(!scalefx){return{"update":function(){return false;}};}
scalefx.update=function(now){el._fx_csstrans.scale=now;scalefx.doTransform();};return scalefx;};that.CSSTranslateX=function(el){var txfx=CSSTransform(el);if(!txfx){return that.CSSNumeric(el,"left","px");}
txfx.update=function(now){el._fx_csstrans.translatex=Math.round(now);txfx.doTransform();};return txfx;};that.CSSTranslateY=function(el){var tyfx=CSSTransform(el);if(!tyfx){return that.CSSNumeric(el,"top","px");}
tyfx.update=function(now){el._fx_csstrans.translatey=Math.round(now);tyfx.doTransform();};return tyfx;};var menuheight=false;that.makeMenuDropdown=function(menu,header,dropdown,options){var timeout=0;var fx_pulldown=that.make(that.CSSTranslateY,dropdown,250);fx_pulldown.onComplete=function(now){if(now==0){fx_pulldown.update(-1000);}};fx_pulldown.set(0);var fx_opacity=that.make(that.CSSNumeric,dropdown,250,"opacity");fx_opacity.set(0);menu.appendChild(dropdown);var mouseover=function(e){if(!menuheight)menuheight=menu.offsetHeight-1;if(e&&("pageX"in e)&&("pageY"in e)&&(e.pageX==0)&&(e.pageY==0))return;clearTimeout(timeout);if(options&&options.checkbefore){if(!options.checkbefore())return;}
dropdown.style.left=help.getElPosition(header).x+"px";fx_pulldown.start(menuheight);fx_opacity.start(1);};var mouseout=function(){fx_pulldown.start(0);fx_opacity.start(0);};header.addEventListener("mouseover",mouseover,true);header.addEventListener("mouseout",function(){clearTimeout(timeout);timeout=setTimeout(mouseout,250);},true);header.style.cursor="default";if(dropdown){dropdown.addEventListener("mouseover",mouseover,true);dropdown.addEventListener("mouseout",function(){clearTimeout(timeout);timeout=setTimeout(mouseout,250);},true);}};that.p_enabled=function(enabled){that.enabled=enabled;};prefs.addPref("fx",{"name":"enabled","callback":that.p_enabled,"defaultvalue":true,"type":"checkbox"});return that;}();
function createEl(type,attribs,appendto){var el=document.createElement(type);if((typeof(attribs)=="object")||(typeof(attribs)=="array")){for(var i in attribs){if(i=="textContent")el.textContent=attribs[i];else el.setAttribute(i.replace(/_/g,"-"),attribs[i]);}}
if(appendto)appendto.appendChild(el);return el;}
function formatHumanTime(seconds,fulltime,disableseconds){if(seconds<=0)return"-";var humantime="";var stophere=false;if(seconds>=604800){humantime+=Math.floor(seconds/604800)+"w ";seconds=seconds%604800;stophere=true;}
if((!stophere||fulltime)&&(seconds>=86400)){humantime+=Math.floor(seconds/86400)+lang["timeformat_d"];seconds=seconds%86400;stophere=true;}
if((!stophere||fulltime)&&(seconds>=3600)){humantime+=Math.floor(seconds/3600)+lang["timeformat_h"];seconds=seconds%3600;stophere=true;}
if((!stophere||fulltime)&&(seconds>=60)){humantime+=Math.floor(seconds/60)+lang["timeformat_m"];seconds=seconds%60;stophere=true;}
if((!stophere||fulltime)&&(!disableseconds&&(seconds<60))){humantime+=seconds+lang["timeformat_s"];}
return humantime.substr(0,humantime.length-1);}
function linkify(el,external,new_window){if(new_window)el.setAttribute("class",el.getAttribute("class")+" new_window");else if(external)el.setAttribute("class",el.getAttribute("class")+" external_link");else el.setAttribute("class",el.getAttribute("class")+" link");}
function formatTime(seconds){var minutes=Math.floor(seconds/60);var secs=seconds-(minutes*60);if(secs<10)secs="0"+secs;return minutes+":"+secs;}
function measureText(text,style){if(typeof(style)=="undefined")style="";var textdiv=document.createElement("div");var body=document.getElementById("body");textdiv.setAttribute("style","position: absolute; left: -1000px; display: inline; "+style);body.appendChild(textdiv);var textnode=document.createTextNode(text);textdiv.appendChild(textnode);var textwidth=textdiv.offsetWidth;body.removeChild(textdiv);return textwidth;}
function measureNumber(number){return(UISCALE*0.7)*(1+Math.floor(Math.log(number)/Math.log(10)));}
function formatNumberToMSS(seconds){var minutes=Math.floor(seconds/60);var newseconds=seconds-(minutes*60);if(newseconds<10)newseconds="0"+newseconds;return(minutes+":"+newseconds);}
var _ACCENTS={"a":new RegExp("[àáâãäå]",'g'),"ae":new RegExp("æ",'g'),"c":new RegExp("ç",'g'),"e":new RegExp("[èéêë]",'g'),"i":new RegExp("[ìíîï]",'g'),"n":new RegExp("ñ",'g'),"o":new RegExp("[òóôõöø]",'g'),"oe":new RegExp("œ",'g'),"u":new RegExp("[ùúûü]",'g'),"y":new RegExp("[ýÿ]",'g')}
function removeAccentsAndLC(s){var r=s.toLowerCase();for(var i in _ACCENTS){r=r.replace(_ACCENTS[i],i);}
return r;};
var SCHED_ELEC=0;var SCHED_ADSET=1;var SCHED_JINGLE=2;var SCHED_LIVE=3;var SCHED_ONESHOT=4;var SCHED_PLAYLIST=5;var SCHED_PAUSE=6;var SCHED_DJ=7;var STATIONS=[false,"Game","OverClocked ReMix","Covers","Chiptunes","All"];var SHORTSTATIONS=[false,"Game","OCR","Covers","Chip","All"];var CANONSTATIONS=[false,"game","ocr","cover","chip","all"];var ELECSONGTYPES={"conflict":0,"warn":1,"normal":2,"queue":3,"request":4};var UISCALE=10;var BODY=document.getElementById("body");var SIDEBAR=false;if(location.href.indexOf("sidebar=true")>0)SIDEBAR=true;var panels={"false":false};var mouse={"x":0,"y":0};var initpiggyback={};var theme=_THEME();var panelcname={};var deeplinkcallbackid=false;function init(){var browserfailed=false;if(/MSIE (6|7|8)/i.test(navigator.userAgent))browserfailed=true;else if(!JSON)browserfailed=true;else if(!XMLHttpRequest)browserfailed=true;if(browserfailed){createEl("p",false,BODY).innerHTML="Sorry, your browser is too old to use Rainwave.  Please upgrade to <a href='http://getfirefox.com' class='external_link' style='color: #AAFFFF;'>Firefox</a> or <a href='http://google.com/chrome' class='external_link' style='color: #AAFFFF;'>Chrome</a>.";createEl("p",false,BODY).innerHTML="If you don't, or can't, you can still tune in to Rainwave using a media player with the following links:";var ul=createEl("ul",false,BODY);var li=createEl("li",false,ul);createEl("a",{"style":"color: #AAFFFF;","class":"external_link","textContent":"All Station Mix","href":"http://rainwave.cc/tunein.php?site=omni"},li);li=createEl("li",false,ul);createEl("a",{"style":"color: #AAFFFF;","class":"external_link","textContent":"Game Only","href":"http://rainwave.cc/tunein.php?site=rw"},li);li=createEl("li",false,ul);createEl("a",{"style":"color: #AAFFFF;","class":"external_link","textContent":"Chiptune Only","href":"http://rainwave.cc/tunein.php?site=bit"},li);li=createEl("li",false,ul);createEl("a",{"style":"color: #AAFFFF;","class":"external_link","textContent":"Covers Only","href":"http://rainwave.cc/tunein.php?site=mw"},li);li=createEl("li",false,ul);createEl("a",{"style":"color: #AAFFFF;","class":"external_link","textContent":"OverClocked ReMix","href":"http://rainwave.cc/tunein.php?site=oc"},li);return false;}
prefs.addPref("edi",{name:"language",defaultvalue:PRELOADED_LANG,type:"dropdown",options:[{"value":"de_DE","option":"Deutsch"},{"value":"en_CA","option":"English (Canada)"},{"value":"es_CL","option":"Español (Chile)"},{"value":"fr_CA","option":"Français (Canada)"},{"value":"nl_NL","option":"Nederlands"},{"value":"pt_BR","option":"Português (Brasil)"},{"value":"fi_FI","option":"Suomi"},{"value":"se_SE","option":"Svenska"}],refresh:true});prefs.addPref("edi",{hidden:true,name:"theme",defaultvalue:"RWClassic",type:"dropdown",options:[{value:"Rainwave",option:"Rainwave 3"}],refresh:true});prefs.addPref("help",{"name":"visited","defaultvalue":false,"hidden":true});var deeplinkurl=decodeURI(location.href);if(deeplinkurl.indexOf("#!/")>=0){var pageargs=deeplinkurl.substring(deeplinkurl.indexOf("#!/")+3).split("/");var new_sid=CANONSTATIONS.indexOf(pageargs[0]);pageargs=pageargs.slice(1);if(new_sid){PRELOADED_SID=new_sid;deeplinkcallbackid=lyre.addCallback(function(){deepLink(pageargs);},"sched_sync");}}
lyre.catcherrors=true;lyre.jsErrorCallback=errorcontrol.jsError;lyre.setStationID(PRELOADED_SID);lyre.setUserID(PRELOADED_USER_ID);lyre.setKey(PRELOADED_APIKEY);if(typeof(PRELOADED_LYREURL)!="undefined")lyre.setURLPrefix(PRELOADED_LYREURL);lyre.errorCallback=errorcontrol.doError;errorcontrol.setupCallbacks();edi.init(BODY);lyre.sync_start(initpiggyback);for(var i in panels){panelcname[panels[i].cname]=i;}
if(!prefs.getPref("help","visited")&&!SIDEBAR){prefs.changePref("help","visited",true);prefs.savePrefs();help.startTutorial("welcome");}
prefs.addPref("edi",{"name":"autoplay","defaultvalue":false,"type":"checkbox"});if(prefs.getPref("edi","autoplay")){edi.openpanels["MenuPanel"].playerClick();}}
function deepLink(pageargs){pageargs.unshift(true);edi.openPanelLink.apply(this,pageargs);lyre.removeCallback("sched_sync",deeplinkcallbackid);}
window.addEventListener('load',init,true);
var clock=function(){var clocks={};var interval=0;var timediff=0;var ready=false;var maxid=0;var that={};that.now=0;that.time=function(){var newdate=new Date();return Math.round(newdate.getTime()/1000);};that.getTimeDiff=function(){return timediff;}
that.hiResTime=function(){var newdate=new Date();return newdate.getTime();};that.clockSync=function(newtime){timediff=newtime-that.time();that.now=that.time()+timediff;ready=true;};that.loop=function(){if(ready==false)return;that.now=that.time()+timediff;var cb;for(cb in clocks){try{clocks[cb].func(clocks[cb].end-that.now+clocks[cb].offset);}
catch(err){clearInterval(interval);errorcontrol.jsError(err);}}
if((that.now%60)==0){var c=0;for(var cb in clocks){if(clocks[cb].el&&!document.getElementById("clock_"+cb)){delete(clocks[cb]);}
else c++;}}};that.updateClockEnd=function(idx,newend){if(clocks[idx])clocks[idx].end=newend;};that.addClock=function(el,method,end,offset){maxid++;if(typeof(offset)=="undefined")offset=0;if(el)el.setAttribute("id","clock_"+maxid);var newclock={"el":el,"func":method,"end":end,"finished":false,"offset":offset};clocks[maxid]=newclock;return maxid;};that.now=that.time()+timediff;lyre.clockSync=that.clockSync;if(interval==0){interval=setInterval(that.loop,1000);}
return that;}();
var errorcontrol=function(){var that={};var errors={};var showx=0;var showy=24;var timers={};var showing={};theme.Extend.ErrorControl(that);that.changeShowXY=function(x,y){showx=x;showy=y;};that.setupCallbacks=function(){lyre.addCallback(that.lyreError,"error");lyre.addCallback(that.clearError2,"user");lyre.addCallback(that.requestnewresult,"request_result");lyre.addCallback(that.voteresult,"vote_result");lyre.addCallback(that.rateresult,"rate_result");lyre.addCallback(that.requestorderresult,"requests_reorder_result");lyre.addCallback(that.genericError,"event_add_result");lyre.addCallback(that.genericError,"event_delete_result");lyre.addCallback(that.genericError,"event_start_result");lyre.addCallback(that.genericError,"event_end_result");lyre.addCallback(that.genericError,"oneshot_add_result");lyre.addCallback(that.genericError,"oneshot_delete_result");lyre.addCallback(that.genericError,"force_candidate_new_result");lyre.addCallback(that.genericError,"force_candidate_delete_result");lyre.addCallback(that.loginresult,"login_result")
lyre.addCallback(that.genericError,"admin_playlist_refresh_result");lyre.addCallback(that.genericError,"admin_change_song_multiplier_result");};that.genericError=function(json){if((typeof(json.code)!="undefined")&&json.text){that.doError(json.code,false,false,json.text,2000);}};that.lyreError=function(json){if(json.code){var perm=false;var text=false;if(json.code==2)perm=true;else if(json.code==403){if(user.p.user_id==1)text=_l("log_403_anon");else text=_l("log_403_reg");perm=true;}
that.doError(json.code,perm,false,text);}};that.doError=function(code,permanent,overrideclass,overridetext,overridetime){if(!theme){var crap=document.createElement("div");crap.textContent="FATAL ERROR CODE "+code+" - please use http://rainwave.cc/forums/ or irc://irc.synirc.net/#rainwave to report this.";document.getElementById("body").appendChild(crap);return;}
if(errors[code]&&(!permanent)){that.clearError(code);}
if(!errors[code]||!permanent){errors[code]={};errors[code].el=document.createElement("div");errors[code].el.setAttribute("class","err_div");if(overrideclass)errors[code].el.setAttribute("class",overrideclass);errors[code].permanent=permanent;that.positionErrors(errors[code]);that.drawError(errors[code],code,overridetext);if(permanent){showing[code]=true;that.repositionPermanent();}
else{var fortime=overridetime?overridetime:5000;timers[code]=setTimeout(function(){that.clearError(code);},fortime);}
if(!permanent||(permanent!==true)){errors[code].el.addEventListener('click',function(){that.clearError(code);},false);errors[code].el.style.cursor='pointer';}
if(!permanent){var x=mouse.x;var y=(mouse.y-(UISCALE*2.5));if(y<(UISCALE*2))y=UISCALE*2;if(x>(window.innerWidth-errors[code].el.offsetWidth))x=window.innerWidth-errors[code].el.offsetWidth-15;if(y>(window.innerHeight-errors[code].el.offsetHeight))y=window.innerHeight-errors[code].el.offsetHeight-15;errors[code].el.style.left=x+"px";errors[code].el.style.top=y+"px";}}};that.repositionPermanent=function(){var ry=parseInt(showy);for(var code in showing){errors[code].el.style.left=showx+"px";errors[code].el.style.top=ry+"px";ry+=errors[code].el.offsetHeight+(UISCALE/2);}};that.positionErrors=function(){var runy=0;for(var i in errors){if(errors[i].permanent){errors[i].el.style.top=showy+runy+"px";runy+=errors[i].el.offsetHeight;}}};that.clearError=function(code){if(errors[code]){that.unshowError(errors[code]);delete(errors[code]);}
if(timers[code]){clearTimeout(timers[code]);delete(timers[code]);}
if(showing[code]){delete(showing[code]);that.positionErrors();}};that.deleteError=function(error){BODY.removeChild(error.el);};that.clearError2=function(garbage){that.clearError(2);};that.requestnewresult=function(json){if((typeof(json.code)!="undefined")&&(json.code<=0)){that.doError(3000+Math.abs(json.code));}
else if((typeof(json.code)!="undefined")&&(json.code==1)){that.doError(3500,false,"err_div_ok",_l("requestok"),1250);}};that.voteresult=function(json){if((typeof(json.code)!="undefined")&&(json.code<=0)){that.doError(2000+Math.abs(json.code));}};that.rateresult=function(json){if((typeof(json.code)!="undefined")&&(json.code<=0)){that.doError(7000+Math.abs(json.code));}};that.requestorderresult=function(json){if((typeof(json.code)!="undefined")&&(json.code<=0)){that.doError(8000+Math.abs(json.code));}};that.loginresult=function(json){if((typeof(json.code)!="undefined")&&(json.code==-2)){that.doError(9002,false,false,json.text);}
else if((typeof(json.code)!="undefined")&&(json.code<=0)){that.doError(9000+Math.abs(json.code));}
else if(json.code&&(json.code==1)){that.clearError(9000);that.clearError(9001);that.clearError(9002);}};that.jsError=function(err,json){var el=createEl("div",{"class":"err_div","style":"z-index: 100000; top: 0px; left: 0px;"});el.appendChild(createEl("div",{"textContent":_l("crashed"),"style":"padding-bottom: 1em;"}));if(err.message&&err.name&&err.stack){el.appendChild(createEl("div",{"textContent":_l("submiterror"),"style":"padding-bottom: 1em;"}));el.appendChild(createEl("textarea",{"textContent":err.message+"\n"+err.name+"\n\n"+err.stack+"\n\nServer response:\n"+JSON.stringify(json)+"\n","style":"width: 40em; height: 15em; margin-bottom: 1em;"}));}
el.appendChild(createEl("div",{"textContent":_l("pleaserefresh")}));BODY.appendChild(el);lyre.sync_stop=true;};return that;}();
var edi=function(){var that={};var layouts={};var clayout=false;var oldurl=location.href;that.openpanels={};var panellinks={};that.getDefaultLayout=function(){return[[{"panel":"MenuPanel","rowspan":1,"colspan":2}],[{"panel":"TimelinePanel","rowspan":2,"colspan":1},{"panel":"NowPanel","rowspan":1,"colspan":1}],[false,{"panel":"MainMPI","rowspan":1,"colspan":1}]];};that.urlChangeDetect=function(){if(oldurl!=location.href){var deeplinkurl=decodeURI(location.href);if(deeplinkurl.indexOf("#!/")>=0){var args=deeplinkurl.substring(deeplinkurl.indexOf("#!/")+3).split("/");args[0]=true;that.openPanelLink.apply(this,args);oldurl=location.href;}}};that.openPanelLink=function(changeurl){if(typeof(panelcname[arguments[1]])=="undefined")return false;var panel=panelcname[arguments[1]];var args=Array.prototype.slice.call(arguments).slice(1);if(changeurl){var urlstring=args.join("/");that.changeDeepLink(urlstring);panellinks[args[0]]=urlstring;}
if(typeof(that.openpanels[panel])!="undefined"){that.openpanels[panel].openLink.apply(this,args.slice(1));return true;}
for(i in that.openpanels){if(that.openpanels[i].mpi){if(that.openpanels[i].openPanelLink.apply(this,args)){return true;}}}
return false;};that.changeDeepLinkPanel=function(panel){var urlstring=panel;if(panel in panellinks){urlstring=panellinks[panel];}
that.changeDeepLink(urlstring);};that.changeDeepLink=function(urlstring){if(!user.p.sid)return;var deeplinkurl=decodeURI(location.href);if(deeplinkurl.indexOf("#")>=0){oldurl=deeplinkurl.substring(0,deeplinkurl.indexOf("#"))+"#!/"+CANONSTATIONS[user.p.sid]+"/"+urlstring;}
else{oldurl=deeplinkurl+"#!/"+CANONSTATIONS[user.p.sid]+"/"+urlstring;}
location.href=oldurl;};that.loadLayouts=function(){var cookie=prefs.loadCookie("edilayouts");var layout;var row;var column;for(layout in cookie){if(cookie[layout].length>0)layouts[layout]=[];for(row=0;row<cookie[layout].length;row++){layouts[layout][row]=[];for(column=0;column<cookie[layout][row].length;column++){if((column in cookie[layout][row])&&cookie[layout][row][column]&&("panel"in cookie[layout][row][column])&&(cookie[layout][row][column].panel in panels)){layouts[layout][row][column]=cookie[layout][row][column];}}}}};that.saveLayouts=function(){prefs.saveCookie("edilayouts",layouts);};that.init=function(container){that.loadLayouts();var wantlayout=prefs.getPref("edi","clayout");if(SIDEBAR){clayout=[[{"panel":"TimelinePanel","rowspan":1,"colspan":1}]];panels.TimelinePanel.height=window.innerHeight;}
else if((wantlayout!="_default")&&(wantlayout in layouts)){clayout=layouts[wantlayout];}
else{wantlayout="default";layouts['default']=that.getDefaultLayout();clayout=layouts['default'];}
prefs.changePref("edi","clayout",wantlayout);for(var i in panels){panels[i].EDINAME=i;}
that.sizeLayout();that.drawGrid(container);setInterval(that.urlChangeDetect,200);};that.resetLayout=function(value){if(value){layouts['default']=that.getDefaultLayout();that.saveLayouts();prefs.changePref("edi","clayout","_default",true);}};prefs.addPref("edi",{"hidden":true,"name":"clayout","defaultvalue":"_default"});prefs.addPref("edi",{"name":"resetlayout","type":"button","defaultvalue":false,"callback":that.resetLayout,"refresh":true,"sessiononly":true});var colw=[];var rowh=[];var mincolw=[];var minrowh=[];var maxcolw=[];var maxrowh=[];var colflags=[];var rowflags=[];var layout=[];var vborders=[];var hborders=[];that.sizeLayout=function(){var maxcols=0;for(var i=0;i<clayout.length;i++){rowh[i]=0;minrowh[i]=0;maxrowh[i]=10000;if(clayout[i].length>maxcols)maxcols=clayout[i].length;}
for(var j=0;j<maxcols;j++){colw[j]=0;mincolw[j]=0;maxcolw[j]=10000;}
for(var i=0;i<clayout.length;i++){layout[i]=[];for(var j=0;j<clayout[i].length;j++){if(!clayout[i][j]){layout[i][j]=false;continue;}
layout[i][j]=panels[clayout[i][j].panel];layout[i][j].rowspan=clayout[i][j].rowspan;layout[i][j].colspan=clayout[i][j].colspan;if("width"in clayout[i][j])layout[i][j].width=clayout[i][j].width;if("height"in clayout[i][j])layout[i][j].height=clayout[i][j].height;layout[i][j].row=i;layout[i][j].column=j;if(layout[i][j].rowspan==1){if(rowh[i]<layout[i][j].height)rowh[i]=layout[i][j].height;if(minrowh[i]<layout[i][j].minheight)minrowh[i]=layout[i][j].minheight;if(layout[i][j].maxheight&&(maxrowh[i]>layout[i][j].maxheight))maxrowh[i]=layout[i][j].maxheight;}
if(layout[i][j].colspan==1){if(colw[j]<layout[i][j].width)colw[j]=layout[i][j].width;if(mincolw[j]<layout[i][j].minwidth)mincolw[j]=layout[i][j].minwidth;if(layout[i][j].maxwidth&&(maxcolw[j]>layout[i][j].maxwidth))maxcolw[j]=layout[i][j].maxwidth;}}}
var ediwidth=0;var ediheight=0;for(var i=0;i<layout.length;i++){ediheight+=rowh[i];}
for(var j=0;j<maxcols;j++){ediwidth+=colw[j];}
var xbudget=window.innerWidth-ediwidth;var ybudget=window.innerHeight-ediheight;for(var i=0;i<layout.length;i++)rowflags[i]="slack";for(var j=0;j<maxcols;j++)colflags[j]="slack";for(var i=0;i<layout.length;i++){for(var j=0;j<layout[i].length;j++){if(typeof(layout[i][j])!="object")continue;if((rowflags[i]=="fixed")||(layout[i][j].ytype=="fixed")){rowflags[i]="fixed";}
else if((rowflags[i]=="max")||(layout[i][j].ytype=="max")){rowflags[i]="max";}
else if((rowflags[i]=="fit")||(layout[i][j].ytype=="fit")){rowflags[i]="fit";}
if((colflags[j]=="fixed")||(layout[i][j].xtype=="fixed")){colflags[j]="fixed";}
else if((colflags[j]=="max")||(layout[i][j].xtype=="max")){colflags[j]="max";}
else if((colflags[j]=="fit")||(layout[i][j].xtype=="fit")){colflags[j]="fit";}}}
colw=that.getGridSize(colw,mincolw,colflags,xbudget,theme.borderwidth);rowh=that.getGridSize(rowh,minrowh,rowflags,ybudget,theme.borderheight);};that.getGridSize=function(sizes,minsizes,flags,budget,bordersize){budget-=bordersize*(sizes.length-1);var nummax=0;var numslack=0;for(var j=0;j<flags.length;j++){if(flags[j]=="max")nummax++;else if(flags[j]=="slack")numslack++;}
if((budget>0)&&(nummax>0)){var addwidth=Math.floor(budget/nummax);var spare=budget-addwidth;for(var j=0;j<flags.length;j++){if(flags[j]=="max"){sizes[j]+=addwidth+spare;budget-=addwidth-spare;spare=0;}}}
if((budget!=0)&&(numslack>0)){var addwidth=Math.floor(budget/numslack);var spare=budget-addwidth;for(var j=0;j<flags.length;j++){if(flags[j]=="slack"){if((sizes[j]+addwidth+spare)<minsizes[j]){budget-=(sizes[j]-minsizes[j]);sizes[j]=minsizes[j];}
else{sizes[j]+=(addwidth+spare);budget-=(addwidth+spare);spare=0;}}}}
if(budget<0){var minwidthtotal=0;for(var j=0;j<minsizes.length;j++)minwidthtotal+=minsizes[j];if(minwidthtotal<=window.innerWidth){var shrinkable=1;var lastshrink=window.innerWidth;while((budget<0)&&(shrinkable>0)){var largestmin=0;shrinkable=0;for(var j=0;j<sizes.length;j++){if((sizes[j]>minsizes[j])&&(lastshrink>minsizes[j])){largestmin=minsizes[j];lastshrink=minsizes[j];}}
var gain=0;for(var j=0;j<sizes.length;j++){if((sizes[j]>minsizes[j])&&(minsizes[j]<=largestmin)){shrinkable++;gain+=(sizes[j]-largestmin);}}
if(gain>Math.abs(budget))gain=Math.abs(budget);if(shrinkable>0){var shrinkeach=Math.floor(gain/shrinkable);var spare=gain-(shrinkeach*shrinkable);for(var j=0;j<sizes.length;j++){if((sizes[j]>minsizes[j])&&(minsizes[j]<=largestmin)){sizes[j]-=shrinkeach-spare;spare=0;budget+=shrinkeach+spare;}}}}}
if(budget<0){var shrinkable=0;for(var j=0;j<sizes.length;j++){if(flags[j]!="fixed")shrinkable++;}
var subwidth=Math.floor(Math.abs(budget)/shrinkable);var spare=Math.abs(budget)-(subwidth*shrinkable);for(var j=0;j<sizes.length;j++){if(flags[j]!="fixed"){sizes[j]-=subwidth-spare;budget+=subwidth+spare;spare=0;}}}}
return sizes;};that.drawGrid=function(element){for(var i=0;i<layout.length;i++){vborders[i]=new Array();hborders[i]=new Array();}
var runningy=0;for(var i=0;i<layout.length;i++){var runningx=0;var borderheight=theme.borderheight;for(var j=0;j<layout[i].length;j++){if(!layout[i][j]){var cellwidth=(layout[i-1][j].colspan-1)*theme.borderwidth;for(var k=j;k<=(j+layout[i-1][j].colspan-1);k++){cellwidth+=colw[k];}
runningx+=cellwidth+theme.borderwidth;continue;}
var usevborder=false;var usehborder=false;var borderwidth=theme.borderwidth;var cirregular=(layout[i][j].colspan>1)||(layout[i][j].colspan>1)?true:false;if((j+layout[i][j].colspan)<colflags.length)usevborder=true;if((i+layout[i][j].rowspan)<layout.length)usehborder=true;if(panels[layout[i][j].EDINAME].noborder){usehborder=false;borderheight=Math.floor(borderheight/2);rowh[rowh.length-1]+=borderheight;}
var cellwidth=(layout[i][j].colspan-1)*theme.borderwidth;for(var k=j;k<=(j+layout[i][j].colspan-1);k++)cellwidth+=colw[k];var cellheight=(layout[i][j].rowspan-1)*theme.borderheight;for(var k=i;k<=(i+layout[i][j].rowspan-1);k++)cellheight+=rowh[k];var dispwidth=(typeof(layout[i][j].initSizeX)=="function")?layout[i][j].initSizeX(cellwidth,colw[j]):cellwidth;var dispheight=(typeof(layout[i][j].initSizeY)=="function")?layout[i][j].initSizeY(cellheight,rowh[i]):cellheight;if((dispwidth!=cellwidth)||(dispheight!=cellheight))cirregular=true;var panelel=document.createElement("div");panelel.setAttribute("style","position: absolute; width: "+dispwidth+"px; height: "+dispheight+"px;");that.openpanels[layout[i][j].EDINAME]=layout[i][j].constructor(panelel);var panelcl=layout[i][j].EDINAME;panelcl=panelcl.replace(" ","_");panelel.setAttribute("class","EdiPanel Panel_"+panelcl);element.appendChild(panelel);that.openpanels[layout[i][j].EDINAME]._fx_x=fx.make(fx.CSSTranslateX,panelel,250);that.openpanels[layout[i][j].EDINAME]._fx_x.set(runningx);that.openpanels[layout[i][j].EDINAME]._fx_y=fx.make(fx.CSSTranslateY,panelel,250);that.openpanels[layout[i][j].EDINAME]._fx_y.set(runningy);that.openpanels[layout[i][j].EDINAME].height=dispheight;that.openpanels[layout[i][j].EDINAME].width=dispwidth;that.openpanels[layout[i][j].EDINAME].parent=that;that.openpanels[layout[i][j].EDINAME].init();that.openpanels[layout[i][j].EDINAME]._row=i;that.openpanels[layout[i][j].EDINAME]._column=j;that.openpanels[layout[i][j].EDINAME]._runningx=runningx;that.openpanels[layout[i][j].EDINAME]._runningy=runningy;that.openpanels[layout[i][j].EDINAME]._div=panelel;runningx+=cellwidth+borderwidth;}
runningy+=rowh[i]+borderheight;}
for(i=0;i<layout.length;i++){for(j=0;j<layout[i].length;j++){if(typeof(layout[i][j])!="object")continue;if(that.openpanels[layout[i][j].EDINAME].onLoad)that.openpanels[layout[i][j].EDINAME].onLoad();}}};var resize_mx;var resize_my;var resize_row=false;var resize_col=false;var resize_last_width=-1;var resize_last_height=-1;that.startRowResize=function(evt,row){if(resize_row!==false)return;resize_my=getMousePosY(evt);resize_row=row;resize_last_height=rowh[row];document.addEventListener("mousemove",that.rollingRowResize,false);document.addEventListener("mouseup",that.stopRowResize,false);};that.rollingRowResize=function(evt){var my=getMousePosY(evt);var height=rowh[resize_row]+(my-resize_my);if(height<minrowh[resize_row])height=minrowh[resize_row];else if(height>maxrowh[resize_row]){height=maxrowh[resize_row];}
if(resize_last_height==height)return;var height2=rowh[resize_row+1]-(height-rowh[resize_row]);if(height2<minrowh[resize_row+1]){if((height+(minrowh[resize_row+1]-height2))<minrowh[resize_row])return;height+=height2-minrowh[resize_row+1];height2=minrowh[resize_row+1];}
else if(height2>maxrowh[resize_row+1]){if((height+(height2-maxrowh[resize_row+1]))>maxrowh[resize_row])return;height-=maxrowh[resize_col+1]-height2;height2=maxrowh[resize_row+1];}
var rowdiff=height-rowh[resize_row];var rowdiff2=height2-rowh[resize_row+1];var y2,j;for(var i=0;i<layout[resize_row].length;i++){if((typeof(layout[resize_row][i])=="object")&&(typeof(hborders[resize_row][i])=="object")){hborders[resize_row][i].el.style.top=(that.openpanels[layout[resize_row][i].EDINAME]._runningy+height)+"px";that.openpanels[layout[resize_row][i].EDINAME]._div.style.height=height+"px";}}
for(i=0;i<layout[resize_row+1].length;i++){if(typeof(layout[resize_row+1][i])=="object"){y2=that.openpanels[layout[resize_row+1][i].EDINAME]._runningy-rowdiff2;that.openpanels[layout[resize_row+1][i].EDINAME]._fx_y.set(y2);for(j=2;j<=layout[resize_row+1][i].rowspan;j++){height2+=rowh[resize_row+j]+theme.borderheight;}
that.openpanels[layout[resize_row+1][i].EDINAME]._div.style.height=height2+"px";}}
resize_last_height=height;};that.stopRowResize=function(evt){var rowdiff=resize_last_height-rowh[resize_row];rowh[resize_row]=resize_last_height;rowh[resize_row+1]=rowh[resize_row+1]-rowdiff;var layoutname=prefs.getPref("edi","clayout");for(var i=0;i<layout[resize_row].length;i++){if(typeof(layouts[layoutname][resize_row][i])=="object"){layouts[layoutname][resize_row][i].height=rowh[resize_row];}
if(typeof(layout[resize_row][i])=="object"){if(that.openpanels[layout[resize_row][i].EDINAME].onHeightResize){that.openpanels[layout[resize_row][i].EDINAME].onHeightResize(rowh[resize_row]);}}}
for(i=0;i<layout[resize_row+1].length;i++){if(typeof(layouts[layoutname][resize_row+1][i])=="object"){layouts[layoutname][resize_row+1][i].height=rowh[resize_row+1];}
if(typeof(layout[resize_row+1][i])=="object"){if(that.openpanels[layout[resize_row+1][i].EDINAME].onHeightResize){that.openpanels[layout[resize_row+1][i].EDINAME].onHeightResize(rowh[resize_row+1]);}
that.openpanels[layout[resize_row+1][i].EDINAME]._runningy+=rowdiff;}}
document.removeEventListener("mousemove",that.rollingRowResize,false);document.removeEventListener("mouseup",that.stopRowResize,false);resize_row=false;that.saveLayouts();};that.startColumnResize=function(evt,col){if(resize_col!==false)return;resize_mx=getMousePosX(evt);resize_col=col;resize_last_width=colw[col];document.addEventListener("mousemove",that.rollingColumnResize,false);document.addEventListener("mouseup",that.stopColumnResize,false);};that.rollingColumnResize=function(evt){var mx=getMousePosX(evt);var width=colw[resize_col]+(mx-resize_mx);if(width<mincolw[resize_col])width=mincolw[resize_col];else if(width>maxcolw[resize_col]){width=maxcolw[resize_col];}
if(resize_last_width==width)return;var width2=colw[resize_col+1]-(width-colw[resize_col]);if(width2<mincolw[resize_col+1]){if((width+(mincolw[resize_col+1]-width2))<mincolw[resize_col])return;width+=width2-mincolw[resize_col+1];width2=mincolw[resize_col+1];}
else if(width2>maxcolw[resize_col+1]){if((width+(width2-maxcolw[resize_col+1]))>maxcolw[resize_col])return;width-=maxcolw[resize_col+1]-width2;width2=maxcolw[resize_col+1];}
var coldiff=width-colw[resize_col];var coldiff2=width2-colw[resize_col+1];var x2,h;for(var i=0;i<layout.length;i++){if((typeof(layout[i][resize_col])=="object")&&(typeof(vborders[i][resize_col])=="object")){if(typeof(layout[i][resize_col].onWidthResize)=="function"){layout[i][resize_col].onWidthResize(width);}
vborders[i][resize_col].el.style.left=(that.openpanels[layout[i][resize_col].EDINAME]._runningx+width)+"px";that.openpanels[layout[i][resize_col].EDINAME].width=width;that.openpanels[layout[i][resize_col].EDINAME]._div.style.width=width+"px";}
if(typeof(layout[i][resize_col+1])=="object"){if(typeof(layout[i][resize_col+1].onWidthResize)=="function"){layout[i][resize_col+1].onWidthResize(width)}
x2=that.openpanels[layout[i][resize_col+1].EDINAME]._runningx-coldiff2;that.openpanels[layout[i][resize_col+1].EDINAME]._fx_x.set(x2);for(j=2;j<=layout[i][resize_col+1].rowspan;j++){width2+=colw[resize_col+j]+theme.borderwidth;}
that.openpanels[layout[i][resize_col+1].EDINAME].width=width2;that.openpanels[layout[i][resize_col+1].EDINAME]._div.style.width=width2+"px";if((typeof(layout[i][resize_col+1])=="object")&&(typeof(hborders[i][resize_col+1])=="object")){hborders[i][resize_col+1].el.style.left=x2+"px";hborders[i][resize_col+1].el.style.width=width2+"px";}}}
resize_last_width=width;};that.stopColumnResize=function(evt){var coldiff=resize_last_width-colw[resize_col];colw[resize_col]=resize_last_width;colw[resize_col+1]=colw[resize_col+1]-coldiff;var layoutname=prefs.getPref("edi","clayout");for(var i=0;i<layout.length;i++){if(typeof(layouts[layoutname][i][resize_col])=="object"){layouts[layoutname][i][resize_col].width=colw[resize_col];}
if(typeof(layouts[layoutname][i][resize_col+1])=="object"){layouts[layoutname][i][resize_col+1].width=colw[resize_col+1];}
if(typeof(layout[i][resize_col])=="object"){if(that.openpanels[layout[i][resize_col].EDINAME].afterWidthResize){that.openpanels[layout[i][resize_col].EDINAME].afterWidthResize(colw[resize_col]);}}
if(typeof(layout[i][resize_col+1])=="object"){that.openpanels[layout[i][resize_col+1].EDINAME]._runningx+=coldiff;if(that.openpanels[layout[i][resize_col+1].EDINAME].afterWidthResize){that.openpanels[layout[i][resize_col+1].EDINAME].afterWidthResize(colw[resize_col+1]);}}}
document.removeEventListener("mousemove",that.rollingColumnResize,false);document.removeEventListener("mouseup",that.stopColumnResize,false);resize_col=false;that.saveLayouts();};return that;}();
var graph=function(){if(!svg.capable)return false;var that={};var svgdefs=svg.make({style:"position: absolute;","width":0,"height":0});var defs=svg.makeEl("defs");theme.graphDefs(svgdefs,defs);svgdefs.appendChild(defs);document.getElementById("body").appendChild(svgdefs);that.makeSVG=function(width,height,graphs){var newgr=that.make(0,0,width,height,graphs);newgr.svg=svg.make({width:width,height:height});newgr.svg.appendChild(newgr.g);return newgr;};that.make=function(x,y,width,height,graphs){var newgr={};newgr.graphs=graphs;newgr.g=svg.makeEl("g");if(x||y)newgr.g.setAttribute("transform","translate("+x+", "+y+")");var i;newgr.xaxis_width=0;newgr.xaxis_padpx=0;newgr.xaxis_height=0;newgr.xaxis_steps=graphs[0].options.xaxis_steps?graphs[0].options.xaxis_steps:10;newgr.xgrid_perstep=graphs[0].options.xgrid_perstep?graphs[0].options.xgrid_perstep:false;newgr.yaxis_height=0;newgr.yaxis_padpx=0;newgr.yaxis_width=0;newgr.yaxis_steps=graphs[0].options.yaxis_steps?graphs[0].options.yaxis_steps:5;newgr.ygrid_perstep=graphs[0].options.ygrid_perstep?graphs[0].options.ygrid_perstep:false;for(i=0;i<newgr.graphs.length;i++){newgr.graphs[i].graphindex=parseInt(""+i);that.graphSkeleton(newgr,newgr.graphs[i]);newgr.graphs[i].graphfunc(newgr,newgr.graphs[i]);}
newgr.graphs[0].scale();if(!graphs[0].options.xaxis_padpx){if(graphs[0].xaxis_nonumbers)newgr.xaxis_padpx=0;else newgr.xaxis_padpx=UISCALE;}
else{newgr.xaxis_padpx=graphs[0].options.xaxis_padpx;}
if(!graphs[0].options.yaxis_padpx){if(graphs[0].options.yaxis_ynonumbers)newgr.yaxis_padpx=0;else newgr.yaxis_padpx=UISCALE;}
else{newgr.yaxis_padpx=graphs[0].options.yaxis_padpx;}
if(!graphs[0].options.xaxis_nonumbers)newgr.xaxis_height=Math.floor(UISCALE*1.5);else newgr.xaxis_height=1;if(!graphs[0].yaxis_nonumbers)newgr.yaxis_width=measureNumber(Math.floor(newgr.graphs[0].yaxis_max));else newgr.yaxis_width=1;newgr.xaxis_width=width-newgr.yaxis_width-newgr.xaxis_padpx;newgr.yaxis_height=height-newgr.xaxis_height-newgr.yaxis_padpx;var grid=svg.makeEl("g");if(!graphs[0].options.xgrid_modulus)graphs[0].options.xgrid_modulus=false;if(!graphs[0].options.xaxis_steps)graphs[0].options.xaxis_steps=(newgr.graphs[0].xaxis_max-newgr.graphs[0].xaxis_min)/newgr.graphs[0].xaxis_steps;if(!graphs[0].options.ygrid_modulus)graphs[0].options.ygrid_modulus=false;if(!graphs[0].options.yaxis_steps)graphs[0].options.yaxis_steps=(newgr.graphs[0].yaxis_max-newgr.graphs[0].yaxis_min)/newgr.graphs[0].yaxis_steps;var stepline;if(!graphs[0].options.xgrid_disable){var xgrid_start=graphs[0].options.xgrid_start?graphs[0].options.xgrid_start:newgr.xgrid_perstep+newgr.graphs[0].xaxis_min;for(i=xgrid_start;i<=newgr.graphs[0].xaxis_max;i+=newgr.xgrid_perstep){x=newgr.graphs[0].getXPixel(i)+newgr.yaxis_width;stepline=svg.makeLine(x,newgr.yaxis_height+newgr.yaxis_padpx,x,0,{"stroke":theme.vdarktext,"stroke_width":1});grid.appendChild(stepline);}}
if(!graphs[0].options.ygrid_disable){var ygrid_start=graphs[0].options.ygrid_start?graphs[0].options.ygrid_start:newgr.ygrid_perstep+newgr.graphs[0].yaxis_min;for(i=ygrid_start;i<=newgr.graphs[0].yaxis_max;i+=newgr.ygrid_perstep){y=newgr.graphs[0].getYPixel(i);stepline=svg.makeLine(newgr.yaxis_width,y,width,y,{stroke:theme.vdarktext,stroke_width:1});grid.appendChild(stepline);}}
var border=svg.makeEl("g");var bordery=svg.makeLine(newgr.yaxis_width,0,newgr.yaxis_width,newgr.yaxis_height+newgr.yaxis_padpx,{shape_rendering:"crispEdges",stroke:theme.textcolor,stroke_width:1});var borderx=svg.makeLine(newgr.yaxis_width,newgr.yaxis_height+newgr.yaxis_padpx,width,newgr.yaxis_height+newgr.yaxis_padpx,{shape_rendering:"crispEdges",stroke:theme.textcolor,stroke_width:1});border.appendChild(bordery);border.appendChild(borderx);newgr.g.appendChild(grid);newgr.g.appendChild(newgr.graphs[0].getScaledGroup());for(i=0;i<newgr.graphs.length;i++){newgr.graphs[i].update(newgr.graphs[i].data,true);newgr.g.appendChild(newgr.graphs[i].plot);}
newgr.g.appendChild(border);return newgr;};that.graphSkeleton=function(parent,graph){graph.xaxis_perstep=0;graph.yaxis_perstep=0;graph.plot=svg.makeEl("g");graph.xaxis_max=false;graph.xaxis_min=false;graph.yaxis_max=false;graph.yaxis_min=false;graph.plot=svg.makeEl("g");var translateset=false;graph.scale=function(){if(!translateset&&parent.yaxis_width){graph.plot.setAttribute("transform","translate("+parent.yaxis_width+",0)");translateset=true;}
var i,j;graph.xaxis_points=[];var p_miny=1000000000;var p_maxy=0;for(i in graph.data){graph.xaxis_points.push(i);if(graph.data[i]<p_miny)p_miny=graph.data[i];if(graph.data[i]>p_maxy)p_maxy=graph.data[i];}
graph.xaxis_points.sort();if(graph.options.xaxis_max)graph.xaxis_max=graph.options.xaxis_max;else graph.xaxis_max=Math.ceil(graph.xaxis_points[graph.xaxis_points.length-1]/10.0)*10;if(graph.options.xaxis_min)graph.xaxis_min=graph.options.xaxis_min;else graph.xaxis_min=graph.xaxis_points[0]-((graph.xaxis_points[graph.xaxis_points.length-1]-graph.xaxis_points[0])*0.05);if(graph.options.yaxis_min)graph.yaxis_min=graph.options.yaxis_min;else graph.yaxis_max=p_maxy;if(graph.options.yaxis_max)graph.yaxis_max=graph.options.yaxis_max;else graph.yaxis_min=Math.floor(p_miny-((p_maxy-p_miny)*0.1));if(graph.options.yaxis_minrange&&((graph.yaxis_max-graph.yaxis_min)<graph.options.yaxis_minrange)){graph.yaxis_min=graph.yaxis_max-graph.options.yaxis_minrange;if(graph.yaxis_min<0){graph.yaxis_min=0;graph.yaxis_max=graph.options.yaxis_minrange;}}
if(graph.xaxis_min<0)graph.xaxis_min=0;if(graph.yaxis_min<0)graph.yaxis_min=0;if(graph.xgrid_perstep==0)graph.xgrid_perstep=1;if(graph.ygrid_perstep==0)graph.ygrid_perstep=1;graph.xaxis_perstep=(graph.xaxis_max-graph.xaxis_min)/parent.xaxis_steps;if(!graph.options.xgrid_perstep)parent.xgrid_perstep=graph.xaxis_perstep;graph.yaxis_perstep=(graph.yaxis_max-graph.yaxis_min)/parent.yaxis_steps;if(!graph.options.ygrid_perstep)parent.ygrid_perstep=graph.yaxis_perstep;};graph.getScaledGroup=function(){var scaleg=svg.makeEl("g",{"transform":"translate(0, "+parent.yaxis_padpx+")"});var steptext;var usedxmin=false;if(((graph.xaxis_min!==0)||(graph.yaxis_min!==0))&&!graph.options.xaxis_nonumbers&&!graph.options.xaxis_nomin){usedxmin=true;steptext=svg.makeEl("text",{x:parent.yaxis_width+2,y:parent.yaxis_height+UISCALE+2,fill:theme.vdarktext,text_anchor:"middle",style:"font-size: 0.7em"});steptext.textContent=(graph.options.axis_precision)?graph.xaxis_min.toFixed(graph.options.xaxis_precision):Math.floor(graph.xaxis_min);scaleg.appendChild(steptext);}
if(!graph.options.xaxis_nonumbers){for(i=parent.xgrid_perstep+graph.xaxis_min;i<=graph.xaxis_max;i+=parent.xgrid_perstep){x=graph.getXPixel(i)+parent.yaxis_width;if(!graph.options.xgrid_modulus||(i%graph.options.xgrid_modulus==0)){steptext=svg.makeEl("text",{"x":x,"y":parent.yaxis_height+UISCALE*1.2,"fill":theme.textcolor,"text_anchor":"middle"});steptext.textContent=(graph.options.xaxis_precision)?i.toFixed(graph.options.xaxis_precision):Math.floor(i);scaleg.appendChild(steptext);}}}
if(((graph.xaxis_min!==0)||(graph.yaxis_min!==0))&&!graph.options.yaxis_nonumbers&&!graph.options.yaxis_nomin){var zerotexty=parent.yaxis_height;if(!usedxmin)zerotexty-=(UISCALE*0.7);steptext=svg.makeEl("text",{"x":parent.yaxis_width-2,"y":zerotexty,"fill":theme.vdarktext,"text_anchor":"end","style":"font-size: 0.7em"});if(graph.options.yaxis_reverse){steptext.textContent=graph.options.yaxis_precision?graph.yaxis_max.toFixed(graph.options.yaxis_precision):Math.floor(graph.yaxis_max);}
else{steptext.textContent=graph.options.yaxis_precision?graph.yaxis_min.toFixed(graph.options.yaxis_precision):Math.floor(graph.yaxis_min);}
scaleg.appendChild(steptext);}
if(!graph.options.yaxis_nonumbers){var ydisp;i=graph.options.yaxis_reverse?graph.yaxis_max-graph.yaxis_perstep:graph.yaxis_perstep+graph.yaxis_min;var y=parent.yaxis_height;while(true){y-=parent.yaxis_height/parent.yaxis_steps;if(!graph.options.ygrid_modulus||(i%graph.options.ygrid_modulus==0)){steptext=svg.makeEl("text",{"x":parent.yaxis_width,"y":y+(UISCALE*0.5),"fill":theme.textcolor,"text_anchor":"end"});ydisp=i;if((i==graph.yaxis_max)||(graph.yaxis_max<50))ydisp=(i/10)*10;steptext.textContent=graph.options.yaxis_precision?ydisp.toFixed(graph.options.yprecision):Math.floor(ydisp);scaleg.appendChild(steptext);}
if(graph.options.yaxis_reverse){if(i<=graph.yaxis_min)break;i-=graph.yaxis_perstep;}
else{if(i>=graph.yaxis_max)break;i+=graph.yaxis_perstep;}}}
return scaleg;};graph.getXPixel=function(xvalue){return(((xvalue-graph.xaxis_min)/(graph.xaxis_max-graph.xaxis_min))*parent.xaxis_width);};if(graph.options.yaxis_reverse){graph.getYPixel=function(yvalue){return(((((yvalue-graph.yaxis_min)/(graph.yaxis_max-graph.yaxis_min)))*parent.yaxis_height)+parent.yaxis_padpx);};}
else{graph.getYPixel=function(yvalue){return(((1-((yvalue-graph.yaxis_min)/(graph.yaxis_max-graph.yaxis_min)))*parent.yaxis_height)+parent.yaxis_padpx);};}
graph.update=function(newdata,init){var oldpoints=[];if(!init)oldpoints=graph.xaxis_points;graph.data=newdata;graph.scale();if(!init){for(var x in oldpoints){if(!(x in graph.xaxis_points))graph.removePoint(x);}}
var lastx=false;var lasty=false;for(x=0;x<graph.xaxis_points.length;x++){if(!(x in oldpoints)||(init)){graph.addPoint(graph.xaxis_points[x],newdata[graph.xaxis_points[x]],lastx,lasty);}
lastx=graph.xaxis_points[x];lasty=newdata[graph.xaxis_points[x]];}
if(fx.enabled)setTimeout(graph.animate,100);else graph.animate();};return graph;};fx.extend("BarGraphBar",function(object,yaxis_height){var rhbfx={};rhbfx.update=function(now){object.setAttribute("y",now);if((yaxis_height-now-1)>0)object.setAttribute("height",yaxis_height-now-1);else object.setAttribute("height",0);};return rhbfx;});that.Bar=function(parent,graph){var gfx=[];var bars=[];for(var i=0;i<graph.data.length;i++){gfx[i]={};bars[i]={};}
graph.removePoint=function(x){graph.plot.removeChild(bars[x]);delete(bars[x]);delete(gfx[x]);};graph.animate=function(){for(var x in graph.data){gfx[x].start(graph.getYPixel(graph.data[x]));}};graph.addPoint=function(x,y){var x_px=graph.getXPixel(x);var y_px=graph.getYPixel(y);var barwidth=(parent.xaxis_width/parent.xaxis_steps)-2;bars[x]=svg.makeRect(x_px-(barwidth/2)-1,parent.yaxis_height,barwidth-0.5,0);if(graph.options.fill){bars[x].setAttribute("fill",graph.options.fill(graph.graphindex,x_px/parent.xaxis_width,y_px/parent.yaxis_width));}
gfx[x]=fx.make(fx.BarGraphBar,bars[x],250,parent.yaxis_height+parent.yaxis_padpx);gfx[x].set(parent.yaxis_height+parent.yaxis_padpx);graph.plot.appendChild(bars[x]);};};fx.extend("LineGraphLine",function(line){var lfx={};var p1_from_x,p1_from_y;var p2_from_x,p2_from_y;lfx.setFrom=function(x,y,x2,y2){p1_from_x=x;p1_from_y=y;p2_from_x=x2;p2_from_y=y2;};var p1_to_x,p1_to_y;var p2_to_x,p2_to_y;lfx.setTo=function(x,y,x2,y2){p1_to_x=x;p1_to_y=y;p2_to_x=x2;p2_to_y=y2;};lfx.onComplete=function(now){lfx.setFrom(p1_to_x,p1_to_y,p2_to_x,p2_to_y);};lfx.update=function(now){var x1=p1_from_x-p1_to_x;if(x1!=0)x1=p1_from_x-Math.round(x1*now);else x1=p1_to_x;var y1=p1_from_y-p1_to_y;if(y1>0)y1=p1_from_y-Math.round(y1*now);else y1=p1_from_y;var x2=p2_from_x-p2_to_x;if(x2>0)x2=p2_from_x-Math.round(x2*now);else x2=p2_to_x;var y2=p2_from_y-p2_to_y;if(y2>0)y2=p2_from_y-Math.round(y2*now);else y2=p2_from_y;line.setAttribute("x1",x1);line.setAttribute("y1",y1);line.setAttribute("x2",x2);line.setAttribute("y2",y2);};return lfx;});that.Line=function(parent,graph){var fx_l=[];var fx_py=[];var fx_px=[];var lines=[];var points=[];graph.removePoint=function(x){graph.plot.removeChild(lines[x]);graph.plot.removeChild(points[x]);delete(lines[x]);delete(points[x]);delete(fx_l[x]);delete(fx_py[x]);delete(fx_px[x]);};graph.animate=function(){var lastx_px=false;var lasty_px=false;var i,x,y,x_px,y_px;for(i=0;i<graph.xaxis_points.length;i++){x=graph.xaxis_points[i];y=graph.data[x];x_px=graph.getXPixel(x);y_px=graph.getYPixel(y);if(lastx_px&&lasty_px&&fx_l[x]){fx_l[x].setTo(lastx_px,lasty_px,x_px,y_px);fx_l[x].set(0);fx_l[x].start(1);}
fx_px[x].start(x_px-3);fx_py[x].start(y_px-3);lastx_px=x_px;lasty_px=y_px;}};graph.addPoint=function(x,y,lastx,lasty){var x_px=graph.getXPixel(x);var y_px=graph.getYPixel(y);var fill="#FFF";if(graph.options.fill){fill=graph.options.fill(graph.graphindex,x_px/parent.xaxis_width,y_px/parent.yaxis_height);}
points[x]=svg.makeRect(x_px-3,parent.yaxis_height+parent.yaxis_padpx-3,6,6,{"fill":fill});fx_px[x]=fx.make(fx.SVGAttrib,points[x],250,"x");fx_px[x].set(x_px-3);fx_py[x]=fx.make(fx.SVGAttrib,points[x],250,"y");fx_py[x].set(parent.yaxis_height+parent.yaxis_padpx-6);if(lastx&&lasty){var lx_px=graph.getXPixel(lastx);var stroke="#BBB";if(graph.options.stroke){stroke=graph.options.stroke(graph.graphindex,x_px/parent.xaxis_width,y_px/parent.yaxis_height);}
lines[x]=svg.makeLine(lx_px,parent.yaxis_height+parent.yaxis_padpx,x_px,parent.yaxis_height+parent.yaxis_padpx,{"stroke":stroke,"stroke-width":2});graph.plot.appendChild(lines[x]);fx_l[x]=fx.make(fx.LineGraphLine,lines[x],250);fx_l[x].setFrom(lx_px,parent.yaxis_height+parent.yaxis_padpx,lx_px,parent.yaxis_height+parent.yaxis_padpx);}
graph.plot.appendChild(points[x]);};};return that;}();
var help=function(){var that={};var alltopics=[];var topics={};var tuts={};var steps={};var alltopicsshown=0;var showing;var ctutstep=0;var ctutshowing=false;var ctut=false;var highlighted=[];var showingstepname=false;that.addTopic=function(topic,data){alltopics.push(topic);topics[topic]=data;};that.addStep=function(name,func){steps[name]=func;};that.addTutorial=function(name,stepsequence){tuts[name]=stepsequence;};that.addToTutorial=function(name,stepsequence){if(!tuts[name])return;tuts[name]=tuts[name].concat(stepsequence);};that.changeStepPointEl=function(name,pointel){if(steps[name]){steps[name].pointel=pointel;if(showingstepname===name){ctutshowing.pointel=pointel;}}};that.changeTopicPointEl=function(name,pointel){if(topics[name]){topics[name].pointel=pointel;}};that.showAllTopics=function(){if(alltopicsshown==2){that.hideAllTopics();return;}
if(ctutshowing){that.endTutorial();}
alltopicsshown=2;showing=[];var i;for(i=0;i<alltopics.length;i++){if(alltopics[i].skipf){if(!alltopics[i].skipf()){showing[i]=that.makeHelpDiv(topics[alltopics[i]]);}}
else{showing[i]=that.makeHelpDiv(topics[alltopics[i]]);}}
var x=window.innerWidth-UISCALE;var y=window.innerHeight-(UISCALE*16);for(i=0;i<alltopics.length;i++){if(!topics[alltopics[i]].pointel){x-=(showing[i].offsetWidth+(UISCALE*2));showing[i].fxY.set(y);showing[i].fxX.start(x);}}};that.hideAllTopics=function(exception){that.endTutorial();alltopicsshown=1;for(var i in showing){if(exception&&alltopics[i]&&(alltopics[i]==exception))continue;showing[i].fxOpacity.start(0);}};that.startTutorial=function(tutname){if(!tuts[tutname])return;that.hideAllTopics();ctutshowing=that.makeHelpDiv(steps[tuts[tutname][0]],tutname);ctutstep=1;ctut=tutname;};that.getCurrentTutorial=function(){return ctut;};that.continueTutorial=function(tut,div){if(alltopicsshown==2)that.hideAllTopics(tut);var doo=false;while(true){if(tuts[tut].length<=ctutstep){that.endTutorial();return;}
if(steps[tuts[tut][ctutstep]]){ctut=tut;var nx=false;if(steps[tuts[tut][ctutstep]].skipf)nx=steps[tuts[tut][ctutstep]].skipf();if(!nx){ctutshowing=div;var laststep=false;if(ctutstep==(tuts[tut].length-1))laststep=true;that.changeHelpDiv(steps[tuts[tut][ctutstep]],div,laststep);showingstepname=tuts[tut][ctutstep];ctutstep++;return;}}
ctutstep++;}};that.continueTutorialIfRunning=function(runningstep){if((ctutstep>0)&&(runningstep==tuts[ctut][ctutstep-1])){that.continueTutorial(ctut,ctutshowing);}};that.endTutorial=function(){if(!ctutshowing)return;showingstepname=false;ctutshowing.fxOpacity.start(0);ctutstep=0;ctutshowing=false;ctut=false;};that.clickXButton=function(){if(ctutshowing){that.endTutorial();}
else{that.hideAllTopics();}};that.makeHelpDiv=function(data,tutorial){var container=createEl("div",{"class":"help_container"});container.x=createEl("span",{"class":"help_x","textContent":"X"});container.x.addEventListener("click",that.clickXButton,true);container.appendChild(container.x);container.div=createEl("div",{"class":"help"});container.appendChild(container.div);container.fxX=fx.make(fx.CSSTranslateX,container,500);container.fxX.set(-1000);container.fxY=fx.make(fx.CSSTranslateY,container,500);container.fxY.set(-1000);container.fxWidth=fx.make(fx.CSSNumeric,container,500,"width","px");container.fxHeight=fx.make(fx.CSSNumeric,container.div,500,"height","px");container.fxOpacity=fx.make(fx.CSSNumeric,container,500,"opacity","");container.fxOpacity.set(1);container.fxOpacity.onComplete=function(){document.getElementById("body").removeChild(container);};var laststep=false;if(data.tutorial)tutorial=data.tutorial;if(tutorial){container.div.addEventListener("click",function(){that.continueTutorial(tutorial,container);},true);container.div.style.cursor="pointer";container.next=createEl("div",{"class":"help_next"});container.next.addEventListener("click",function(){that.continueTutorial(tutorial,container);},true);container.next.style.cursor="pointer";container.appendChild(container.next);if(tuts[tutorial].length==1)laststep=true;}
document.getElementById("body").appendChild(container);container.fxWidth.set(container.offsetWidth);container.fxHeight.set(container.div.offsetHeight);that.changeHelpDiv(data,container,laststep);return container;};that.changeHelpDiv=function(data,container,laststep){if(container.h)container.div.removeChild(container.h);container.h=createEl("div",{"class":"help_header"});_l(data.h,{},container.h);container.div.appendChild(container.h);if(container.p)container.div.removeChild(container.p);if(data.p){container.p=createEl("div",{"class":"help_paragraph"});_l(data.p,{},container.p);container.div.appendChild(container.p);}
else if(data.pf){container.p=data.pf(container.div);}
if(container.next){if(alltopicsshown==2){_l("helpstart",{},container.next);}
else if(laststep){_l("helplast",{},container.next);}
else{_l("helpnext",{},container.next);}}
var width=data.width?data.width:UISCALE*28;var height=data.height?data.height:UISCALE*12;container.fxWidth.start(width);container.fxHeight.start(height);if(container.arrow){container.removeChild(container.arrow);container.arrow=false;}
var finalx,finaly,pel,arrow,arrowx,arrowy;finalx=0;finaly=0;if(data.pointel&&data.pointel[0]){pel=that.getElPosition(data.pointel[0]);if(pel.y<30){finalx+=pel.x-UISCALE;finaly+=pel.y;arrow="up";arrowy=0;arrowx=pel.x-finalx+UISCALE;}
else if(pel.x<(window.innerWidth*0.75)){finalx+=pel.x+that.getElWidth(data.pointel[0]);finaly+=pel.y-UISCALE;arrow="left";arrowx=0;arrowy=pel.y-finaly-(UISCALE/2);}
else{finalx+=pel.x-width;finaly+=pel.y-UISCALE;arrow="right";arrowx=width;arrowy=pel.y-finaly-(UISCALE/2);}
container.arrow=createEl("div",{"class":"help_arrow_"+arrow,"style":"left: "+arrowx+"px; top: "+arrowy+"px;"});container.insertBefore(container.arrow,container.firstChild);}
else{finalx+=Math.round((window.innerWidth/2)-(height/2));finaly+=Math.round((window.innerHeight/2)-(width/2));}
if(finalx<5)finalx=5;if(finaly<5)finaly=5;if(data.modx)finalx+=data.modx;if(data.mody)finaly+=data.mody;if(alltopicsshown==2){var setx,sety;if(!data.pointel){setx=window.innerWidth;sety=window.innerHeight;}
else{if(!pel)pel=that.getElPosition(data.pointel[0]);if(pel.x<(window.innerWidth/2))setx=-width;else setx=window.innerWidth;if(pel.y<(window.innerHeight/2))sety=-height;else sety=window.innerHeight;}
container.fxX.set(setx);container.fxY.set(sety);}
if((alltopicsshown!=2)||(data.pointel)){container.fxX.start(finalx);container.fxY.start(finaly);}
container.finalwidth=width;container.finalheight=height;container.finalx=finalx;container.finaly=finaly;if(data.pointel)container.pointel=data.pointel;else container.pointel=false;};that.getElPosition=function(el){var x=0;var y=0;if(!el)return{"x":x,"y":y};if(svg.capable&&svg.isElSVG(el)){var m=el.getScreenCTM();x=Math.round(m.e);y=Math.round(m.f);if(el.nodeName!="path"){x+=parseInt(el.getAttribute("x"));y+=parseInt(el.getAttribute("y"));}
if(el.nodeName=="text")y-=UISCALE;else if(el.nodeName=="path")y+=12;}
else{var cel=el;do{x+=cel.offsetLeft;y+=cel.offsetTop;if(cel.offsetParent&&cel.offsetParent.scrollLeft)x-=cel.offsetParent.scrollLeft;if(cel.offsetParent&&cel.offsetParent.scrollTop)y-=cel.offsetParent.scrollTop;}while(cel=cel.offsetParent);}
return{"x":x,"y":y};};that.getElWidth=function(el,overridetext){if(svg.isElSVG(el)){if(el.nodeName=="path")return 12;if(el.getAttribute("width")&&!overridetext)return parseInt(el.getAttribute("width"));if(el.nodeName=="text"){var size=el.style.fontSize?el.style.fontSize:"1em";var weight=el.style.fontWeight?el.style.fontWeight:"normal";return measureText(el.textContent,"font-size: "+size+"; font-weight: "+weight);}
return 0;}
else return el.offsetWidth;};that.getElHeight=function(el,overridetext){if(svg.isElSVG(el)){if(el.getAttribute("height")&&!overridetext)return parseInt(el.getAttribute("height"));if(el.nodeName=="text")return UISCALE*1.2;return 0;}
else return el.offsetHeight;};that.getStyle=function(el,styleProp){if(el.currentStyle)
var y=el.currentStyle[styleProp];else if(window.getComputedStyle)
var y=document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);return y;};return that;}();function drawAboutScreen(div){var tbl=createEl("table",{"class":"about help_paragraph"});var html="<tr><td style='width: 10em;'>"+_l("rainwave3version")+":</td><td>"+_l("revision")+" "+BUILDNUM+"</td></tr>";html+="<tr><td>"+_l("creator")+":</td><td>LiquidRain</td></tr>";html+="<tr><td>"+_l("staff")+":</td><td>Ten19 and Metal-Ridley (game)<br />SOcean255 (covers)<br />Schneau and Natural-Chemical (chiptunes)<br />William and jfinalfunk (special projects)</td></tr>";html+="<tr><td>"+_l("relayadmins")+":</td><td>Lyfe, Tanaric, Dracoirs</td></tr>";html+="<tr><td>"+_l("translators")+":</td><td>Metal-Geo (NL), Metal-Ridley (FR), quarterlife (FI), Steppo (SE), DarkLink (DE), BreadMaker (ES), ocrfan (PT).</td></tr>";html+="<tr><td style='padding-top: 1em;'>"+_l("specialthanks")+":</td><td style='padding-top: 1em;'>strwrsxprt, heschi, Brayniac, Salty, efiloN, Steppo, Vyzov.</td></tr>";html+="<tr><td style='padding-top: 1em;'>"+_l("poweredby")+":</td><td style='padding-top: 1em;'>"+_l("customsoftware")+", <a href='http://icecast.org' class='new_window' target='_blank' onclick='return false;'>Icecast</a>, <a href='http://savonet.sourceforge.net' target='_blank' class='new_window' onclick='return false;'>Liquidsoap</a></td></tr>";tbl.innerHTML=html;div.appendChild(tbl);var a1=createEl("a",{"href":"/donations.php","textContent":_l("donationinformation"),"class":"help_paragraph new_window","style":"margin-top: 1em; display: block","target":"_blank"});div.appendChild(a1);}
help.addStep("about",{"h":"about","pf":drawAboutScreen,"width":UISCALE*55,"height":UISCALE*35});help.addTutorial("about",["about"]);help.addTopic("about",{"h":"about","p":"about_p","tutorial":"about"});help.addTutorial("welcome",["tunein","clickonsongtovote"]);help.addStep("setfavourite",{"h":"setfavourite","p":"setfavourite_p","modx":8,"mody":-5});help.addStep("ratecurrentsong",{"h":"ratecurrentsong","p":"ratecurrentsong_p","height":UISCALE*15,"modx":-4,"mody":-5});help.addStep("tunein",{"h":"tunein","p":"tunein_p","mody":35,"skipf":function(){return user.p.radio_tunedin?true:false;}});help.addStep("login",{"h":"login","p":"login_p","skipf":function(){return user.p.user_id>1?true:false}});help.addTutorial("ratecurrentsong",["register","tunein","ratecurrentsong","setfavourite"]);help.addTopic("ratecurrentsong",{"h":"ratecurrentsong","p":"ratecurrentsong_t","tutorial":"ratecurrentsong","modx":6,"mody":-5,"skipf":function(){return user.p.radio_tunedin?true:false;}});help.addStep("clicktorequest",{"h":"clicktorequest","p":"clicktorequest_p"});help.addStep("openplaylist",{"h":"openplaylist","p":"openplaylist_p","skipf":function(){if(edi.openPanelLink(true,"playlist"))return true;}});help.addTutorial("request",["login","tunein","openplaylist","playlistsearch_v2","openanalbum","clicktorequest"]);help.addTopic("request",{"h":"request","p":"request_p","tutorial":"request"});
var hotkey=function(){var callbacks=[];var maxid=0;var that={};var backspace_trap=false;var backspace_timer=false;that.addCallback=function(method,priority){var newcb={"method":method,"id":maxid};maxid++;if(callbacks.length<priority){callbacks.splice(priority,0,newcb);}
else{callbacks.push(newcb);}
return newcb.id;};that.removeCallback=function(id){for(var i=0;i<callbacks.length;i++){if(callbacks[i].id==id){callbacks.splice(i,0);return;}}};that.stopDefaultAction=function(e){if(e.preventDefault)e.preventDefault();};that.preventHotkeys=function(el){el.addEventListener('keypress',that.stopBubbling,true);}
that.stopBubbling=function(e){e.cancelBubble=true;e.returnValue=false;e.stopPropagation();};that.keyPress=function(evt){var targ;if(!evt)evt=window.event;if(evt.target)targ=evt.target;else if(evt.srcElement)targ=evt.srcElement;if(targ.nodeType==3)
targ=targ.parentNode;if(targ.tagName=="input")return true;for(var i=0;i<callbacks.length;i++){if(!callbacks[i].method(evt)){that.stopDefaultAction(evt);return false;}}
return true;};that.keyPressHandler=function(evt){if(that.ignoreKey(evt))return true;if((evt.keyCode!=8)&&(evt.keyCode!=27)&&(evt.keyCode!=38)&&(evt.keyCode!=40)){return that.keyPress(evt);}
if(backspace_trap){that.stopDefaultAction(evt);return false;}};that.keyDownHandler=function(evt){if(that.ignoreKey(evt))return true;if(evt.keyCode==8){backspace_trap=!that.keyPress(evt)||backspace_trap;return!backspace_trap;}
if((evt.keyCode==27)||(evt.keyCode==38)||(evt.keyCode==40)){that.keyPress(evt);that.stopDefaultAction(evt);return false;}};that.keyUpHandler=function(evt){if(backspace_trap&&(evt.keyCode==8)){if(backspace_timer)clearTimeout(backspace_timer);setTimeout(function(){backspace_trap=false;backspace_timer=false;},1000);}};that.ignoreKey=function(evt){if(evt.ctrlKey||evt.altKey||evt.metaKey)return true;if(!('charCode'in evt))return false;if((evt.charCode==0)&&(evt.keyCode>=112)&&(evt.keyCode<=123))return true;return false;};window.addEventListener('keydown',that.keyDownHandler,false);window.addEventListener('keypress',that.keyPressHandler,false);window.addEventListener('keyup',that.keyUpHandler,false);return that;}();
function _l(line,object,el,keep){if(!object&&!el){if(lang[line]){if(el){if(!keep)while(el.hasChildNodes())el.removeChild(el.firstChild);createEl("span",{"textContent":lang[line]},el);}
return lang[line];}
else return"|*"+line+"*|";}
if((typeof(lang[line])!="undefined")){if(!object)object={};if(el&&!keep){while(el.hasChildNodes())el.removeChild(el.firstChild);}
var keystart=0;var keyend=lang[line].indexOf("|");var key=false;var key2=false;var word=false;var span;var str;var wholestr="";var classname;while(keyend!=-1){str=undefined;classname="lang_"+line;key=lang[line].substr(keystart,(keyend-keystart));if(key=="br"&&el){createEl("br",false,el);createEl("br",false,el);}
else if(key.substr(0,2)=="S:"){if(typeof(object[key.substr(2)])!="undefined"){classname+=" lang_"+line+"_"+key.substr(2);str=_lSuffixNumber(object[key.substr(2)])}
else{str="|*"+key.substr(2)+"*|";}}
else if(key.substr(0,2)=="P:"){key2=key.substr(2,key.indexOf(",")-2);word=key.substr(key.indexOf(",")+1);if(typeof(object[key2])!="undefined"){classname+=" lang_"+line+"_"+word;str=_lPlural(object[key2],word);}
else{str="|*"+key2+"*|";}}
else if(typeof(object[key])!="undefined"){classname+=" lang_"+line+"_"+key;str=object[key];}
else{str=key;}
if(typeof(str)!="undefined"){if(el)createEl("span",{"textContent":str,"class":classname},el);wholestr+=str;}
keystart=keyend+1;keyend=lang[line].indexOf("|",keystart);}
if(keystart==0){classname="lang_"+line;if(el)createEl("span",{"textContent":lang[line],"class":classname},el);wholestr=lang[line];}
else{classname="lang_"+line;str=lang[line].substr(keystart);if(str>""){if(el)createEl("span",{"textContent":str,"class":classname},el);wholestr+=str;}}
return wholestr;}
else return"[*"+line+"*]";}
function _lSuffixNumber(number){if(("suffix_"+number)in lang)return number+lang["suffix_"+number];var key;for(var i=100;i>=10;i=i/10){key="suffix_"+(number%i);if(key in lang)return number+lang[key];}
return number;}
function _lPlural(number,word){if((number>1)&&(number!=0))word+="_p";if(typeof(lang[word])!="undefined")return lang[word];else return"[*"+word+"*]";}
function getMousePosX(e){var posx=0;if(!e)e=window.event;if(e.pageX){posx=e.pageX;}
else if(e.clientX){posx=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;}
return posx;}
function getMousePosY(e){var posy=0;if(!e)e=window.event;if(e.pageY){posy=e.pageY;}
else if(e.clientY){posy=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;}
return posy;}
function mouseUpdate(e){mouse.x=getMousePosX(e);mouse.y=getMousePosY(e);}
window.addEventListener('mousedown',mouseUpdate,true);
var Song={linkify:function(song_id,el){},linkifyAsOneshot:function(song_id,el){linkify(el);el.addEventListener('click',function(){lyre.async_get("oneshot_add",{"song_id":song_id});},true);},linkifyAsForceCandidate:function(song_id,el){linkify(el);el.addEventListener('click',function(){lyre.async_get("force_candidate_add",{"song_id":song_id});},true);},addChangeMultiplierListener:function(song_id,el){el.addEventListener('change',function(){lyre.async_get("admin_change_song_multiplier",{"song_id":song_id,"multiplier":el.value});},true);}};var Album={linkify:function(album_id,el){linkify(el);el.addEventListener('click',function(){edi.openPanelLink(true,"playlist","album",album_id);},true);},open:function(album_id){edi.openPanelLink(true,"playlist","album",album_id);}};var Artist={allArtistToHTML:function(artistarray,el){var a,span;for(var i=0;i<artistarray.length;i++){if(i>0){span=document.createElement("span");span.textContent=", ";el.appendChild(span);}
a=document.createElement("span");Artist.linkify(artistarray[i].artist_id,a);a.textContent=artistarray[i].artist_name;el.appendChild(a);}},linkify:function(artist_id,el){linkify(el);el.addEventListener('click',function(){edi.openPanelLink(true,"playlist","artist",artist_id);},true);},open:function(artist_id){edi.openPanelLink(true,"playlist","artist",artist_id);}};var Username={linkify:function(user_id,el){linkify(el);el.addEventListener('click',function(){edi.openPanelLink(true,"listeners","id",user_id);},true);},open:function(user_id){edi.openPanelLink(true,"listeners","id",user_id);},openFresh:function(user_id){edi.openPanelLink(true,"listeners","id_refresh",user_id);}}
function Rating(p){var that={};if((p.category!="song")&&(p.category!="album"))return undefined;that.category=p.category;if(isNaN(p.id))return undefined;that.id=p.id;if((p.userrating>=1)&&(p.userrating<=5))that.userrating=p.userrating;else that.userrating=0;if((p.siterating>=1)&&(p.siterating<=5))that.siterating=p.siterating;else that.siterating=0;if(p.favourite)that.favourite=true;else that.favourite=false;if(p.ratable)that.ratable=true;else that.ratable=false;if(p.register)that.register=true;else that.register=false;if(p.fake)that.fake=p.fake;else that.fake=false;that.oldrating=that.userrating;var lasttime=0;var lockeduntil=0;that.el=false;that.mousecatch=false;that.favhover=false;var sitetext="";theme.Extend.Rating(that);that.enable=function(){if(that.category=="song")that.ratable=true;};that.disable=function(){that.ratable=false;that.resetUser();};that.onMouseMove=function(evt){var r=that.userCoord(evt);if(that.ratable&&r){that.setUser(that.scrubRating(r));}
else if(that.ratable&&!r){that.resetUser();}};that.onMouseOut=function(evt){that.resetUser();that.favMouseOut();};that.onClick=function(evt){if(that.favhover){that.favClick();}
else if(that.ratable){var now=clock.now;var newrating=0;if(now>lockeduntil){if((lasttime+5)>=now){lockeduntil=now+5;}
lasttime=now;var newrating=that.userCoord(evt)
if(newrating==0)return;newrating=that.scrubRating(newrating);that.oldrating=that.userrating;that.userrating=newrating;that.setUser(newrating);if(that.fake){that.ratingConfirm(newrating);}
else{lyre.async_get("rate",{"rating":newrating,"song_id":that.id});}}}};that.ratingConfirm=function(rating){that.userrating=rating;that.resetUser();that.showConfirmOK();setTimeout(that.resetConfirm,750);that.updateSiteRating(that.siterating);};that.ratingBad=function(rating){that.userrating=that.oldrating;that.resetUser();that.showConfirmBad();setTimeout(that.resetConfirm,750);};that.updateSiteRating=function(site){that.siterating=site;if(ratingcontrol.hideuntilrated&&!that.userrating){that.setSite(0);return;}
that.setSite(site);};that.scrubRating=function(rating){if(rating<1)rating=1;else if(rating>5)rating=5;return Math.round(rating*2)/2;};that.favConfirm=function(state){that.favourite=state;that.favChange(state);};that.favMouseOver=function(evt){if(user.p.user_id<=1)return;that.favhover=true;that.favChange(2);};that.favMouseOut=function(evt){if(user.p.user_id<=1)return;that.favhover=false;that.favChange(that.favourite);};that.favClick=function(evt){if(that.fake){that.favConfirm(that.favourite?false:true);return;}
if(user.p.user_id<=1)return;var setfav=that.favourite?"false":"true";var category_id=that.category+"_id";var submithash={};submithash['fav']=setfav;submithash[that.category+"_id"]=that.id;lyre.async_get("fav_"+that.category,submithash);};that.draw();that.setUser(that.userrating);that.updateSiteRating(that.siterating);if(that.favourite)that.favChange(that.favourite);if(that.mousecatch){that.mousecatch.addEventListener("mousemove",that.onMouseMove,true);that.mousecatch.addEventListener("mouseout",that.onMouseOut,true);that.mousecatch.addEventListener("click",that.onClick,true);}
if(that.ratable)that.enable();if(that.register)ratingcontrol.addCallback(that)
return that;};
var ratingcontrol=function(){var callbacks={};var maxid=0;var that={};that.hideuntilrated=false;that.loginUpdate=function(result){log.log("RatingControl",0,"Count: "+callbacks.length);};that.ratingUpdate=function(result){if(result.song_id){for(var i in callbacks){if((callbacks[i].category=="song")&&(callbacks[i].id==result.song_id)){if(result.code==1)callbacks[i].ratingConfirm(result.song_rating);else callbacks[i].ratingBad(result.song_rating);}
if((result.code==1)&&(result.album_id)&&(callbacks[i].category=="album")&&(callbacks[i].id==result.album_id)){callbacks[i].ratingConfirm(result.album_rating);}}}
if(result.code==1)help.continueTutorialIfRunning("ratecurrentsong");};that.cleanCallbacks=function(){var cb=0;for(var i in callbacks){if(!document.getElementById(callbacks[i].el.id)){delete(callbacks[i]);}
else{cb++;}}};that.songFavUpdate=function(result){result['fav_type']="song";result['id']=result['song_id'];that.favUpdate(result);};that.albumFavUpdate=function(result){result['fav_type']="album";result['id']=result['album_id'];that.favUpdate(result);};that.favUpdate=function(result){if(result.id){for(var i in callbacks){if((callbacks[i].category==result.fav_type)&&(callbacks[i].id==result.id)){callbacks[i].favConfirm.call(callbacks[i],result.fav);}}}
if(result.code==1)help.continueTutorialIfRunning("setfavourite");};that.historyUpdate=function(result){var maxhistidx=0;if(result[0]&&result[0].song_data&&result[0].song_data[0]){for(var i in callbacks){if((callbacks[i].category=="album")&&(callbacks[i].id==result[0].song_data[0].album_id)){callbacks[i].updateSiteRating.call(callbacks[i],result[0].song_data[0].album_rating_avg);}
else if((callbacks[i].category=="song")&&(callbacks[i].id==result[0].song_data[0].song_id)){callbacks[i].updateSiteRating.call(callbacks[i],result[0].song_data[0].song_rating_avg);}}}};that.addCallback=function(ratingobj){maxid++;ratingobj.el.setAttribute("id","rating_"+maxid);callbacks[maxid]=ratingobj;};that.p_hideuntilrated=function(hideuntilrated){that.hideuntilrated=hideuntilrated;}
prefs.addPref("rating",{name:"hidesite",callback:that.p_hideuntilrated,defaultvalue:false,type:"checkbox",refresh:true,dsection:"edi"});lyre.addCallback(that.ratingUpdate,"rate_result");lyre.addCallback(that.songFavUpdate,"fav_song_result");lyre.addCallback(that.albumFavUpdate,"fav_album_result");lyre.addCallback(that.historyUpdate,"sched_history");lyre.addCallback(that.cleanCallbacks,"sched_sync");return that;}();
var titleupdate=function(){var on=false;var clockid=0;var sv_ready=false;var titlestring="Loading...";var timeleft=0;var that={};that.updateTitle=function(time){timeleft=time;if(!sv_ready)return;if(time>=0)document.title="["+formatNumberToMSS(time)+"] "+titlestring;};that.ajaxHandle=function(json){clock.updateClockEnd(clockid,json.sched_endtime);if(json.sched_type==SCHED_ELEC)titlestring=json.song_data[0].album_name+": "+json.song_data[0].song_title;else if(json.sched_type==SCHED_LIVE)titlestring=json.sched_name;else if(json.sched_type==SCHED_ADSET)titlestring=json.ad_data[json.adset_position].ad_title;else if(json.sched_type==SCHED_ONESHOT)titlestring=json.song_data[0].album_name+": "+json.song_data[0].song_title;sv_ready=true;};clockid=clock.addClock(false,that.updateTitle,clock.now,-2);lyre.addCallback(that.ajaxHandle,"sched_current");return that;}();
var user=function(){var callbacks=[];var maxid=0;var that={};that.p={user_id:PRELOADED_USER_ID,username:"Anonymous",user_new_privmsg:0,user_avatar:"images/blank.png",radio_lastnews:-1,radio_statrestricted:0,radio_perks:0,radio_tunedin:0,sid:0,current_activity_allowed:false,radio_admin:0,radio_live_admin:0,radio_request_expiresat:0,radio_request_position:0,radio_listenkey:false,list_active:false,list_id:0,list_voted_entry_id:false,radio_active_sid:0,radio_active_until:0};that.ajaxHandle=function(json){json.current_activity_allowed=((json.radio_tunedin==1)&&(json.radio_statrestricted==0))?true:false;var lastinfo={};for(var i in json){lastinfo[i]=that.p[i];that.p[i]=json[i];}
for(var i in json){if(json[i]!=lastinfo[i])that.doCallback(i,json[i]);}};that.doCallback=function(key,value){if(typeof(callbacks[key])!="undefined"){for(var cb in callbacks[key]){callbacks[key][cb](value);}}};that.addCallback=function(method,datum){if(typeof(callbacks[datum])=="undefined")callbacks[datum]=[];callbacks[datum][maxid]=method;maxid++;return maxid-1;};that.deleteCallback=function(datum,id){delete(that.callbacks[datum][id]);};that.addCallback(lyre.setUserID,"user_id");that.addCallback(lyre.setKey,"api_key");lyre.addCallback(that.ajaxHandle,"user");return that;}();
function SplitWindow(name,container,table_class){var table=createEl("table",{"style":"width: 100%; table-layout: fixed; height: "+container.offsetHeight+"px;","class":"splitwindow_table"});var row=createEl("tr",false,table);var tabs_td=createEl("td",{"class":"splitwindow_tabs_td"},row);var bar=createEl("td",{"class":"splitwindow_resize","rowspan":2},row);var right=createEl("td",{"class":"splitwindow_right","rowspan":2},row);var row2=createEl("tr",false,table);var left=createEl("td",{"class":"splitwindow_left"},row2);container.appendChild(table);var that={};that.currentidopen=false;that.getSearchHelpEl=function(){return bar;};prefs.addPref("splitwindow",{"name":"sizeleft_"+name,"defaultvalue":260,"hidden":true});prefs.addPref("splitwindow",{"name":"lasttab_"+name,"defaultvalue":false,"hidden":true});left.style.width=prefs.getPref("splitwindow","sizeleft_"+name)+"px";tabs_td.style.width=prefs.getPref("splitwindow","sizeleft_"+name)+"px";var resize_mx;var resize_last_width=prefs.getPref("splitwindow","sizeleft_"+name);var resize_final_width=resize_last_width;var maxwidth=container.offsetWidth;var height=container.offsetHeight;var tabs_td_height=false;that.startResize=function(e){resize_mx=getMousePosX(e);document.addEventListener("mousemove",that.runningResize,true);document.addEventListener("mouseup",that.stopResize,true);};that.runningResize=function(e){var mx=getMousePosX(e);var width=resize_last_width+(mx-resize_mx);if(width>(maxwidth-300))width=maxwidth-300;if(width<200)width=200;left.style.width=width+"px";tabs_td.style.width=width+"px";resize_final_width=width;};that.stopResize=function(e){document.removeEventListener('mousemove',that.runningResize,true);document.removeEventListener('mouseup',that.stopColumnResize,true);prefs.changePref("splitwindow","sizeleft_"+name,resize_final_width);resize_last_width=resize_final_width;};bar.addEventListener('mousedown',that.startResize,true);var firsttab=false;var currenttab;var tabs={};var tabdivs={};var tabul=createEl("ul",{"class":"splitwindow_tabs"},tabs_td);var tabinitfunc={};that.getCurrentTab=function(){return currenttab;};that.addTab=function(key,title,initfunc){tabs[key]=createEl("li",{"class":"splitwindow_tab","textContent":title},tabul);tabs[key]._tabkey=key;tabs[key].addEventListener("click",that.switchToTabByEvt,true);tabdivs[key]=createEl("div",{"class":"splitwindow_leftcontainer"});tabinitfunc[key]=initfunc;if(!firsttab)firsttab=key;tabs_td_height=tabs_td.offsetHeight;return tabdivs[key];};that.initTabs=function(){var defaulttab=prefs.getPref("splitwindow","lasttab_"+name);if(!defaulttab)defaulttab=firsttab;that.switchToTab(defaulttab);};that.switchToTabByEvt=function(evt){that.switchToTab(evt.currentTarget._tabkey);};that.switchToTab=function(newtab){if(newtab==currenttab)return;if(tabinitfunc[newtab]){tabinitfunc[newtab](that);tabinitfunc[newtab]=false;}
if(currenttab){left.removeChild(tabdivs[currenttab]);tabs[currenttab].className="splitwindow_tab";}
currenttab=newtab;left.appendChild(tabdivs[currenttab]);tabs[currenttab].className="splitwindow_tab splitwindow_tab_active";prefs.changePref("splitwindow","lasttab_"+name,currenttab);};that.getTab=function(key){if(tabs[key])return tabs[key];};that.getTabDiv=function(key){if(tabdivs[key])return tabdivs[key];};that.setHeight=function(newheight){height=newheight;table.style.height=height+"px";var divh=height-tabs_td_height;for(var i in tabdivs){tabdivs[i].style.height=divh+"px";}
if(opendivs.length>0){opendivs[opendivs.length-1].div.style.height=height+"px";}};that.setWidth=function(newwidth){maxwidth=newwidth;};var opendivs=[];that.isAnyDivOpen=function(type){for(var i in opendivs){if(opendivs[i].type==type)return true;}
return false;};that.createOpenDiv=function(type,id){while(opendivs.length>25){right.removeChild(opendivs[0].div);opendivs.shift();}
for(i=0;i<opendivs.length;i++){opendivs[i].div.style.display="none";}
var div=createEl("div",{"class":"pl_opendiv","style":"height: "+height+"px;"});right.appendChild(div);opendivs.push({"div":div,"type":type,"id":id});return opendivs[opendivs.length-1];};that.reOpenDiv=function(type,id){if(opendivs.length==0)return;var reopen=false;if((opendivs[opendivs.length-1].type==type)&&(id==opendivs[opendivs.length-1].id)){reopen=true;}
for(var i=0;i<opendivs.length;i++){if((opendivs[i].type==type)&&(opendivs[i].id==id)){right.removeChild(opendivs[i].div);opendivs.splice(i,1);}}
return reopen;};that.checkOpenDivs=function(type,id){var found=false;for(var i=0;i<opendivs.length;i++){if((opendivs[i].type==type)&&(opendivs[i].id==id)){if(i==opendivs.length-1){return true;}
found=true;opendivs[i].div.style.display="block";opendivs[i].div.style.height=height+"px";if(typeof(opendivs[i].updateHelp)=="function")opendivs[i].updateHelp();if(typeof(opendivs[i].continueTutorial)=="function")opendivs[i].continueTutorial();opendivs.push(opendivs.splice(i,1)[0]);break;}}
if(!found)return false;for(i=0;i<opendivs.length-1;i++){opendivs[i].div.style.display="none";}
return true;};return that;};
function SearchTable(container,id_key,table_class){var sort_key=id_key;var search_key=id_key;var reverse_sort=false;if(!table_class)table_class="";var data={};var sorted=[];var reinsert=[];var removed=[];var updated=[];var keynavtimer=false;var inlinetimer=false;var searchstring="";var currentnav=false;var scrolloffset=UISCALE*5;var tableappended=false;var textcontainer=createEl("div",{"class":"inlinesearch_container"});var texthelp=createEl("div",{"class":"inlinesearch_help","textContent":_l("escapetoclear")},textcontainer);var texthdr=createEl("div",{"class":"inlinesearch_hdr","textContent":_l("searchheader")},textcontainer);var textfield=createEl("span",{"class":"inlinesearch_text"},texthdr);container.appendChild(textcontainer);var texthdrheight=UISCALE*2;var table=createEl("table",{"class":table_class});var fx_test_top=fx.make(fx.CSSNumeric,textcontainer,250,"marginTop","px");var fx_test_height=fx.make(fx.CSSNumeric,textcontainer,250,"height","px");fx_test_height.set(0);var that={};that.data=data;that.syncdeletes=false;that.searchEnabled=function(){return false;};that.changeSortKey=function(new_sort_key){sort_key=new_sort_key;};that.changeSearchKey=function(new_search_key){search_key=new_search_key;};that.changeReverseSort=function(reverse){reverse_sort=reverse;};that.update=function(json){var i;if(that.syncdeletes){for(i in data){data[i]._delete=true;}}
for(i in json){that.updateItem(json[i]);}
if(that.afterUpdate)that.afterUpdate(json,data,sorted);if(!inlinetimer)that.updateList();};that.updateItem=function(json){var toreturn;if(typeof(json.album_lowest_oa)!="undefined"){json.album_available=(json.album_lowest_oa<clock.now)?true:false;}
var id=json[id_key];if(typeof(data[id])=="undefined"){data[id]=json;data[id]._searchname=removeAccentsAndLC(data[id][search_key]);data[id].tr=createEl("tr");data[id].tr._search_id=id;that.drawEntry(data[id]);toreturn=true;}
else{for(var i in json){if(json[i]!=data[id][i]){data[id][i]=json[i];toreturn=true;}}}
if(that.syncdeletes)data[id]._delete=false;if(toreturn){updated.push(id);}
return toreturn;};that.reinsertEntry=function(id){var io=sorted.indexOf(id);if(io>=0){sorted.splice(io,1)[0];}
if(reinsert.indexOf(id)==-1){reinsert.push(id);}};that.reinsertAll=function(){sorted.sort(that.sortList);for(var i=0;i<sorted.length;i++){table.appendChild(data[sorted[i]].tr);}};that.addToUpdated=function(id){if(updated.indexOf(id)==-1)updated.push(id);};that.updateList=function(){var i=0;if(updated.length>0){for(i=0;i<updated.length;i++){that.drawUpdate(data[updated[i]]);that.reinsertEntry(updated[i]);}
updated=[];}
reinsert.sort(that.sortList);for(i=0;i<sorted.length;i++){if(reinsert.length==0)break;if(that.sortList(reinsert[0],sorted[i])==-1){table.insertBefore(data[reinsert[0]].tr,data[sorted[i]].tr);sorted.splice(i,0,reinsert.shift());}}
for(i=0;i<reinsert.length;i++){sorted.push(reinsert[i]);table.appendChild(data[reinsert[i]].tr);}
for(i=sorted.length-1;i>=0;i--){if(data[sorted[i]]._delete){table.removeChild(data[sorted[i]].tr);delete(data[sorted[i]]);sorted.splice(i,1);}}
reinsert=[];if(!tableappended){container.appendChild(table);tableappended=true;}};that.sortList=function(a,b){var toret=0;if(data[a][sort_key]<data[b][sort_key])toret=-1;else if(data[a][sort_key]>data[b][sort_key])toret=1;if(!reverse_sort||(toret==0))return toret;else if(toret==-1)return 1;else return-1;};that.keyHandle=function(evt){if(sorted.length<10)return;if(!that.searchEnabled())return true;var resettimer=false;var resetkeytimer=false;var bubble=true;var chr='';if(!('charCode'in evt)){chr=String.fromCharCode(evt.keyCode);}
else if(evt.charCode>0){chr=String.fromCharCode(evt.charCode);}
var dosearch=false;if(evt.keyCode==40){that.navDown();if(inlinetimer)resettimer=true;resetkeytimer=true;}
else if(evt.keyCode==38){that.navUp();if(inlinetimer)resettimer=true;resetkeytimer=true;}
else if((evt.keyCode==13)&&keynavtimer&&currentnav){bubble=false;that.clearInlineSearch();that.searchAction(currentnav._search_id);}
else if(/[\d\w\-.&':+~,]+/.test(chr)){dosearch=true;}
else if(chr==" "){dosearch=true;bubble=false;}
if(dosearch){bubble=false;resettimer=true;searchstring+=chr;that.performSearch(searchstring);}
if(inlinetimer&&(evt.keyCode==8)){bubble=false;if(searchstring.length==1){that.clearInlineSearch();}
else{resettimer=true;searchstring=searchstring.substring(0,searchstring.length-1);that.performSearchBackspace(searchstring);}}
if(resettimer){inlinetimer=true;}
if(resetkeytimer){if(keynavtimer)clearTimeout(keynavtimer);keynavtimer=setTimeout(that.navClear,5000);}
if(inlinetimer&&(evt.keyCode==27)){that.navClear();that.clearInlineSearch();bubble=false;}
return bubble;};that.performSearch=function(text){var i;var j;text=text.toLowerCase();for(i=0;i<sorted.length;i++){if(data[sorted[i]]._searchname.indexOf(text)==-1){data[sorted[i]].tr.style.display="none";removed.push(sorted[i]);}}
if(!inlinetimer)that.startSearchDraw();textfield.textContent=text;};that.performSearchBackspace=function(text){textfield.textContent=text;text=text.toLowerCase();var unremove=[];for(var i in removed){if(data[removed[i]]._searchname.indexOf(text)>-1){data[removed[i]].tr.style.display="table-row";unremove.push(i);}}
for(i in unremove)removed.splice(unremove[i],1);};that.clearInlineSearch=function(){inlinetimer=false;searchstring="";that.navClear();if(removed.length>0){for(var i=0;i<removed.length;i++){data[removed[i]].tr.style.display="table-row";}
removed=[];that.updateList();}
that.clearSearchDraw();};that.updateScrollOffsetByEvt=function(evt){that.setScrollOffset(evt.target.offsetTop-container.scrollTop);};that.updateScrollOffsetByID=function(id){if(id in data)that.updateScrollOffset(data[id]);};that.updateScrollOffset=function(entry){that.setScrollOffset(entry.tr.offsetTop-container.scrollTop);};that.setScrollOffset=function(offset){if(offset&&(offset>UISCALE*5)){scrolloffset=offset;}
else{scrolloffset=UISCALE*5;}};that.scrollToID=function(entry_id){if(entry_id in data)that.scrollTo(data[entry_id]);};that.scrollToCurrent=function(){if(currentnav)that.scrollTo(data[currentnav._search_id]);};that.scrollTo=function(entry){if(entry){container.scrollTop=entry.tr.offsetTop-scrolloffset;}};that.navGet=function(){if(!keynavtimer)return 0;if(currentnav)return currentnav._search_id;return 0;};that.preNavCheck=function(){if(currentnav&&(currentnav.style.display=="none")){that.drawNavChange(data[currentnav._search_id],false);currentnav=false;}
if(!currentnav){currentnav=table.firstChild;while(currentnav.style.display=="none"){if((currentnav==table.lastChild)&&(currentnav.style.display=="none"))return false;currentnav=currentnav.nextSibling;}
that.drawNavChange(data[currentnav._search_id],true);return false;}
return true;};that.navClear=function(){if(keynavtimer)clearTimeout(keynavtimer);keynavtimer=false;if(currentnav)that.drawNavChange(data[currentnav._search_id],false);};that.navToID=function(id){if(id in data)that.navTo(data[id].tr);else that.navClear();};that.navTo=function(newnav){if(currentnav)that.drawNavChange(data[currentnav._search_id],false);currentnav=newnav;that.drawNavChange(data[currentnav._search_id],true);that.scrollTo(data[currentnav._search_id]);};that.navDown=function(){if(!that.preNavCheck())return false;if(!currentnav.nextSibling)return false;var next=currentnav.nextSibling;while(next.style.display=="none"){if(next==table.lastChild)return false;next=next.nextSibling;}
that.navTo(next);return true;};that.navUp=function(){if(!that.preNavCheck())return;if(!currentnav.previousSibling)return;var prev=currentnav.previousSibling;while(prev.style.display=="none"){if(prev==table.firstChild)return false;prev=prev.previousSibling;}
that.navTo(prev);};that.startSearchDraw=function(){that.setScrollOffset();if(container.parentNode.className=="splitwindow_left"){textcontainer.style.width=container.parentNode.style.width;}
else{textcontainer.style.width=container.style.left;}
var h=texthdrheight;fx_test_top.start(-h);fx_test_height.start(h);textfield.textContent="";};that.clearSearchDraw=function(){fx_test_top.start(0);fx_test_height.start(0);textfield.textContent="";};hotkey.addCallback(that.keyHandle,0);return that;};
var ticker=function(){var that={};that.el=false;theme.Extend.Ticker(that);var items=[];that.addTickerItem=function(text,url,x_api_action,x_api_params,override){if(!url)url=false;if(!x_api_action)x_api_action=false;if(!x_api_params)x_api_params=false;var item={"text":text,"url":url,"x_api_action":x_api_action,"x_api_params":x_api_params};item.code=parseInt(clock.now+"");if(override){items.unshift(item);items.unshift(false);that.nextItem();}
else{items.push(item);if(items.length==1)that.showItem(items[0]);}
return item.code;};that.nextItem=function(){that.hideItem();items.splice(0,1);if(items.length>0)that.showItem(items[0]);};that.removeItem=function(code){if(items.length==0)return;if(items[0].code===code){that.nextItem();return;}
for(var i=0;i<items.length;i++){if(items[i].code===code){items.splice(i,1);return;}}};var statrestrict_override=false;that.statRestrict=function(restricted){if(restricted){statrestrict_override=ticker.addTickerItem(_l("log_3",{"lockedto":SHORTSTATIONS[user.p.radio_active_sid],"currentlyon":SHORTSTATIONS[user.p.sid]}),false,false,false,true);}
else{ticker.removeItem(statrestrict_override);statrestrict_override=false;}};that.newsHandle=function(json){for(var i=0;i<json.length;i++){that.addTickerItem(json[i].news_headline,json[i].news_url);}};lyre.addCallback(that.newsHandle,"news");user.addCallback(that.statRestrict,"radio_statrestricted");return that;}();
panels.MenuPanel={ytype:"fixed",height:21,minheight:3,xtype:"slack",width:0,minwidth:0,noborder:true,title:_l("p_MenuPanel"),cname:"menu",constructor:function(container){var that={};that.container=container;that.playeradded=false;that.el;var loginenabled=true;var loginattempts=0;theme.Extend.MenuPanel(that);that.init=function(){that.width=container.offsetWidth;that.height=container.offsetHeight;that.el=container;that.draw();var pos=help.getElPosition(that.td_news);errorcontrol.changeShowXY(pos.x,pos.y+that.height);user.addCallback(that.usernameCallback,"username");user.addCallback(that.tunedinCallback,"radio_tunedin");user.addCallback(that.userAvatarCallback,"user_avatar");lyre.addCallback(that.loginResult,"login_result");};that.usernameCallback=function(username){if(user.p.user_id==1)that.showAnonUser();else that.showUsername(username);};that.tunedinCallback=function(tunedin){that.drawTuneInChange(tunedin);if(tunedin)help.continueTutorialIfRunning("tunein");};that.addPlayer=function(el){if(that.playeradded)return;var url;var usrstr=user.p.user_id>1?"?"+user.p.user_id+":"+user.p.radio_listenkey:"";if(user.p.sid==1)url="http://gamestream.rainwave.cc:8000/rainwave.mp3"+usrstr;else if(user.p.sid==2)url="http://ocrstream.rainwave.cc:8000/ocremix.mp3"+usrstr;else if(user.p.sid==3)url="http://coverstream.rainwave.cc:8000/mixwave.mp3"+usrstr;else if(user.p.sid==4)url="http://chipstream.rainwave.cc:8000/bitwave.mp3"+usrstr;else if(user.p.sid==5)url="http://allstream.rainwave.cc:8000/omniwave.mp3"+usrstr;that.playerInitThemeHook();var flashvars={"url":url,"lang":"en","codec":"mp3","volume":"100","autoplay":"true","tracking":"false","jsevents":"false","skin":"ffmp3/ffmp3-rainwave.xml","title":STATIONS[user.p.sid]};var params={"allowScriptAccess":"always","scale":"noscale","wmode":"transparent"};var attributes={"width":79,"height":18,"id":"embedded_swf"};that.embedded_swf_container=createEl("div",{"id":"embedded_swf_container"},that.flash_container);swfobject.embedSWF("ffmp3/ffmp3-config.swf",that.embedded_swf_container.getAttribute("id"),"79","18","10.0.0","ffmp3/expressInstall.swf",flashvars,params,attributes);that.playeradded=true;};that.playerClick=function(){if(!that.playeradded)that.addPlayer(that.flash_container);};that.tuneInClickMP3=function(){that.tuneInClick("");}
that.tuneInClickOgg=function(){that.tuneInClick("?ogg=true");}
that.tuneInClick=function(querystr){var plugin=that.detectM3UHijack();if(plugin){errorcontrol.doError(3,false,false,_l("m3uhijack",{"plugin":plugin}));}
else{window.location.href="tunein.php"+querystr;}
that.tuneInClickThemeHook();};that.userAvatarCallback=function(avatar){that.changeAvatar(avatar);};that.helpClick=function(){help.showAllTopics();};that.detectM3UHijack=function(){if(navigator.plugins&&(navigator.plugins.length>0)){for(var i=0;i<navigator.plugins.length;i++){if(navigator.plugins[i]){for(var j=0;j<navigator.plugins[i].length;j++){if(navigator.plugins[i][j].type){if(navigator.plugins[i][j].type=="audio/x-mpegurl")return navigator.plugins[i][j].enabledPlugin.name;}}}}}
return false;};that.doLogin=function(user,password,autologin){if(loginattempts>=3)loginenabled=false;if(loginenabled){loginattempts++;lyre.async_get("login",{"username":user,"password":password,"autologin":autologin});}};that.loginResult=function(json){if(json.code&&(json.code<0)){if(loginattempts>0)loginenabled=false;that.drawLoginDisabled();}
else if(json.code&&(json.code==1)){window.location.reload();}};that.openChat=function(){var chaturl="http://widget.mibbit.com/?settings=6c1d29e713c9f8c150d99cd58b4b086b&server=irc.synirc.net&channel=%23rainwave&noServerNotices=true&noServerMotd=true&autoConnect=true";if(user.p.user_id>1){var re=new RegExp("[^0-9A-Za-z]","g");var un=user.p.username;un=un.replace(re,"");chaturl+="&nick="+un;}
var popupWin=window.open(chaturl,'rainwave_mibbit_window','width=750, height=550')};that.changeStation=function(sid){if(sid==1)window.location.href="http://game.rainwave.cc";if(sid==2)window.location.href="http://ocr.rainwave.cc";if(sid==3)window.location.href="http://cover.rainwave.cc";if(sid==4)window.location.href="http://chiptune.rainwave.cc";if(sid==5)window.location.href="http://all.rainwave.cc";};return that;}};
panels.MainMPI={ytype:"max",height:0,minheight:0,width:0,minwidth:0,xtype:"max",mpi:true,title:_l("p_MainMPI"),cname:"mpi",constructor:function(container){var that={};var savedpanels={};var lastpanel=false;that.mpi=true;that.panels={};that.focused=false;that.bkg=false;that.tabs=false;that.container=container;var ucallbackid=false;var containerheight=0;var pos=0;var num=0;var total=0;var technicalhint=false;var no1requestsid=0;theme.Extend.MainMPI(that);that.init=function(){containerheight=container.offsetHeight;that.panels={};that.tabs=theme.TabBar(container);for(var i in savedpanels){that.addPanel(i);}
that.tabheight=that.tabs.el.offsetHeight;that.postDraw();if(lastpanel&&panels[lastpanel]&&savedpanels[lastpanel]){that.focusPanel(lastpanel);}
user.addCallback(that.updateRequestPos,"radio_request_position");lyre.addCallback(that.updateRequestNum,"requests_user");lyre.addCallback(that.updateRequestTitle,"requests_user");};that.onHeightResize=function(height){containerheight=height;for(var i in that.panels){if(typeof(that.panels[i].onHeightResize)=="function")that.panels[i].onHeightResize(height);}};that.onWidthResize=function(width){for(var i in that.panels){if(typeof(that.panels[i].onWidthResize)=="function")that.panels[i].onWidthResize(height);}};that.divSize=function(el){el.style.height=(containerheight-that.tabheight)+"px";};that.divPosition=function(el){el.style.top=that.tabheight+"px";};that.addPanel=function(panelname){if(!panels[panelname])return;var panel=panels[panelname];if(typeof(that.tabs.panels[panelname])!="undefined"){return;}
try{that.tabs.addItem(panelname,panel.title);that.tabs.panels[panelname].focused=false;that.tabs.panels[panelname].el.panelname=panelname;that.tabs.panels[panelname].el.addEventListener('click',that.focusPanelEvent,true);}
catch(err){errorcontrol.jsError(err);return;}};that.initPanel=function(panelname,animate){var panel=panels[panelname];if(that.panels[panelname])return;that.panels[panelname]={};var mpi_container=createEl("div",{"style":"z-index: 2; position: absolute;"});var panelcl=panelname;panelcl=panelcl.replace(" ","_");mpi_container.className="EdiPanel Panel_"+panelcl;that.panels[panelname]=panel.constructor(mpi_container);that.panels[panelname].container.style.top="-5000px";that.panels[panelname].container.style.width="100%";container.appendChild(mpi_container);that.panels[panelname].parent=that;that.divSize(that.panels[panelname].container);that.panels[panelname].init();that.panels[panelname].title=panels[panelname].title;that.tabs.enableTab(panelname,animate);};that.focusPanelEvent=function(evt){if(evt.target.panelname)that.focusPanel(evt.target.panelname);};that.focusPanel=function(panelname){if(that.focused==panelname)return;if(!that.panels[panelname])that.initPanel(panelname,true);prefs.changePref("mpi","lastpanel",panelname);if(that.focused){that.panels[that.focused].container.style.top="-5000px";that.tabs.panels[that.focused].focused=false;that.tabs.focusTab(that.focused);}
that.focused=panelname;that.panels[that.focused].container.style.top=that.tabheight+"px";that.tabs.panels[that.focused].focused=true;that.tabs.focusTab(that.focused);edi.changeDeepLinkPanel(panels[that.focused].cname);};that.changeTitle=function(panelname,newtitle){that.tabs.changeTitle(panelname,newtitle);};that.openPanelLink=function(){var panel=panelcname[arguments[0]];if(that.panels[panel]||savedpanels[panel]){that.focusPanel(panel);var passargs=Array.prototype.slice.call(arguments).slice(1);if(that.panels[panel].openLink)that.panels[panel].openLink.apply(this,passargs);return true;}
return false;};that.updateRequestTitle=function(){if(!that.tabs||!that.tabs.panels["RequestsPanel"])return;var str="";if(technicalhint){var numstring="";numstring+=num;if(total!=num)numstring+="/"+total;var stationstring="";if(no1requestsid!=user.p.sid)stationstring=SHORTSTATIONS[no1requestsid]+" ";if(pos>0)str=_l("reqtechtitlefull",{"position":pos,"requestcount":numstring,"station":stationstring});else if((num>0)||(total>0))str=_l("reqtechtitlesimple",{"requestcount":numstring,"station":stationstring});}
else{var str="";if(user.p.radio_request_expiresat)str=_l("reqexpiring");else if(total==0)str="";else if(no1requestsid!=user.p.sid)str=_l("reqwrongstation");else if(user.p.radio_request_expiresat&&(num==0))str=_l("reqexpiring");else if((num==0)&(total>0))str=_l("reqoncooldown");else if((num==0)&&user.p.radio_request_position)str=_l("reqempty");else if(user.p.radio_request_position==0)str=_l("reqfewminutes");else if(user.p.radio_request_position>10)str=_l("reqlongwait");else if(user.p.radio_request_position>6)str=_l("reqwait");else if(user.p.radio_request_position>3)str=_l("reqshortwait");else str=_l("reqsoon");}
that.changeTitle("RequestsPanel",panels.RequestsPanel.title+str);};that.updateRequestPos=function(newpos){pos=newpos;};that.updateRequestNum=function(json){num=0;total=0;for(var i=0;i<json.length;i++){if(json[i].song_available)num++;total++;};if(json.length>0)no1requestsid=json[0].sid;else no1requestsid=user.p.sid;};that.p_technicalhint=function(techhint){technicalhint=techhint;that.updateRequestTitle();}
that.p_savedpanels=function(nsavedpanels){savedpanels=nsavedpanels;};that.p_lastpanel=function(nlastpanel){lastpanel=nlastpanel;}
savedpanels={"PlaylistPanel":true,"RequestsPanel":true,"ListenersPanel":true,"PrefsPanel":true,"SchedulePanel":true};prefs.addPref("mpi",{name:"lastpanel",callback:that.p_lastpanel,defaultvalue:{},hidden:true});prefs.addPref("requests",{name:"technicalhint",defaultvalue:false,type:"checkbox",callback:that.p_technicalhint});return that;}};
panels.NowPanel={ytype:"fit",height:140,minheight:140,xtype:"fit",width:UISCALE*55,minwidth:UISCALE*45,title:_l("p_NowPanel"),cname:"now",constructor:function(container){var that={};theme.Extend.NowPanel(that);that.evt=[false,false];that.container=container;that.init=function(){that.width=container.offsetWidth;that.height=container.offsetHeight;that.draw();that.changeHeader(_l("nowplaying"));lyre.addCallback(that.ajaxHandle,"sched_current");user.addCallback(that.ratableChange,"current_activity_allowed");};that.ajaxHandle=function(json){var trip=false;if(!that.evt[1]||(json.sched_id!=that.evt[1].p.sched_id))trip=true;else if((json.sched_type==SCHED_PLAYLIST)&&(that.evt[1].p.sched_type==SCHED_PLAYLIST)&&(json.playlist_position!=that.evt[1].p.playlist_position))trip=true;else if((json.sched_type==SCHED_ADSET)&&(that.evt[1].p.sched_type==SCHED_ADSET)&&(json.adset_position!=that.evt[1].p.adset_position))trip=true;if(trip){if(json.sched_type==SCHED_ELEC)that.evt[2]=NPElection(that,json);else if(json.sched_type==SCHED_LIVE)that.evt[2]=NPLiveShow(that,json);else if(json.sched_type==SCHED_ONESHOT)that.evt[2]=NPOneShot(that,json);else if(json.sched_type==SCHED_ADSET)that.evt[2]=NPAdSet(that,json);else if(json.sched_type==SCHED_PLAYLIST)that.evt[2]=NPPlaylist(that,json);if(user.p.current_activity_allowed==1)that.evt[2].enableRating();if(that.evt[1])that.evt[1].uninit();that.evt[2].init();that.evt.shift();}};that.ratableChange=function(ratable){if(that.evt[1]!=false){if(ratable==1){that.evt[1].enableRating();}
else{that.evt[1].disableRating();}}};return that;}};var NPSkeleton=function(npp){var that={};that.parent=npp;theme.Extend.NPSkeleton(that,npp);that.init=function(){if(that.song_rating){help.changeStepPointEl("ratecurrentsong",[that.song_rating.mousecatch]);help.changeTopicPointEl("ratecurrentsong",[that.song_rating.mousecatch]);help.changeStepPointEl("setfavourite",[that.song_rating.mousecatch]);help.changeTopicPointEl("setfavourite",false);}
else{help.changeStepPointEl("ratecurrentsong",false);help.changeTopicPointEl("ratecurrentsong",false);help.changeStepPointEl("setfavourite",false);help.changeTopicPointEl("setfavourite",false);}
that.animateIn();};that.uninit=function(){that.animateOut();};that.enableRating=function(){if(that.song_rating){that.song_rating.enable();that.album_rating.enable();}};that.disableRating=function(){if(that.song_rating){that.song_rating.disable();that.album_rating.disable();}};return that;};var NPElection=function(npp,json){var that=NPSkeleton(npp);that.p=json;theme.Extend.NPElection(that);that.draw();return that;};var NPJingle=function(npp,json){var that=NPSkeleton(npp);that.p=json;theme.Extend.NPJingle(that);that.draw();return that;};var NPLiveShow=function(npp,json){var that=NPSkeleton(npp);that.p=json;theme.Extend.NPLiveShow(that);that.draw();return that;};var NPOneShot=function(npp,json){var that=NPSkeleton(npp);that.p=json;theme.Extend.NPOneShot(that);that.draw();return that;};var NPPlaylist=function(npp,json){var that=NPSkeleton(npp);that.p=json;theme.Extend.NPPlaylist(that);that.draw();return that;};var NPAdSet=function(npp,json){var that=NPSkeleton(npp);that.p=json;theme.Extend.NPAdSet(that);that.draw();return that;};
panels.RequestsPanel={ytype:"slack",height:UISCALE*2,minheight:UISCALE*2,xtype:"slack",width:UISCALE*20,minwidth:UISCALE*8,title:_l("p_RequestsPanel"),cname:"requests",constructor:function(container){var that={};var list=RequestList(true);var line=AllRequestList();that.container=container;that.el=createEl("div",{"class":"requestspanel_constrict"},container);that.init=function(){container.style.overflow="auto";that.el.appendChild(list.el);that.el.appendChild(line.div);lyre.addCallback(list.update,"requests_user");lyre.addCallback(line.update,"requests_all");initpiggyback['requests']="true";if(lyre.sync_time>0){lyre.async_get("requests_get",{});}
help.addStep("managingrequests",{"h":"managingrequests","p":"managingrequests_p","skipf":function(){edi.openPanelLink(false,"requests");}});if(edi.mpi){help.addStep("timetorequest",{"h":"timetorequest","p":"timetorequest_p","pointel":[edi.tabs.panels["RequestsPanel"].el]});}
help.addToTutorial("request",["managingrequests","timetorequest"]);};return that;}}
var AllRequestList=function(){var that={};that.div=createEl("div",{"class":"allrequests"});that.header=createEl("div",{"class":"allrequests_header"},that.div);that.el=createEl("ol",{"class":"allrequests_list"},that.div);that.update=function(json){var i=0;var newli;while(that.el.hasChildNodes())that.el.removeChild(that.el.firstChild);for(i=0;i<json.length;i++){newli=that.makeLi(json[i]);that.el.appendChild(newli.el);}
if(user.p.radio_request_position>10){createEl("li",{"value":user.p.radio_request_position,"textContent":user.p.username},that.el);}
if((json.length>0)&&json[0].request_linelength&&(json[0].request_linelength>10)){_l("reqrequestlinelong",{"showing":10,"linesize":json[0].request_linelength},that.header);}
else{_l("reqrequestline",false,that.header);}};that.makeLi=function(json){var li={};li.el=document.createElement("li");li.username=document.createElement("span");li.username.textContent=json.request_username;li.el.appendChild(li.username);that.updateLi(li,json);return li;};that.updateLi=function(li,json){li.p=json;var expiry=0;if((json.request_expires_at>0)&&(json.request_tunedin_expiry>0)){expiry=json.request_expires_at<json.request_tunedin_expiry?json.request_expires_at:json.request_tunedin_expiry;}
else if(json.request_expires_at>0)expiry=json.request_expires_at;else if(json.request_tunedin_expiry>0)expiry=json.request_tunedin_expiry;if((expiry>0)&&(!li.expires_on)){li.expires_on=document.createElement("span");li.expires_on.setAttribute("class","request_expires_on");li.el.appendChild(li.expires_on);}
if((expiry>0)&&(li.expires_on)){if((expiry-clock.now)>60)li.expires_on.textContent=_l("reqexpiresin",{"expiretime":formatHumanTime(expiry-clock.now,true,true)});else li.expires_on.textContent=_l("reqexpiresnext");}
else if(li.expires_on){li.el.removeChild(li.expires_on);delete(li.expires_on);}};return that;};var RequestList=function(sortable){var that={};that.el=createEl("div",{"class":"requestlist"});that.header=createEl("div",{"class":"requestlist_header"},that.el);var headerheight=UISCALE*2;var elheight=0;var maxy=0;var dragging=false;var draggingid=-1;var dragthreshup=0;var dragthreshdown=0;var dragel=false;var dragidx=0;var dragmouseoffset=0;var reqs=[];var elposition=0;var origdragidx=0;that.update=function(json){that.stopDrag(false,true);that.p=json;if(json.length==0){_l("reqnorequests",false,that.header);}
else{_l("reqmyrequests",false,that.header);}
var i=0;var j=0;var found=false;var newreq;for(i=0;i<json.length;i++){found=false;for(j=0;j<reqs.length;j++){if(json[i].requestq_id==reqs[j].p.requestq_id){found=true;reqs[j].update(json[i]);if(reqs[j].fx_opacity.now!=1)reqs[j].fx_opacity.start(1);}}
if(!found){newreq=Request.make(json[i]);newreq.purge=false;newreq.fx_posY=fx.make(fx.CSSTranslateY,newreq.el,250);newreq.fx_posY.set(0);newreq.fx_opacity=fx.make(fx.CSSNumeric,newreq.el,250,"opacity");newreq.fx_opacity.set(0);if(sortable){newreq.el.requestq_id=json[i].requestq_id;newreq.el.addEventListener('mousedown',that.startDrag,false);}
that.el.appendChild(newreq.el);newreq.height=newreq.el.offsetHeight;reqs.push(newreq);newreq.fx_opacity.start(1);}}
maxy=0;var reqid;for(j=0;j<reqs.length;j++){reqid=reqs[j].p.requestq_id;found=false;for(var i=0;i<json.length;i++){if(json[i].requestq_id==reqs[j].p.requestq_id)found=true;}
if(!found){reqs[j].purge=true;reqs[j].fx_opacity.start(0);}
else{maxy+=reqs[j].height+3;}}
reqs.sort(that.sortRequestArray);that.positionReqs();elheight=that.el.offsetHeight;if(sortable&&(reqs.length>0)){help.changeStepPointEl("managingrequests",[reqs[reqs.length-1].el]);}
else{help.changeStepPointEl("managingrequests",[]);}};that.purgeRequests=function(){for(var i=0;i<reqs.length;i++){if(reqs[i].purge){that.el.removeChild(reqs[i].el);reqs.splice(i,1);}}};var reqmargin=7;that.positionReqs=function(nopurge){var runy=headerheight;var runz=0;for(var i=0;i<reqs.length;i++){reqs[i].p.requestq_order=i;if(reqs[i].purge){}
else if(reqs[i].p.requestq_id==draggingid){runy+=reqs[i].height+reqmargin;runz+=1;}
else{reqs[i].el.style.zIndex=runz;reqs[i].fx_posY.start(runy);reqs[i].desty=runy;runy+=reqs[i].height;runy+=reqmargin;runz+=1;}}
that.el.style.height=runy+"px";if(!nopurge)setTimeout(that.purgeRequests,250);};that.startDrag=function(e){dragidx=-1;for(var i=0;i<reqs.length;i++){if(reqs[i].p.requestq_id==e.currentTarget.requestq_id){dragidx=i;draggingid=reqs[i].p.requestq_id;dragel=reqs[i].el;break;}}
if(dragidx==-1)return;origdragidx=dragidx;reqs[dragidx].fx_opacity.start(0.6);reqs[dragidx].el.style.zIndex=reqs.length+1;elposition=help.getElPosition(that.el)["y"];dragmouseoffset=getMousePosY(e)-elposition-reqs[dragidx].fx_posY.now;that.figureDragValues();document.getElementById("body").addEventListener("mousemove",that.runDrag,true);document.getElementById("body").addEventListener("mouseup",that.stopDrag,true);dragging=true;};that.figureDragValues=function(){dragthreshup=-10;if(dragidx>0){dragthreshup=reqs[dragidx-1].desty+Math.round(reqs[dragidx-1].height/2);}
dragthreshdown=elheight+100;if(dragidx<reqs.length-1){dragthreshdown=reqs[dragidx+1].desty+Math.round(reqs[dragidx+1].height/3);}};that.runDrag=function(e){var mousey=getMousePosY(e)-elposition-dragmouseoffset;if(mousey>maxy)mousey=maxy;if(mousey<0)mousey=0;reqs[dragidx].fx_posY.set(mousey);if(mousey<dragthreshup){var r=reqs.splice(dragidx-1,2);reqs.splice(dragidx-1,0,r[1],r[0]);dragidx--;that.positionReqs(true);that.figureDragValues();}
else if((mousey+reqs[dragidx].height)>dragthreshdown){var r=reqs.splice(dragidx,2);reqs.splice(dragidx,0,r[1],r[0]);dragidx++;that.positionReqs(true);that.figureDragValues();}};that.stopDrag=function(e,hardstop){if(!dragging)return;document.getElementById("body").removeEventListener("mousemove",that.runDrag,true);document.getElementById("body").removeEventListener("mouseup",that.stopDrag,true);dragging=false;dragel=false;draggingid=-1;dragidx=-1;var params="";if(hardstop)return;reqs.sort(that.sortRequestArray);that.positionReqs();if(origdragidx==dragidx)return;for(var i=0;i<reqs.length;i++){if(i>0)params+=",";params+=reqs[i].p.requestq_id;}
lyre.async_get("requests_reorder",{"order":params});};that.sortRequestArray=function(a,b){if(a.p.requestq_order<b.p.requestq_order)return-1;else if(a.p.requestq_order>b.p.requestq_order)return 1;if(a.p.requestq_id<b.p.requestq_id)return-1;else if(a.p.requestq_id>b.p.requestq_id)return 1;return 0;};return that;};var Request={linkify:function(song_id,el){el.style.cursor="pointer";el.addEventListener('click',function(){if(user.p.radio_tunedin)lyre.async_get("request",{"song_id":song_id});else errorcontrol.doError(3002);},true);},linkifyDelete:function(requestq_id,el){el.style.cursor="pointer";el.addEventListener('click',function(e){hotkey.stopBubbling(e);lyre.async_get("request_delete",{"requestq_id":requestq_id});},true);},make:function(json){var that={};that.el=document.createElement("div");that.song_title=document.createElement("div");that.song_title.setAttribute("class","request_song_title");that.xbutton=document.createElement("span");that.xbutton.textContent="⨯";that.xbutton.setAttribute("class","request_xbutton");Request.linkifyDelete(json.requestq_id,that.xbutton);that.song_title.appendChild(that.xbutton);that.song_title_text=document.createElement("span");that.song_title_text.setAttribute("class","request_song_title_text");that.song_title_text.textContent=json.song_title;Song.linkify(json.song_id,that.song_title_text);that.song_title.appendChild(that.song_title_text);that.el.appendChild(that.song_title);that.album_name=document.createElement("div");that.album_name.setAttribute("class","request_album_name");that.album_name_text=document.createElement("span");that.album_name_text.textContent=json.album_name;that.album_name.appendChild(that.album_name_text);Album.linkify(json.album_id,that.album_name_text);that.album_name.addEventListener("mousedown",hotkey.stopBubbling,true);that.el.appendChild(that.album_name);that.update=function(json){that.p=json;if(json.sid!=user.p.sid){that.el.setAttribute("class","request request_"+json.song_available+" request_station_"+json.sid);}
else{that.el.setAttribute("class","request request_"+json.song_available);}
if((json.song_available==false)&&(!that.cooldown)){that.cooldown=document.createElement("div");that.cooldown.setAttribute("class","request_cooldown");that.cooldown.textContent=_l("oncooldownfor",{"cooldown":formatHumanTime(json.song_releasetime-clock.now,true,true)});that.el.appendChild(that.cooldown);}
else if(json.song_available==false){that.cooldown.textContent=_l("oncooldownfor",{"cooldown":formatHumanTime(json.song_releasetime-clock.now,true,true)});}
else if(that.cooldown){that.el.removeChild(that.cooldown);delete(that.cooldown);}
if(json.album_electionblock&&!that.blocked){that.blocked=createEl("div",{"class":"request_cooldown","textContent":_l("reqalbumblocked")},that.el);}
else if(json.album_electionblock&&that.blocked){that.blocked.textContent=_l("reqalbumblocked");}
else if(json.group_electionblock&&!that.blocked){that.blocked=createEl("div",{"class":"request_cooldown","textContent":_l("reqgroupblocked")},that.el);}
else if(json.group_electionblock&&that.blocked){that.blocked.textContent=_l("reqgroupblocked");}
else if(that.blocked){that.el.removeChild(that.blocked);delete(that.blocked);}
if(that.height)that.height=that.el.offsetHeight;};that.update(json);return that;},sortRequests:function(a,b){return 1;}}
panels.TimelinePanel={ytype:"fit",height:UISCALE*40,minheight:UISCALE*40,xtype:"fit",width:UISCALE*40,minwidth:UISCALE*35,maxwidth:600,title:_l("p_TimelinePanel"),cname:"timeline",constructor:function(container){var that={};that.container=container;that.allevents=[];that.nextevents=[];that.currentevents=[];that.lastevents=[];that.new_ux_sched_id=0;var hidingx=0;theme.Extend.TimelinePanel(that);that.init=function(){container.style.overflow="hidden";that.height=container.offsetHeight;that.width=container.offsetWidth;that.currentendtime=0;that.draw();lyre.addCallback(that.purgeEvents,"sched_presync");lyre.addCallback(that.currentHandle,"sched_current");lyre.addCallback(that.nextHandle,"sched_next");lyre.addCallback(that.historyHandle,"sched_history");lyre.addCallback(that.positionEvents,"sched_sync");lyre.addCallback(that.voteResultHandle,"vote_result");user.addCallback(that.activityAllowedChange,"current_activity_allowed");help.addStep("clickonsongtovote",{"h":"clickonsongtovote","p":"clickonsongtovote_p","modx":(UISCALE*2)});help.addStep("donevoting",{"h":"donevoting","p":"donevoting_p"});help.addTutorial("voting",["tunein","clickonsongtovote"]);help.addTopic("voting",{"h":"voting","p":"voting_p","tutorial":"voting"});};that.onHeightResize=function(height){that.height=height;};that.onWidthResize=function(width){that.width=width;};that.purgeEvents=function(json){var i=0;while(i<that.allevents.length){if(that.allevents[i].purge==true){that.allevents[i].purgeElements();container.removeChild(that.allevents[i].el);that.allevents.splice(i,1);}
else{i++;}}};that.setPurgeFlags=function(albums){var foundidx,i,j;for(i=0;i<albums.length;i++){for(j=0;j<that.currentevents.length;j++){if(that.currentevents[j].p.sched_id==albums[i].p.sched_id)foundidx=true;}
if(!foundidx)albums[i].purge=true;}}
that.updateEventData=function(json){var i,j,foundidx,added;var catarray=[];for(i=0;i<json.length;i++){foundidx=-1;for(j=0;j<that.allevents.length;j++){if(that.allevents[j].p.sched_id==json[i].sched_id)foundidx=j;}
if(foundidx==-1){added=that.addEvent(json[i]);if(added){added.purge=false;catarray.push(added);that.allevents.push(added);}}
else{that.allevents[foundidx].update(json[i]);that.allevents[foundidx].purge=false;catarray.push(that.allevents[foundidx]);}}
return catarray;};that.historyHandle=function(json){if(json){that.setPurgeFlags(that.lastevents);that.lastevents=that.updateEventData(json);}
for(var i=0;i<that.lastevents.length;i++){if(i==0)that.lastevents[i].showHeader();else that.lastevents[i].hideHeader();that.lastevents[i].disableVoting();that.lastevents[i].clockRemove();if(user.p.current_activity_allowed&&that.lastevents[i].p.user_wastunedin){that.lastevents[i].enableRating();}
else{that.lastevents[i].disableRating();}
that.lastevents[i].showSongLengths();that.lastevents[i].showWinner();that.lastevents[i].recalculateHeight();that.lastevents[i].changeHeadline(_l("previouslyplayed"));that.lastevents[i].height-=4;}};that.currentHandle=function(json){if(json){that.setPurgeFlags(that.currentevents);that.currentevents=that.updateEventData([json]);that.currentendtime=json.sched_endtime;}
for(var i=0;i<that.currentevents.length;i++){if(user.p.current_activity_allowed){that.currentevents[i].enableRating();}
else{that.currentevents[i].disableRating();}
that.currentevents[i].clockRemove();that.currentevents[i].disableVoting();that.currentevents[i].showVotes();that.currentevents[i].sortSongOrder();that.currentevents[i].changeHeadline(_l("nowplaying"));that.currentevents[i].updateIndicator();}};that.nextHandle=function(json){if(json){that.setPurgeFlags(that.nextevents);that.nextevents=that.updateEventData(json);}
var crossedelec=false;for(var i=0;i<that.nextevents.length;i++){that.nextevents[i].disableRating();if(user.p.current_activity_allowed&&((i==0)||user.p.radio_perks)){that.nextevents[i].enableVoting();}
else{that.nextevents[i].disableVoting();}
if(!crossedelec&&that.nextevents[i].p.sched_type==SCHED_ELEC){crossedelec=true;if(that.nextevents[i].updateVotingHelp)that.nextevents[i].updateVotingHelp();}}};that.voteResultHandle=function(json){if((json.code<=0)&&("elec_entry_id"in json)){for(var i=0;i<that.allevents.length;i++){that.allevents[i].registerFailedVote(json.elec_entry_id);}}
else if(json.code==1){for(var i=0;i<that.allevents.length;i++){if(that.allevents[i].registerVote(json.elec_entry_id)){that.allevents[i].disableVoting();}}}};that.activityAllowedChange=function(allowed){that.historyHandle();that.currentHandle();that.nextHandle();};that.addEvent=function(json){var newobj=false;if(json.sched_type==SCHED_ELEC)newobj=TimelineElection(json,container,that);else if(json.sched_type==SCHED_LIVE)newobj=TimelineLiveShow(json,container,that);else if(json.sched_type==SCHED_ADSET)newobj=TimelineAdSet(json,container,that);else if(json.sched_type==SCHED_PLAYLIST)newobj=TimelinePlaylist(json,container,that);else if(json.sched_type==SCHED_ONESHOT)newobj=TimelineOneShot(json,container,that);if(newobj){newobj.init();newobj.el.style.position="absolute";container.appendChild(newobj.el);}
return newobj;};that.positionEvents=function(){var i;if(!that.showelec&&!that.showhistory&&!that.showallnext){that.positionOneEvent();hidingx=true;}
else{if(hidingx){for(i=0;i<that.allevents.length;i++){that.allevents[i].moveXTo(0);}}
hidingx=false;that.positionEventsLinear();}};that.afterHeightResize=that.positionEvents;that.positionOneEvent=function(){if(hidingx===false){that.currentevents[0].moveTo(0);that.nextevents[0].moveTo(0);for(i=1;i<that.nextevents.length;i++){that.nextevents[i].moveTo(-that.nextevents[i].height-5);}
for(i=0;i<that.lastevents.length;i++){that.lastevents[i].moveTo(that.height);}}
else{that.currentevents[0].setY(0);that.nextevents[0].setY(0);if(that.new_ux_sched_id!=that.currentevents[0].p.sched_id){that.nextevents[0].hideX();}}
that.new_ux_sched_id==that.currentevents[0].p.sched_id;that.currentevents[0].moveXTo(that.container.offsetWidth);that.currentevents[0].changeOpacity(0);that.nextevents[0].moveXTo(0);};that.positionEventsLinear=function(){var i,moveto;for(i=0;i<that.allevents.length;i++){that.allevents[i].timep_showing=false;if(that.allevents[i].purge){that.allevents[i]._move_to_y=that.height;that.allevents[i].remove();}}
var ybudget=that.height;var ybudgetused=0;var crossedelec=false;var ymargin=5;i=0;while(!crossedelec&&(i<that.nextevents.length)&&((that.nextevents[i].height+ybudgetused+ymargin)<=ybudget)){that.nextevents[i].timep_showing=true;ybudgetused+=that.nextevents[i].height+ymargin;if(that.nextevents[i].p.sched_type==SCHED_ELEC){crossedelec=true;}
i++;}
var j=0;if(that.showhistory&&that.lastevents[0]&&((that.lastevents[0].height+ybudgetused+ymargin)<=ybudget)){j=1;ybudgetused+=that.lastevents[0].height+ymargin;that.lastevents[0].timep_showing=true;}
if(that.showelec&&that.currentevents[0]&&((that.currentevents[0].height+ybudgetused+ymargin)<=ybudget)){ybudgetused+=that.currentevents[0].height+ymargin;that.currentevents[0].timep_showing=true;that.currentevents[0].emphasizeWinner();that.currentevents[0].changeOpacity(1);}
crossedelec=false;while(that.showallnext&&!crossedelec&&(i<that.nextevents.length)&&((that.nextevents[i].height+ybudgetused+ymargin)<=ybudget)){that.nextevents[i].timep_showing=true;ybudgetused+=that.nextevents[i].height+ymargin;if(that.nextevents[i].p.sched_type==SCHED_ELEC)crossedelec=true;i++;}
while(that.showhistory&&(j<that.lastevents.length)&&((that.lastevents[j].height+ybudgetused+ymargin)<=ybudget)){that.lastevents[j].timep_showing=true;ybudgetused+=that.lastevents[j].height+ymargin;j++;}
while(that.showallnext&&(i<that.nextevents.length)&&((that.nextevents[i].height+ybudgetused+ymargin)<=ybudget)){that.nextevents[i].timep_showing=true;ybudgetused+=that.nextevents[i].height+ymargin;i++;}
var runz=0;var runy=0;var runningsched=that.currentendtime;for(i=0;i<that.nextevents.length;i++){that.nextevents[i].clockChange(runningsched);runningsched+=that.nextevents[i].getScheduledLength();}
for(i=that.nextevents.length-1;i>=0;i--){if(that.nextevents[i].timep_showing){that.nextevents[i].changeZ(runz);that.nextevents[i]._move_to_y=runy;runy+=that.nextevents[i].height+ymargin;runz++;}
else{that.nextevents[i]._move_to_y=-that.nextevents[i].height-5;}}
if(that.currentevents[0]&&that.currentevents[0].timep_showing){that.currentevents[0].changeZ(runz);that.currentevents[0]._move_to_y=runy;runy+=that.currentevents[0].height+ymargin;runz++;}
if(that.currentevents[0]&&!that.currentevents[0].timep_showing){that.currentevents[0]._move_to_y=-that.currentevents[0].height-5;}
var runopacity=.75;for(i=0;i<that.lastevents.length;i++){if(that.lastevents[i].timep_showing){that.lastevents[i].changeZ(runz);that.lastevents[i]._move_to_y=runy;that.lastevents[i].changeOpacity(runopacity);runy+=that.lastevents[i].height+ymargin;runz++;runopacity-=.07;}
else{that.lastevents[i]._move_to_y=that.height+5;}}
for(i=0;i<that.allevents.length;i++){that.allevents[i].moveTo(that.allevents[i]._move_to_y);}};that.p_showelec=function(showelec){if(SIDEBAR)showelec=true;that.showelec=showelec;if(that.allevents.length>0)that.positionEvents();};that.p_showhistory=function(showhistory){if(SIDEBAR)showhistory=true;that.showhistory=showhistory;if(that.allevents.length>0)that.positionEvents();};that.p_showallnext=function(showallnext){that.showallnext=showallnext;if(that.allevents.length>0)that.positionEvents();};prefs.addPref("timeline",{name:"showallnext",defaultvalue:false,callback:that.p_showallnext,type:"checkbox"});prefs.addPref("timeline",{name:"showelec",defaultvalue:false,callback:that.p_showelec,type:"checkbox"});prefs.addPref("timeline",{name:"showhistory",defaultvalue:false,callback:that.p_showhistory,type:"checkbox"});prefs.addPref("timeline",{"name":"highlightrequests","defaultvalue":true,"type":"checkbox"});return that;}};function TimelineSkeleton(json,container,parent){var that={};that.purge=false;that.el=false;that.p=json;that.clockdisplay=false;that.clockid=false;that.container=container;that.parent=parent;that.height=0;that.timeleft=0;theme.Extend.TimelineSkeleton(that);that.init=function(){that.draw();that.container.appendChild(that.el);that.clockdisplay=true;that.clockid=-1;if(that.p.sched_used==0){that.clockid=clock.addClock(that.el,that.clockUpdate,that.p.sched_starttime,-2);}
that.recalculateHeight();};that.update=function(newjson){that.p=newjson;};that.purgeElements=function(){};that.clockRemove=function(){if(that.clockdisplay){that.clockdisplay=false;that.clockUndraw();}};that.clockChange=function(newend){clock.updateClockEnd(that.clockid,newend);};that.clockUpdate=function(time){that.timeleft=time;if((that.clockdisplay)&&(time>=0))that.clock.textContent=formatNumberToMSS(time);};that.updateIndicator=function(){if(that.p.song_data&&(typeof(that.p.song_data[0].elec_isrequest)!="undefined")){if(that.p.song_data[0].elec_isrequest>ELECSONGTYPES.normal)that.changeIndicator("request");else if(that.p.song_data[0].elec_isrequest<ELECSONGTYPES.normal)that.changeIndicator("conflict");else that.changeIndicator("normal");}
else{that.changeIndicator("normal");}};that.getScheduleLength=function(){return 0;}
that.remove=function(){};that.showWinner=function(){};that.showVotes=function(){};that.showSongLengths=function(){};that.enableVoting=function(){};that.disableVoting=function(){};that.cancelVoting=function(){};that.updateVotingHelp=function(){};that.enableRating=function(){};that.disableRating=function(){};that.registerVote=function(){};that.registerFailedVote=function(){};return that;};function TimelineElection(json,container,parent){var that=TimelineSkeleton(json,container,parent);that.songs=new Array();that.showingwinner=false;that.votingdisabled=true;that.voted=false;theme.Extend.TimelineSkeleton(json,container,parent);theme.Extend.TimelineElection(that);that.init=function(){that.draw();that.container.appendChild(that.el);for(var sn=0;sn<json.song_data.length;sn++){that.songs[sn]=TimelineSong(json.song_data[sn],that,0,UISCALE+(sn*theme.TimelineSong_height),sn);}
that.clockdisplay=true;that.clockid=-1;if(that.p.sched_used==0){that.clockid=clock.addClock(that.el,that.clockUpdate,that.p.sched_starttime,-2);}
that.recalculateHeight();};that.update=function(newjson){if((that.p.sched_used==0)&&(newjson.sched_used==2)){for(var j=0;j<that.songs.length;j++){that.songs[j].songnum=10;}
for(var i=0;i<newjson.song_data.length;i++){for(var j=0;j<that.songs.length;j++){if(that.songs[j].p.song_id==newjson.song_data[i].song_id){that.songs[j].songnum=newjson.song_data[i].elec_position;that.songs[j].updateJSON(newjson.song_data[i]);}}}
that.songs.sort(that.sortSongs);}
that.p=newjson;};that.enableRating=function(){that.songs[0].enableRating();};that.disableRating=function(){that.songs[0].disableRating();};that.showWinner=function(){if(that.showingwinner)return;that.showingwinner=true;that.drawShowWinner();};that.sortSongs=function(a,b){if(a.songnum<b.songnum)return-1;else if(a.songnum>b.songnum)return 1;else return 0;};that.showVotes=function(){for(var i=0;i<that.songs.length;i++){that.songs[i].showVotes();}
that.drawAsCurrent();};that.showSongLengths=function(){for(var i=0;i<that.songs.length;i++){that.songs[i].showSongLength();}};that.enableVoting=function(){if(!that.votingdisabled||that.voted)return;that.votingdisabled=false;for(var i=0;i<that.songs.length;i++){that.songs[i].enableVoting();}};that.disableVoting=function(override){if(that.votingdisabled)return;that.votingdisabled=true;that.cancelVoting();for(var i=0;i<that.songs.length;i++){that.songs[i].disableVoting();}};that.cancelVoting=function(){for(var i=0;i<that.songs.length;i++){that.songs[i].voteCancel();}};that.registerFailedVote=function(elec_entry_id){for(var i=0;i<that.songs.length;i++){if(that.songs[i].p.elec_entry_id==elec_entry_id){that.songs[i].registerFailedVote();that.changeHeadline(_l("votefaileleclocked"));}}};that.registerVote=function(elec_entry_id){for(var i=0;i<that.songs.length;i++){if(that.songs[i].p.elec_entry_id==elec_entry_id){that.songs[i].registerVote();that.voted=true;help.continueTutorialIfRunning("clickonsongtovote");break;}}
return that.voted;};that.updateVotingHelp=function(){var spe=[];for(var i=0;i<that.songs.length;i++){spe.push(that.songs[i].song_title);}
help.changeStepPointEl("clickonsongtovote",spe);help.changeTopicPointEl("voting",spe);};that.getScheduledLength=function(){var avg=0;for(var i=0;i<that.songs.length;i++){avg+=that.songs[i].p.song_secondslong;}
return Math.round(avg/that.songs.length);};return that;};function TimelineAdSet(json,container,parent){var that=TimelineSkeleton(json,container,parent);theme.Extend.TimelineAdSet(that);that.getScheduledLength=function(){var total=0;for(var i=that.p.adset_position;i<that.p.ad_data.length;i++){total+=that.p.ad_data[i].ad_secondslong;}
return total;};return that;}
function TimelineLiveShow(json,container,parent){var that=TimelineSkeleton(json,container,parent);theme.Extend.TimelineLiveShow(that);that.getScheduledLength=function(){return that.p.sched_length;}
return that;};function TimelinePlaylist(json,container,parent){var that=TimelineSkeleton(json,container,parent);that.songs=new Array();theme.Extend.TimelinePlaylist(that);that.init=function(){that.draw();that.container.appendChild(that.el);for(var sn=0;sn<json.song_data.length;sn++){that.songs[sn]=TimelineSong(json.song_data[sn],that,0,UISCALE+(sn*theme.TimelineSong_height),sn);that.el.appendChild(that.songs[sn].el);}
that.clockdisplay=true;that.clockid=-1;if(that.p.sched_used==0){that.clockid=clock.addClock(that.el,that.clockUpdate,that.p.sched_starttime,-2);}
that.recalculateHeight();};that.remove=function(){};that.getScheduledLength=function(){var total=0;for(var i=0;i<that.p.song_data.length;i++){total+=that.p.song_data[i].song_secondslong;}
return total;};return that;};function TimelineOneShot(json,container,parent){var that=TimelineSkeleton(json,container,parent);that.p=json;theme.Extend.TimelineOneShot(that);that.init=function(){that.draw();that.container.appendChild(that.el);that.song=TimelineSong(json.song_data[0],that,0,UISCALE+2,0);that.songs=[that.song];that.clockdisplay=true;that.clockid=-1;if(that.p.sched_used==0){that.clockid=clock.addClock(that.el,that.clockUpdate,that.p.sched_starttime,-2);}
that.recalculateHeight();};that.enableRating=function(){that.song.enableRating();};that.disableRating=function(){that.song.disableRating();};that.remove=function(){};that.deleteOneShot=function(){if(that.p.user_id==user.p.user_id){lyre.async_get("oneshot_delete",{"sched_id":that.p.sched_id});}};that.getScheduledLength=function(){return that.p.song_data[0].song_secondslong;};that.showWinner=function(){if(that.showingwinner)return;that.showingwinner=true;that.drawShowWinner();};return that;};function TimelineSong(json,parent,x,y,songnum){var that={};that.p=json;that.elec_votes=0;that.songnum=songnum;that.voteinprogress=false;that.votesubmitted=false;that.votehighlighted=false;that.parent=parent;theme.Extend.TimelineSong(that);that.draw();Album.linkify(json.album_id,that.album_name);if(that.vote_hover_el){that.vote_hover_el.addEventListener('mouseover',that.showRequestor,true);that.vote_hover_el.addEventListener('mouseout',that.hideRequestor,true);}
that.updateJSON=function(json){that.p=json;that.song_rating.updateSiteRating(that.p.song_rating_avg);that.album_rating.updateSiteRating(that.p.album_rating_avg);};that.enableVoting=function(){that.vote_hover_el.addEventListener('mouseover',that.voteHoverOn,true);that.vote_hover_el.addEventListener('mouseout',that.voteHoverOff,true);that.vote_hover_el.addEventListener('click',that.voteAction,true);that.vote_hover_el.style.cursor="pointer";};that.disableVoting=function(){that.vote_hover_el.removeEventListener('mouseover',that.voteHoverOn,true);that.vote_hover_el.removeEventListener('mouseout',that.voteHoverOff,true);that.vote_hover_el.removeEventListener('click',that.voteAction,true);that.vote_hover_el.style.cursor="default";if(!that.votehighlighted)that.voteHoverOff();};that.voteAction=function(){if(that.voteinprogress){that.voteSubmit();return;}
that.parent.cancelVoting();if(parent.timeleft>=15){that.voteinprogress=true;that.startVoting();}
else{that.voteinprogress=true;that.voteSubmit();}};that.voteCancel=function(){if(that.voteinprogress&&!that.votesubmitted){that.voteinprogress=false;that.voteProgressStop();that.voteProgressReset();}};that.voteSubmit=function(){if(that.votesubmitted)return;that.votesubmitted=true;that.voteProgressStop();that.voteProgressComplete();that.parent.disableVoting();that.parent.changeHeadline(_l("submittingvote"));lyre.async_get("vote",{"elec_entry_id":that.p.elec_entry_id});};that.registerFailedVote=function(){that.voteinprogress=false;that.votesubmitted=false;that.votehighlighted=false;that.voteHoverReset();that.voteHoverOff();};that.registerVote=function(){that.voteinprogress=true;that.votesubmitted=true;that.votehighlighted=true;that.voteProgressComplete();that.registerVoteDraw();that.parent.changeHeadline(_l("voted"));};that.enableRating=function(){that.song_rating.enable();that.album_rating.enable();};that.disableRating=function(){that.song_rating.disable();that.album_rating.disable();};that.getScheduledLength=function(){return that.p.song_secondslong;};return that;};
prefs.addPref("playlist",{"name":"sortfavfirst","defaultvalue":false,"type":"checkbox"});prefs.addPref("playlist",{"name":"sortreadyfirst","defaultvalue":true,"type":"checkbox"});prefs.addPref("playlist",{"name":"sortalbums","defaultvalue":"album_name","type":"dropdown","options":[{"value":"_searchname","option":_l("pref_playlist_v_albumname")},{"value":"album_rating_user","option":_l("pref_playlist_v_rating")},{"value":"album_lowest_oa","option":_l("pref_playlist_v_cooldown")},{"value":"album_rating_avg","option":_l("pref_playlist_v_globalrating")}]});prefs.addPref("playlist",{"name":"opened","defaultvalue":false,"hidden":true});panels.PlaylistPanel={ytype:"fit",height:300,minheight:300,xtype:"fit",width:300,minwidth:300,title:_l("p_PlaylistPanel"),cname:"playlist",constructor:function(container){var albums={};var that={};var view;var albumlistc;var albumlist;var artistlistc;var artistlist;that.container=container;that.open_album=0;theme.Extend.PlaylistPanel(that);that.initAlbumView=function(self){initpiggyback['playlist']="true";lyre.sync_extra['playlist_album_diff']="true";if(lyre.sync_time>0){lyre.async_get("all_albums");}};that.initArtistView=function(self){initpiggyback['artist_list']="true";if(lyre.sync_time>0){lyre.async_get("artist_list");}};that.getCurrentTab=function(){return false;};that.init=function(){view=SplitWindow("playlist",container);albumlistc=view.addTab("albums",_l("pltab_albums"),that.initAlbumView);artistlistc=view.addTab("artists",_l("pltab_artists"),that.initArtistView);view.initTabs();that.getCurrentTab=view.getCurrentTab;albumlist=AlbumSearchTable(that,albumlistc,view);prefs.addPrefCallback("playlist","sortfavfirst",albumlist.reinsertAll,albumlist);prefs.addPrefCallback("playlist","sortreadyfirst",albumlist.reinsertAll,albumlist);prefs.addPrefCallback("playlist","sortalbums",albumlist.reinsertAll,albumlist);artistlist=ArtistSearchTable(that,artistlistc,view);lyre.addCallback(that.drawAlbumCallback,"playlist_album");lyre.addCallback(that.drawArtistCallback,"artist_detail");that.onHeightResize(container.offsetHeight);help.addStep("openanalbum",{"h":"openanalbum","p":"openanalbum_p","skipf":function(){view.isAnyDivOpen("album");}});help.addStep("playlistsearch_v2",{"h":"playlistsearch_v2","p":"playlistsearch_v2_p","mody":5,"modx":5});help.addTutorial("playlistsearch_v2",["playlistsearch_v2"]);};that.onHeightResize=function(height){view.setHeight(height);};that.openLink=function(type,id){if(type=="album"){that.openAlbum(id);}
if(type=="artist"){that.openArtist(id);}};that.isAlbumOpen=function(){edi.openPanelLink(false,"playlist");return view.isAnyDivOpen();};that.drawAlbumCallback=function(json){var wdow=view.createOpenDiv("album",json.album_id);json.song_data.sort(that.sortSongList);that.drawAlbum(wdow,json);albumlist.navToID(json.album_id);if(typeof(wdow.updateHelp)=="function")wdow.updateHelp();help.continueTutorialIfRunning("openanalbum");return true;};that.drawArtistCallback=function(json){var wdow=view.createOpenDiv("artist",json.album_id);that.drawArtist(wdow,json);artistlist.navToID(json.artist_id);if(typeof(wdow.updateHelp)=="function")wdow.updateHelp();return true;};that.sortSongList=function(a,b){if(a.song_available!=b.song_available){if(a.song_available==true)return-1;else return 1;}
else if(a.song_title.toLowerCase()<b.song_title.toLowerCase())return-1;else if(a.song_title.toLowerCase()>b.song_title.toLowerCase())return 1;else return 0;};that.openAlbum=function(album_id){view.switchToTab("albums");if(view.checkOpenDivs("album",album_id)){albumlist.navToID(album_id);return;}
lyre.async_get("album",{"album_id":album_id});};that.openArtist=function(artist_id){view.switchToTab("artists");if(view.checkOpenDivs("artist",artist_id)){artistlist.navToID(artist_id);return;}
lyre.async_get("artist_detail",{"artist_id":artist_id});};return that;}};var AlbumSearchTable=function(parent,container,view){var that=SearchTable(container,"album_id","pl_albumlist");that.changeSearchKey("album_name");that.changeSortKey("_searchname");var initialized=false;that.afterUpdate=function(json,albums,sorted){if(!initialized){lyre.addCallback(that.ratingResult,"rate_result");lyre.addCallback(that.favResult,"fav_album_result");lyre.addCallback(that.update,"playlist_album_diff");initialized=true;}
for(i in albums){if(!albums[i].album_available){if((albums[i].album_lowest_oa-clock.now)<=0)albums[i].album_available=true;that.addToUpdated(albums[i].album_id);}}
var reopen;for(i in json){reopen=view.reOpenDiv("album",json[i].album_id);if(reopen){parent.openLink("album",json[i].album_id);}}
if(albums.length>0)help.changeStepPointEl("openanalbum",[albums[sorted[0]].td_name]);if(!prefs.getPref("playlist","opened")&&(help.getCurrentTutorial()!="request")&&(help.getCurrentTutorial()!="playlistsearch_v2")){help.changeStepPointEl("playlistsearch_v2",[view.getSearchHelpEl()]);prefs.changePref("playlist","opened",true);prefs.savePrefs();help.startTutorial("playlistsearch_v2");}};that.sortList=function(a,b){if(prefs.p.playlist.sortfavfirst.value&&(that.data[a].album_favourite!=that.data[b].album_favourite)){if(that.data[a].album_favourite)return-1;else return 1;}
if((prefs.p.playlist.sortreadyfirst.value||(prefs.p.playlist.sortalbums.value=="album_lowest_oa"))&&(that.data[a].album_available!=that.data[b].album_available)){if(that.data[a].album_available==true)return-1;else return 1;}
if((prefs.p.playlist.sortalbums.value=="album_rating_user")||(prefs.p.playlist.sortalbums.value=="album_rating_avg")){if(that.data[a][prefs.p.playlist.sortalbums.value]<that.data[b][prefs.p.playlist.sortalbums.value])return 1;if(that.data[a][prefs.p.playlist.sortalbums.value]>that.data[b][prefs.p.playlist.sortalbums.value])return-1;}
else if((prefs.p.playlist.sortalbums.value=="album_lowest_oa")&&(that.data[a].album_available==false)&&(that.data[b].album_available==false)){if(that.data[a][prefs.p.playlist.sortalbums.value]<that.data[b][prefs.p.playlist.sortalbums.value])return-1;if(that.data[a][prefs.p.playlist.sortalbums.value]>that.data[b][prefs.p.playlist.sortalbums.value])return 1;}
if(that.data[a]._searchname<that.data[b]._searchname)return-1;if(that.data[a]._searchname>that.data[b]._searchname)return 1;return 0;};that.ratingResult=function(result){if(result.album_id&&that.data[result.album_id]){that.data[result.album_id].album_rating_user=result.album_rating;that.drawRating(that.data[result.album_id]);}};that.favResult=function(result){if(result.album_id in that.data){that.data[result.album_id].td_fav.setAttribute("class","pl_fav_"+result.fav);that.data[result.album_id].album_favourite=result.fav;}};that.favSwitch=function(evt){if(evt.target.album_id){var setfav=that.data[evt.target.album_id].album_favourite?false:true;lyre.async_get("fav_album",{"fav":setfav,"album_id":evt.target.album_id});}};that.searchAction=function(id){Album.open(id);};that.drawEntry=function(album){album.tr._search_id=album.album_id;album.album_rating_user=album.album_rating_user;var ratingx=album.album_rating_user*10;album.td_name=document.createElement("td");album.td_name.setAttribute("class","pl_al_name");if(ratingx>0)album.td_name.style.backgroundPosition="100% "+(-193+ratingx)+"px";else album.td_name.style.backgroundPosition="100% -200px";album.td_name.textContent=album.album_name;album.tr.appendChild(album.td_name);album.tr.addEventListener('click',that.updateScrollOffsetByEvt,true);Album.linkify(album.album_id,album.td_name);album.td_rating=document.createElement("td");album.td_rating.setAttribute("class","pl_al_rating");album.tr.appendChild(album.td_rating);album.td_fav=document.createElement("td");album.td_fav.album_id=album.album_id;album.td_fav.addEventListener('click',that.favSwitch,true);album.td_fav.setAttribute("class","pl_fav_"+album.album_favourite);album.tr.appendChild(album.td_fav);};that.drawRating=function(album){if((album.album_lowest_oa-clock.now)>0){album.td_rating.textContent=formatHumanTime(album.album_lowest_oa-clock.now);}
else if("album_rating_user"in album){if(album.album_rating_user>0)album.td_rating.textContent=album.album_rating_user.toFixed(1);else album.td_rating.textContent="";}
if("album_rating_user"in album){var ratingx=album.album_rating_user*10;if(album.album_rating_user==0)ratingx=-200;album.td_name.style.backgroundPosition="100% "+(-193+ratingx)+"px";}};that.drawNavChange=function(album,highlight){var cl=album.album_available?"pl_available":"pl_cooldown";if(highlight)cl+=" pl_highlight";if(album.album_id==parent.open_album)cl+=" pl_albumopen";album.tr.setAttribute("class",cl);};that.drawUpdate=function(album){that.drawRating(album);that.drawNavChange(album,false);};that.searchEnabled=function(){if((parent.getCurrentTab()=='albums')&&parent.parent.mpi&&(parent.parent.focused=="PlaylistPanel"))return true;return false;};lyre.addCallback(that.update,"playlist_all_albums");return that;};var ArtistSearchTable=function(parent,container,view){var that=SearchTable(container,"artist_id","pl_albumlist");that.changeSearchKey("artist_name");that.changeSortKey("_searchname");that.searchAction=function(id){Artist.open(id);};that.drawEntry=function(artist){artist.tr.setAttribute("class","pl_available");var artist_td=createEl("td",{"textContent":artist.artist_name,"class":"pl_al_name"},artist.tr);artist_td.addEventListener('click',that.updateScrollOffsetByEvt,true);Artist.linkify(artist.artist_id,artist_td);createEl("td",{"textContent":artist.artist_numsongs,"class":"pl_al_rating"},artist.tr);};that.drawNavChange=function(artist,highlight){var cl="pl_available";if(highlight)cl+=" pl_highlight";artist.tr.setAttribute("class",cl);};that.drawUpdate=function(album){return;};that.searchEnabled=function(){if((parent.getCurrentTab()=='artists')&&parent.parent.mpi&&(parent.parent.focused=="PlaylistPanel"))return true;return false;};lyre.addCallback(that.update,"artist_list");return that;};
panels.PrefsPanel={ytype:"slack",height:UISCALE*2,minheight:UISCALE*2,xtype:"slack",width:UISCALE*20,minwidth:UISCALE*8,title:_l("p_PrefsPanel"),cname:"prefs",constructor:function(container){var stables={};var that={};var displaying={};that.container=container;container.style.overflow="auto";that.init=function(){var i,k;for(i in prefs.p){for(k in prefs.p[i]){if(prefs.p[i][k].type&&!displaying["pref_"+i+"_"+k])that.newPrefCallback(i,prefs.p[i][k]);}}};that.newPrefCallback=function(section,prefdata){if(prefdata.hidden)return;var tr=document.createElement("tr");var td=document.createElement("td");td.textContent=_l("pref_"+section+"_"+prefdata.name)+": ";td.setAttribute("class","pref_label");tr.appendChild(td);td=document.createElement("td");td.setAttribute("class","pref_option");displaying["pref_"+section+"_"+prefdata.name]=true;if(prefdata.type=="checkbox"){var cb=document.createElement("input");cb.setAttribute("type","checkbox");cb.setAttribute("name","pref_"+section+"_"+prefdata.name);if(prefdata.value)cb.checked=true;else cb.checked=false;cb.addEventListener("click",that.prefCheckboxChange,true);td.appendChild(cb);prefs.addPrefCallback(section,prefdata.name,function(v){cb.checked=v;});}
else if(prefdata.type=="dropdown"){var select=document.createElement("select");select.setAttribute("name","pref_"+section+"_"+prefdata.name);var opt;for(var i=0;i<prefdata.options.length;i++){opt=document.createElement("option");opt.setAttribute("value",prefdata.options[i].value);opt.textContent=prefdata.options[i].option;select.appendChild(opt);}
that.dropdownMatch(select,prefdata.value);prefs.addPrefCallback(section,prefdata.name,function(v){that.dropdownMatch(select,v);});select.addEventListener("change",that.prefDropdownChange,true);td.appendChild(select);}
else if(prefdata.type=="button"){var button=createEl("button",{"textContent":_l("pref_"+section+"_"+prefdata.name+"_button")},td);button.addEventListener("click",function(){prefs.changePref(section,prefdata.name,true);},true);}
tr.appendChild(td);if(prefdata.dsection){if(!stables[prefdata.dsection])that.newSectionCallback(prefdata.dsection);stables[prefdata.dsection].appendChild(tr);}
else{if(!stables[section])that.newSectionCallback(section);stables[section].appendChild(tr);}};that.dropdownMatch=function(select,value){if(!select)return;for(var i=0;i<select.options.length;i++){if(select.options[i].value==value)select.selectedIndex=i;}};that.prefCheckboxChange=function(e){if(!e.target)return;var data=e.target.getAttribute("name").split("_",3);prefs.changePref(data[1],data[2],e.target.checked);};that.prefDropdownChange=function(e){if(!e.target)return;var data=e.target.getAttribute("name").split("_",3);prefs.changePref(data[1],data[2],e.target[e.target.selectedIndex].value);};that.newSectionCallback=function(section){if(stables[section])return;var tbl=createEl("table",{"class":"pref_table"},container);var row=createEl("tr",false,tbl);createEl("th",{"textContent":_l("pref_"+section),"colspan":2},row);stables[section]=tbl;};prefs.addNewPrefCallback(that,that.newPrefCallback);prefs.addPref("edi",{name:"wipeall",defaultvalue:false,type:"button",refresh:true});return that;}}
panels.SchedulePanel={ytype:"slack",height:UISCALE*30,minheight:UISCALE*20,xtype:"slack",width:UISCALE*30,minwidth:UISCALE*20,title:_l("p_SchedulePanel"),cname:"schedule",constructor:function(container){var that={};that.container=container;var form_time;var form_name;var form_notes;var form_user_id;var form_djblock;var form_submit;var form_length;var schedule=document.createElement("table");schedule.setAttribute("class","schedule_table");var list=document.createElement("table");var listfs=document.createElement("fieldset");listfs.appendChild(list);var djfs=document.createElement("fieldset");djfs.style.display="none";var newfs=document.createElement("fieldset");newfs.style.display="none";var livetimer=createEl("div",{"class":"live_timehelper"});livetimer.style.display="none";var livetimerclock=false;var livetimernext=0;var livetimeractual=0;var goingonair=false;var postmixing=0;var djblock=false;var onair=false;that.init=function(){that.container.appendChild(livetimer);var l;l=document.createElement("legend");l.textContent=_l("djadmin");djfs.appendChild(l);var startbtn=createEl("button",{"textContent":_l("pausestation")});var endbtn=createEl("button",{"textContent":_l("endpause")});startbtn.addEventListener("click",that.startPause,true);endbtn.addEventListener("click",that.endPause,true);djfs.appendChild(startbtn);djfs.appendChild(endbtn);container.appendChild(djfs);that.djAdminChange(user.p.radio_live_admin);user.addCallback(that.djAdminChange,"radio_live_admin");container.appendChild(schedule);container.appendChild(listfs);l=document.createElement("legend");l.textContent=_l("newliveshow");newfs.appendChild(l);var tbl=document.createElement("table");tbl.setAttribute("class","pref_table");var row=document.createElement("tr");row.appendChild(createEl("td",{"textContent":_l("newliveexplanation"),"colspan":2}));tbl.appendChild(row);row=document.createElement("tr");row.appendChild(createEl("td",{"textContent":_l("time"),"style":"width: 18em;"}));var td=document.createElement("td");form_time=createEl("input",{"type":"text","value":"0"});td.appendChild(form_time);var nowbutton=createEl("input",{"type":"button","value":"Now"});nowbutton.addEventListener("click",function(){form_time.value=clock.now;},true);td.appendChild(nowbutton);row.appendChild(td);tbl.appendChild(row);row=document.createElement("tr");row.appendChild(createEl("td",{"textContent":_l("name")}));td=document.createElement("td");form_name=createEl("input",{"type":"text","value":""});td.appendChild(form_name);row.appendChild(td);tbl.appendChild(row);row=document.createElement("tr");row.appendChild(createEl("td",{"textContent":_l("notes")}));td=document.createElement("td");form_notes=createEl("input",{"type":"text","value":""});td.appendChild(form_notes);row.appendChild(td);tbl.appendChild(row);row=document.createElement("tr");row.appendChild(createEl("td",{"textContent":_l("lengthinseconds")}));td=document.createElement("td");form_length=createEl("input",{"type":"text"});td.appendChild(form_length);row.appendChild(td);tbl.appendChild(row);row=document.createElement("tr");row.appendChild(createEl("td",{"textContent":_l("user_id")}));td=document.createElement("td");form_user_id=createEl("input",{"type":"text","value":user.p.user_id});td.appendChild(form_user_id);row.appendChild(td);tbl.appendChild(row);row=document.createElement("tr");row.appendChild(createEl("td",{"textContent":_l("djblock")}));td=document.createElement("td");form_djblock=createEl("input",{"type":"checkbox"});td.appendChild(form_djblock);row.appendChild(td);tbl.appendChild(row);row=document.createElement("tr");row.appendChild(createEl("td",{"textContent":""}));td=document.createElement("td");form_submit=createEl("input",{"type":"submit",value:_l("addshow")});form_submit.addEventListener('click',that.submitNewShow,true);td.appendChild(form_submit);row.appendChild(td);tbl.appendChild(row);row=createEl("tr",{},tbl);td=createEl("td",{},row);var refresh_playlist=createEl("button",{"textContent":"Refresh Playlist"},td);refresh_playlist.addEventListener('click',function(){lyre.async_get("admin_playlist_refresh");},true);row.appendChild(createEl("td",{"textContent":""}));newfs.appendChild(tbl);container.appendChild(newfs);initpiggyback['live']="true";lyre.addCallback(that.listUpdate,"live_shows");if(lyre.sync_time>0){lyre.async_get("live_shows",{});}
lyre.addCallback(that.liveTimerResync,"sched_current");lyre.addCallback(that.liveStartResult,"event_start_result");lyre.addCallback(that.liveEndResult,"event_end_result");lyre.addCallback(that.liveDeleteResult,"event_delete_result");lyre.addCallback(that.liveNewResult,"event_add_result");};that.submitNewShow=function(){var typ=form_djblock.checked?SCHED_DJ:SCHED_LIVE;var fdt=0;if(form_time.value.match(/^\d+$/)){fdt=form_time.value;}
else if(form_time.value!=0){var dt=new Date(form_time.value);fdt=Math.floor(dt.getTime()/1000);}
lyre.async_get("event_add",{"time":fdt,"name":form_name.value,"notes":form_notes.value,"user_id":form_user_id.value,"type":typ,"length":form_length.value});};that.startPause=function(){lyre.async_get("event_add",{"time":0,"name":"Pause","notes":"","user_id":user.p.user_id,"type":SCHED_PAUSE,"length":0});};that.endPause=function(){lyre.async_get("event_delete",{"sched_id":0});};that.liveNewResult=function(json){if((json.code==1)&&(json.sched_type==SCHED_PAUSE)){goingonair=true;djblock=true;postmixing=0;}};that.liveStartResult=function(json){if(json.code==1){goingonair=true;djblock=false;postmixing=0;}};that.liveEndResult=function(json){if(json.code==1){goingonair=false;postmixing=2;onair=false;}};that.liveDeleteResult=function(json){if((json.code==1)&&(json.sched_id==0)){that.liveEndResult(json);}};that.listUpdate=function(json){listfs.removeChild(list);if(json.length==0){list=createEl("div",{"textContent":_l("noschedule")});listfs.appendChild(list);return;}
list=createEl("table",{"class":"schedule_table"});var row;var date;var del;var start;var end;var td;var minutes,minutese;for(var i=0;i<json.length;i++){row=document.createElement("tr");date=new Date(json[i].sched_starttime*1000);enddate=new Date((json[i].sched_starttime+json[i].sched_length)*1000);row.appendChild(createEl("td",{"textContent":STATIONS[json[i].sid]}));row.appendChild(createEl("td",{"textContent":date.toLocaleDateString()}));minutes=date.getMinutes();if(minutes<10)minutes="0"+minutes;minutese=enddate.getMinutes();if(minutese<10)minutese="0"+minutese;row.appendChild(createEl("td",{"textContent":date.getHours()+":"+minutes+" - "+enddate.getHours()+":"+minutese}));row.appendChild(createEl("td",{"textContent":json[i].sched_name}));row.appendChild(createEl("td",{"textContent":json[i].sched_notes}));row.appendChild(createEl("td",{"textContent":json[i].username}));td=document.createElement("td");if(user.p.radio_live_admin>=2){del=createEl("button",{"textContent":_l("delete")});del.sched_id=""+json[i].sched_id;del.addEventListener("click",function(){lyre.async_get("event_delete",{"sched_id":del.sched_id});},true);td.appendChild(del);}
if((json[i].user_id==user.p.user_id)&&(json[i].sched_type==SCHED_LIVE)){start=createEl("button",{"textContent":_l("start")});start.sched_id=""+json[i].sched_id;start.addEventListener("click",function(){lyre.async_get("event_start",{"sched_id":start.sched_id});},true);td.appendChild(start);end=createEl("button",{"textContent":_l("end")});end.sched_id=""+json[i].sched_id;end.addEventListener("click",function(){lyre.async_get("event_end",{"sched_id":end.sched_id});},true);td.appendChild(end);}
row.appendChild(td);list.appendChild(row);}
listfs.appendChild(list);};that.djAdminChange=function(newadmin){if(newadmin>0){djfs.style.display="block";that.showLiveTimer(true);}
else{djfs.style.display="none";that.showLiveTimer(false);}
if(newadmin>1)newfs.style.display="block";else newfs.style.display="none";};that.showLiveTimer=function(show){if(show){livetimer.style.display="block";if(!livetimerclock){livetimerclock=clock.addClock(livetimer,that.liveTimerUpdate,livetimernext,-8);}}
else{livetimer.style.display="hidden";}};that.liveTimerUpdate=function(ntime){var tc=ntime+" ";if(onair){if(ntime<0)tc+=_l("OVERTIME");else if(ntime<=5)tc+=_l("endnow");else if(ntime<=60)tc+=_l("wrapup");else tc+=_l("onair");}
else if(goingonair){if(ntime<=0)tc+=_l("onair");else if(ntime<=5)tc+=_l("connect");else if(ntime<=10)tc+=_l("mixingok");else if(ntime<=15)tc+=_l("getready");else tc+=_l("standby");}
else if(postmixing==1){var ago=clock.now-livetimeractual;if(ago<=5)tc+=_l("mixingok");else if(user.p.radio_live_admin==0)that.showLiveTimer(false);else postmixing=0;}
else{if(ntime<=0)tc+=_l("HOLD");else tc+=_l("dormant");}
livetimer.textContent=tc;};that.liveTimerResync=function(json){livetimernext=json['sched_endtime'];livetimeractual=json['sched_actualtime'];var update=false;if(json['user_id']==user.p.user_id){update=true;}
else if(user.p.radio_live_admin>0){update=true;}
if(((json['sched_type']==SCHED_ELEC)||(json['sched_type']==SCHED_LIVE))&&update){if((json['sched_type']==SCHED_LIVE)&&(json['user_id']==user.p.user_id)){onair=true;}
if(postmixing>0)postmixing--;if(livetimerclock)clock.updateClockEnd(livetimerclock,json['sched_endtime']);}};return that;}};
panels.ListenersPanel={ytype:"fit",height:300,minheight:300,xtype:"fit",width:300,minwidth:300,title:_l("p_ListenersPanel"),cname:"listeners",constructor:function(container){var clistc;var guest_counter;var total_counter;var that={};that.container=container;theme.Extend.ListenersPanel(that);that.initCListView=function(self){initpiggyback['listeners_current']="true";lyre.sync_extra['listeners_current']="true";if(lyre.sync_time>0){lyre.async_get("listeners_current");}};that.getCurrentTab=function(){return false;};that.init=function(){view=SplitWindow("listeners",container);clistc=view.addTab("clist",_l("ltab_listeners"),that.initCListView);view.initTabs();that.getCurrentTab=view.getCurrentTab;guest_counter=createEl("div",{"class":"clist_guest_count"},clistc);total_counter=createEl("div",{"class":"clist_total_count"},clistc);clist=ListenersSearchTable(that,clistc,view);lyre.addCallback(that.clistUpdate,"listeners_current");lyre.addCallback(that.drawListenerCallback,"listener_detail");that.onHeightResize(container.offsetHeight);};that.onHeightResize=function(height){view.setHeight(height);};that.openLink=function(type,id){if(type=="id"){that.openListener(id);}
if(type=="id_refresh"){that.openListener(id,true);}};that.clistUpdate=function(json){clist.update(json.users);_l("otherlisteners",{"guests":json.guests,"total":(json.guests+json.users.length)},guest_counter);_l("registeredlisteners",{"users":json.users.length},total_counter);};that.drawListenerCallback=function(json){var wdow=view.createOpenDiv("listener",json.user_id);that.drawListener(wdow,json);clist.navToID(json.user_id);if(typeof(wdow.updateHelp)=="function")wdow.updateHelp();return true;};that.openListener=function(user_id,force){if(!force&&(view.checkOpenDivs("listener",user_id))){clist.navToID(user_id);return;}
lyre.async_get("listener_detail",{"listener_uid":user_id});};return that;}};var ListenersSearchTable=function(parent,container,view){var that=SearchTable(container,"user_id","pl_albumlist");that.changeSearchKey("username");that.changeSortKey("radio_2wkvotes");that.changeReverseSort(true);that.syncdeletes=true;that.searchAction=function(id){Username.open(id);};that.drawEntry=function(clist){clist.name_td=createEl("td",{"textContent":clist.username,"class":"pl_al_name"},clist.tr);clist.name_td.addEventListener('click',that.updateScrollOffsetByEvt,true);clist.votes_td=createEl("td",{"textContent":clist.radio_2wkvotes,"class":"pl_al_number"},clist.tr);Username.linkify(clist.user_id,clist.name_td);};that.drawNavChange=function(artist,highlight){if(!artist)return;var cl="pl_available";if(highlight)cl+=" pl_highlight";artist.tr.setAttribute("class",cl);};that.drawUpdate=function(clist){clist.votes_td.textContent=clist.radio_2wkvotes;};that.searchEnabled=function(){if((parent.getCurrentTab()=='clist')&&parent.parent.mpi&&(parent.parent.focused=="ListenersPanel"))return true;return false;};return that;};
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return!a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();
