/*********** utils *****************/ function getClickCoordsWithinTarget(event,elem) { var coords = { x: 0, y: 0}; if(event.offsetX) // then we're in a non-DOM (pro'ly IE) browser { coords.x = event.offsetX; coords.y = event.offsetY; } else // we assume DOM modeled javascript { var CalculatedTotalOffsetLeft = 0; var CalculatedTotalOffsetTop = 0 ; while (elem.offsetParent) { CalculatedTotalOffsetLeft += elem.offsetLeft; CalculatedTotalOffsetTop += elem.offsetTop; elem = elem.offsetParent ; } coords.x = event.pageX - CalculatedTotalOffsetLeft; coords.y = event.pageY - CalculatedTotalOffsetTop; } if (isNaN(coords.x)) coords.x=0; if (isNaN(coords.y)) coords.y=0; return coords; } function setCookie(c_name,value,expiredays) { var exdate=new Date(); exdate.setDate(exdate.getDate()+expiredays); document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()); } function getCookie(c_name) { if (document.cookie.length>0) { c_start=document.cookie.indexOf(c_name + "="); if (c_start!=-1) { c_start=c_start + c_name.length+1; c_end=document.cookie.indexOf(";",c_start); if (c_end==-1) c_end=document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } return ""; } /*********** utils *****************/ /*********** patterns management ******/ var patternWSURL="http://advancedbmws.appspot.com/"; //var patternWSURL="http://1-1.latest.advancedbmws.appspot.com/"; var patternWSURLRand=Math.round(Math.random()*100); var patternAll=new Array(); var patternFav=new Array(); /* pattern visuals */ //total pattern in tab var patTabTotal=new Array(); var patTabMaxItems=20; var patTabPagePos=new Array(); patTabPagePos['lst']=0; patTabPagePos['pop']=0; patTabPagePos['sea']=0; var patternTabs=new Array(); patternTabs["def"]="patternsDefault"; patternTabs["fav"]="patternsFavorite"; patternTabs["lst"]="patternsLatest"; patternTabs["pop"]="patternsPopular"; patternTabs["sea"]="patternsSearch"; var patternTabsItemsAdd="Items"; var patternTabsControlsAdd="Controls"; function patternTabShow(tabName) { for(i in patternTabs) { tab=document.getElementById(patternTabs[i]); if (tab) { if (tabName==i) tab.style.display="block"; else tab.style.display="none"; } } // if (tabA=='lst') // patternTabUpdate(true,0); // patternSetTabPage(tabA,1); if (patTabPagePos[tabName]==0) //if first use patternSetTabPage(tabName,1); } //TODO:move to logic ? //TODO:save and remove old script - elementId function patternSetTabPage(tabName,page) { //TODO:przemyslec jeszcze raz caly flow zakladek... // if (page==patTabPagePos[tabName]) return; //if nothing to do and not search var sc = document.createElement('script'); patternClearTab(tabName); if (tabName=='lst') sc.src = patternWSURL+"getlst?funitem=patternAddToLst&funtotal=patSetTotalLst&page="+(page-1)+"&rand="+patternWSURLRand; // else if (tabName=='pop') // sc.src = patternWSURL+"getpop?funitem=patternAddToPop&funtotal=patSetTotalPop&page="+(page-1); else if (tabName=='sea') { document.getElementById("searchQ").focus(); if (patTabPagePos[tabName]==0) { patTabPagePos[tabName]=-1; //remember that not first time return;//if first search tab click use } // otherwise previous search sc.src = patternWSURL+"search?funitem=patternAddToSea&funtotal=patSetTotalSea&page="+(page-1)+"&searchQ="+patternSearchQ+"&rand="+patternWSURLRand; } patTabPagePos[tabName]=page; //remember current page showBusy(); document.body.appendChild(sc); } /* function patternTabPageNext(tabName) { patternSetTabPage(tabName,patTabPagePos[tabName]+1); } function patternTabPagePrev(tabName) { patternSetTabPage(tabName,patTabPagePos[tabName]-1); } */ var patternSearchQ=""; function patternSearch(query) { if (query) { patternSearchQ=query; patternSetTabPage('sea',1); } } //While search Input there is NO possible to do key actions - play/stop, tap and others function patternSearchInputKP(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble=true; try{ var code=e.charCode || e.keyCode; if (isNaN(code)) return event.returnValue=true; if (parseInt(code)==13) { patternSearch(document.getElementById('searchQ').value); return event.returnValue=false; } }catch(err) {} return event.returnValue=true; } function patternSearchNone() { s=document.createElement("span"); s.innerHTML="--- no results ---"; tabEl=document.getElementById(patternTabs['sea']+patternTabsItemsAdd); tabEl.appendChild(s); } //create tab page controls like: first << < 0 > >> last (< -1; << -5) var patternPCIDHeader="patternPC"; function patternCreatePageControls(tabName) { //if no controls = one page only cont=document.getElementById(patternTabs[tabName]+patternTabsControlsAdd); if (patTabTotal[tabName]<=patTabMaxItems) { cont.style.display="none"; return; } cont.style.display="block"; //remove old controls children=cont.childNodes; for (c=children.length-1;c>=0;c--) cont.removeChild(children[c]); //add separator sep=document.createElement("div"); sep.className="separator"; sep.innerHTML=" "; cont.appendChild(sep); //calculate pages totPages=Math.ceil(patTabTotal[tabName]/patTabMaxItems); currentPage=parseInt(patTabPagePos[tabName]); //first,-5,-1,0,+1,+5,last if (currentPage>=2) patternPageControlsAdd(cont,"1","1",patternPCIDHeader+tabName+"1",false); if (currentPage>=7) patternPageControlsAdd(cont,"<<",""+(currentPage-5),patternPCIDHeader+tabName+(currentPage-5),false); if (currentPage>=3) patternPageControlsAdd(cont,"<",""+(currentPage-1),patternPCIDHeader+tabName+(currentPage-1),false); patternPageControlsAdd(cont,""+currentPage,""+currentPage,patternPCIDHeader+tabName+(currentPage),true); if (currentPage<=totPages-2) patternPageControlsAdd(cont,">",""+(currentPage+1),patternPCIDHeader+tabName+(currentPage+1),false); if (currentPage<=totPages-6) patternPageControlsAdd(cont,">>",""+(currentPage+5),patternPCIDHeader+tabName+(currentPage+5),false); if (currentPage=0;c--) tabEl.removeChild(children[c]); } //TODO:move to logic ? function patternItemClick(e) { if (e && e.target) var elem=e.target; else var elem=event.srcElement; idAtt=elem.getAttribute("id"); if (idAtt.substr(10,2)=="Id") { pId=idAtt.substr(12); amSetAll(patternAll[pId][1]);//elem.title); patternShowDesc(pId); } return event.returnValue=false; } /* pattern visuals */ /* pattern logic */ //invoked on score info "add to favorites" function patternAddToFavoritesCurrent() { if (!patternFav[patternShowId]) { patternFavArr(patternShowId); patternAddToTabFav(patternShowId,patternAll[patternShowId][0],patternAll[patternShowId][1]); patternAddToFavCookie(patternShowId); } document.getElementById("addToFav").style.display="none"; } function patternAddToFavCookie(id) { favs=getCookie("abmfavs"); if (favs==null || favs=="null") favs=""; favSplit=favs.split(","); favIs=false; for (i=0;iwid-6) coords.x=wid-6; coords.x-=6; var volVal=100*coords.x/widM; var volMasterCheck=false; //on master not removing description //TODO: short it! switch(elem.getAttribute("id")) { case "volumeIdMaster": volMasterCheck=true; amSetVolume("master",volVal);break; case "volumeId0": amSetVolume("0",volVal);break; case "volumeId1": amSetVolume("1",volVal);break; case "volumeId2": amSetVolume("2",volVal);break; case "volumeId3": amSetVolume("3",volVal);break; case "volumeId4": amSetVolume("4",volVal);break; case "volumeId5": amSetVolume("5",volVal);break; case "volumeId6": amSetVolume("6",volVal);break; case "volumeId7": amSetVolume("7",volVal);break; } if (!volMasterCheck) //on master not removing description patternHideDesc(); strBP=" "+coords.x+"px 0px"; elem.style.backgroundPosition=strBP; } function increaseBPM(refreshDelay) //refreshDelay - added for i=bodyKP { patternHideDesc(); setBPM(amBPM-0+1,refreshDelay); } function decreaseBPM(refreshDelay) //refreshDelay - added for i=bodyKP { patternHideDesc(); setBPM(amBPM-0-1,refreshDelay); } function setBPM(value,refreshDelay) { patternHideDesc(); tapCancel(); value=value-0; if (valueamBPMMax) value=amBPMMax; amBPM=value; document.getElementById("bpmInput").value=amBPM; amRefresh(refreshDelay); } function setBPMString(tempo) { if (isNaN(parseInt(tempo)) || parseInt(tempo)+""!=tempo || tempo==amBPM) { document.getElementById("bpmInput").value=amBPM; return; } setBPM(parseInt(tempo)); } function setBPMInput() { var tempo=document.getElementById("bpmInput").value; setBPMString(tempo); } //While bpm Input there is still possible to do key actions - play/stop, tap and others function bpmInputKeyPressed(event) { try{ if (isNaN(event.keyCode)) return; if (parseInt(event.keyCode)==13) setBPMInput(); }catch(err) {} } function addInst(sNum) { patternHideDesc(); amAddInst(sNum); guiAddInst(sNum); } function removeInstEL(e) { noFocus(); patternHideDesc(); if (e && e.target) var elemId=e.target.getAttribute("id"); else var elemId=event.srcElement.getAttribute("id"); //removeInst var sc=document.getElementById("scoreContent"); var children= sc.childNodes; for (var i = 0; i < children.length; i++) { if (children[i].getAttribute("id")==elemId)//"instId"+index) { sc.removeChild(children[i]); amRemoveInst(i); break; } }; if (children.length==0) clearScore(); return event.returnValue=false; } function clearScore() { patternHideDesc(); clearSchema(); amStop(); } manualRhythmInfo="Enter rhythm (0-7 for instruments and P or '-' for pause)"; manualRhythmWarning="Only 0,1,2,3,4,5,6,7 and P,'-' characters are allowed"; function manualRhythm() { manSchema=null; newSchema=amSchema; while (newSchema!=manSchema) { if (manSchema==null) info=manualRhythmInfo; else info=manualRhythmWarning; manSchema=prompt(info,newSchema); if (!manSchema) return; manSchema=manSchema.toUpperCase(); //needed for while != rePattern=/[^01234567P\-]/gm; newSchema = manSchema.replace(rePattern, "").toUpperCase(); } amSchema=newSchema; patternHideDesc(); guiSetSchema(); amRefresh(); } saveRhythmInfo="If your pattern is ready enter your description and press OK to save it."; function saveRhythm() { if (amSchema=="") return; un=getCookie("abmusername"); if (un && un.length>2) saveRhythmDefault=un+": "+"rhythm pattern description"; else saveRhythmDefault="your name"+": "+"rhythm pattern description"; saveDesc=prompt(saveRhythmInfo,saveRhythmDefault); if (!saveDesc) return; while (saveDesc && saveDesc==saveRhythmDefault) saveDesc=prompt(saveRhythmInfo,saveRhythmDefault); if (!saveDesc) return; startC=saveDesc.indexOf(":"); if (startC!=-1 && startC>=3) { setCookie("abmusername",saveDesc.substr(0,startC),1000); } showBusy(); var sc = document.createElement('script'); sch=amVolume0+"*"+amVolume1+"*"+amVolume2+"*"+amVolume3+"*"+amVolume4+"*"+amVolume5+"*"+amVolume6+"*"+amVolume7+"*"+amBPM+"*"+amSchema; // sc.src = "http://advancedbmws.appspot.com/save?desc="+saveDesc+"&schema="+sch+"&funname=patternSaveOK"; sc.src = patternWSURL+"save?desc="+saveDesc+"&schema="+sch+"&funitem=patternSaveOK"; document.body.appendChild(sc); } function iconsSwitch() { var cd=document.getElementById("centerDiv"); if (cd.className=="") { cd.className="iconVer"; setCookie("abmicons","",0); } else { cd.className=""; setCookie("abmicons","nums",100); } } function iconsInit() { var iconsNum=getCookie("abmicons"); if (iconsNum!="") iconsSwitch(); } /************* Gui event handlers ************/ /*********** GUI - visual only ************/ function guiSetAll() { guiSetSchema(); guiSetBPM(amBPM); guiSetVolume("master",amVolumeMaster); guiSetVolume("0",amVolume0); guiSetVolume("1",amVolume1); guiSetVolume("2",amVolume2); guiSetVolume("3",amVolume3); guiSetVolume("4",amVolume4); guiSetVolume("5",amVolume5); guiSetVolume("6",amVolume6); guiSetVolume("7",amVolume7); } function guiSetBPM(value) { document.getElementById("bpmInput").value=value; } function guiSetSchema() { guiClearScore(); for (i=0;i=0; i--) sc.removeChild(children[i]); //add empty inst var sp=document.createElement("span"); sp.innerHTML=" "; sp.setAttribute("id","scoreContentSpanCtrl"); sc.appendChild(sp); } function guiScoreSetActive(num) { var sc=document.getElementById("scoreContent"); var children= sc.childNodes; if (!children || !children.length || !children[0] || !children[0].getAttribute || children[0].getAttribute("id")=="scoreContentSpanCtrl") return; for (var i = 0;i9 && counter2<=9) counter2Txt="0"+counter2Txt; if (amSchema.length>99 && counter2<=99) counter2Txt="0"+counter2Txt; var guiCounterNewLabel=counter1+"."+counter2Txt; if (guiCounterNewLabel!=guiCounterLabel) { guiCounterLabel=guiCounterNewLabel; // if (visualisationOn) visualControlValueSet(counter1,counter2,amSchema.length,true); // document.getElementById("vsCounterVal").innerHTML=guiCounterLabel; if (!visualisationOn) { if (guiCounterBox==null) guiCounterBox=document.getElementById("counterVal"); guiCounterBox.innerHTML=guiCounterLabel; } } if (!visualisationOn) { fpos%=amSchema.length; var ipos=Math.floor(fpos); if (ipos!=guiLastScorePosition) guiScoreSetActive(ipos); var toval=(60000/amBPM)*(1-(fpos-ipos))+10; if (toval<50) toval=50; } setTimeout("guiScoreActivityTimer()",toval); } else setTimeout("guiScoreActivityTimer()",100); } function guiScoreActivityOff() { fuiLastScorePosition=-1; guiScoreSetActive(-1); } /*********** GUI - visual only ************/ function clearSchema() { amSchema=""; guiClearScore(); } function showBusy() { var be=document.getElementById("busyInfo"); be.style.visibility="visible"; } function hideBusy() { var be=document.getElementById("busyInfo"); be.style.visibility="hidden"; } /************/ var amSchema=""; var amVolumeMaster=75; var amVolume0=100; var amVolume1=100; var amVolume2=100; var amVolume3=100; var amVolume4=100; var amVolume5=100; var amVolume6=100; var amVolume7=100; var amBPM=90; var amBPMMin=20; var amBPMMax=6000; var amPlaying=false; function amSetVolume(sId,value) { value=Math.round(value); switch (sId) { case "master": amVolumeMaster=value;break; case "0": amVolume0=value;break; case "1": amVolume1=value;break; case "2": amVolume2=value;break; case "3": amVolume3=value;break; case "4": amVolume4=value;break; case "5": amVolume5=value;break; case "6": amVolume6=value;break; case "7": amVolume7=value;break; } amRefresh(); } function amAddInst(sNum) { amSchema+=sNum; amRefresh(); } function amRemoveInst(pos) { var amBeg=amSchema.substr(0,pos); var amEnd=amSchema.substr(pos+1); amSchema=amBeg+amEnd; amRefresh(); } var refreshHandler=null; var refreshTOHandler=null; var refreshBusy=false; function amRefresh(delay) { refreshBusy=true; if (refreshTOHandler!=null) clearTimeout(refreshTOHandler); delay=delay || 200 refreshTOHandler=setTimeout("amRefreshTO()",delay); } function amRefreshTO() { guiScoreActivityOff(); if (amSchema=="") { amPlaying=false; return; } // window.status+="R"; //TODO:if playing - apply engine // var sTot=amVolumeMaster+";"+amVolume0+";"+amVolume1+";"+amVolume2+";"+amVolume3+";"+amBPM+";"+amSchema; var sTot=amVolumeMaster+";"+amVolume0+";"+amVolume1+";"+amVolume2+";"+amVolume3+";"+amVolume4+";"+amVolume5+";"+amVolume6+";"+amVolume7+";"+amBPM+";"+amSchema; // window.status=sTot; if (amPlaying) if (initEngine && javaApp!=null && typeof(javaApp)!="undefined") { if (javaEngineBusy) { if (refreshHandler) clearTimeout(refreshHandler); refreshHandler=setTimeout("amRefresh()",400); } else { if (refreshHandler) clearTimeout(refreshHandler); refreshHandler=null; javaEngineBusy=true; showBusy(); amPSTOS=sTot; if (amPSTOH) clearTimeout(amPSTOH); amPSTOH=setTimeout("amPlaySchemaTO()",200); // javaApp.playSchema(sTot); refreshBusy=false; } } else refreshBusy=false; else refreshBusy=false; } var amPSTOS; var amPSTOH=null; function amPlaySchemaTO() { amPSTOH=null; javaApp.playSchema(amPSTOS); } //TODO:gdy parametry ="" zostaw stare //TODO:oddzielić am - od gui.. tzn. zmienic to amsetall na setall jako handler function amSetAll(allString) { var params=allString.split(";"); // amSetAllParams(params[0],params[1],params[2],params[3],params[4],params[5]) amSetAllParams(params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9]) } function amAllTestEmpty(allString) { var params=allString.split(";"); if (params[9]=="") return true; return false; } function amSetAllParams(vol0,vol1,vol2,vol3,vol4,vol5,vol6,vol7,bpm,schema) { amVolume0=vol0; amVolume1=vol1; amVolume2=vol2; amVolume3=vol3; amVolume4=vol4; amVolume5=vol5; amVolume6=vol6; amVolume7=vol7; amBPM=bpm; amSchema=schema; guiSetAll(); amRefresh(); } /************** JAVA methods **************/ var javaApp=null; var javaEngineBusy=false; var initEngine=false; var initGui=false; function javaNotBusy() { javaEngineBusy=false; hideBusy(); // window.status+="N"; } function javaInitComplete() { var app1=document.getElementById("appletobject"); var app2=document.getElementById("appletobject2"); javaApp=app1; if (app1==null) { javaApp=app2; } else if (app1!=null && app2!=null && app1.toString().indexOf("AM")<0) { javaApp=app2; } else { javaApp=app1; } // window.status+="T"; javaApp.initLiveConnect(); } function liveConnectComplete() { initEngine=true; if (initGui) setTimeout("amReady()",100); } function guiReady() { setTimeout("patternInit()",200); initGui=true; if (initEngine) setTimeout("amReady()",200); setTimeout("showJavaAlert()",60*1000); iconsInit(); document.body.onkeypress=bodyKP;//"return tapKeypressed(event);" document.body.focus(); noFocus(); } function noFocus() { document.getElementById("emptyAnchor").focus(); } function bodyKP(e) { //normal behaviour if addThis enabled (to allow email send/services search) var atElem=document.getElementById("at16p"); if (atElem && atElem.style.display=="block") return true; if (!e) e=event; try{ var code=e.charCode || e.keyCode; if (isNaN(code)) return event.returnValue=true; var intCode=parseInt(code); if (intCode==13) //enter - tap only { if (tapping) tapEvent(); else return event.returnValue=true; //don't know what for :/ (probably text input bpm) } else if (intCode==32) //space - tap or start/stop { if (tapping) tapEvent(); else amPlayStop(); } else if ((intCode==0x54 || intCode==0x74) && !visualisationOn) //tT - tap (and tap start) { if (!tapping) tapStart(); if (tapping) tapEvent(); return event.returnValue=true; //for browser functions } else if (intCode==0x53 || intCode==0x73) //sS - start/stop { amPlayStop(); return event.returnValue=true; //for browser functions } else if (intCode==0x51 || intCode==0x71) //qQ - master volume up { amVolumeMaster++; if (amVolumeMaster>100) amVolumeMaster=100; var text="volume: "+amVolumeMaster; if (visualisationOn) visualControlHintSet(text); else window.status=text; if (!visualisationOn)//otherwise slider refresh in visualControlExitClick guiSetVolume("master",amVolumeMaster); amRefresh(600); return event.returnValue=true; //for browser functions } else if (intCode==0x41 || intCode==0x61) //aA - master volume down { amVolumeMaster--; if (amVolumeMaster<0) amVolumeMaster=0; var text="volume: "+amVolumeMaster; if (visualisationOn) visualControlHintSet(text); else window.status=text; if (!visualisationOn)//otherwise slider refresh in visualControlExitClick guiSetVolume("master",amVolumeMaster); amRefresh(600); return event.returnValue=true; //for browser functions } else if (intCode==0x45 || intCode==0x65) //eE - bpm up { increaseBPM(600); var text="bpm: "+amBPM; if (visualisationOn) visualControlHintSet(text); else window.status=text; return event.returnValue=true; //for browser functions } else if (intCode==0x57 || intCode==0x77) //wW - bpm down { decreaseBPM(600); var text="bpm: "+amBPM; if (visualisationOn) visualControlHintSet(text); else window.status=text; return event.returnValue=true; //for browser functions } else if (intCode==0x42 || intCode==0x62) //bB - go/back from visualisation screen { if (visualisationOn) visualControlExitClick(); else visualControlEnterClick(); return event.returnValue=true; //for browser functions } else if (intCode==0x43 || intCode==0x63) //cC - visualisation prev { visualControlPrevClick(); return event.returnValue=true; //for browser functions } else if (intCode==0x56 || intCode==0x76) //vV - visualisation next { visualControlNextClick(); return event.returnValue=true; //for browser functions } else { return event.returnValue=true; } return event.returnValue=false; }catch(err) {} } function showJavaAlert() { document.getElementById("alertJava").style.display="inline"; } function amReady() { document.getElementById("alertBar").style.display="none"; initAM(); document.getElementById("startButtonBar").style.display="block"; } function amPlayStop() { if (refreshBusy || javaEngineBusy) return; if (amPlaying) amStop(); else amPlay(); amUpdatePlayStopButton(); } function amUpdatePlayStopButton() { setTimeout("amUpdatePlayStopButtonTO()",200); } function amUpdatePlayStopButtonTO() { var label="START"; if (amPlaying) label="STOP"; document.getElementById("startStopButton").innerHTML=label; } function amPlay() { amPlaying=true; amRefresh(); amUpdatePlayStopButton(); } function amPause() { amPlaying=false; if (initEngine && javaApp!=null && typeof(javaApp)!="undefined") javaApp.pauseSound(); } function amStop() { amPlaying=false; guiScoreActivityOff(); javaNotBusy(); if (initEngine && javaApp!=null && typeof(javaApp)!="undefined") javaApp.stopSound(); amUpdatePlayStopButton(); } function javaGetPosition() { if (initEngine && javaApp!=null && typeof(javaApp)!="undefined") return javaApp.getPosition(); else return -1; } /************/ var mouseDown = false; function initAM() { document.body.onmousedown = function() { mouseDown = true; } document.body.onmouseup = function() { mouseDown = false; } //if no direct link if (!patternDirectLink) amSetAllParams(75,75,75,75,75,75,75,75,720,"4PPP7P4P5PPP4PPP7PPP7P4P5PPP7P66"); guiScoreActivityTimer(); /* clearSchema(); addInst("1"); addInst("0"); addInst("0"); addInst("0"); addInst("P"); addInst("0"); addInst("0"); addInst("0"); */ } ///////////////////////// VISUALISATIONS /////////////////////// var visualisationOn=false; var visualisationNum=2; var visualisationCur=-1; function visualControlExitClick() { visualisationOn=false; document.getElementById("visualisationScreen").style.display="none"; document.getElementById("footer").style.display="block"; document.getElementById("centerDiv").style.display="block"; document.getElementById("topMenu").style.display="block"; guiSetVolume("master",amVolumeMaster); noFocus(); } function visualControlEnterClick() { visualisationOn=true; document.getElementById("topMenu").style.display="none"; document.getElementById("centerDiv").style.display="none"; document.getElementById("footer").style.display="none"; //TODO: move to standard.css - test other pages document.body.style.height="100%"; document.getElementById("visualisationScreen").style.display="block"; window.status=""; visNoFocus(); visualControlCurrentSet(); } function visualControlNextClick() { if (!visualisationOn) return; visualisationCur++; if (visualisationCur>visualisationNum) visualisationCur=1; visualControlCurrentSet(); } function visualControlPrevClick() { if (!visualisationOn) return; visualisationCur--; if (visualisationCur<1) visualisationCur=visualisationNum; visualControlCurrentSet(); } function visualControlCurrentSet() { //TODO:load from cookie; if (visualisationCur<0) visualisationCur=1; visualControlValueSet(); document.getElementById("visual"+visualisationCur).style.display="block"; for (var i=1;i<=visualisationNum;i++) if (i!=visualisationCur) document.getElementById("visual"+i).style.display="none"; } var vsCLabelOld=""; var vsCounter1Old=0; var vsCounter2Old=0; var vsCounter2MaxOld=0; function visualControlValueSet(counter1,counter2,counter2Max,noRefresh) { counter1=counter1 || vsCounter1Old; //default - old values counter2=counter2 || vsCounter2Old; counter2Max=counter2Max || vsCounter2MaxOld; vsCounter1Old=counter1; vsCounter2Old=counter2; vsCounter2MaxOld=counter2Max; var counter2Txt=""+counter2; if (counter2Max>9 && counter2<=9) counter2Txt="0"+counter2Txt; if (counter2Max>99 && counter2<=99) counter2Txt="0"+counter2Txt; var vsLabel=counter1+"."+counter2Txt; if ((!noRefresh || vsCLabelOld!=vsLabel) && visualisationOn) { vsCLabelOld=vsLabel; var valE=document.getElementById("vsCounterVal"+visualisationCur) valE.innerHTML=vsLabel; if (visualisationCur==2) { if (counter2==1) valE.className="first"; else valE.className=""; } } } var visualControlHintTOHandler=null; function visualControlHintSet(text) { document.getElementById("visualControlHint").innerHTML=text; if (visualControlHintTOHandler!=null) clearTimeout(visualControlHintTOHandler); visualControlHintTOHandler=setTimeout("visualControlHintTO()",3000); } function visualControlHintTO() { document.getElementById("visualControlHint").innerHTML=" "; visualControlHintTOHandler=null; } function visNoFocus() { if (visualisationOn) document.getElementById("visEmptyAnchor").focus(); } ///////////////////////// TAP ///////////////////////// var tapping=false; //var tapOffString="TAP here for custom tempo"; //var tapOnString="TAP with enter or spacebar"; var tapOffClass="tapButton off"; var tapOnClass="tapButton on"; var tapArray=new Array(); var tapLast=-1; var tapAvg5=-1; var tapAvg20=-1; //function tapValues(tString,tInfo,t1,t5,t20,tCancel) function tapValues(tClass,tInfo,t1,t5,t20,tCancel) { document.getElementById("tapStart").className=tClass;//.innerHTML=tString; tid=document.getElementById("tapInfoDiv"); if (tInfo) tid.style.visibility="visible"; else tid.style.visibility="hidden"; tcd=document.getElementById("tapCancel"); if (tCancel) tcd.style.visibility="visible"; else tcd.style.visibility="hidden"; t1d=document.getElementById("tapLast"); if (t1>0) t1d.style.visibility="visible"; else t1d.style.visibility="hidden"; t1d.innerHTML=t1; t5d=document.getElementById("tapAvg5"); if (t5>0) t5d.style.visibility="visible"; else t5d.style.visibility="hidden"; t5d.innerHTML=t5; t20d=document.getElementById("tapAvg20"); if (t20>0) t20d.style.visibility="visible"; else t20d.style.visibility="hidden"; t20d.innerHTML=t20; } function tapCancel() { tapping=false; // tapValues(tapOffString,false,-1,-1,-1,false); tapValues(tapOffClass,false,-1,-1,-1,false); window.status=""; } function tapStart() { tapping=true; tapArray=new Array(); tapLast=-1; tapAvg5=-1; tapAvg20=-1; // tapValues(tapOnString,true,tapLast,tapAvg5,tapAvg20,true); tapValues(tapOnClass,true,tapLast,tapAvg5,tapAvg20,true); } function tapEvent() { tapArray[tapArray.length]=new Date().getTime(); if (tapArray.length>1) tapLast=Math.round(60000/(tapArray[tapArray.length-1]-tapArray[tapArray.length-2])); if (tapArray.length>5) tapAvg5=Math.round(5*60000/(tapArray[tapArray.length-1]-tapArray[tapArray.length-6])); if (tapArray.length>20) tapAvg20=Math.round(20*60000/(tapArray[tapArray.length-1]-tapArray[tapArray.length-21])); // tapValues(tapOnString,true,tapLast,tapAvg5,tapAvg20,true); tapValues(tapOnClass,true,tapLast,tapAvg5,tapAvg20,true); window.status+=tapArray.length%10; } function tapButtonClick() { if (!tapping) tapStart(); } /* function tapKeypressed(event) { // if (!tapping) return event.returnValue=true; try{ if (isNaN(event.keyCode)) return event.returnValue=true; if (parseInt(event.keyCode)==13) { if (tapping) { tapEvent(); return event.returnValue=false; } else return event.returnValue=true; } if (parseInt(event.keyCode)==32) { if (tapping) tapEvent(); return event.returnValue=false; } }catch(err) {} } */