function show_error(B){var A="<img src='/images/exclamation.png'/ style='vertical-align: middle'> <b>Error: </b> "+B;show_status(A,"status");show_status(A,"status2")}function show_status(B,D){var A=document.getElementById(D);if(A!=null){A.innerHTML=B;var C=new YAHOO.util.ColorAnim(A,{backgroundColor:{to:"#fff",from:"#ff0"},duration:1});C.animate()}}function show_progress(B){var A=B+" <img src='/images/progress.gif' style='vertical-align: middle'/></span>";show_status(A,"status");show_status(A,"status2")}function show_good(B){var A="<img src='/images/accept.png'/ style='vertical-align: middle'> "+B;show_status(A,"status");show_status(A,"status2")}function set_option(D,A){var C=document.getElementById(D);for(var B=0;B<C.options.length;B++){if(C.options[B].value==A){C.selectedIndex=B;break}}}function parse_xml_string(A){try{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(A);return xmlDoc}catch(B){try{parser=new DOMParser();return parser.parseFromString(A,"text/xml")}catch(B){show_error("Failed to parse XML")}}}function raise_if_empty(B,A){if(document.getElementById(B).value==""){throw A+" cannot be empty"}}function build_xml(){raise_if_empty("title","Title");raise_if_empty("artist","Artist");raise_if_empty("media_url","YouTube URL");raise_if_empty("instrument","Instrument");raise_if_empty("metronome","Beat");var C=document.getElementById("media_key");var A='<?xml version="1.0"?> <playalong version="1.0"> <title>'+document.getElementById("title").value+"</title><artist>"+document.getElementById("artist").value+'</artist><media type="youtube">'+document.getElementById("media_url").value+"</media><media_key>"+C.options[C.selectedIndex].value+"</media_key><instrument>"+document.getElementById("instrument").value+"</instrument><metronome>"+document.getElementById("metronome").value+"</metronome><events>";var B=dataTable.getRecordSet();if(B.getLength()==0){throw"No chords specified"}for(idx=0;idx<B.getLength();idx++){var E=B.getRecord(idx);if(E.getData("start")==-1){throw"Please define all timing information"}var D=E.getData("lyric");A+='<event start="'+E.getData("start")+'"><chord>'+E.getData("note")+"</chord><lyric>"+(D==""?"...":D)+"</lyric></event>"}return A+"</events></playalong>"}function get_safely(A){if(A&&A[0]&&A[0].firstChild){return A[0].firstChild.nodeValue}return""}function get_attribute_safely(B,A){if(B&&B[0]){return B[0].getAttribute(A)}return""}function xml_details(D){var B=[];B.title=get_safely(D.getElementsByTagName("title"));B.artist=get_safely(D.getElementsByTagName("artist"));B.instrument=get_safely(D.getElementsByTagName("instrument"));B.media_url=get_safely(D.getElementsByTagName("media"));B.media_type=get_attribute_safely(D.getElementsByTagName("media"),"type");if(D.getElementsByTagName("media_key").length>0){B.media_key=get_safely(D.getElementsByTagName("media_key"))}var E=D.getElementsByTagName("events")[0].getElementsByTagName("event");var C=[];for(var A=0;A<E.length;A++){var F=E[A].getAttribute("start");C[A]={note:get_safely(E[A].getElementsByTagName("chord")),lyric:get_safely(E[A].getElementsByTagName("lyric")),start:F,finish:9999};if(A>0){C[A-1]["finish"]=F}}B.event_data=C;B.events_length=E.length;return B}function show_hide(B){var A=document.getElementById(B);if(A.style.display=="none"){A.style.display="block"}else{A.style.display="none"}}function insert_line(){index=dataTable.getRecordIndex(dataTable.getLastSelectedRecord());dataTable.addRow({note:"C major",lyric:"Double click to edit...",start:-1},index);dataTable.unselectAllRows();adding=true;dataTable.selectRow(index)}function delete_line(){var A=dataTable.getSelectedRows();if(A.length>0){dataTable.deleteRow(A[0])}}function add_line(){dataTable.addRow({note:"C major",lyric:"Double click to edit...",start:-1});dataTable.unselectAllRows();adding=true;dataTable.selectRow(dataTable.getLastTrEl())}function fix_scrollingdatatable(){YAHOO.widget.ScrollingDataTable.prototype._focusEl=function(B){YAHOO.log("focusel");B=B||this._elTbody;var A=this;this._storeScrollPositions();setTimeout(function(){setTimeout(function(){try{B.focus()}catch(C){}},0)},0)}}function transpose_all(C){var B=dataTable.getRecordSet();for(var A=0;A<B.getLength();A++){note=B.getRecord(A).getData("note");B.getRecord(A).setData("note",transpose(note,C))}dataTable.render()}var notes=["Ab","A","Bb","B","C","C#","D","Eb","E","F","F#","G"];function transpose(C,B){var E=false;var A;var D=C.split(" ");for(A=0;A<notes.length;A++){if(notes[A]==D[0]){E=true;break}}if(!E){return C}return notes[(A+B+notes.length)%notes.length]+" "+D[1]};
