vlm.js
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:30k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * vlm.js: VLC media player web interface
  3.  *****************************************************************************
  4.  * Copyright (C) 2005-2006 the VideoLAN team
  5.  * $Id$
  6.  *
  7.  * Authors: Antoine Cellerier <dionoea -at- videolan -dot- org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. /* replace quotes and spaces by underscores */
  24. function addunderscores( str ){ return str.replace(/'|"| /g, '_'); }
  25. /**********************************************************************
  26.  * Input dialog functions
  27.  *********************************************************************/
  28. function toggle_show_vlm_helper()
  29. {
  30.     var vlmh = document.getElementById( "vlm_helper" );
  31.     var vlmhctrl = document.getElementById( "vlm_helper_controls" );
  32.     var btn = document.getElementById( "btn_vlm_helper_toggle" );
  33.     if( vlmh.style.display == 'block' || vlmh.style.display == '')
  34.     {
  35.         vlmh.style.display = 'none';
  36.         vlmhctrl.style.display = 'none';
  37.         btn.removeChild( btn.firstChild );
  38.         btn.appendChild( document.createTextNode( 'Show VLM helper' ) );
  39.     }
  40.     else
  41.     {
  42.         vlmh.style.display = 'block';
  43.         vlmhctrl.style.display = 'inline';
  44.         btn.removeChild( btn.firstChild );
  45.         btn.appendChild( document.createTextNode( 'Hide VLM helper' ) );
  46.     }
  47. }
  48. function vlm_input_edit( dest )
  49. {
  50.     document.getElementById( 'input_dest' ).value = dest;
  51.     show( 'input' );
  52. }
  53. function vlm_input_change()
  54. {
  55.     document.getElementById( value( 'input_dest' ) ).value = value( 'input_mrl' ).replace( / :/g, " option " );
  56.     hide( 'input' );
  57.     document.getElementById( value( 'input_dest' ) ).focus();
  58. }
  59. function vlm_output_edit( dest )
  60. {
  61.     document.getElementById( 'sout_dest' ).value = dest;
  62.     show( 'sout' );
  63. }
  64. function vlm_output_change()
  65. {
  66.     document.getElementById( value( 'sout_dest' ) ).value = value( 'sout_mrl' ).substr(6).replace( / :/g, " option " ); /* substr <-> remove :sout= */
  67.     hide( 'sout' );
  68.     document.getElementById( value( 'sout_dest' ) ).focus();
  69. }
  70. function hide_vlm_add()
  71. {
  72.     document.getElementById( 'vlm_add_broadcast' ).style.display = 'none';
  73.     document.getElementById( 'vlm_add_vod' ).style.display = 'none';
  74.     document.getElementById( 'vlm_add_schedule' ).style.display = 'none';
  75.     document.getElementById( 'vlm_add_other' ).style.display = 'none';
  76. }
  77. function toggle_schedule_date()
  78. {
  79.     if( checked( 'vlm_schedule_now' ) )
  80.     {
  81.         disable( 'vlm_schedule_year' );
  82.         disable( 'vlm_schedule_month' );
  83.         disable( 'vlm_schedule_day' );
  84.         disable( 'vlm_schedule_hour' );
  85.         disable( 'vlm_schedule_minute' );
  86.         disable( 'vlm_schedule_second' );
  87.     }
  88.     else
  89.     {
  90.         enable( 'vlm_schedule_year' );
  91.         enable( 'vlm_schedule_month' );
  92.         enable( 'vlm_schedule_day' );
  93.         enable( 'vlm_schedule_hour' );
  94.         enable( 'vlm_schedule_minute' );
  95.         enable( 'vlm_schedule_second' );
  96.     }
  97. }
  98. function toggle_schedule_repeat()
  99. {
  100.     if( checked( 'vlm_schedule_repeat' ) )
  101.     {
  102.         enable( 'vlm_schedule_period_year' );
  103.         enable( 'vlm_schedule_period_month' );
  104.         enable( 'vlm_schedule_period_day' );
  105.         enable( 'vlm_schedule_period_hour' );
  106.         enable( 'vlm_schedule_period_minute' );
  107.         enable( 'vlm_schedule_period_second' );
  108.         enable( 'vlm_schedule_repeat_times' );
  109.     }
  110.     else
  111.     {
  112.         disable( 'vlm_schedule_period_year' );
  113.         disable( 'vlm_schedule_period_month' );
  114.         disable( 'vlm_schedule_period_day' );
  115.         disable( 'vlm_schedule_period_hour' );
  116.         disable( 'vlm_schedule_period_minute' );
  117.         disable( 'vlm_schedule_period_second' );
  118.         disable( 'vlm_schedule_repeat_times' );
  119.     }
  120. }
  121. function vlm_schedule_type_change( name )
  122. {
  123.     var act = document.getElementById( 'vlm_elt_' + name + '_action' ).value;
  124.     var itemname = document.getElementById( 'vlm_elt_' + name + '_name' );
  125.     var opt = document.getElementById( 'vlm_elt_' + name + '_opt' );
  126.     if( act == "play" || act == "pause" || act == "stop" )
  127.     {
  128.         itemname.style.display = "";
  129.         opt.style.display = "none";
  130.     }
  131.     else if( act == "seek" )
  132.     {
  133.         itemname.style.display = "";
  134.         opt.style.display = "";
  135.     }
  136.     else
  137.     {
  138.         itemname.style.display = "none";
  139.         opt.style.display = "";
  140.     }
  141. }
  142. function sanitize_input( str )
  143. {
  144.     return str.replace( /"/g, '\"' ).replace( /^/, '"' ).replace( /$/, '"' ).replace( / option /g, '" option "' );
  145. }
  146. function update_vlm_add_broadcast()
  147. {
  148.     var cmd = document.getElementById( 'vlm_command' );
  149.     if( value( 'vlm_broadcast_name' ) )
  150.     {
  151.         cmd.value = "new " + addunderscores( value( 'vlm_broadcast_name' ) )
  152.                     + " broadcast";
  153.         if( checked( 'vlm_broadcast_enabled' ) )
  154.         {
  155.             cmd.value += " enabled";
  156.         }
  157.         
  158.         if( checked( 'vlm_broadcast_loop' ) )
  159.         {
  160.             cmd.value += " loop";
  161.         }
  162.         if( value( 'vlm_broadcast_input' ) )
  163.         {
  164.             cmd.value += " input " + sanitize_input( value( 'vlm_broadcast_input' ) );
  165.         }
  166.         if( value( 'vlm_broadcast_output' ) )
  167.         {
  168.             cmd.value += " output " + value( 'vlm_broadcast_output' );
  169.         }
  170.     }
  171.     else
  172.     {
  173.         cmd.value = "";
  174.     }
  175. }
  176. function update_vlm_add_vod()
  177. {
  178.     var cmd = document.getElementById( 'vlm_command' );
  179.     if( value( 'vlm_vod_name' ) )
  180.     {
  181.         cmd.value = "new " + addunderscores( value( 'vlm_vod_name' ) )
  182.                     + " vod";
  183.         if( checked( 'vlm_vod_enabled' ) )
  184.         {
  185.             cmd.value += " enabled";
  186.         }
  187.         
  188.         if( value( 'vlm_vod_input' ) )
  189.         {
  190.             cmd.value += " input " + sanitize_input( value( 'vlm_vod_input' ) );
  191.         }
  192.         if( value( 'vlm_vod_output' ) )
  193.         {
  194.             cmd.value += " output " + value( 'vlm_vod_output' );
  195.         }
  196.     }
  197.     else
  198.     {
  199.         cmd.value = "";
  200.     }
  201. }
  202. function update_vlm_add_schedule()
  203. {
  204.     var cmd = document.getElementById( 'vlm_command' );
  205.     check_and_replace_int( 'vlm_schedule_year', '0000' );
  206.     check_and_replace_int( 'vlm_schedule_month', '00' );
  207.     check_and_replace_int( 'vlm_schedule_day', '00' );
  208.     check_and_replace_int( 'vlm_schedule_hour', '00' );
  209.     check_and_replace_int( 'vlm_schedule_minute', '00' );
  210.     check_and_replace_int( 'vlm_schedule_second', '00' );
  211.     check_and_replace_int( 'vlm_schedule_period_year', '0000' );
  212.     check_and_replace_int( 'vlm_schedule_period_month', '00' );
  213.     check_and_replace_int( 'vlm_schedule_period_day', '00' );
  214.     check_and_replace_int( 'vlm_schedule_period_hour', '00' );
  215.     check_and_replace_int( 'vlm_schedule_period_minute', '00' );
  216.     check_and_replace_int( 'vlm_schedule_period_second', '00' );
  217.     if( value( 'vlm_schedule_name' ) )
  218.     {
  219.         cmd.value = "new " + addunderscores( value( 'vlm_schedule_name' ) ) + " schedule";
  220.         if( checked( 'vlm_schedule_enabled' ) )
  221.         {
  222.             cmd.value += " enabled";
  223.         }
  224.         if( checked( 'vlm_schedule_now' ) )
  225.         {
  226.             cmd.value += " date now";
  227.         }
  228.         else
  229.         {
  230.             cmd.value += " date " + value( 'vlm_schedule_year' ) + "/" + value( 'vlm_schedule_month' ) + "/" + value( 'vlm_schedule_day' ) + '-' + value( 'vlm_schedule_hour' ) + ':' + value( 'vlm_schedule_minute' ) + ':' + value( 'vlm_schedule_second' );
  231.         }
  232.         if( checked( 'vlm_schedule_repeat' ) )
  233.         {
  234.             cmd.value += " period " + value( 'vlm_schedule_period_year' ) + "/" + value( 'vlm_schedule_period_month' ) + "/" + value( 'vlm_schedule_period_day' ) + '-' + value( 'vlm_schedule_period_hour' ) + ':' + value( 'vlm_schedule_period_minute' ) + ':' + value( 'vlm_schedule_period_second' );
  235.             if( value( 'vlm_schedule_repeat_times' ) != 0 )
  236.             {
  237.                 cmd.value += " repeat " + (value( 'vlm_schedule_repeat_times' ) - 1 );
  238.             }
  239.         }
  240.             
  241.     }
  242.     else
  243.     {
  244.         cmd.value = "";
  245.     }
  246. }
  247. function update_vlm_add_other()
  248. {
  249.     var cmd = document.getElementById( 'vlm_command' );
  250.     cmd.value = "";
  251. }
  252. function clear_vlm_add()
  253. {
  254.     document.getElementById( 'vlm_command' ).value = "";
  255.     document.getElementById( 'vlm_broadcast_name' ).value = "";
  256.     document.getElementById( 'vlm_vod_name' ).value = "";
  257. }
  258. function create_button( caption, action )
  259. {
  260. /*    var link = document.createElement( "input" );
  261.     link.setAttribute( 'type', 'button' );*/
  262.     /* link.setAttribute( 'onclick', action ); */
  263.     /* Above doesn't work on ie. You need to use something like
  264.      * link.onclick = function() { alert( 'pouet' ); };
  265.      * instead ... conclusion: IE is crap */
  266.    /* link.setAttribute( 'value', caption );*/
  267.     var d = document.createElement( 'div' );
  268.     d.innerHTML = "<input type='button' onclick='"+action+"' value='"+caption+"' />"; /* other IE work around  ... still crap. Use double quotes only in action */
  269.     var link = d.firstChild;
  270.     return link;
  271. }
  272. function create_option( caption, value )
  273. {
  274.     var opt = document.createElement( 'option' );
  275.     opt.setAttribute( 'value', value );
  276.     opt.appendChild( document.createTextNode( caption ) );
  277.     return opt;
  278. }
  279. function parse_vlm_cmd()
  280. {
  281.     if( req.readyState == 4 )
  282.     {
  283.         if( req.status == 200 )
  284.         {
  285.             var vlm_answer = req.responseXML.documentElement;
  286.             var error_tag = vlm_answer.getElementsByTagName( 'error' )[0];
  287.             var vlme = document.getElementById( 'vlm_error' );
  288.             clear_children( vlme );
  289.             if( error_tag.hasChildNodes() )
  290.             {
  291.                 vlme.appendChild( document.createTextNode( 'Error: ' + error_tag.firstChild.data ) );
  292.                 vlme.style.color = "#f00";
  293.             }
  294.             else
  295.             {
  296.                 vlme.appendChild( document.createTextNode( 'Command succesful (' + value( 'vlm_command' ) + ') ' ) );
  297.                 vlme.style.color = "#0f0";
  298.                 clear_vlm_add();
  299.             }
  300.             vlme.appendChild( create_button( 'clear', 'clear_children( document.getElementById( "vlm_error" ) );' ) );
  301.             vlm_get_elements();
  302.         }
  303.     }
  304. }
  305. function parse_vlm_elements()
  306. {
  307.     if( req.readyState == 4 )
  308.     {
  309.         if( req.status == 200 )
  310.         {
  311.             var vlmb = document.getElementById( 'vlm_broadcast_list' );
  312.             var vlmv = document.getElementById( 'vlm_vod_list' );
  313.             var vlms = document.getElementById( 'vlm_schedule_list' );
  314.             clear_children( vlmb );
  315.             clear_children( vlmv );
  316.             clear_children( vlms );
  317.             answer = req.responseXML.documentElement;
  318.             var elt = answer.firstChild;
  319.             while( elt )
  320.             {
  321.                 if( elt.nodeName == "broadcast" || elt.nodeName == "vod" )
  322.                 {
  323.                     var nb = document.createElement( 'div' );
  324.                     setclass( nb, 'list_element' );
  325.                     if( elt.nodeName == "broadcast" )
  326.                     {
  327.                         vlmb.appendChild( nb );
  328.                     }
  329.                     else
  330.                     {
  331.                         vlmv.appendChild( nb );
  332.                     }
  333.                     var nbname = document.createElement( 'b' );
  334.                     nbname.appendChild( document.createTextNode( elt.getAttribute( 'name' ) ) );
  335.                     nb.appendChild( nbname );
  336.                     
  337.                     if( elt.getAttribute( 'enabled' ) == 'yes' )
  338.                     {
  339.                         nb.appendChild( document.createTextNode( " enabled " ) );
  340.                         nb.appendChild( create_button( "Disable", 'vlm_disable("'+elt.getAttribute( 'name' ) + '");' ) );
  341.                     }
  342.                     else
  343.                     {
  344.                         nb.appendChild( document.createTextNode( " disabled " ) );
  345.                         nb.appendChild( create_button( "Enable", 'vlm_enable("'+elt.getAttribute( 'name' ) + '");' ) );
  346.                     }
  347.                     
  348.                     if( elt.nodeName == "broadcast" )
  349.                     {
  350.                         if( elt.getAttribute( 'loop' ) == 'yes' )
  351.                         {
  352.                             nb.appendChild( document.createTextNode( " loop " ) );
  353.                             nb.appendChild( create_button( 'Un-loop', 'vlm_unloop("'+elt.getAttribute( 'name' ) + '");' ) );
  354.                         }
  355.                         else
  356.                         {
  357.                             nb.appendChild( document.createTextNode( " play once " ) );
  358.                             nb.appendChild( create_button( 'Loop', 'vlm_loop("'+elt.getAttribute( 'name' ) + '");' ) );
  359.                             
  360.                         }
  361.                         if( elt.getAttribute( 'enabled' ) == 'yes' )
  362.                         {
  363.                             nb.appendChild( document.createTextNode( " " ) );
  364.                             nb.appendChild( create_button( 'Play', 'vlm_play("'+elt.getAttribute('name')+'");' ) );
  365.                         }
  366.                         nb.appendChild( document.createTextNode( " " ) );
  367.                         nb.appendChild( create_button( 'Pause', 'vlm_pause("'+elt.getAttribute('name')+'");' ) );
  368.                         nb.appendChild( document.createTextNode( " " ) );
  369.                         nb.appendChild( create_button( 'Stop', 'vlm_stop("'+elt.getAttribute('name')+'");' ) );
  370.                     }
  371.                     
  372.                     nb.appendChild( document.createTextNode( " " ) );
  373.                     nb.appendChild( create_button( 'Delete', 'vlm_delete("'+elt.getAttribute( 'name' ) + '");' ) );
  374.                     var list = document.createElement( "ul" );
  375.                     /* begin input list */
  376.                     var item = document.createElement( "li" );
  377.                     list.appendChild( item );
  378.                     item.appendChild( document.createTextNode( "Inputs: " ) );
  379.                     var text = document.createElement( "input" );
  380.                     text.setAttribute( 'type', 'text' );
  381.                     text.setAttribute( 'size', '40' );
  382.                     text.setAttribute( 'id', 'vlm_elt_'+elt.getAttribute('name')+'_input' );
  383.                     text.setAttribute( 'onkeypress', 'if( event.keyCode == 13 ) vlm_add_input("'+elt.getAttribute('name')+'",document.getElementById("vlm_elt_'+elt.getAttribute('name')+'_input").value );' );
  384.                     item.appendChild( text );
  385.                     item.appendChild( document.createTextNode( ' ' ) );
  386.                     item.appendChild( create_button( 'Edit', 'vlm_input_edit("vlm_elt_'+elt.getAttribute('name')+'_input");') );
  387.                     item.appendChild( document.createTextNode( ' ' ) );
  388.                     item.appendChild( create_button( 'Add input', 'vlm_add_input("'+elt.getAttribute('name')+'",document.getElementById("vlm_elt_'+elt.getAttribute('name')+'_input").value );' ) );
  389.                     
  390.                     var inputs = elt.getElementsByTagName( 'input' );
  391.                     if( inputs.length > 0 )
  392.                     {
  393.                         var ilist = document.createElement( "ol" );
  394.                         ilist.setAttribute( 'start', '1' );
  395.                         item.appendChild( ilist );
  396.                         for( i = 0; i < inputs.length; i++ )
  397.                         {
  398.                             var item = document.createElement( "li" );
  399.                             item.appendChild( document.createTextNode( inputs[i].firstChild.data + " " ) );
  400.                             item.appendChild( create_button( "Delete", 'vlm_delete_input("' + elt.getAttribute( 'name' ) + '", '+(i+1)+' );' ) );
  401.                             ilist.appendChild( item );
  402.                         }
  403.                     }
  404.                     /* end of input list */
  405.                     
  406.                     /* output */
  407.                     var item = document.createElement( "li" );
  408.                     outputelt = elt.getElementsByTagName( 'output' )[0];
  409.                     if( outputelt.hasChildNodes() )
  410.                     {
  411.                         output = outputelt.firstChild.data;
  412.                     }
  413.                     else
  414.                     {
  415.                         output = "";
  416.                     }
  417.                     item.appendChild( document.createTextNode( 'Output: ' ) );
  418.                     var text = document.createElement( "input" );
  419.                     text.setAttribute( 'type', 'text' );
  420.                     text.setAttribute( 'id', 'vlm_elt_'+elt.getAttribute('name')+'_output' );
  421.                     text.setAttribute( 'value', output );
  422.                     text.setAttribute( 'onkeypress', 'if( event.keyCode == 13 )  vlm_output("'+elt.getAttribute( 'name' )+ '",document.getElementById("vlm_elt_'+elt.getAttribute( 'name' )+'_output").value);' );
  423.                     item.appendChild( text );
  424.                     item.appendChild( document.createTextNode( ' ' ) );
  425.                     item.appendChild( create_button( 'Edit', 'vlm_output_edit("vlm_elt_'+elt.getAttribute('name')+'_output");' ) );
  426.                     item.appendChild( document.createTextNode( ' ' ) );
  427.                     item.appendChild( create_button( 'Change output', 'vlm_output("'+elt.getAttribute( 'name' )+ '",document.getElementById("vlm_elt_'+elt.getAttribute( 'name' )+'_output").value);' ) );
  428.                     list.appendChild( item );
  429.                     /* end of output */
  430.                     /* begin options list */
  431.                     var item = document.createElement( "li" );
  432.                     list.appendChild( item );
  433.                     item.appendChild( document.createTextNode( "Options: " ) );
  434.                     /* Add option */
  435.                     var text = document.createElement( "input" );
  436.                     text.setAttribute( 'type', 'text' );
  437.                     text.setAttribute( 'size', '40' );
  438.                     text.setAttribute( 'id', 'vlm_elt_'+elt.getAttribute('name')+'_option' );
  439.                     text.setAttribute( 'onkeypress', 'if( event.keyCode == 13 ) vlm_option("'+elt.getAttribute('name')+'",document.getElementById("vlm_elt_'+elt.getAttribute('name')+'_option").value );' );
  440.                     item.appendChild( text );
  441.                     item.appendChild( document.createTextNode( ' ' ) );
  442.                     item.appendChild( create_button( 'Add option', 'vlm_option("'+elt.getAttribute('name')+'",document.getElementById("vlm_elt_'+elt.getAttribute('name')+'_option").value );' ) );
  443.                     
  444.                     var options = elt.getElementsByTagName( 'option' );
  445.                     if( options.length > 0 )
  446.                     {
  447.                         var olist = document.createElement( "ul" );
  448.                         item.appendChild( olist );
  449.                         for( i = 0; i < options.length; i++ )
  450.                         {
  451.                             var item = document.createElement( "li" );
  452.                             item.appendChild( document.createTextNode( options[i].firstChild.data ) );
  453.                             olist.appendChild( item );
  454.                         }
  455.                     }
  456.                     /* end of options */
  457.                     /* Instances list */
  458.                     var instances = elt.getElementsByTagName( 'instance' );
  459.                     if( instances.length > 0 )
  460.                     {
  461.                         var item = document.createElement("li");
  462.                         var ilist = document.createElement("ul");
  463.                         list.appendChild( item );
  464.                         item.appendChild(document.createTextNode("Instances:")); 
  465.                         item.appendChild( ilist );
  466.                         for( i = 0; i < instances.length; i++ )
  467.                         {
  468.                             var iname = instances[i].getAttribute( 'name' );
  469.                             var istate = instances[i].getAttribute( 'state' );
  470.                             var iposition = Number( instances[i].getAttribute( 'position' ) * 100);
  471.                             var itime = Math.floor( instances[i].getAttribute( 'time' ) / 1000000);
  472.                             var ilength = Math.floor( instances[i].getAttribute( 'length' ) / 1000000);
  473.                             var irate = instances[i].getAttribute( 'rate' );
  474.                             var ititle = instances[i].getAttribute( 'title' );
  475.                             var ichapter = instances[i].getAttribute( 'chapter' );
  476.                             var iseekable = instances[i].getAttribute( 'seekable' );
  477.                             var iplaylistindex = instances[i].getAttribute( 'playlistindex' );
  478.                             
  479.                             var item = document.createElement( "li" );
  480.                             item.appendChild( document.createTextNode( iname + ": " + istate + " (" + iplaylistindex + ") " + (iposition.toFixed(2)) + "%" + " " + format_time( itime ) + "/" + format_time( ilength ) ) );
  481.                             ilist.appendChild( item );
  482.                         }
  483.                     }
  484.                     /* end of instances list */
  485.                     
  486.                     nb.appendChild( list );
  487.                     
  488.                 }
  489.                 else if( elt.nodeName == "schedule" )
  490.                 {
  491.                     var nb = document.createElement( 'div' );
  492.                     setclass( nb, 'list_element' );
  493.                     vlms.appendChild( nb );
  494.                     var nbname = document.createElement( 'b' );
  495.                     nbname.appendChild( document.createTextNode( elt.getAttribute( 'name' ) ) );
  496.                     nb.appendChild( nbname );
  497.                     
  498.                     if( elt.getAttribute( 'enabled' ) == 'yes' )
  499.                     {
  500.                         nb.appendChild( document.createTextNode( " enabled " ) );
  501.                         nb.appendChild( create_button( "Disable", 'vlm_disable("'+elt.getAttribute( 'name' ) + '");' ) );
  502.                     }
  503.                     else
  504.                     {
  505.                         nb.appendChild( document.createTextNode( " disabled " ) );
  506.                         nb.appendChild( create_button( "Enable", 'vlm_enable("'+elt.getAttribute( 'name' ) + '");' ) );
  507.                     }
  508.                     nb.appendChild( document.createTextNode( " " ) );
  509.                     nb.appendChild( create_button( "Delete", 'vlm_delete("'+elt.getAttribute( 'name' ) + '");' ) );
  510.                     var list = document.createElement( 'ul' );
  511.                     var item = document.createElement( 'li' );
  512.                     item.appendChild( document.createTextNode( "Date: " + elt.getAttribute( 'date' ) ) );
  513.                     list.appendChild( item );
  514.                     var item = document.createElement( 'li' );
  515.                     item.appendChild( document.createTextNode( "Period (in seconds): " + elt.getAttribute( 'period' ) ) );
  516.                     list.appendChild( item );
  517.                     
  518.                     var item = document.createElement( 'li' );
  519.                     if( elt.getAttribute( 'repeat' ) == -1 )
  520.                     {
  521.                         item.appendChild( document.createTextNode( "Number of repeats left: for ever" ) );
  522.                     }
  523.                     else
  524.                     {
  525.                         item.appendChild( document.createTextNode( "Number of repeats left: " + elt.getAttribute( 'repeat' ) ) );
  526.                     }
  527.                     list.appendChild( item );
  528.                     
  529.                     var commands = elt.getElementsByTagName( 'command' );
  530.                     for( i = 0; i < commands.length; i++ )
  531.                     {
  532.                         var item = document.createElement( "li" );
  533.                         item.appendChild( document.createTextNode( "Command: " + commands[i].firstChild.data + " " ) );
  534.                         list.appendChild( item );
  535.                     }
  536.                     
  537.                     var item = document.createElement( 'li' );
  538.                     var sel = document.createElement( 'select' );
  539.                     sel.setAttribute( 'id', 'vlm_elt_'+elt.getAttribute('name')+'_action' );
  540.                     sel.setAttribute( 'onchange', 'vlm_schedule_type_change("'+elt.getAttribute('name')+'");');
  541.                     sel.appendChild( create_option( 'play', 'play' ) );
  542.                     sel.appendChild( create_option( 'pause', 'pause' ) );
  543.                     sel.appendChild( create_option( 'stop', 'stop' ) );
  544.                     sel.appendChild( create_option( 'seek', 'seek' ) );
  545.                     sel.appendChild( create_option( '(other)', '' ) );
  546.                     item.appendChild( sel );
  547.                     item.appendChild( document.createTextNode( " " ) );
  548.                     var text = document.createElement( 'input' );
  549.                     text.setAttribute( 'type', 'text' );
  550.                     text.setAttribute( 'id', 'vlm_elt_'+elt.getAttribute('name')+'_name' );
  551.                     text.setAttribute( 'size', '10' );
  552.                     text.setAttribute( 'value', '(name)' );
  553.                     text.setAttribute( 'onfocus', 'if( this.value == "(name)" ) this.value = "";' );
  554.                     text.setAttribute( 'onblur', 'if( this.value == "" ) this.value = "(name)";' );
  555.                     item.appendChild( text );
  556.                     item.appendChild( document.createTextNode( " " ) );
  557.                     text = document.createElement( 'input' );
  558.                     text.setAttribute( 'type', 'text' );
  559.                     text.setAttribute( 'id', 'vlm_elt_'+elt.getAttribute('name')+'_opt' );
  560.                     text.setAttribute( 'size', '30' );
  561.                     text.setAttribute( 'value', '(options)' );
  562.                     text.setAttribute( 'onfocus', 'if( this.value == "(options)" ) this.value = "";' );
  563.                     text.setAttribute( 'onblur', 'if( this.value == "" ) this.value = "(options)";' );
  564.                     item.appendChild( text );
  565.                     item.appendChild( document.createTextNode( " " ) );
  566.                     item.appendChild( create_button( "Append command", 'vlm_schedule_append("' + elt.getAttribute( 'name' ) + '");') );
  567.                     
  568.                     list.appendChild( item );
  569.                     nb.appendChild( list );
  570.                     vlm_schedule_type_change( elt.getAttribute('name') );
  571.                     
  572.                 }
  573.                 elt = elt.nextSibling;
  574.             }
  575.         }
  576.     }
  577. }
  578. function vlm_cmd( cmd )
  579. {
  580.     loadXMLDoc( 'requests/vlm_cmd.xml?command='+encodeURIComponent(cmd), parse_vlm_cmd );
  581. }
  582. function vlm_get_elements( )
  583. {
  584.     loadXMLDoc( 'requests/vlm.xml', parse_vlm_elements );
  585. }
  586. /* helper functions */
  587. function vlm_disable( name )
  588. {
  589.     document.getElementById( 'vlm_command' ).value = "setup "+name+" disabled";
  590.     vlm_cmd( value( 'vlm_command' ) );
  591. }
  592. function vlm_enable( name )
  593. {
  594.     document.getElementById( 'vlm_command' ).value = "setup "+name+" enabled";
  595.     vlm_cmd( value( 'vlm_command' ) );
  596. }
  597. function vlm_loop( name )
  598. {
  599.     document.getElementById( 'vlm_command' ).value = "setup "+name+" loop";
  600.     vlm_cmd( value( 'vlm_command' ) );
  601. }
  602. function vlm_unloop( name )
  603. {
  604.     document.getElementById( 'vlm_command' ).value = "setup "+name+" unloop";
  605.     vlm_cmd( value( 'vlm_command' ) );
  606. }
  607. function vlm_play( name )
  608. {
  609.     document.getElementById( 'vlm_command' ).value = "control "+name+" play";
  610.     vlm_cmd( value( 'vlm_command' ) );
  611. }
  612. function vlm_pause( name )
  613. {
  614.     document.getElementById( 'vlm_command' ).value = "control "+name+" pause";
  615.     vlm_cmd( value( 'vlm_command' ) );
  616. }
  617. function vlm_stop( name )
  618. {
  619.     document.getElementById( 'vlm_command' ).value = "control "+name+" stop";
  620.     vlm_cmd( value( 'vlm_command' ) );
  621. }
  622. function vlm_delete( name )
  623. {
  624.     document.getElementById( 'vlm_command' ).value = "del "+name;
  625.     vlm_cmd( value( 'vlm_command' ) );
  626. }
  627. function vlm_delete_input( name, num )
  628. {
  629.     document.getElementById( 'vlm_command' ).value = "setup "+name+" inputdeln "+num;
  630.     vlm_cmd( value( 'vlm_command' ) );
  631. }
  632. function vlm_add_input( name, input )
  633. {
  634.     document.getElementById( 'vlm_command' ).value = "setup "+name+" input "+sanitize_input( input );
  635.     vlm_cmd( value( 'vlm_command' ) );
  636. }
  637. function vlm_output( name, output )
  638. {
  639.     document.getElementById( 'vlm_command' ).value = "setup "+name+" output "+output;
  640.     vlm_cmd( value( 'vlm_command' ) );
  641. }
  642. function vlm_option( name, option )
  643. {
  644.     document.getElementById( 'vlm_command' ).value = "setup "+name+" option "+option;
  645.     vlm_cmd( value( 'vlm_command' ) );
  646. }
  647. function vlm_batch( batch )
  648. {
  649.     var i;
  650.     var commands = batch.split( 'n' );
  651.     for( i = 0; i < commands.length; i++ )
  652.     {
  653.         document.getElementById( 'vlm_command' ).value = commands[i];
  654.         vlm_cmd( value( 'vlm_command' ) );
  655.     }
  656. }
  657. function vlm_schedule_append( name )
  658. {
  659.     var act = document.getElementById( 'vlm_elt_' + name + '_action' ).value;
  660.     document.getElementById( 'vlm_command' ).value = "setup " + name + " append ";
  661.     var itemname = document.getElementById( 'vlm_elt_' + name + '_name' ).value;
  662.     if( itemname == "(name)" ) itemname = "";
  663.     var opt = document.getElementById( 'vlm_elt_' + name + '_opt' ).value;
  664.     if( opt == "(options)" ) opt = "";
  665.         
  666.     if( act == '' )
  667.     {
  668.         document.getElementById( 'vlm_command' ).value += opt;
  669.     }
  670.     else
  671.     {
  672.         document.getElementById( 'vlm_command' ).value += 'control ' + itemname + " " + act + " " + opt;
  673.     }
  674.     vlm_cmd( value( 'vlm_command' ) );
  675. }
  676. function vlm_send( )
  677. {
  678.     vlm_cmd( value( 'vlm_command' ) );
  679. }