following changes in About.py:
authorRico Schulte <ricoschulte@users.schwerkraft.elitedvb.net>
Fri, 25 May 2007 09:30:28 +0000 (09:30 +0000)
committerRico Schulte <ricoschulte@users.schwerkraft.elitedvb.net>
Fri, 25 May 2007 09:30:28 +0000 (09:30 +0000)
change to more xml-like output

webinterface/src/web-data/templates.js
webinterface/src/web-data/tools.js
webinterface/src/web/about.xml

index 28ba2a2..332ef68 100644 (file)
-Version = '$Header$';
-// EPG Templates
-var tplUpdateStreamReaderIE = '<iframe id="UpdateStreamReaderIEFixIFrame" src="%(url_updates)" height="0" width="0" scrolling="none" frameborder="0">no iframe support!</iframe>';
-var tplEPGListHeader = '<table width="100%" border="0" cellspacing="1" cellpadding="0">';
-
-var tplEPGListItem  = '<tr style="background-color: #DDDDDD;">';
-       tplEPGListItem += '<td width="10%">%(date)</td>';
-       tplEPGListItem += '<td width="30%">%(servicename)</td>';
-       tplEPGListItem += '<td>%(title)</td>';
-       tplEPGListItem += '</tr>';
-       
-       tplEPGListItem += '<tr style="background-color: #DDDDDD;">';
-       tplEPGListItem += '<td>%(starttime)</td>';
-       tplEPGListItem += '<td>%(duration) min.</td>';
-       tplEPGListItem += '<td>%(description)</td>';
-       tplEPGListItem += '</tr>';
-       
-       tplEPGListItem += '<tr style="background-color: #DDDDDD;">';
-       tplEPGListItem += '<td valign="top">%(endtime)</td>';
-       tplEPGListItem += '<td colspan="2"rowspan="2" id="extdescription%(number)">%(extdescriptionSmall)</td>';
-       tplEPGListItem += '</tr>';
-       
-       tplEPGListItem +='<tr style="background-color: #DDDDDD;"><td>';
-       tplEPGListItem +='<a target="_blank" ><img src="/webdata/gfx/timer.png" title="add to Timers" border="0" onclick="addTimerByID(\'%(servicereference)\',\'%(eventid)\',\'0\');"></a>&nbsp;&nbsp;';
-       tplEPGListItem +='<a target="_blank" ><img src="/webdata/gfx/zap.png" title="add zap to Timers" border="0" onclick="addTimerByID(\'%(servicereference)\',\'%(eventid)\',\'1\');"></a>&nbsp;&nbsp;';
-       tplEPGListItem +='<a target="_blank" ><img src="/webdata/gfx/edit.gif" title="edit and add timer" border="0" onclick="loadTimerFormSeconds(0,\'%(start)\',\'%(end)\',0,\'%(servicereference)\',\'%(servicename)\',\'%(title)\',\'%(description)\',\'0\',0,\'%(eventid)\');"></a><br/>';
-       tplEPGListItem +='<a target="_blank" href="/web/epgsearch.rss?search=%(title)" ><img src="/webdata/gfx/feed.png" title="RSS-Feed for this Title" border="0"></a><br/>';
-       tplEPGListItem +='<a target="_blank" href="http://www.imdb.com/find?s=all&amp;q=%(titleESC)" ><img src="/webdata/gfx/world.png" title="search IMDb" border="0"></a><br/>';
-       tplEPGListItem +='</td></tr>';
-       tplEPGListItem += '<tr style="background-color: #AAAAAA;">';
-       tplEPGListItem += '<td colspan="3">&nbsp;</td>';
-       tplEPGListItem += '</tr>';
-
-var tplEPGListItemExtend  = '%(shortTxt) ...<a nohref onclick="setComplete(\'extdescription%(number)\',\'%(txt)\');">more</a>';
-
-var tplEPGListFooter = "</table>";
-       
-// ServiceList Templates
-var tplServiceListHeader  = '<table border="0" cellpadding="0" cellspacing="0" class="BodyContentChannellist">\n';
-       tplServiceListHeader += '<thead class="fixedHeader">\n';
-       tplServiceListHeader += '<tr>\n';
-       tplServiceListHeader += '<th><div class="sListHeader">ServiceList</div>\n';
-       tplServiceListHeader += '<div class="sListSearch">';
-       tplServiceListHeader += '<form onSubmit="loadEPGBySearchString(document.getElementById(\'searchText\').value); return false;">';
-       tplServiceListHeader += '<input type="text" id="searchText" onfocus="this.value=\'\'" value="Search EPG"/>';
-       tplServiceListHeader += '<input style="vertical-align:middle" type="image" src="/webdata/gfx/search.png" alt="search...">';
-       tplServiceListHeader += '</form></div></th>';
-       tplServiceListHeader += '</tr>\n';
-       tplServiceListHeader += '</thead>\n';
-       tplServiceListHeader += '<tbody class="scrollContent">\n';
-       tplServiceListHeader += '<input type="hidden" id="mainServiceRef" name="mainServiceRef" value="%(mainServiceRef)">\n';
-
-var tplServiceListItem  = '<tr id="%(servicereference)extend">\n';
-       tplServiceListItem += '<td style="border-top: 2px solid #AAA;" ><div class="sListSName"><a id="%(servicereference)" onclick="zap(this.id);" class="sListSLink">%(servicename)</a></div>';
-       tplServiceListItem += '<div class="sListExt"><a onclick="loadEPGByServiceReference(this.id)" id="%(servicereference)"><img src="/webdata/gfx/epg.png" border="0"/></a>\n';
-       tplServiceListItem += '<a target="_blank" href="/web/stream.m3u?ref=%(servicereference)"><img src="/webdata/gfx/screen.png" title="stream Service" border="0"></a></div>\n';
-       tplServiceListItem += '</tr>\n';
-    tplServiceListItem += '<tr>\n';
-       tplServiceListItem += '<td colspan="2"><div id="%(servicereference)EPGNOW"></div></td>\n';
-       tplServiceListItem += '</tr>\n';
-       
-var tplServiceListFooter = "</tbody></table>\n";
-//
-
-var    tplServiceListEPGItem  = '<div class="sListEPGTime">%(starttime)</div>\n';
-       tplServiceListEPGItem += '<div class="sListEPGTitle">%(title)</div>\n';
-       tplServiceListEPGItem += '<div class="sListEPGDuration">%(length) Min.</div>\n';
-
-// MovieList Templates
-var tplMovieListHeader  = '<table border="0" cellpadding="0" cellspacing="0" class="BodyContentChannellist">\n';
-       tplMovieListHeader += '<thead class="fixedHeader">\n';
-       tplMovieListHeader += '<tr>\n';
-       tplMovieListHeader += '<th><div class="sListHeader" style="color: #000000;">MovieList</div>\n';
-       tplMovieListHeader += '<div class="sListSearch">';
-       tplMovieListHeader += '<form onSubmit="loadEPGBySearchString(document.getElementById(\'searchText\').value); return false;">';
-       tplMovieListHeader += '<input type="text" id="searchText" onfocus="this.value=\'\'" value="Search EPG"/>';
-       tplMovieListHeader += '<input style="vertical-align:middle" type="image" src="/webdata/gfx/search.png" alt="search...">';
-       tplMovieListHeader += '</form></div></th>';
-       tplMovieListHeader += '</tr>\n';
-       tplMovieListHeader += '</thead>\n';
-       tplMovieListHeader += '<tbody class="scrollContent">\n';
-
-var tplMovieListItem  = '<tr>\n';
-       tplMovieListItem += '<td><div class="sListSName" title="%(description), %(descriptionextended)">%(title) (%(servicename))</div>';
-       tplMovieListItem += '<div class="sListExt">\n';
-       tplMovieListItem += '%(tags)\n';
-       tplMovieListItem += '<a target="_blank" href="/web/ts.m3u?file=%(filelink)"><img src="/webdata/gfx/screen.png" title="play file" border="0"></a>\n';
-       tplMovieListItem += '&nbsp;&nbsp;<a target="_blank" ><img src="/webdata/gfx/trash.gif" title="delete files" border="0" onclick="delMovieFile(\'%(filename)\',\'%(servicename)\',\'%(title)\',\'%(description)\');"></a>\n';
-       tplMovieListItem += '</div>\n';
-       tplMovieListItem += '</tr>\n';
-       
-var tplMovieListFooter = "</tbody></table>\n";
-
-// TimerList Templates
-var tplTimerListHeader  = '<table border="0" height="100%" cellpadding="0" cellspacing="0" class="BodyContentChannellist">\n';
-       tplTimerListHeader += '<thead class="fixedHeader">\n';
-       tplTimerListHeader += '<tr>\n';
-       tplTimerListHeader += '<th><div class="sListHeader" style="color: #000000;">TimerList</div>\n';
-       tplTimerListHeader += '<div class="sListSearch">';
-       tplTimerListHeader += '<form onSubmit="loadEPGBySearchString(document.getElementById(\'searchText\').value); return false;">';
-       tplTimerListHeader += '<input type="text" id="searchText" onfocus="this.value=\'\'" value="Search EPG"/>';
-       tplTimerListHeader += '<input style="vertical-align:middle" type="image" src="/webdata/gfx/search.png" alt="search...">';
-       tplTimerListHeader += '</form></div></th>';
-       tplTimerListHeader += '</tr>\n';
-       tplTimerListHeader += '</thead>\n';
-       tplTimerListHeader += '<tbody class="scrollContent" height="100%">\n';
-       tplTimerListHeader += '<tr>';
-       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListSName"><b>Channel</b><br/>Name</div></td>';
-/*     tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListTitle"><b>Name</b></div></td>';*/
-/*     tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListDescr"><b>Description</b></div></td>';*/
-       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListRepeat"><b>Repeated</b></div></td>';
-       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListDuration"><b>Time running</b></div></td>';
-       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListBegin"><b>Start time</b></div></td>';
-       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListEnd"><b>End time</b></div></td>';
-       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListAfter"><b>Event</b><br/>After event</div></td>';
-       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListOption"><b>Options</b></div></td></tr>\n';
-
-var tplTimerListItem  = '<tr width="99%">\n';
-       tplTimerListItem += '<td><div style="color: #%(color);" class="tListSName" title="%(description), %(descriptionextended)"><b>%(servicename)</b> <br/><br/> %(title)</div></td>\n';
-       tplTimerListItem += '<td><div style="color: #%(color);" class="tListRepeat">%(repeatedReadable)</div></td>\n';
-       tplTimerListItem += '<td><div style="color: #%(color);" class="tListDuration">%(duration)&nbsp;Min</div></td>\n';
-       tplTimerListItem += '<td><div style="color: #%(color);" class="tListBegin">%(beginDate)</div></td>\n';
-       tplTimerListItem += '<td><div style="color: #%(color);" class="tListEnd">%(endDate)</div></td>\n';
-       tplTimerListItem += '<td><div style="color: #%(color);" class="tListAfter"><b>%(justplayReadable)</b> <br/><br/> %(aftereventReadable)</div></td>\n';
-       tplTimerListItem += '<td><div style="color: #%(color);" class="tListOption"><a target="_blank" ><img src="/webdata/gfx/trash.gif" title="delete timer entry" border="0" onclick="delTimer(\'%(servicereference)\',\'%(begin)\',\'%(end)\',\'%(servicename)\',\'%(title)\',\'%(description)\',incomingTimerDelResult);"></a>\n';
-       tplTimerListItem += '<a target="_blank" ><img src="/webdata/gfx/%(onOff).png" title="toggle On/Off" border="0" onclick="sendToggleTimerDisable(\'%(justplay)\',\'%(begin)\',\'%(end)\',\'%(repeated)\',\'%(servicereference)\',\'%(title)\',\'%(description)\',\'%(afterevent)\',\'%(disabled)\' );"></a>\n';
-       tplTimerListItem += '<a target="_blank" ><img src="/webdata/gfx/edit.gif" title="edit timer entry" border="0" onclick="loadTimerFormSeconds(\'%(justplay)\',\'%(begin)\',\'%(end)\',\'%(repeated)\',\'%(servicereference)\',\'%(servicename)\',\'%(title)\',\'%(description)\',\'%(afterevent)\',1);"></a></div></td>\n';
-       tplTimerListItem += '</tr>\n';
-
-var tplTimerListFooter  = '<tr><button onclick="writeTimerListNow()">write TimerList to memory now</button></tr>\n';
-       tplTimerListFooter += '<tr><button onclick="cleanTimerListNow()">clean List from non-aktiv entries</button></tr>\n';
-    tplTimerListFooter += '</tbody></table>\n';
-
-var tplRecordingFooter   = '<hr><br><table style="text-align: left; width: 100%; height: 178px;" border="0" cellpadding="2" cellspacing="2"><tbody>';
-    tplRecordingFooter  += '<tr><td style="vertical-align: top;">';
-    tplRecordingFooter  += '<input type="radio" id="recordNowNothing" name="recordNow" value="nothing" checked>';
-    tplRecordingFooter  += '</td><td style="vertical-align: top;">';
-    tplRecordingFooter  += 'Do nothing';
-    tplRecordingFooter  += '</td></tr>';
-    tplRecordingFooter  += '<tr><td style="vertical-align: top;">';
-    tplRecordingFooter  += '<input type="radio" id="recordNowUndefinitely" name="recordNow" value="undefinitely">';
-    tplRecordingFooter  += '</td><td style="vertical-align: top;">';
-    tplRecordingFooter  += 'record current playing undefinitely';
-    tplRecordingFooter  += '</td></tr>';
-    tplRecordingFooter  += '<tr><td style="vertical-align: top;">';
-    tplRecordingFooter  += '<input type="radio" id="recordNowCurrent" name="recordNow" value="recordCurrentEvent">';
-    tplRecordingFooter  += '</td><td style="vertical-align: top;">';
-    tplRecordingFooter  += 'record current event';
-    tplRecordingFooter  += '</td></tr>';
-       tplRecordingFooter  += '<tr><td style="vertical-align: top;">';
-       tplRecordingFooter  += '&nbsp;';
-    tplRecordingFooter  += '</td><td style="vertical-align: top;">';
-    tplRecordingFooter  += '<img src="/webdata/gfx/ok.jpg" title="OK" border="0" onclick="recordingPushedDecision(ifChecked($(\'recordNowNothing\')), ifChecked($(\'recordNowUndefinitely\')), ifChecked($(\'recordNowCurrent\')) );window.close()">';
-    tplRecordingFooter  += '</td></tr>';
-    tplRecordingFooter  += '</tbody></table>';
-
-// Bouquetlist Template
-var tplBouquetListHeader = '<table id="BouquetList" width="100%" border="0" cellspacing="1" cellpadding="0" border="0">';
-
-var tplBouquetListItem  = '<tr>\n';
-       tplBouquetListItem += '<td><div class="navMenuItem" id="%(servicereference)" onclick="loadBouquet(this.id);">%(bouquetname)</div></td>';
-       tplBouquetListItem += '</tr>\n';
-
-var tplBouquetListFooter = "</table>";
-
-//Volume Template
-var tplVolumePanel  = "<img onclick='volumeUp()' src='/webdata/gfx/arrow_up.png'>"; 
-       tplVolumePanel += "<img onclick='volumeDown()' src='/webdata/gfx/arrow_down.png'>"; 
-       tplVolumePanel += "<img id='volume1' onclick='volumeSet(10)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='volume2' onclick='volumeSet(20)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='volume3' onclick='volumeSet(30)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='volume4' onclick='volumeSet(40)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='volume5' onclick='volumeSet(50)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='volume6' onclick='volumeSet(60)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='volume7' onclick='volumeSet(70)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='volume8' onclick='volumeSet(80)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='volume9' onclick='volumeSet(90)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='volume10' onclick='volumeSet(100)' src='/webdata/gfx/led_off.png'>"; 
-       tplVolumePanel += "<img id='speaker' onclick='volumeMute()' src='/webdata/gfx/speak_on.png'>";
-       
-//Signal Template
-var tplSignalPanel  = '<table width="100%" id="SignalPanelTable">';
-       tplSignalPanel += '<tr><td style="background-color: #DDDDDD;">SNR</td><td width="50" style="background-color: #DDDDDD;"><div id="SNR">N/A</div></td></tr>';
-       tplSignalPanel += '<tr><td style="background-color: #DDDDDD;">AGC</td><td width="50" style="background-color: #DDDDDD;"><div id="AGC">N/A</div></td></tr>';
-       tplSignalPanel += '<tr><td style="background-color: #DDDDDD;">BER</td><td width="50" style="background-color: #DDDDDD;"><div id="BER">N/A</div></td></tr>';
-       tplSignalPanel += '</table>';
-       
-var tplSignalPanelButton = '<img src="/webdata/gfx/signal.png" title="show SignalInfoPanel" onclick="openSignalDialog();" title="view Signal Info">';
-
-// Message send
-var tplMessageSendForm = ""
-       tplMessageSendForm += '<table id="MessageSendForm" width="100%" border="0" cellspacing="1" cellpadding="0" border="0">';
-       tplMessageSendForm += '<tr><td>Text</td><td><input type="text" id="MessageSendFormText" value=""></td></tr>\n';
-       tplMessageSendForm += '<tr><td>Timeout</td><td><input type="text" id="MessageSendFormTimeout" value=""></td></tr>\n';
-       tplMessageSendForm += '<tr><td>Typ</td><td><select id="MessageSendFormType">';
-       tplMessageSendForm += '<option value="1">Info</option>';
-       tplMessageSendForm += '<option value="0">YesNo</option>';
-       tplMessageSendForm += '<option value="2">Warning</option>';
-       tplMessageSendForm += '<option value="3">Error</option>';
-       tplMessageSendForm += '</select></td></tr>\n';
-       tplMessageSendForm += '<tr><td colspan="2"><button onclick="sendMessage()">send Message</button></td></tr>\n';
-       tplMessageSendForm += "</table></form>\n";
-
-var tplPowerStateSendForm = '';
-    tplPowerStateSendForm += '<hr>';
-    tplPowerStateSendForm += '<p><center><button onclick="sendPowerState(1)">deepstandby Dreambox</button></center></p>';
-    tplPowerStateSendForm += '<p><center><button onclick="sendPowerState(2)">reboot Dreambox</button></center></p>';
-    tplPowerStateSendForm += '<hr>';
-    tplPowerStateSendForm += '<p><center><button onclick="sendPowerState(3)">restart Enigma2</button></center></p>';
-//Something is not working here, so I will do a quickhack
-//    tplPowerStateSendForm += '<p><center><button onclick="sendPowerState(4)">standby Enigma2</button></center></p>';
-       tplPowerStateSendForm += '<p><center><button onclick="sendRemoteControlRequest(116)">toggle standby Enigma2</button></center></p>';
-
-// Template for the RemoteControl Window
-var tplRemoteControlForm = '';
-       tplRemoteControlForm += '<map name="remotecontrol">';
-       tplRemoteControlForm += '<area shape="circle" coords="129, 54, 10" nohref onclick="sendRemoteControlRequest(116)" alt="Power">';
-//     tplRemoteControlForm += '<area shape="circle" coords="72, 95, 15" nohref alt="Dream message">';
-//     tplRemoteControlForm += '<area shape="circle" coords="130, 95, 15" nohref alt="TV Screenshot">';
-       tplRemoteControlForm += '<area shape="circle" coords="63, 123, 10" nohref onclick="sendRemoteControlRequest(2)" alt="1">';
-       tplRemoteControlForm += '<area shape="circle" coords="109, 123, 10" nohref onclick="sendRemoteControlRequest(3)" alt="2">';
-       tplRemoteControlForm += '<area shape="circle" coords="153, 123, 10" nohref onclick="sendRemoteControlRequest(4)" alt="3">';
-       tplRemoteControlForm += '<area shape="circle" coords="63, 148, 10" nohref onclick="sendRemoteControlRequest(5)" alt="4">';
-       tplRemoteControlForm += '<area shape="circle" coords="109, 148, 10" nohref onclick="sendRemoteControlRequest(6)" alt="5">';
-       tplRemoteControlForm += '<area shape="circle" coords="153, 148, 10" nohref onclick="sendRemoteControlRequest(7)" alt="6">';
-       tplRemoteControlForm += '<area shape="circle" coords="63, 173, 10" nohref onclick="sendRemoteControlRequest(8)" alt="7">';
-       tplRemoteControlForm += '<area shape="circle" coords="109, 173, 10" nohref onclick="sendRemoteControlRequest(9)" alt="8">';
-       tplRemoteControlForm += '<area shape="circle" coords="153, 173, 10" nohref onclick="sendRemoteControlRequest(10)" alt="9">';
-       tplRemoteControlForm += '<area shape="circle" coords="63, 197, 10" nohref onclick="sendRemoteControlRequest(412)" alt="previous">';
-       tplRemoteControlForm += '<area shape="circle" coords="109, 197, 10" nohref onclick="sendRemoteControlRequest(11)" alt="0">';
-       tplRemoteControlForm += '<area shape="circle" coords="153, 197, 10" nohref onclick="sendRemoteControlRequest(407)" alt="next">';
-       tplRemoteControlForm += '<area shape="circle" coords="54, 243, 15" nohref onclick="sendRemoteControlRequest(115)" alt="volume up">';
-       tplRemoteControlForm += '<area shape="circle" coords="107, 233, 10" nohref onclick="sendRemoteControlRequest(113)" alt="mute">';
-       tplRemoteControlForm += '<area shape="circle" coords="159, 243, 15" nohref onclick="sendRemoteControlRequest(402)" alt="bouquet up">';
-       tplRemoteControlForm += '<area shape="circle" coords="66, 274, 15" nohref onclick="sendRemoteControlRequest(114)" alt="volume down">';
-       tplRemoteControlForm += '<area shape="circle" coords="107, 258, 10" nohref onclick="sendRemoteControlRequest(174)" alt="lame">';
-       tplRemoteControlForm += '<area shape="circle" coords="147, 274, 15" nohref onclick="sendRemoteControlRequest(403)" alt="bouquet down">';
-       tplRemoteControlForm += '<area shape="circle" coords="48, 306, 10" nohref onclick="sendRemoteControlRequest(358)" alt="info">';
-       tplRemoteControlForm += '<area shape="circle" coords="106, 310, 15" nohref onclick="sendRemoteControlRequest(103)" alt="up">';
-       tplRemoteControlForm += '<area shape="circle" coords="167, 306, 10" nohref onclick="sendRemoteControlRequest(139)" alt="menu">';
-       tplRemoteControlForm += '<area shape="circle" coords="70, 343, 15" nohref onclick="sendRemoteControlRequest(105)" alt="left">';
-    tplRemoteControlForm += '<area shape="circle" coords="108, 340, 15" nohref onclick="sendRemoteControlRequest(352)" alt="OK">';
-       tplRemoteControlForm += '<area shape="circle" coords="146, 343, 15" nohref onclick="sendRemoteControlRequest(106)" alt="right">';
-       tplRemoteControlForm += '<area shape="circle" coords="53, 381, 10" nohref onclick="sendRemoteControlRequest(392)" alt="audio">';
-       tplRemoteControlForm += '<area shape="circle" coords="106, 374, 15" nohref onclick="sendRemoteControlRequest(108)" alt="down">';
-       tplRemoteControlForm += '<area shape="circle" coords="162, 381, 10" nohref onclick="sendRemoteControlRequest(393)" alt="video">';
-       tplRemoteControlForm += '<area shape="circle" coords="56, 421, 10" nohref onclick="sendRemoteControlRequest(398)" alt="red">';
-       tplRemoteControlForm += '<area shape="circle" coords="90, 422, 10" nohref onclick="sendRemoteControlRequest(399)" alt="green">';
-       tplRemoteControlForm += '<area shape="circle" coords="123, 422, 10" nohref onclick="sendRemoteControlRequest(400)" alt="yellow">';
-       tplRemoteControlForm += '<area shape="circle" coords="158, 421, 10" nohref onclick="sendRemoteControlRequest(401)" alt="blue">';
-       tplRemoteControlForm += '<area shape="circle" coords="61, 460, 10" nohref onclick="sendRemoteControlRequest(377)" alt="tv">';
-       tplRemoteControlForm += '<area shape="circle" coords="90, 461, 10" nohref onclick="sendRemoteControlRequest(385)" alt="radio">';
-       tplRemoteControlForm += '<area shape="circle" coords="123, 461, 10" nohref onclick="sendRemoteControlRequest(388)" alt="text">';
-       tplRemoteControlForm += '<area shape="circle" coords="153, 460, 10" nohref onclick="sendRemoteControlRequest(138)" alt="help">';
-    tplRemoteControlForm += '</map>';
-       tplRemoteControlForm += '<img src="/webdata/gfx/remotecontrol.jpg" height="607" width="220" border="0)" alt="Remote Control" usemap="#remotecontrol">';
-       
-var tplAddTimerForm = '';
-       tplAddTimerForm += '<table border=0 cellpadding=0 cellspacing=10>';
-       tplAddTimerForm += '<tr><td colspan="3">Action:</td>';
-       tplAddTimerForm += '<td colspan="3">';
-       tplAddTimerForm += '<select name="justplay" id="justplay" size="1">';
-       tplAddTimerForm += '%(justplay)';
-       tplAddTimerForm += '</select></td></tr>';
-       tplAddTimerForm += '<tr><td colspan="3">&nbsp;</td>';
-       tplAddTimerForm += '<td colspan="3">Note: For recurring events start/end day/month are not required.</td></tr>';
-       tplAddTimerForm += '<tr><td colspan="3">Start:</td>';
-       tplAddTimerForm += '<td colspan="3"><select name="syear" size="1" id="syear" onchange="javascript:addTimerFormChangeTime(\'syear\');">%(syear)</select>.';
-       tplAddTimerForm += '<select name="smonth" id="smonth" size="1" onchange="javascript:addTimerFormChangeTime(\'smonth\');">%(smonth)</select>.';
-       tplAddTimerForm += '<select name="sday" id="sday" size="1" onchange="javascript:addTimerFormChangeTime(\'sday\');">%(sday)</select>';
-       tplAddTimerForm += '&nbsp;-&nbsp;<select name="shour" id="shour" size="1" onchange="javascript:addTimerFormChangeTime(\'shour\');">%(shour)</select>';
-       tplAddTimerForm += ':<select name="smin" id="smin" size="1" onchange="javascript:addTimerFormChangeTime(\'smin\');">%(smin)</select></td></tr>';
-       tplAddTimerForm += '<tr><td colspan="3">End:</td>';
-       tplAddTimerForm += '<td colspan="3"><select name="eyear" id="eyear" size="1" onchange="javascript:addTimerFormChangeTime(\'eyear\');">%(eyear)</select>.';
-       tplAddTimerForm += '<select name="emonth" id="emonth" size="1" onchange="javascript:addTimerFormChangeTime(\'emonth\');">%(emonth)</select>.';
-       tplAddTimerForm += '<select name="eday" id="eday" size="1" onchange="javascript:addTimerFormChangeTime(\'eday\');">%(eday)</select>';
-       tplAddTimerForm += '&nbsp;-&nbsp;<select name="ehour" id="ehour" size="1" onchange="javascript:addTimerFormChangeTime(\'ehour\');">%(ehour)</select>';
-       tplAddTimerForm += ':<select name="emin" id="emin" size="1" onchange="javascript:addTimerFormChangeTime(\'emin\');">%(emin)</select></td></tr>';
-       tplAddTimerForm += '<tr><td colspan="3">&nbsp;</td><td colspan="3">Note: For one-time events the "days" field doesn\'t have to be specified.</td></tr>';
-       tplAddTimerForm += '<tr><td colspan="3">Days:</td><td colspan="3">%(repeated)';
-       tplAddTimerForm += '<tr><td colspan="3">Channel:</td><td>';
-       tplAddTimerForm += '<p><input type="radio" id="tvradio" name="tvradio" value="tv" checked onchange="javascript:addTimerFormChangeType();"">TV</p>';
-       tplAddTimerForm += '<p><input type="radio" name="tvradio" value="radio" onchange="javascript:addTimerFormChangeType();">Radio</p><td>';
-       tplAddTimerForm += '<p>Channel:</p>';
-       tplAddTimerForm += '<select name="channel" id="channel" size="1" onchange="timerFormExtendChannellist($(\'channel\').options[$(\'channel\').selectedIndex].value)">%(channel)</select></td></tr>';
-       tplAddTimerForm += '<tr><td colspan="3">Name:</td>';
-       tplAddTimerForm += '<td colspan="3"><input name="name" id="name" type="text" size="100" maxlength="100" style="color: #000000;" value="%(name)"></td></tr>';
-       tplAddTimerForm += '<tr><td colspan="3">Description:</td>';
-       tplAddTimerForm += '<td colspan="3"><input name="descr" id="descr" type="text" size="100" maxlength="100" style="color: #000000;" value="%(description)"></td></tr>';
-       tplAddTimerForm += '<tr><td colspan="3">After event do:</td>';
-       tplAddTimerForm += '<td colspan="3"><select id="after_event" name="after_event" size="1">%(afterEvent)</select></td></tr>';
-       tplAddTimerForm += '<tr>&nbsp;&nbsp;</tr>';
-       tplAddTimerForm += '<tr><td colspan="3">&nbsp;</td><td colspan="3">';
-       tplAddTimerForm += '<input name="deleteOldOnSave" id="deleteOldOnSave" type="hidden" value="%(deleteOldOnSave)">';
-       tplAddTimerForm += '<input name="channelOld" id="channelOld" type="hidden" value="%(channelOld)">';
-       tplAddTimerForm += '<input name="beginOld" id="beginOld" type="hidden" value="%(beginOld)">';
-       tplAddTimerForm += '<input name="endOld" id="endOld" type="hidden" value="%(endOld)">';
-       tplAddTimerForm += '<input name="eventID" id="eventID" type="hidden" value="%(eventID)">';
-       tplAddTimerForm +=      '<button onclick="sendAddTimer()">Add/Save</button></td></tr></table>';
-
-var tplAddTimerFormOptions = '';
-       tplAddTimerFormOptions += '<option value="%(value)" %(selected)>%(txt)</option>';
-       
-var tplAddTimerFormCheckbox = '';
-       tplAddTimerFormCheckbox += '<input type="checkbox" id="%(id)" name="%(name)" value="%(value)" %(checked)>&nbsp;%(txt)&nbsp;&nbsp;';
-
-var tplAbout  = '<table align="center" border="0" width="80%">';
-    tplAbout += '<tr><td align="left" width="50%" valign="top">';
-    tplAbout += '<table align="center" border="0" width="100%">';
-    tplAbout += '<tr><td align="left"></br></td></tr>';
-    tplAbout += '<tr><td align="left"><b>Box Info:</b></td></tr>';
-    tplAbout += '<tr><td align="left">%(enigmaVersion)</td></tr>';
-    tplAbout += '<tr><td align="left">%(fpVersion)</td></tr>';
-    tplAbout += '<tr><td align="left"></br></td></tr>';
-    tplAbout += '<tr><td align="left">%(tunerInfo)</td></tr>';
-    tplAbout += '<tr><td align="left"></br></td></tr>';
-    tplAbout += '<tr><td align="left">%(hddInfo)</td></tr>';
-    tplAbout += '<tr><td align="left"></br></td></tr>';
-/*
-    tplAbout += '<tr><td align="left"><b>LAN Info:</b></td></tr>';
-    tplAbout += '<tr><td align="left">%(lanDHCP)</td></tr>';
-    tplAbout += '<tr><td align="left">%(lanIP)</td></tr>';
-    tplAbout += '<tr><td align="left">%(lanMask)</td></tr>';
-    tplAbout += '<tr><td align="left">%(lanGW)</td></tr>';
-    tplAbout += '<tr><td align="left">%(lanDNS)</td></tr>\n';
-*/
-    tplAbout += '</table></td>\n';
-    tplAbout += '<td align="left" width="50%" valign="top">';
-    tplAbout += '<table align="center" border="0" width="100%">';
-    tplAbout += '<tr><td align="left"></br></td></tr>\n';
-    tplAbout += '<tr><td align="left"><b>Service Info:</b></td></tr>\n';
-    tplAbout += '<tr><td align="left">Name: %(serviceName)</td></tr>\n';
-    tplAbout += '<tr><td align="left">Provider: %(serviceProvider)</td></tr>\n';
-    tplAbout += '<tr><td align="left">Videoformat: %(serviceAspect)</td></tr>\n';
-    tplAbout += '<tr><td align="left">Namespace: %(serviceNamespace)</td></tr>\n';
-    tplAbout += '<tr><td align="left"></br></td></tr>\n';
-    tplAbout += '<tr><td align="left"><b>PIDs:</b></td></tr>\n';
-    tplAbout += '<tr><td align="left">VideoPID: %(vPIDh) (%(vPID)d)</td></tr>\n';
-    tplAbout += '<tr><td align="left">AudioPID: %(aPIDh) (%(aPID)d)</td></tr>\n';
-    tplAbout += '<tr><td align="left">PCRPID: %(pcrIDh) (%(pcrID)d)</td></tr>\n';
-    tplAbout += '<tr><td align="left">PMTPID: %(pmtPIDh) (%(pmtPID)d)</td></tr>\n';
-    tplAbout += '<tr><td align="left">TXTPID: %(txtPIDh) (%(txtPID)d)</td></tr>\n';
-    tplAbout += '<tr><td align="left">TSID: %(tsIDh) (%(tsID)d)</td></tr>\n';
-    tplAbout += '<tr><td align="left">ONID: %(onIDh) (%(onID)d)</td></tr>\n';
-    tplAbout += '<tr><td align="left">SID: %(sidh) (%(sid)d)</td></tr>\n';
-    tplAbout += '</table>';
-
-var tplExtraHiddenFunctions  = '<ul style="list-style-type:disc">';
-       tplExtraHiddenFunctions += '<li><div onclick="restartTwisted()">Restart Twisted</div></li>';
-       tplExtraHiddenFunctions += '<li><div onclick="clearInterval(UpdateStreamReaderPollTimer);">Stop Time/Signal/Current-Channel -Updates</div></li>';
-       tplExtraHiddenFunctions += '<li><div onclick="restartUpdateStream();">Restart Time/Signal/Current-Channel -Updates</div></li>';
-       tplExtraHiddenFunctions += '<li><div onclick="startDebugWindow();">Start Debug-Window</div></li>';
-       tplExtraHiddenFunctions += '</ul>'
-       
+Version = '$Header$';\r
+// EPG Templates\r
+var tplUpdateStreamReaderIE = '<iframe id="UpdateStreamReaderIEFixIFrame" src="%(url_updates)" height="0" width="0" scrolling="none" frameborder="0">no iframe support!</iframe>';\r
+var tplEPGListHeader = '<table width="100%" border="0" cellspacing="1" cellpadding="0">';\r
+\r
+var tplEPGListItem  = '<tr style="background-color: #DDDDDD;">';\r
+       tplEPGListItem += '<td width="10%">%(date)</td>';\r
+       tplEPGListItem += '<td width="30%">%(servicename)</td>';\r
+       tplEPGListItem += '<td>%(title)</td>';\r
+       tplEPGListItem += '</tr>';\r
+       \r
+       tplEPGListItem += '<tr style="background-color: #DDDDDD;">';\r
+       tplEPGListItem += '<td>%(starttime)</td>';\r
+       tplEPGListItem += '<td>%(duration) min.</td>';\r
+       tplEPGListItem += '<td>%(description)</td>';\r
+       tplEPGListItem += '</tr>';\r
+       \r
+       tplEPGListItem += '<tr style="background-color: #DDDDDD;">';\r
+       tplEPGListItem += '<td valign="top">%(endtime)</td>';\r
+       tplEPGListItem += '<td colspan="2"rowspan="2" id="extdescription%(number)">%(extdescriptionSmall)</td>';\r
+       tplEPGListItem += '</tr>';\r
+       \r
+       tplEPGListItem +='<tr style="background-color: #DDDDDD;"><td>';\r
+       tplEPGListItem +='<a target="_blank" ><img src="/webdata/gfx/timer.png" title="add to Timers" border="0" onclick="addTimerByID(\'%(servicereference)\',\'%(eventid)\',\'0\');"></a>&nbsp;&nbsp;';\r
+       tplEPGListItem +='<a target="_blank" ><img src="/webdata/gfx/zap.png" title="add zap to Timers" border="0" onclick="addTimerByID(\'%(servicereference)\',\'%(eventid)\',\'1\');"></a>&nbsp;&nbsp;';\r
+       tplEPGListItem +='<a target="_blank" ><img src="/webdata/gfx/edit.gif" title="edit and add timer" border="0" onclick="loadTimerFormSeconds(0,\'%(start)\',\'%(end)\',0,\'%(servicereference)\',\'%(servicename)\',\'%(title)\',\'%(description)\',\'0\',0,\'%(eventid)\');"></a><br/>';\r
+       tplEPGListItem +='<a target="_blank" href="/web/epgsearch.rss?search=%(title)" ><img src="/webdata/gfx/feed.png" title="RSS-Feed for this Title" border="0"></a><br/>';\r
+       tplEPGListItem +='<a target="_blank" href="http://www.imdb.com/find?s=all&amp;q=%(titleESC)" ><img src="/webdata/gfx/world.png" title="search IMDb" border="0"></a><br/>';\r
+       tplEPGListItem +='</td></tr>';\r
+       tplEPGListItem += '<tr style="background-color: #AAAAAA;">';\r
+       tplEPGListItem += '<td colspan="3">&nbsp;</td>';\r
+       tplEPGListItem += '</tr>';\r
+\r
+var tplEPGListItemExtend  = '%(shortTxt) ...<a nohref onclick="setComplete(\'extdescription%(number)\',\'%(txt)\');">more</a>';\r
+\r
+var tplEPGListFooter = "</table>";\r
+       \r
+// ServiceList Templates\r
+var tplServiceListHeader  = '<table border="0" cellpadding="0" cellspacing="0" class="BodyContentChannellist">\n';\r
+       tplServiceListHeader += '<thead class="fixedHeader">\n';\r
+       tplServiceListHeader += '<tr>\n';\r
+       tplServiceListHeader += '<th><div class="sListHeader">ServiceList</div>\n';\r
+       tplServiceListHeader += '<div class="sListSearch">';\r
+       tplServiceListHeader += '<form onSubmit="loadEPGBySearchString(document.getElementById(\'searchText\').value); return false;">';\r
+       tplServiceListHeader += '<input type="text" id="searchText" onfocus="this.value=\'\'" value="Search EPG"/>';\r
+       tplServiceListHeader += '<input style="vertical-align:middle" type="image" src="/webdata/gfx/search.png" alt="search...">';\r
+       tplServiceListHeader += '</form></div></th>';\r
+       tplServiceListHeader += '</tr>\n';\r
+       tplServiceListHeader += '</thead>\n';\r
+       tplServiceListHeader += '<tbody class="scrollContent">\n';\r
+       tplServiceListHeader += '<input type="hidden" id="mainServiceRef" name="mainServiceRef" value="%(mainServiceRef)">\n';\r
+\r
+var tplServiceListItem  = '<tr id="%(servicereference)extend">\n';\r
+       tplServiceListItem += '<td style="border-top: 2px solid #AAA;" ><div class="sListSName"><a id="%(servicereference)" onclick="zap(this.id);" class="sListSLink">%(servicename)</a></div>';\r
+       tplServiceListItem += '<div class="sListExt"><a onclick="loadEPGByServiceReference(this.id)" id="%(servicereference)"><img src="/webdata/gfx/epg.png" border="0"/></a>\n';\r
+       tplServiceListItem += '<a target="_blank" href="/web/stream.m3u?ref=%(servicereference)"><img src="/webdata/gfx/screen.png" title="stream Service" border="0"></a></div>\n';\r
+       tplServiceListItem += '</tr>\n';\r
+    tplServiceListItem += '<tr>\n';\r
+       tplServiceListItem += '<td colspan="2"><div id="%(servicereference)EPGNOW"></div></td>\n';\r
+       tplServiceListItem += '</tr>\n';\r
+       \r
+var tplServiceListFooter = "</tbody></table>\n";\r
+//\r
+\r
+var    tplServiceListEPGItem  = '<div class="sListEPGTime">%(starttime)</div>\n';\r
+       tplServiceListEPGItem += '<div class="sListEPGTitle">%(title)</div>\n';\r
+       tplServiceListEPGItem += '<div class="sListEPGDuration">%(length) Min.</div>\n';\r
+\r
+// MovieList Templates\r
+var tplMovieListHeader  = '<table border="0" cellpadding="0" cellspacing="0" class="BodyContentChannellist">\n';\r
+       tplMovieListHeader += '<thead class="fixedHeader">\n';\r
+       tplMovieListHeader += '<tr>\n';\r
+       tplMovieListHeader += '<th><div class="sListHeader" style="color: #000000;">MovieList</div>\n';\r
+       tplMovieListHeader += '<div class="sListSearch">';\r
+       tplMovieListHeader += '<form onSubmit="loadEPGBySearchString(document.getElementById(\'searchText\').value); return false;">';\r
+       tplMovieListHeader += '<input type="text" id="searchText" onfocus="this.value=\'\'" value="Search EPG"/>';\r
+       tplMovieListHeader += '<input style="vertical-align:middle" type="image" src="/webdata/gfx/search.png" alt="search...">';\r
+       tplMovieListHeader += '</form></div></th>';\r
+       tplMovieListHeader += '</tr>\n';\r
+       tplMovieListHeader += '</thead>\n';\r
+       tplMovieListHeader += '<tbody class="scrollContent">\n';\r
+\r
+var tplMovieListItem  = '<tr>\n';\r
+       tplMovieListItem += '<td><div class="sListSName" title="%(description), %(descriptionextended)">%(title) (%(servicename))</div>';\r
+       tplMovieListItem += '<div class="sListExt">\n';\r
+       tplMovieListItem += '%(tags)\n';\r
+       tplMovieListItem += '<a target="_blank" href="/web/ts.m3u?file=%(filelink)"><img src="/webdata/gfx/screen.png" title="play file" border="0"></a>\n';\r
+       tplMovieListItem += '&nbsp;&nbsp;<a target="_blank" ><img src="/webdata/gfx/trash.gif" title="delete files" border="0" onclick="delMovieFile(\'%(filename)\',\'%(servicename)\',\'%(title)\',\'%(description)\');"></a>\n';\r
+       tplMovieListItem += '</div>\n';\r
+       tplMovieListItem += '</tr>\n';\r
+       \r
+var tplMovieListFooter = "</tbody></table>\n";\r
+\r
+// TimerList Templates\r
+var tplTimerListHeader  = '<table border="0" height="100%" cellpadding="0" cellspacing="0" class="BodyContentChannellist">\n';\r
+       tplTimerListHeader += '<thead class="fixedHeader">\n';\r
+       tplTimerListHeader += '<tr>\n';\r
+       tplTimerListHeader += '<th><div class="sListHeader" style="color: #000000;">TimerList</div>\n';\r
+       tplTimerListHeader += '<div class="sListSearch">';\r
+       tplTimerListHeader += '<form onSubmit="loadEPGBySearchString(document.getElementById(\'searchText\').value); return false;">';\r
+       tplTimerListHeader += '<input type="text" id="searchText" onfocus="this.value=\'\'" value="Search EPG"/>';\r
+       tplTimerListHeader += '<input style="vertical-align:middle" type="image" src="/webdata/gfx/search.png" alt="search...">';\r
+       tplTimerListHeader += '</form></div></th>';\r
+       tplTimerListHeader += '</tr>\n';\r
+       tplTimerListHeader += '</thead>\n';\r
+       tplTimerListHeader += '<tbody class="scrollContent" height="100%">\n';\r
+       tplTimerListHeader += '<tr>';\r
+       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListSName"><b>Channel</b><br/>Name</div></td>';\r
+/*     tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListTitle"><b>Name</b></div></td>';*/\r
+/*     tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListDescr"><b>Description</b></div></td>';*/\r
+       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListRepeat"><b>Repeated</b></div></td>';\r
+       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListDuration"><b>Time running</b></div></td>';\r
+       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListBegin"><b>Start time</b></div></td>';\r
+       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListEnd"><b>End time</b></div></td>';\r
+       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListAfter"><b>Event</b><br/>After event</div></td>';\r
+       tplTimerListHeader += '<td><div style="color: #00BCBC;" class="tListOption"><b>Options</b></div></td></tr>\n';\r
+\r
+var tplTimerListItem  = '<tr width="99%">\n';\r
+       tplTimerListItem += '<td><div style="color: #%(color);" class="tListSName" title="%(description), %(descriptionextended)"><b>%(servicename)</b> <br/><br/> %(title)</div></td>\n';\r
+       tplTimerListItem += '<td><div style="color: #%(color);" class="tListRepeat">%(repeatedReadable)</div></td>\n';\r
+       tplTimerListItem += '<td><div style="color: #%(color);" class="tListDuration">%(duration)&nbsp;Min</div></td>\n';\r
+       tplTimerListItem += '<td><div style="color: #%(color);" class="tListBegin">%(beginDate)</div></td>\n';\r
+       tplTimerListItem += '<td><div style="color: #%(color);" class="tListEnd">%(endDate)</div></td>\n';\r
+       tplTimerListItem += '<td><div style="color: #%(color);" class="tListAfter"><b>%(justplayReadable)</b> <br/><br/> %(aftereventReadable)</div></td>\n';\r
+       tplTimerListItem += '<td><div style="color: #%(color);" class="tListOption"><a target="_blank" ><img src="/webdata/gfx/trash.gif" title="delete timer entry" border="0" onclick="delTimer(\'%(servicereference)\',\'%(begin)\',\'%(end)\',\'%(servicename)\',\'%(title)\',\'%(description)\',incomingTimerDelResult);"></a>\n';\r
+       tplTimerListItem += '<a target="_blank" ><img src="/webdata/gfx/%(onOff).png" title="toggle On/Off" border="0" onclick="sendToggleTimerDisable(\'%(justplay)\',\'%(begin)\',\'%(end)\',\'%(repeated)\',\'%(servicereference)\',\'%(title)\',\'%(description)\',\'%(afterevent)\',\'%(disabled)\' );"></a>\n';\r
+       tplTimerListItem += '<a target="_blank" ><img src="/webdata/gfx/edit.gif" title="edit timer entry" border="0" onclick="loadTimerFormSeconds(\'%(justplay)\',\'%(begin)\',\'%(end)\',\'%(repeated)\',\'%(servicereference)\',\'%(servicename)\',\'%(title)\',\'%(description)\',\'%(afterevent)\',1);"></a></div></td>\n';\r
+       tplTimerListItem += '</tr>\n';\r
+\r
+var tplTimerListFooter  = '<tr><button onclick="writeTimerListNow()">write TimerList to memory now</button></tr>\n';\r
+       tplTimerListFooter += '<tr><button onclick="cleanTimerListNow()">clean List from non-aktiv entries</button></tr>\n';\r
+    tplTimerListFooter += '</tbody></table>\n';\r
+\r
+var tplRecordingFooter   = '<hr><br><table style="text-align: left; width: 100%; height: 178px;" border="0" cellpadding="2" cellspacing="2"><tbody>';\r
+    tplRecordingFooter  += '<tr><td style="vertical-align: top;">';\r
+    tplRecordingFooter  += '<input type="radio" id="recordNowNothing" name="recordNow" value="nothing" checked>';\r
+    tplRecordingFooter  += '</td><td style="vertical-align: top;">';\r
+    tplRecordingFooter  += 'Do nothing';\r
+    tplRecordingFooter  += '</td></tr>';\r
+    tplRecordingFooter  += '<tr><td style="vertical-align: top;">';\r
+    tplRecordingFooter  += '<input type="radio" id="recordNowUndefinitely" name="recordNow" value="undefinitely">';\r
+    tplRecordingFooter  += '</td><td style="vertical-align: top;">';\r
+    tplRecordingFooter  += 'record current playing undefinitely';\r
+    tplRecordingFooter  += '</td></tr>';\r
+    tplRecordingFooter  += '<tr><td style="vertical-align: top;">';\r
+    tplRecordingFooter  += '<input type="radio" id="recordNowCurrent" name="recordNow" value="recordCurrentEvent">';\r
+    tplRecordingFooter  += '</td><td style="vertical-align: top;">';\r
+    tplRecordingFooter  += 'record current event';\r
+    tplRecordingFooter  += '</td></tr>';\r
+       tplRecordingFooter  += '<tr><td style="vertical-align: top;">';\r
+       tplRecordingFooter  += '&nbsp;';\r
+    tplRecordingFooter  += '</td><td style="vertical-align: top;">';\r
+    tplRecordingFooter  += '<img src="/webdata/gfx/ok.jpg" title="OK" border="0" onclick="recordingPushedDecision(ifChecked($(\'recordNowNothing\')), ifChecked($(\'recordNowUndefinitely\')), ifChecked($(\'recordNowCurrent\')) );window.close()">';\r
+    tplRecordingFooter  += '</td></tr>';\r
+    tplRecordingFooter  += '</tbody></table>';\r
+\r
+// Bouquetlist Template\r
+var tplBouquetListHeader = '<table id="BouquetList" width="100%" border="0" cellspacing="1" cellpadding="0" border="0">';\r
+\r
+var tplBouquetListItem  = '<tr>\n';\r
+       tplBouquetListItem += '<td><div class="navMenuItem" id="%(servicereference)" onclick="loadBouquet(this.id);">%(bouquetname)</div></td>';\r
+       tplBouquetListItem += '</tr>\n';\r
+\r
+var tplBouquetListFooter = "</table>";\r
+\r
+//Volume Template\r
+var tplVolumePanel  = "<img onclick='volumeUp()' src='/webdata/gfx/arrow_up.png'>"; \r
+       tplVolumePanel += "<img onclick='volumeDown()' src='/webdata/gfx/arrow_down.png'>"; \r
+       tplVolumePanel += "<img id='volume1' onclick='volumeSet(10)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='volume2' onclick='volumeSet(20)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='volume3' onclick='volumeSet(30)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='volume4' onclick='volumeSet(40)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='volume5' onclick='volumeSet(50)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='volume6' onclick='volumeSet(60)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='volume7' onclick='volumeSet(70)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='volume8' onclick='volumeSet(80)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='volume9' onclick='volumeSet(90)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='volume10' onclick='volumeSet(100)' src='/webdata/gfx/led_off.png'>"; \r
+       tplVolumePanel += "<img id='speaker' onclick='volumeMute()' src='/webdata/gfx/speak_on.png'>";\r
+       \r
+//Signal Template\r
+var tplSignalPanel  = '<table width="100%" id="SignalPanelTable">';\r
+       tplSignalPanel += '<tr><td style="background-color: #DDDDDD;">SNR</td><td width="50" style="background-color: #DDDDDD;"><div id="SNR">N/A</div></td></tr>';\r
+       tplSignalPanel += '<tr><td style="background-color: #DDDDDD;">AGC</td><td width="50" style="background-color: #DDDDDD;"><div id="AGC">N/A</div></td></tr>';\r
+       tplSignalPanel += '<tr><td style="background-color: #DDDDDD;">BER</td><td width="50" style="background-color: #DDDDDD;"><div id="BER">N/A</div></td></tr>';\r
+       tplSignalPanel += '</table>';\r
+       \r
+var tplSignalPanelButton = '<img src="/webdata/gfx/signal.png" title="show SignalInfoPanel" onclick="openSignalDialog();" title="view Signal Info">';\r
+\r
+// Message send\r
+var tplMessageSendForm = ""\r
+       tplMessageSendForm += '<table id="MessageSendForm" width="100%" border="0" cellspacing="1" cellpadding="0" border="0">';\r
+       tplMessageSendForm += '<tr><td>Text</td><td><input type="text" id="MessageSendFormText" value=""></td></tr>\n';\r
+       tplMessageSendForm += '<tr><td>Timeout</td><td><input type="text" id="MessageSendFormTimeout" value=""></td></tr>\n';\r
+       tplMessageSendForm += '<tr><td>Typ</td><td><select id="MessageSendFormType">';\r
+       tplMessageSendForm += '<option value="1">Info</option>';\r
+       tplMessageSendForm += '<option value="0">YesNo</option>';\r
+       tplMessageSendForm += '<option value="2">Warning</option>';\r
+       tplMessageSendForm += '<option value="3">Error</option>';\r
+       tplMessageSendForm += '</select></td></tr>\n';\r
+       tplMessageSendForm += '<tr><td colspan="2"><button onclick="sendMessage()">send Message</button></td></tr>\n';\r
+       tplMessageSendForm += "</table></form>\n";\r
+\r
+var tplPowerStateSendForm = '';\r
+    tplPowerStateSendForm += '<hr>';\r
+    tplPowerStateSendForm += '<p><center><button onclick="sendPowerState(1)">deepstandby Dreambox</button></center></p>';\r
+    tplPowerStateSendForm += '<p><center><button onclick="sendPowerState(2)">reboot Dreambox</button></center></p>';\r
+    tplPowerStateSendForm += '<hr>';\r
+    tplPowerStateSendForm += '<p><center><button onclick="sendPowerState(3)">restart Enigma2</button></center></p>';\r
+//Something is not working here, so I will do a quickhack\r
+//    tplPowerStateSendForm += '<p><center><button onclick="sendPowerState(4)">standby Enigma2</button></center></p>';\r
+       tplPowerStateSendForm += '<p><center><button onclick="sendRemoteControlRequest(116)">toggle standby Enigma2</button></center></p>';\r
+\r
+// Template for the RemoteControl Window\r
+var tplRemoteControlForm = '';\r
+       tplRemoteControlForm += '<map name="remotecontrol">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="129, 54, 10" nohref onclick="sendRemoteControlRequest(116)" alt="Power">';\r
+//     tplRemoteControlForm += '<area shape="circle" coords="72, 95, 15" nohref alt="Dream message">';\r
+//     tplRemoteControlForm += '<area shape="circle" coords="130, 95, 15" nohref alt="TV Screenshot">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="63, 123, 10" nohref onclick="sendRemoteControlRequest(2)" alt="1">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="109, 123, 10" nohref onclick="sendRemoteControlRequest(3)" alt="2">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="153, 123, 10" nohref onclick="sendRemoteControlRequest(4)" alt="3">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="63, 148, 10" nohref onclick="sendRemoteControlRequest(5)" alt="4">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="109, 148, 10" nohref onclick="sendRemoteControlRequest(6)" alt="5">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="153, 148, 10" nohref onclick="sendRemoteControlRequest(7)" alt="6">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="63, 173, 10" nohref onclick="sendRemoteControlRequest(8)" alt="7">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="109, 173, 10" nohref onclick="sendRemoteControlRequest(9)" alt="8">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="153, 173, 10" nohref onclick="sendRemoteControlRequest(10)" alt="9">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="63, 197, 10" nohref onclick="sendRemoteControlRequest(412)" alt="previous">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="109, 197, 10" nohref onclick="sendRemoteControlRequest(11)" alt="0">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="153, 197, 10" nohref onclick="sendRemoteControlRequest(407)" alt="next">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="54, 243, 15" nohref onclick="sendRemoteControlRequest(115)" alt="volume up">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="107, 233, 10" nohref onclick="sendRemoteControlRequest(113)" alt="mute">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="159, 243, 15" nohref onclick="sendRemoteControlRequest(402)" alt="bouquet up">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="66, 274, 15" nohref onclick="sendRemoteControlRequest(114)" alt="volume down">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="107, 258, 10" nohref onclick="sendRemoteControlRequest(174)" alt="lame">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="147, 274, 15" nohref onclick="sendRemoteControlRequest(403)" alt="bouquet down">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="48, 306, 10" nohref onclick="sendRemoteControlRequest(358)" alt="info">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="106, 310, 15" nohref onclick="sendRemoteControlRequest(103)" alt="up">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="167, 306, 10" nohref onclick="sendRemoteControlRequest(139)" alt="menu">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="70, 343, 15" nohref onclick="sendRemoteControlRequest(105)" alt="left">';\r
+    tplRemoteControlForm += '<area shape="circle" coords="108, 340, 15" nohref onclick="sendRemoteControlRequest(352)" alt="OK">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="146, 343, 15" nohref onclick="sendRemoteControlRequest(106)" alt="right">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="53, 381, 10" nohref onclick="sendRemoteControlRequest(392)" alt="audio">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="106, 374, 15" nohref onclick="sendRemoteControlRequest(108)" alt="down">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="162, 381, 10" nohref onclick="sendRemoteControlRequest(393)" alt="video">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="56, 421, 10" nohref onclick="sendRemoteControlRequest(398)" alt="red">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="90, 422, 10" nohref onclick="sendRemoteControlRequest(399)" alt="green">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="123, 422, 10" nohref onclick="sendRemoteControlRequest(400)" alt="yellow">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="158, 421, 10" nohref onclick="sendRemoteControlRequest(401)" alt="blue">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="61, 460, 10" nohref onclick="sendRemoteControlRequest(377)" alt="tv">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="90, 461, 10" nohref onclick="sendRemoteControlRequest(385)" alt="radio">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="123, 461, 10" nohref onclick="sendRemoteControlRequest(388)" alt="text">';\r
+       tplRemoteControlForm += '<area shape="circle" coords="153, 460, 10" nohref onclick="sendRemoteControlRequest(138)" alt="help">';\r
+    tplRemoteControlForm += '</map>';\r
+       tplRemoteControlForm += '<img src="/webdata/gfx/remotecontrol.jpg" height="607" width="220" border="0)" alt="Remote Control" usemap="#remotecontrol">';\r
+       \r
+var tplAddTimerForm = '';\r
+       tplAddTimerForm += '<table border=0 cellpadding=0 cellspacing=10>';\r
+       tplAddTimerForm += '<tr><td colspan="3">Action:</td>';\r
+       tplAddTimerForm += '<td colspan="3">';\r
+       tplAddTimerForm += '<select name="justplay" id="justplay" size="1">';\r
+       tplAddTimerForm += '%(justplay)';\r
+       tplAddTimerForm += '</select></td></tr>';\r
+       tplAddTimerForm += '<tr><td colspan="3">&nbsp;</td>';\r
+       tplAddTimerForm += '<td colspan="3">Note: For recurring events start/end day/month are not required.</td></tr>';\r
+       tplAddTimerForm += '<tr><td colspan="3">Start:</td>';\r
+       tplAddTimerForm += '<td colspan="3"><select name="syear" size="1" id="syear" onchange="javascript:addTimerFormChangeTime(\'syear\');">%(syear)</select>.';\r
+       tplAddTimerForm += '<select name="smonth" id="smonth" size="1" onchange="javascript:addTimerFormChangeTime(\'smonth\');">%(smonth)</select>.';\r
+       tplAddTimerForm += '<select name="sday" id="sday" size="1" onchange="javascript:addTimerFormChangeTime(\'sday\');">%(sday)</select>';\r
+       tplAddTimerForm += '&nbsp;-&nbsp;<select name="shour" id="shour" size="1" onchange="javascript:addTimerFormChangeTime(\'shour\');">%(shour)</select>';\r
+       tplAddTimerForm += ':<select name="smin" id="smin" size="1" onchange="javascript:addTimerFormChangeTime(\'smin\');">%(smin)</select></td></tr>';\r
+       tplAddTimerForm += '<tr><td colspan="3">End:</td>';\r
+       tplAddTimerForm += '<td colspan="3"><select name="eyear" id="eyear" size="1" onchange="javascript:addTimerFormChangeTime(\'eyear\');">%(eyear)</select>.';\r
+       tplAddTimerForm += '<select name="emonth" id="emonth" size="1" onchange="javascript:addTimerFormChangeTime(\'emonth\');">%(emonth)</select>.';\r
+       tplAddTimerForm += '<select name="eday" id="eday" size="1" onchange="javascript:addTimerFormChangeTime(\'eday\');">%(eday)</select>';\r
+       tplAddTimerForm += '&nbsp;-&nbsp;<select name="ehour" id="ehour" size="1" onchange="javascript:addTimerFormChangeTime(\'ehour\');">%(ehour)</select>';\r
+       tplAddTimerForm += ':<select name="emin" id="emin" size="1" onchange="javascript:addTimerFormChangeTime(\'emin\');">%(emin)</select></td></tr>';\r
+       tplAddTimerForm += '<tr><td colspan="3">&nbsp;</td><td colspan="3">Note: For one-time events the "days" field doesn\'t have to be specified.</td></tr>';\r
+       tplAddTimerForm += '<tr><td colspan="3">Days:</td><td colspan="3">%(repeated)';\r
+       tplAddTimerForm += '<tr><td colspan="3">Channel:</td><td>';\r
+       tplAddTimerForm += '<p><input type="radio" id="tvradio" name="tvradio" value="tv" checked onchange="javascript:addTimerFormChangeType();"">TV</p>';\r
+       tplAddTimerForm += '<p><input type="radio" name="tvradio" value="radio" onchange="javascript:addTimerFormChangeType();">Radio</p><td>';\r
+       tplAddTimerForm += '<p>Channel:</p>';\r
+       tplAddTimerForm += '<select name="channel" id="channel" size="1" onchange="timerFormExtendChannellist($(\'channel\').options[$(\'channel\').selectedIndex].value)">%(channel)</select></td></tr>';\r
+       tplAddTimerForm += '<tr><td colspan="3">Name:</td>';\r
+       tplAddTimerForm += '<td colspan="3"><input name="name" id="name" type="text" size="100" maxlength="100" style="color: #000000;" value="%(name)"></td></tr>';\r
+       tplAddTimerForm += '<tr><td colspan="3">Description:</td>';\r
+       tplAddTimerForm += '<td colspan="3"><input name="descr" id="descr" type="text" size="100" maxlength="100" style="color: #000000;" value="%(description)"></td></tr>';\r
+       tplAddTimerForm += '<tr><td colspan="3">After event do:</td>';\r
+       tplAddTimerForm += '<td colspan="3"><select id="after_event" name="after_event" size="1">%(afterEvent)</select></td></tr>';\r
+       tplAddTimerForm += '<tr>&nbsp;&nbsp;</tr>';\r
+       tplAddTimerForm += '<tr><td colspan="3">&nbsp;</td><td colspan="3">';\r
+       tplAddTimerForm += '<input name="deleteOldOnSave" id="deleteOldOnSave" type="hidden" value="%(deleteOldOnSave)">';\r
+       tplAddTimerForm += '<input name="channelOld" id="channelOld" type="hidden" value="%(channelOld)">';\r
+       tplAddTimerForm += '<input name="beginOld" id="beginOld" type="hidden" value="%(beginOld)">';\r
+       tplAddTimerForm += '<input name="endOld" id="endOld" type="hidden" value="%(endOld)">';\r
+       tplAddTimerForm += '<input name="eventID" id="eventID" type="hidden" value="%(eventID)">';\r
+       tplAddTimerForm +=      '<button onclick="sendAddTimer()">Add/Save</button></td></tr></table>';\r
+\r
+var tplAddTimerFormOptions = '';\r
+       tplAddTimerFormOptions += '<option value="%(value)" %(selected)>%(txt)</option>';\r
+       \r
+var tplAddTimerFormCheckbox = '';\r
+       tplAddTimerFormCheckbox += '<input type="checkbox" id="%(id)" name="%(name)" value="%(value)" %(checked)>&nbsp;%(txt)&nbsp;&nbsp;';\r
+\r
+var tplAbout  = '<table align="center" border="0" width="80%">';\r
+    tplAbout += '<tr><td align="left" width="50%" valign="top">';\r
+    tplAbout += '<table align="center" border="0" width="100%">';\r
+    tplAbout += '<tr><td align="left"></br></td></tr>';\r
+    tplAbout += '<tr><td align="left"><b>Box Info:</b></td></tr>';\r
+    tplAbout += '<tr><td align="left"><b>Enigma Version: </b>%(enigmaVersion)</td></tr>';\r
+    tplAbout += '<tr><td align="left"><b>Frontprozessor Version: </b>%(fpVersion)</td></tr>';\r
+    tplAbout += '<tr><td align="left"></br></td></tr>';\r
+    tplAbout += '<tr><td align="left"><b>detected Tuner:<br></b>%(tunerInfo)</td></tr>';\r
+    tplAbout += '<tr><td align="left"></br></td></tr>';\r
+    tplAbout += '<tr><td align="left"><b>Harddisc Details:<br></b>%(hddInfo)</td></tr>';\r
+    tplAbout += '<tr><td align="left"></br></td></tr>';\r
+/*\r
+    tplAbout += '<tr><td align="left"><b>LAN Info:</b></td></tr>';\r
+    tplAbout += '<tr><td align="left">%(lanDHCP)</td></tr>';\r
+    tplAbout += '<tr><td align="left">%(lanIP)</td></tr>';\r
+    tplAbout += '<tr><td align="left">%(lanMask)</td></tr>';\r
+    tplAbout += '<tr><td align="left">%(lanGW)</td></tr>';\r
+    tplAbout += '<tr><td align="left">%(lanDNS)</td></tr>\n';\r
+*/\r
+    tplAbout += '</table></td>\n';\r
+    tplAbout += '<td align="left" width="50%" valign="top">';\r
+    tplAbout += '<table align="center" border="0" width="100%">';\r
+    tplAbout += '<tr><td align="left"></br></td></tr>\n';\r
+    tplAbout += '<tr><td align="left"><b>Service Info:</b></td></tr>\n';\r
+    tplAbout += '<tr><td align="left">Name: %(serviceName)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">Provider: %(serviceProvider)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">Videoformat: %(serviceAspect)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">Namespace: %(serviceNamespace)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left"></br></td></tr>\n';\r
+    tplAbout += '<tr><td align="left"><b>PIDs:</b></td></tr>\n';\r
+    tplAbout += '<tr><td align="left">VideoPID: %(vPIDh) (%(vPID)d)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">AudioPID: %(aPIDh) (%(aPID)d)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">PCRPID: %(pcrIDh) (%(pcrID)d)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">PMTPID: %(pmtPIDh) (%(pmtPID)d)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">TXTPID: %(txtPIDh) (%(txtPID)d)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">TSID: %(tsIDh) (%(tsID)d)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">ONID: %(onIDh) (%(onID)d)</td></tr>\n';\r
+    tplAbout += '<tr><td align="left">SID: %(sidh) (%(sid)d)</td></tr>\n';\r
+    tplAbout += '</table>';\r
+\r
+var tplExtraHiddenFunctions  = '<ul style="list-style-type:disc">';\r
+       tplExtraHiddenFunctions += '<li><div onclick="restartTwisted()">Restart Twisted</div></li>';\r
+       tplExtraHiddenFunctions += '<li><div onclick="clearInterval(UpdateStreamReaderPollTimer);">Stop Time/Signal/Current-Channel -Updates</div></li>';\r
+       tplExtraHiddenFunctions += '<li><div onclick="restartUpdateStream();">Restart Time/Signal/Current-Channel -Updates</div></li>';\r
+       tplExtraHiddenFunctions += '<li><div onclick="startDebugWindow();">Start Debug-Window</div></li>';\r
+       tplExtraHiddenFunctions += '</ul>'\r
+       \r
index 5105128..5e75934 100644 (file)
-Version = '$Header$';
-
-var doRequestMemory = new Object();
-var doRequestMemorySave = new Object();
-
-// Get Settings
-var settings = null;
-var parentControlList = null;
-
-// UpdateStreamReader
-var UpdateStreamReaderNextReadPos = 0;
-var UpdateStreamReaderPollTimer;
-var UpdateStreamReaderPollTimerCounter = 0;
-var UpdateStreamReaderPollTimerCounterTwisted = 0;
-UpdateStreamReaderRequest = null;
-function UpdateStreamReaderStart(){
-       var ua = navigator.userAgent;
-       if(navigator.userAgent.indexOf("MSIE") >=0) {
-               debug("UpdateStreamReader IE Fix");
-
-               var namespace = {       
-                                       'url_updates': url_updates
-               };
-               $('UpdateStreamReaderIEFixPanel').innerHTML = RND(tplUpdateStreamReaderIE, namespace);
-               
-       }else {
-               UpdateStreamReaderNextReadPos = 0;
-               allMessages = "";
-               UpdateStreamReaderRequest = new XMLHttpRequest();
-               UpdateStreamReaderRequest.onload = UpdateStreamReaderOnLoad;
-               UpdateStreamReaderRequest.onerror = UpdateStreamReaderOnError;
-               UpdateStreamReaderRequest.open("GET", url_updates, true);
-               UpdateStreamReaderRequest.send(null);
-               UpdateStreamReaderPollTimer = setInterval(UpdateStreamReaderLatestResponse, 10000);
-       }
-}
-  
-function UpdateStreamReaderLatestResponse() {
-       UpdateStreamReaderPollTimerCounter++;
-       debug(UpdateStreamReaderPollTimerCounter);
-       if(UpdateStreamReaderPollTimerCounter > 6) {
-               clearInterval(UpdateStreamReaderPollTimer);
-               UpdateStreamReaderRequest.abort();
-               UpdateStreamReaderRequest = null;
-               UpdateStreamReaderPollTimerCounter = 0;
-               UpdateStreamReaderStart();
-               
-               UpdateStreamReaderPollTimerCounterTwisted++;
-               return;
-       }
-       var allMessages = UpdateStreamReaderRequest.responseText;
-       do {
-               var unprocessed = allMessages.substring(UpdateStreamReaderNextReadPos);
-               var messageXMLEndIndex = unprocessed.indexOf("\n");
-               
-               if (messageXMLEndIndex!=-1) {
-                       var endOfFirstMessageIndex = messageXMLEndIndex + "\n".length;
-                       var anUpdate = unprocessed.substring(0, endOfFirstMessageIndex);
-       
-                       var re = new RegExp("<script>parent\.(.*)</script>");
-                       anUpdate = re.exec(anUpdate);
-
-                       if(anUpdate != null){
-                               if (anUpdate.length == 2){
-                                       eval(anUpdate[1]);
-                               }
-                       }
-                       
-                       UpdateStreamReaderNextReadPos += endOfFirstMessageIndex;
-               }
-               if(UpdateStreamReaderNextReadPos > 65000){
-                       UpdateStreamReaderRequest.abort();
-                       UpdateStreamReaderRequest = null;
-                       UpdateStreamReaderPollTimerCounter = 0;
-                       UpdateStreamReaderStart();
-                       messageXMLEndIndex = -1;
-               }
-       } while (messageXMLEndIndex != -1);
-}
-
-function UpdateStreamReaderOnLoad(){
-       window.clearInterval(UpdateStreamReaderPollTimer);
-       debug("UpdateStreamReaderOnLoad");
-       Dialog.confirm(
-               "Live Update Stream ends!<br><br>You will not receive any Update from Enigma2.<br>Should I reconnect?",
-                {windowParameters: {width:300, className: windowStyle},
-                       okLabel: "reconnect",
-                       buttonClass: "myButtonClass",
-                       cancel: function(win) {debug("cancel confirm panel")},
-                       ok: function(win) {UpdateStreamReaderStart(); return true;}
-                       }
-               );
-}
-function UpdateStreamReaderOnError(){
-       // TODO: change this, because it will be called on 'PageUnload' while the request is still running
-       debug("UpdateStreamReaderOnError");
-       window.clearInterval(UpdateStreamReaderPollTimer);
-       Dialog.confirm(
-               "Live Update Stream has an Error!<br><br>You will not receive any Update from Enigma2.<br>Should I try to reconnect?",
-                {windowParameters: {width:300, className: windowStyle},
-                        okLabel: "reconnect",
-                        buttonClass: "myButtonClass",
-                        cancel: function(win) {debug("cancel confirm panel")},
-                        ok: function(win) {UpdateStreamReaderStart(); return true;}
-                       }
-               );
-}
-//end UpdateStreamReader
-
-function openWindow(title, inner, width, height, id){
-                       if(id == null) id = new Date().toUTCString();
-                       var win = new Window(id, {className: windowStyle, title: title, width: width, height: height });
-                       win.getContent().innerHTML = inner;
-                       win.setDestroyOnClose();
-                       win.showCenter();
-                       debug("opening Window: "+title);
-                       return win;
-}
-function messageBox(t, m){
-       Dialog.alert(m, {windowParameters: {title: t, className: windowStyle, width:200}, okLabel: "Close"});
-}
-
-//RND Template Function (http://www.amix.dk)
-function RND(tmpl, ns) {
-       var fn = function(w, g) {
-               g = g.split("|");
-               var cnt = ns[g[0]];
-               //Support for filter functions
-               for(var i=1; i < g.length; i++) {
-                       cnt = eval(g[i])(cnt);
-               }
-               return cnt || w;
-       };
-       return tmpl.replace(/%\(([A-Za-z0-9_|.]*)\)/g, fn);
-}
-function debug(text){
-       if(DBG){
-               try{
-                       debugWin.getContent().innerHTML += "DEBUG: "+text+"<br>";
-               } catch (windowNotPresent) {}
-       }
-}
-function showhide(id){
-       o = $(id).style;
-       o.display = (o.display!="none")? "none":"";
-}
-function set(element, value){
-       //debug(element+"-"+value);
-       element = parent.$(element);
-       if(value.length > 550) {
-               value = value.substr(0,550) + "[...]";
-       }
-       if (element){
-               element.innerHTML = value;
-       }
-       if(navigator.userAgent.indexOf("MSIE") >=0) {
-               elementscript= $('UpdateStreamReaderIEFixIFrame').$('scriptzone');
-               if(elementscript){
-                       elementscript.innerHTML = ""; // deleting set() from page, to keep the page short and to save memory                    
-               }
-       }
-}
-function setComplete(element, value){
-       //debug(element+"-"+value);
-       element = parent.$(element);
-       if (element){
-               element.innerHTML = value;
-       }
-       if(navigator.userAgent.indexOf("MSIE") >=0) {
-               elementscript= $('UpdateStreamReaderIEFixIFrame').$('scriptzone');
-               if(elementscript){
-                       elementscript.innerHTML = ""; // deleting set() from page, to keep the page short and to save memory                    
-               }
-       }
-}
-// requestindikator
-var requestcounter = 0;
-function requestIndicatorUpdate(){
-       //debug(requestcounter+" open requests");
-       if(requestcounter>=1){
-               $('RequestIndicator').style.display = "inline";
-       }else{
-               $('RequestIndicator').style.display = "none";
-       }
-}
-function requestStarted(){
-       requestcounter +=1;
-       requestIndicatorUpdate();
-}
-function requestFinished(){
-       requestcounter -=1;
-       requestIndicatorUpdate();
-}
-// end requestindikator
-function doRequest(url, readyFunction, save){
-       requestStarted();
-       doRequestMemorySave[url] = save;
-       debug("doRequest: Requesting: "+url);
-       if(save == true && typeof(doRequestMemory[url]) != "undefined") {
-               readyFunction(doRequestMemory[url]);
-       } else {
-               debug("doRequest: loading");
-               new Ajax.Request(url,
-                       {
-                               asynchronous: true,
-                               method: 'GET',
-                               requestHeaders: ['Pragma', 'no-cache', 'Cache-Control', 'must-revalidate', 'If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],
-                               onException: function(o,e){ throw(e); },                                
-                               onSuccess: function (transport, json) {
-                                                       if(typeof(doRequestMemorySave[url]) != "undefined") {
-                                                               if(doRequestMemorySave[url]) {
-                                                                       debug("doRequest: saving request"); 
-                                                                       doRequestMemory[url] = transport;
-                                                               }
-                                                       }
-                                                       readyFunction(transport);
-                                               },
-                               onComplete: requestFinished 
-                       });
-       }
-}
-
-function getXML(request){
-       if (document.implementation && document.implementation.createDocument){
-               var xmlDoc = request.responseXML
-       }
-       else if (window.ActiveXObject){
-               var xmlInsert = document.createElement('xml');
-
-               xmlInsert.setAttribute('innerHTML',request.responseText);
-               xmlInsert.setAttribute('id','_MakeAUniqueID');
-               document.body.appendChild(xmlInsert);
-               xmlDoc = $('_MakeAUniqueID');
-               document.body.removeChild($('_MakeAUniqueID'));
-       } else {
-               debug("Your Browser Sucks!");
-       }
-       return xmlDoc;
-}
-function parentPin(servicereference) {
-       servicereference = decodeURIComponent(servicereference);
-       if(parentControlList == null || String(getSettingByName("config.ParentalControl.configured")) != "True") {
-               return true;
-       }
-       debug("parentPin " + parentControlList.length);
-       if(getParentControlByRef(servicereference) == servicereference) {
-               if(String(getSettingByName("config.ParentalControl.type.value")) == "whitelist") {
-                       debug("leaving here 1");
-                       return true;
-               }
-       } else {
-               debug("leaving here 2");
-               return true;
-       }
-       debug("going to ask for PIN");
-
-       var userInput = prompt('ParentControll was switch on.<br> Please enter PIN','PIN');
-       if (userInput != '' && userInput != null) {
-               if(String(userInput) == String(getSettingByName("config.ParentalControl.servicepin.0")) ) {
-                       return true;
-               } else {
-                       return parentPin(servicereference);
-               }
-       } else {
-               return false;
-       }
-}
-var SubServicePoller;
-var SubServicePollerCounter = 0;
-var SubServicePollerRef = null;
-function zap(servicereference){
-       if(parentPin(servicereference)) {
-               new Ajax.Request( "/web/zap?sRef=" + servicereference, 
-                                                       {
-                                                               asynchronous: true,
-                                                               method: 'get'
-                                                       }
-                                               );
-               if(SubServicePoller != 0){
-                       clearInterval(SubServicePoller);
-                       SubServicePollerCounter = 0;
-               }
-               SubServicePollerRef = servicereference;
-               SubServicePoller = setInterval(getSubServices, 10000);
-               SubServicePollerCounter = 1;
-       }
-}
-
-//++++       SignalPanel                           ++++
-function initSignalPanel(){
-       $('SignalPanel').innerHTML = tplSignalPanelButton;
-}
-function openSignalDialog(){
-       openWindow("Signal Info",tplSignalPanel, 215, 75);
-}
-
-
-//++++ EPG functions                               ++++
-function loadEPGBySearchString(string){
-               doRequest(url_epgsearch+escape(string),incomingEPGrequest, false);
-}
-function loadEPGByServiceReference(servicereference){
-               doRequest(url_epgservice+servicereference,incomingEPGrequest, false);
-}
-function incomingEPGrequest(request){
-       debug("incoming request" +request.readyState);          
-       if (request.readyState == 4){
-               var EPGItems = new EPGList(getXML(request)).getArray(true);
-               debug("have "+EPGItems.length+" e2events");
-               if(EPGItems.length > 0){                        
-                       var html = tplEPGListHeader;
-                       for (var i=0; i < EPGItems.length; i++){
-                               try{
-                                       var item = EPGItems[i];                         
-                                       var namespace = {       
-                                                       'date': item.getTimeDay(),
-                                                       'eventid': item.getEventId(),
-                                                       'servicereference': item.getServiceReference(),
-                                                       'servicename': quotes2html(item.getServiceName()),
-                                                       'title': quotes2html(item.getTitle()),
-                                                       'titleESC': escape(item.getTitle()),
-                                                       'starttime': item.getTimeStartString(), 
-                                                       'duration': Math.ceil(item.getDuration()/60000), 
-                                                       'description': quotes2html(item.getDescription()),
-                                                       'endtime': item.getTimeEndString(), 
-                                                       'extdescription': quotes2html(item.getDescriptionExtended()),
-                                                       'number': String(i),
-                                                       'extdescriptionSmall': extdescriptionSmall(item.getDescriptionExtended(),String(i)),
-                                                       'start': item.getTimeBegin(),
-                                                       'end': item.getTimeEnd()
-                                               };
-                                       //Fill template with data and add id to our result
-                                       html += RND(tplEPGListItem, namespace);
-                               } catch (blubb) { debug("Error rendering: "+blubb);     }
-                       }
-                       html += tplEPGListFooter;
-                       openWindow("Electronic Program Guide", html, 900, 500);
-               } else {
-                       messageBox('No Items found!', 'Sorry but i could not find any EPG Content containing your search value');
-               }
-       }
-}
-function extdescriptionSmall(txt,num) {
-       if(txt.length > 410) {
-               var shortTxt = txt.substr(0,410);
-               txt = txt.replace(/\'\'/g, '&quot;');
-               txt = txt.replace(/\\/g, '\\\\');
-               txt = txt.replace(/\'/g, '\\\'');
-               txt = txt.replace(/\"/g, '&quot;');
-               var smallNamespace = { 'txt':txt,'number':num, 'shortTxt':shortTxt};
-               return RND(tplEPGListItemExtend, smallNamespace);
-       } else {
-               return txt;
-       }
-}      
-
-/////////////////////////
-
-function loadServiceEPGNowNext(servicereference){
-       var url = url_epgnow+servicereference;
-       doRequest(url, incomingServiceEPGNowNext, false);       
-}
-
-function incomingServiceEPGNowNext(request){
-       if(request.readyState == 4){
-               var epgevents = getXML(request).getElementsByTagName("e2eventlist").item(0).getElementsByTagName("e2event");
-               for (var c =0; c < epgevents.length;c++){
-                       var eventnow = new EPGEvent(epgevents.item(c));
-                       
-                       if (eventnow.getEventId() != 'None'){
-                               buildServiceListEPGItem(eventnow,"NOW");
-                       }
-               }
-       }
-}
-function buildServiceListEPGItem(epgevent,nownext){
-       var e = $(epgevent.getServiceReference()+'EPG'+nownext);
-               try{
-                       var namespace = {       
-                               'starttime': epgevent.getTimeStartString(), 
-                               'title': epgevent.getTitle(), 
-                               'length': Math.ceil(epgevent.duration/60) 
-                       };
-                       e.innerHTML = RND(tplServiceListEPGItem, namespace);
-               } catch (blubb) {
-                       debug("Error rendering: "+blubb);
-               }       
-}
-///////////////////
-
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++
-//++++ GUI functions                               ++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-var currentBodyMainElement = null
-
-function setBodyMainContent(newelementname){
-       newelement =$(newelementname);
-       if(currentBodyMainElement != null){
-               currentBodyMainElement.style.display = "none";
-               
-       }
-       newelement.style.display = "";
-       currentBodyMainElement = newelement;
-}
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++
-//++++ volume functions                            ++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-function initVolumePanel(){
-       $('VolumePanel').innerHTML = tplVolumePanel;
-       getVolume(); 
-}
-function getVolume(){
-       doRequest(url_getvolume,handleVolumeRequest, false);
-}
-function volumeSet(newvalue){
-       doRequest(url_setvolume+newvalue,handleVolumeRequest, false);
-}
-function volumeUp(){
-       doRequest(url_volumeup,handleVolumeRequest, false);
-}
-function volumeDown(){
-       doRequest(url_volumedown,handleVolumeRequest, false);   
-}
-function volumeMute(){
-       doRequest(url_volumemute,handleVolumeRequest, false);
-}
-function handleVolumeRequest(request){
-       if (request.readyState == 4) {
-               var b = getXML(request).getElementsByTagName("e2volume");
-               var newvalue = b.item(0).getElementsByTagName('e2current').item(0).firstChild.data;
-               var mute = b.item(0).getElementsByTagName('e2ismuted').item(0).firstChild.data;
-               debug("volume"+newvalue+";"+mute);
-               
-               for (var i = 1; i <= 10; i++)           {
-                       if ( (newvalue/10)>=i){
-                               $("volume"+i).src = "/webdata/gfx/led_on.png";
-                       }else{
-                               $("volume"+i).src = "/webdata/gfx/led_off.png";
-                       }
-               }
-               if (mute == "False"){
-                       $("speaker").src = "/webdata/gfx/speak_on.png";
-               }else{
-                       $("speaker").src = "/webdata/gfx/speak_off.png";
-               }
-       }       
-}
-
-var bouqetsMemory = new Object();
-
-function initChannelList(){
-       //debug("init ChannelList");    
-       var url = url_getServices+encodeURIComponent(bouqet_tv);
-       doRequest(url, incomingTVBouquetList, true);
-
-       var url = url_getServices+encodeURIComponent(bouqet_radio);
-       doRequest(url, incomingRadioBouquetList, true);
-
-       var url = url_getServices+encodeURIComponent(bouqet_provider_tv);
-       doRequest(url, incomingProviderTVBouquetList, true);
-
-       var url = url_getServices+encodeURIComponent(bouqet_provider_radio);
-       doRequest(url, incomingProviderRadioBouquetList, true);
-       
-       getSettings();
-}
-
-var servicereftoloadepgnow = "";
-var loadedChannellist = new Object();
-function loadBouquet(servicereference){ 
-       debug("loading bouquet with "+servicereference);
-       servicereftoloadepgnow = servicereference;
-       debug("loadBouquet " + typeof(loadedChannellist[servicereftoloadepgnow]));
-       if(typeof(loadedChannellist[servicereftoloadepgnow]) == "undefined") {
-               doRequest(url_getServices+servicereference, incomingChannellist, true);
-       } else {
-               incomingChannellist();
-       }
-}
-
-function incomingTVBouquetList(request){
-       if (request.readyState == 4) {
-               var list0 = new ServiceList(getXML(request)).getArray();
-               debug("have "+list0.length+" TV Bouquet ");     
-               $('accordionMenueBouquetContentTV').innerHTML = renderBouquetTable(list0,tplBouquetListHeader,tplBouquetListItem,tplBouquetListFooter);
-               //loading first entry of TV Favorites as default for ServiceList
-               loadBouquet(list0[0].getServiceReference());
-               bouqetsMemory["bouqet_tv"] = list0;
-       }
-}
-function incomingRadioBouquetList(request){
-       if (request.readyState == 4) {
-               var list1 = new ServiceList(getXML(request)).getArray();
-               debug("have "+list1.length+" Radio Bouquet ");  
-               $('accordionMenueBouquetContentRadio').innerHTML = renderBouquetTable(list1,tplBouquetListHeader,tplBouquetListItem,tplBouquetListFooter);
-       }       
-}
-function incomingProviderTVBouquetList(request){
-       if (request.readyState == 4) {
-               var list2 = new ServiceList(getXML(request)).getArray();
-               debug("have "+list2.length+" TV Provider Bouquet ");    
-               $('accordionMenueBouquetContentProviderTV').innerHTML = renderBouquetTable(list2,tplBouquetListHeader,tplBouquetListItem,tplBouquetListFooter);
-       }       
-}
-function incomingProviderRadioBouquetList(request){
-       if (request.readyState == 4) {
-               var list2 = new ServiceList(getXML(request)).getArray();
-               debug("have "+list2.length+" Radio Provider Bouquet "); 
-               $('accordionMenueBouquetContentProviderRadio').innerHTML = renderBouquetTable(list2,tplBouquetListHeader,tplBouquetListItem,tplBouquetListFooter);
-       }       
-}
-
-function renderBouquetTable(bouquet,templateHeader,templateItem,templateFooter){
-       debug("renderBouquetTable with "+bouquet.length+" Bouqet");     
-       var html = templateHeader;
-       for (var i=0; i < bouquet.length; i++){
-               try{
-                       var namespace = {
-                               'servicereference': bouquet[i].getServiceReference(), 
-                               'bouquetname': bouquet[i].getServiceName()
-                       };
-                       html += RND(templateItem, namespace);
-               } catch (blubb) {}
-       }
-       html += templateFooter;
-       return html;
-}      
-
-function incomingChannellist(request){
-       var services = null;
-       if(typeof(loadedChannellist[servicereftoloadepgnow]) != "undefined"){
-               services = loadedChannellist[servicereftoloadepgnow];
-       } else if(request.readyState == 4) {
-               services = new ServiceList(getXML(request)).getArray();
-               loadedChannellist[servicereftoloadepgnow] = services;
-               debug("got "+services.length+" Services");
-       }
-       if(services != null) {
-               var smallNamespace = {'mainServiceRef': servicereftoloadepgnow };
-               listerHtml = RND(tplServiceListHeader, smallNamespace);
-               for ( var i = 0; i < services.length ; i++){
-                       var reference = services[i];
-                       var namespace = {       
-                               'servicereference': reference.getServiceReference(),
-                               'servicename': reference.getServiceName()
-                       };
-                       listerHtml += RND(tplServiceListItem, namespace);
-               }               
-               listerHtml += tplServiceListFooter;
-               $('BodyContentChannellist').innerHTML = listerHtml;
-               setBodyMainContent('BodyContentChannellist');
-               loadServiceEPGNowNext(servicereftoloadepgnow);
-               debug("incomingChannellist " + typeof(loadedChannellist[servicereftoloadepgnow]));
-       }
-}
-// Movies
-function loadMovieList(){
-       debug("loading movies");
-       doRequest(url_movielist, incomingMovieList);    
-}
-
-function incomingMovieList(request){
-       if(request.readyState == 4){
-               var movies = new MovieList(getXML(request)).getArray();
-               debug("have "+movies.length+" movies");
-               listerHtml      = tplMovieListHeader;           
-               for ( var i = 0; i <movies.length; i++){
-                       var movie = movies[i];
-                       var namespace = {       
-                               'servicereference': movie.getServiceReference(),
-                               'servicename': movie.getServiceName() ,
-                               'title': movie.getTitle(), 
-                               'description': movie.getDescription(), 
-                               'descriptionextended': movie.getDescriptionExtended(),
-                               'filelink': String(movie.getFilename()).substr(17,movie.getFilename().length),
-                               'filename': String(movie.getFilename()),
-                               'tags': movie.getTags().join(', ') 
-                       };
-                       listerHtml += RND(tplMovieListItem, namespace);
-               }
-               listerHtml += tplMovieListFooter;
-               $('BodyContentChannellist').innerHTML = listerHtml;
-               setBodyMainContent('BodyContentChannellist');
-               
-       }               
-}
-function delMovieFile(file,servicename,title,description) {
-       debug("delMovieFile: file("+file+"),servicename("+servicename+"),title("+title+"),description("+description+")");
-       Dialog.confirm(
-               "Selected timer:<br>"
-               +"Servicename: "+servicename+"<br>"
-               +"Title: "+title+"<br>"
-               +"Description: "+description+"<br>"
-               +"Are you sure that you want to delete the Timer?",
-                {windowParameters: {width:300, className: windowStyle},
-                       okLabel: "delete",
-                       buttonClass: "myButtonClass",
-                       cancel: function(win) {debug("delMovieFile cancel confirm panel")},
-                       ok: function(win) { debug("delMovieFile ok confirm panel"); doRequest(url_moviefiledelete+"?filename="+file, incomingDelMovieFileResult, false); return true; }
-                       }
-       );
-       
-}
-function incomingDelMovieFileResult(request) {
-       debug("incomingDelMovieFileResult");
-       if(request.readyState == 4){
-               var delresult = new SimpleXMLResult(getXML(request));
-               if(delresult.getState()){
-                       loadMovieList();
-               }else{
-                       messageBox("Deletion Error","Reason: "+delresult.getStateText());
-               }
-       }               
-}
-
-
-// send Messages
-function showMessageSendForm(){
-               $('BodyContentChannellist').innerHTML = tplMessageSendForm;
-}
-function sendMessage(messagetext,messagetype,messagetimeout){
-       if(!messagetext){
-               messagetext = $('MessageSendFormText').value;
-       }       
-       if(!messagetimeout){
-               messagetimeout = $('MessageSendFormTimeout').value;
-       }       
-       if(!messagetype){
-               var index = $('MessageSendFormType').selectedIndex;
-               messagetype = $('MessageSendFormType').options[index].value;
-       }       
-       doRequest(url_message+'?text='+messagetext+'&type='+messagetype+'&timeout='+messagetimeout, incomingMessageResult, false);
-}
-function incomingMessageResult(request){
-
-       if(request.readyState== 4){
-               var b = getXML(request).getElementsByTagName("e2message");
-               var result = b.item(0).getElementsByTagName('e2result').item(0).firstChild.data;
-               var resulttext = b.item(0).getElementsByTagName('e2resulttext').item(0).firstChild.data;
-               if (result=="True"){
-                       messageBox('message send','message send successfully! it appears on TV-Screen');
-               }else{
-                       messageBox('message send failed',resulttext);
-               }
-       }               
-}
-
-// PowerState Code
-function showPowerStateSendForm(){
-               $('BodyContentChannellist').innerHTML = tplPowerStateSendForm;
-}
-function sendPowerState(newState){
-       doRequest(url_powerstate+'?newstate='+newState, incomingPowerStateResult, false);
-}
-function incomingPowerStateResult(request){
-       debug(request.readyState);
-       if(request.readyState == 4){
-               var b = getXML(request).getElementsByTagName("e2powerstate");
-               var result = b.item(0).getElementsByTagName('e2result').item(0).firstChild.data;
-               var resulttext = b.item(0).getElementsByTagName('e2resulttext').item(0).firstChild.data;
-               var tplPowerStateSendForm2 = '<h1>PowerState is changing to:'+resulttext+ '</h1>' + tplPowerStateSendForm;
-               $('BodyContentChannellist').innerHTML = tplPowerStateSendForm2;
-       } else {
-               $('BodyContentChannellist').innerHTML = "<h1>some unknown error</h1>" + tplPasswordSendForm;
-       }
-}
-
-// RemoteControl Code
-function showRemoteControllSendForm(){
-       if(! $('rcWindow')){
-               openWindow("Remote", tplRemoteControlForm, 220, 615, "rcWindow");
-       }
-}
-function sendRemoteControlRequest(command){
-       doRequest(url_remotecontrol+'?command='+command, incomingRemoteControlResult, false);
-}
-function incomingRemoteControlResult(request){
-       if(request.readyState == 4){
-               var b = getXML(request).getElementsByTagName("e2remotecontrol");
-               var result = b.item(0).getElementsByTagName('e2result').item(0).firstChild.data;
-               var resulttext = b.item(0).getElementsByTagName('e2resulttext').item(0).firstChild.data;
-       } else {
-               $('rcWindow').innerHTML = "<h1>some unknown error</h1>" + tplRemoteControlForm;
-       }
-}
-
-function getSettings(){
-       doRequest(url_settings, incomingGetSettings, false);
-}
-
-function incomingGetSettings(request){
-       if(request.readyState == 4){
-               settings = new Settings(getXML(request)).getArray();
-       }
-       if(String(getSettingByName("config.ParentalControl.configured")) == "True") {
-               getParentControl();
-       }
-}
-function getSettingByName(txt) {
-       debug("getSettingByName ("+txt+")");
-       for(i = 0; i < settings.length; i++) {
-               debug("("+settings[i].getSettingName()+") (" +settings[i].getSettingValue()+")");
-               if(String(settings[i].getSettingName()) == String(txt)) {
-                       return settings[i].getSettingValue();
-               } 
-       }
-       return "";
-}
-function getParentControl() {
-       doRequest(url_parentcontrol, incomingParentControl, false);
-}
-function incomingParentControl(request) {
-       if(request.readyState == 4){
-               parentControlList = new ServiceList(getXML(request)).getArray();
-               debug("parentControlList got "+parentControlList.length + " services");
-       }
-}
-function getParentControlByRef(txt) {
-       debug("getParentControlByRef ("+txt+")");
-       for(i = 0; i < parentControlList.length; i++) {
-               debug("("+parentControlList[i].getClearServiceReference()+")");
-               if(String(parentControlList[i].getClearServiceReference()) == String(txt)) {
-                       return parentControlList[i].getClearServiceReference();
-               } 
-       }
-       return "";
-}
-function sendToggleTimerDisable(justplay,begin,end,repeated,channel,name,description,afterEvent,disabled){
-       disabled = (ownLazyNumber(disabled) == 0) ? 1 : 0;
-       
-       var descriptionClean = (description == " " || description == "N/A") ? "" : description;
-       var nameClean = (name == " " || name == "N/A") ? "" : name;
-
-       doRequest(url_timerchange+"?"+"sRef="+channel.replace("&quot;", '"')+"&begin="+begin
-        +"&end="+end+"&name="+escape(nameClean)+"&description="+escape(descriptionClean)
-        +"&afterevent="+afterEvent+"&eit=0&disabled="+disabled
-        +"&justplay="+justplay+"&repeated="+repeated
-        +"&channelOld="+channel
-        +"&beginOld="+begin+"&endOld="+end
-        +"&deleteOldOnSave=1", incomingTimerAddResult, false);
-}
-function ownLazyNumber(num) {
-       if(isNaN(num)){
-               return 0;
-       } else {
-               return Number(num);
-       }
-}
-
-var subServicesInsertedList = new Object();
-
-function getSubServices(servicereference) {
-       clearInterval(SubServicePoller);
-       SubServicePollerCounter = 0;
-       doRequest(url_subservices,incomingSubServiceRequest, false);
-}
-function incomingSubServiceRequest(request){
-       if(request.readyState == 4){
-               var services = new ServiceList(getXML(request)).getArray();
-               listerHtml      = '';           
-               debug("got "+services.length+" SubServices");
-               if(services.length > 1) {
-                       
-                       first = services[0];
-                       var mainChannellist = loadedChannellist[String($('mainServiceRef').value)];
-                       
-                       var oldEntryPosition = -1;
-                       for(i = 0; i < mainChannellist.length; i++) {
-                               var service = mainChannellist[i];
-                               if(String(service.getServiceReference()) == String(first.getServiceReference())) {
-                                       oldEntryPosition = i + 1;
-                                       break;
-                               }
-                       }
-                       if(typeof(subServicesInsertedList[String(first.getServiceReference())]) != "undefined") {
-                               for ( var i = 1; i < subServicesInsertedList[String(first.getServiceReference())].length ; i++){
-                                       var reference = subServicesInsertedList[String(first.getServiceReference())][i];
-                                       $(reference.getServiceReference()+'extend').innerHTML = "";
-                               }
-                               for(i = oldEntryPosition; i < oldEntryPosition + subServicesInsertedList[String(first.getServiceReference())].length; i++) {
-                                       mainChannellist.splice(i);
-                               }
-                       }
-                       for ( var i = 0; i < services.length ; i++){
-                               var reference = services[i];
-                               var namespace = {       
-                                       'servicereference': reference.getServiceReference(),
-                                       'servicename': reference.getServiceName()
-                               };
-                               listerHtml += RND(tplServiceListItem, namespace);
-                               if(oldEntryPosition > -1) {
-                                       mainChannellist = mainChannellist.insert(oldEntryPosition++, reference);
-                               }
-                       }
-                       $(first.getServiceReference()+'extend').innerHTML = listerHtml;
-                       subServicesInsertedList[String(first.getServiceReference())] = services;
-                       loadedChannellist[$('mainServiceRef').value] = mainChannellist;
-               }
-       }
-}
-// Array.insert( index, value ) - Insert value at index, without overwriting existing keys
-Array.prototype.insert = function( j, v ) {
- if( j>=0 ) {
-  var a = this.slice(), b = a.splice( j );
-  a[j] = v;
-  return a.concat( b );
- }
-}
-// Array.splice() - Remove or replace several elements and return any deleted elements
-if( typeof Array.prototype.splice==='undefined' ) {
- Array.prototype.splice = function( a, c ) {
-  var i = 0, e = arguments, d = this.copy(), f = a, l = this.length;
-  if( !c ) { c = l - a; }
-  for( i; i < e.length - 2; i++ ) { this[a + i] = e[i + 2]; }
-  for( a; a < l - c; a++ ) { this[a + e.length - 2] = d[a - c]; }
-  this.length -= c - e.length + 2;
-  return d.slice( f, f + c );
- };
-}
-function writeTimerListNow() {
-       new Ajax.Request( url_timerlistwrite, { asynchronous: true, method: 'get' });
-}
-function recordingPushed() {
-       doRequest(url_timerlist, incomingRecordingPushed, false);
-}
-function incomingRecordingPushed(request) {
-       if(request.readyState == 4){
-               var timers = new TimerList(getXML(request)).getArray();
-               debug("have "+timers.length+" timer");
-               
-               var aftereventReadable = new Array ('Nothing', 'Standby', 'Deepstandby/Shutdown');
-               var justplayReadable = new Array('record', 'zap');
-               var OnOff = new Array('on', 'off');
-               
-               listerHtml = '';
-               
-               for ( var i = 0; i <timers.length; i++){
-                       var timer = timers[i];
-
-                       if(ownLazyNumber(timer.getDontSave()) == 1) {
-                               var beginDate = new Date(Number(timer.getTimeBegin())*1000);
-                               var endDate = new Date(Number(timer.getTimeEnd())*1000);
-                               var namespace = {
-                               'servicereference': timer.getServiceReference(),
-                               'servicename': timer.getServiceName() ,
-                               'title': timer.getName(), 
-                               'description': timer.getDescription(), 
-                               'descriptionextended': timer.getDescriptionExtended(), 
-                               'begin': timer.getTimeBegin(),
-                               'beginDate': beginDate.toLocaleString(),
-                               'end': timer.getTimeEnd(),
-                               'endDate': endDate.toLocaleString(),
-                               'state': timer.getState(),
-                               'duration': Math.ceil((timer.getDuration()/60)),
-                               'repeated': timer.getRepeated(),
-                               'repeatedReadable': repeatedReadable(timer.getRepeated()),
-                               'justplay': timer.getJustplay(),
-                               'justplayReadable': justplayReadable[Number(timer.getJustplay())],
-                               'afterevent': timer.getAfterevent(),
-                               'aftereventReadable': aftereventReadable[Number(timer.getAfterevent())],
-                               'disabled': timer.getDisabled(),
-                               'onOff': OnOff[Number(timer.getDisabled())],
-                               'color': colorTimerListEntry( timer.getState() )
-                               };
-                               listerHtml += RND(tplTimerListItem, namespace);
-                       }
-               }
-               openWindow("Record Now", listerHtml+tplRecordingFooter, 900, 500, "Record now window");
-       }
-}
-function inserteSizes() {
-/*     var screenW = 640, screenH = 480;
-       if (parseInt(navigator.appVersion)>3) { 
-               screenW = screen.width;
-               screenH = screen.height;
-       } else if (navigator.appName == "Netscape"
-          && parseInt(navigator.appVersion)==3
-          && navigator.javaEnabled() ) {
-               var jToolkit = java.awt.Toolkit.getDefaultToolkit();
-               var jScreenSize = jToolkit.getScreenSize();
-               screenW = jScreenSize.width;
-               screenH = jScreenSize.height;
-       }
-       debug("screenW:"+screenW+" screenH:"+screenH);
-       /* 640x480
-        * 800x600
-        * 1024x768
-        * 1280x1024
-        * 1600x1280
-       if(screenH == 800) {
-               debug("size 1");
-               $("BodyContentChannellist").style.height = '20%';
-       } else if(screenH == 1024) {
-               debug("1024")
-               $("BodyContentChannellist").style.height = '760px';
-               
-       } else {
-               alert("unsupported screensize");
-       }*/
-       
-}
-function recordingPushedDecision(recordNowNothing,recordNowUndefinitely,recordNowCurrent) {
-       var recordNow = recordNowNothing;
-       recordNow = (recordNow == "") ? recordNowUndefinitely: recordNow;
-       recordNow = (recordNow == "") ? recordNowCurrent: recordNow;
-       if(recordNow != "nothing" && recordNow != "") {
-               doRequest(url_recordnow+"?recordnow="+recordNow, incomingTimerAddResult, false);
-       }
-}
-
-function ifChecked(rObj) {
-       if(rObj.checked) {
-               return rObj.value;
-       } else {
-               return "";
-       }
-}
-function showAbout() {
-       doRequest(url_about, incomingAbout, false);
-}
-function incomingAbout(request) {
-       if(request.readyState == 4){
-               debug("incomingAbout returned");
-               var aboutEntries = getXML(request).getElementsByTagName("e2abouts").item(0).getElementsByTagName("e2about");
-               for (var c =0; c < aboutEntries.length;c++){
-                       var xml = aboutEntries.item(c);
-                       try{
-                               var namespace = {
-                                       'enigmaVersion': xml.getElementsByTagName('e2enigmaversion').item(0).firstChild.data
-/*
-                                       ,'lanDHCP': xml.getElementsByTagName('e2landhcp').item(0).firstChild.data
-                                       ,'lanIP': xml.getElementsByTagName('e2lanip').item(0).firstChild.data
-                                       ,'lanMask': xml.getElementsByTagName('e2lanmask').item(0).firstChild.data
-                                       ,'lanGW': xml.getElementsByTagName('e2langw').item(0).firstChild.data
-                                       ,'lanDNS': xml.getElementsByTagName('e2landns').item(0).firstChild.data
-*/
-                                       ,'fpVersion': xml.getElementsByTagName('e2fpversion').item(0).firstChild.data
-                                       ,'tunerInfo': xml.getElementsByTagName('e2tunerinfo').item(0).firstChild.data
-                                       ,'hddInfo': xml.getElementsByTagName('e2hddinfo').item(0).firstChild.data
-                                       ,'serviceName': xml.getElementsByTagName('e2servicename').item(0).firstChild.data
-                                       ,'serviceProvider': xml.getElementsByTagName('e2serviceprovider').item(0).firstChild.data
-                                       ,'serviceAspect': xml.getElementsByTagName('e2serviceaspect').item(0).firstChild.data
-                                       ,'serviceNamespace': xml.getElementsByTagName('e2servicenamespace').item(0).firstChild.data
-                                       ,'vPID': xml.getElementsByTagName('e2vpid').item(0).firstChild.data
-                                        ,'vPIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2vpid').item(0).firstChild.data),16)+" "
-                                       ,'aPID': xml.getElementsByTagName('e2apid').item(0).firstChild.data+" "
-                                        ,'aPIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2apid').item(0).firstChild.data),16)+" "
-                                       ,'pcrID': xml.getElementsByTagName('e2pcrid').item(0).firstChild.data
-                                        ,'pcrIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2pcrid').item(0).firstChild.data),16)+" "
-                                       ,'pmtPID': xml.getElementsByTagName('e2pmtpid').item(0).firstChild.data
-                                        ,'pmtPIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2pmtpid').item(0).firstChild.data),16)+" "
-                                       ,'txtPID': xml.getElementsByTagName('e2txtpid').item(0).firstChild.data
-                                        ,'txtPIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2txtpid').item(0).firstChild.data),16)+" "
-                                       ,'tsID': xml.getElementsByTagName('e2tsid').item(0).firstChild.data
-                                        ,'tsIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2tsid').item(0).firstChild.data),16)+" "
-                                       ,'onID': xml.getElementsByTagName('e2onid').item(0).firstChild.data
-                                        ,'onIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2onid').item(0).firstChild.data),16)+" "
-                                       ,'sid': xml.getElementsByTagName('e2sid').item(0).firstChild.data
-                                        ,'sidh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2sid').item(0).firstChild.data),16)+" "
-                                 };
-                               $('BodyContentChannellist').innerHTML = RND(tplAbout, namespace);;
-                               setBodyMainContent('BodyContentChannellist');
-                               
-                       } catch (e) {
-                               debug("About parsing Error" + e);
-                       }       
-               }
-       }
-}
-function quotes2html(txt) {
-       txt = txt.replace(/"/g, '&quot;');
-       return txt.replace(/'/g, '&#39;');
-}
-
-// Spezial functions, mostly for testing purpose
-function openHiddenFunctions(){
-       openWindow("Extra Hidden Functions",tplExtraHiddenFunctions,300,100);
-}
-function restartUpdateStream() {
-       clearInterval(UpdateStreamReaderPollTimer);
-       UpdateStreamReaderRequest.abort();
-       UpdateStreamReaderRequest = null;
-       UpdateStreamReaderPollTimerCounter = 0;
-       UpdateStreamReaderStart();
-}
-function startDebugWindow() {
-       DBG = true;
-       debugWin = openWindow("DEBUG", "", 300, 300, "debugWindow");
-}
-function restartTwisted() {
-       new Ajax.Request( "/web/restarttwisted", { asynchronous: true, method: "get" })
+Version = '$Header$';\r
+\r
+var doRequestMemory = new Object();\r
+var doRequestMemorySave = new Object();\r
+\r
+// Get Settings\r
+var settings = null;\r
+var parentControlList = null;\r
+\r
+// UpdateStreamReader\r
+var UpdateStreamReaderNextReadPos = 0;\r
+var UpdateStreamReaderPollTimer;\r
+var UpdateStreamReaderPollTimerCounter = 0;\r
+var UpdateStreamReaderPollTimerCounterTwisted = 0;\r
+UpdateStreamReaderRequest = null;\r
+function UpdateStreamReaderStart(){\r
+       var ua = navigator.userAgent;\r
+       if(navigator.userAgent.indexOf("MSIE") >=0) {\r
+               debug("UpdateStreamReader IE Fix");\r
+\r
+               var namespace = {       \r
+                                       'url_updates': url_updates\r
+               };\r
+               $('UpdateStreamReaderIEFixPanel').innerHTML = RND(tplUpdateStreamReaderIE, namespace);\r
+               \r
+       }else {\r
+               UpdateStreamReaderNextReadPos = 0;\r
+               allMessages = "";\r
+               UpdateStreamReaderRequest = new XMLHttpRequest();\r
+               UpdateStreamReaderRequest.onload = UpdateStreamReaderOnLoad;\r
+               UpdateStreamReaderRequest.onerror = UpdateStreamReaderOnError;\r
+               UpdateStreamReaderRequest.open("GET", url_updates, true);\r
+               UpdateStreamReaderRequest.send(null);\r
+               UpdateStreamReaderPollTimer = setInterval(UpdateStreamReaderLatestResponse, 10000);\r
+       }\r
+}\r
+  \r
+function UpdateStreamReaderLatestResponse() {\r
+       UpdateStreamReaderPollTimerCounter++;\r
+       debug(UpdateStreamReaderPollTimerCounter);\r
+       if(UpdateStreamReaderPollTimerCounter > 6) {\r
+               clearInterval(UpdateStreamReaderPollTimer);\r
+               UpdateStreamReaderRequest.abort();\r
+               UpdateStreamReaderRequest = null;\r
+               UpdateStreamReaderPollTimerCounter = 0;\r
+               UpdateStreamReaderStart();\r
+               \r
+               UpdateStreamReaderPollTimerCounterTwisted++;\r
+               return;\r
+       }\r
+       var allMessages = UpdateStreamReaderRequest.responseText;\r
+       do {\r
+               var unprocessed = allMessages.substring(UpdateStreamReaderNextReadPos);\r
+               var messageXMLEndIndex = unprocessed.indexOf("\n");\r
+               \r
+               if (messageXMLEndIndex!=-1) {\r
+                       var endOfFirstMessageIndex = messageXMLEndIndex + "\n".length;\r
+                       var anUpdate = unprocessed.substring(0, endOfFirstMessageIndex);\r
+       \r
+                       var re = new RegExp("<script>parent\.(.*)</script>");\r
+                       anUpdate = re.exec(anUpdate);\r
+\r
+                       if(anUpdate != null){\r
+                               if (anUpdate.length == 2){\r
+                                       eval(anUpdate[1]);\r
+                               }\r
+                       }\r
+                       \r
+                       UpdateStreamReaderNextReadPos += endOfFirstMessageIndex;\r
+               }\r
+               if(UpdateStreamReaderNextReadPos > 65000){\r
+                       UpdateStreamReaderRequest.abort();\r
+                       UpdateStreamReaderRequest = null;\r
+                       UpdateStreamReaderPollTimerCounter = 0;\r
+                       UpdateStreamReaderStart();\r
+                       messageXMLEndIndex = -1;\r
+               }\r
+       } while (messageXMLEndIndex != -1);\r
+}\r
+\r
+function UpdateStreamReaderOnLoad(){\r
+       window.clearInterval(UpdateStreamReaderPollTimer);\r
+       debug("UpdateStreamReaderOnLoad");\r
+       Dialog.confirm(\r
+               "Live Update Stream ends!<br><br>You will not receive any Update from Enigma2.<br>Should I reconnect?",\r
+                {windowParameters: {width:300, className: windowStyle},\r
+                       okLabel: "reconnect",\r
+                       buttonClass: "myButtonClass",\r
+                       cancel: function(win) {debug("cancel confirm panel")},\r
+                       ok: function(win) {UpdateStreamReaderStart(); return true;}\r
+                       }\r
+               );\r
+}\r
+function UpdateStreamReaderOnError(){\r
+       // TODO: change this, because it will be called on 'PageUnload' while the request is still running\r
+       debug("UpdateStreamReaderOnError");\r
+       window.clearInterval(UpdateStreamReaderPollTimer);\r
+       Dialog.confirm(\r
+               "Live Update Stream has an Error!<br><br>You will not receive any Update from Enigma2.<br>Should I try to reconnect?",\r
+                {windowParameters: {width:300, className: windowStyle},\r
+                        okLabel: "reconnect",\r
+                        buttonClass: "myButtonClass",\r
+                        cancel: function(win) {debug("cancel confirm panel")},\r
+                        ok: function(win) {UpdateStreamReaderStart(); return true;}\r
+                       }\r
+               );\r
+}\r
+//end UpdateStreamReader\r
+\r
+function openWindow(title, inner, width, height, id){\r
+                       if(id == null) id = new Date().toUTCString();\r
+                       var win = new Window(id, {className: windowStyle, title: title, width: width, height: height });\r
+                       win.getContent().innerHTML = inner;\r
+                       win.setDestroyOnClose();\r
+                       win.showCenter();\r
+                       debug("opening Window: "+title);\r
+                       return win;\r
+}\r
+function messageBox(t, m){\r
+       Dialog.alert(m, {windowParameters: {title: t, className: windowStyle, width:200}, okLabel: "Close"});\r
+}\r
+\r
+//RND Template Function (http://www.amix.dk)\r
+function RND(tmpl, ns) {\r
+       var fn = function(w, g) {\r
+               g = g.split("|");\r
+               var cnt = ns[g[0]];\r
+               //Support for filter functions\r
+               for(var i=1; i < g.length; i++) {\r
+                       cnt = eval(g[i])(cnt);\r
+               }\r
+               return cnt || w;\r
+       };\r
+       return tmpl.replace(/%\(([A-Za-z0-9_|.]*)\)/g, fn);\r
+}\r
+function debug(text){\r
+       if(DBG){\r
+               try{\r
+                       debugWin.getContent().innerHTML += "DEBUG: "+text+"<br>";\r
+               } catch (windowNotPresent) {}\r
+       }\r
+}\r
+function showhide(id){\r
+       o = $(id).style;\r
+       o.display = (o.display!="none")? "none":"";\r
+}\r
+function set(element, value){\r
+       //debug(element+"-"+value);\r
+       element = parent.$(element);\r
+       if(value.length > 550) {\r
+               value = value.substr(0,550) + "[...]";\r
+       }\r
+       if (element){\r
+               element.innerHTML = value;\r
+       }\r
+       if(navigator.userAgent.indexOf("MSIE") >=0) {\r
+               elementscript= $('UpdateStreamReaderIEFixIFrame').$('scriptzone');\r
+               if(elementscript){\r
+                       elementscript.innerHTML = ""; // deleting set() from page, to keep the page short and to save memory                    \r
+               }\r
+       }\r
+}\r
+function setComplete(element, value){\r
+       //debug(element+"-"+value);\r
+       element = parent.$(element);\r
+       if (element){\r
+               element.innerHTML = value;\r
+       }\r
+       if(navigator.userAgent.indexOf("MSIE") >=0) {\r
+               elementscript= $('UpdateStreamReaderIEFixIFrame').$('scriptzone');\r
+               if(elementscript){\r
+                       elementscript.innerHTML = ""; // deleting set() from page, to keep the page short and to save memory                    \r
+               }\r
+       }\r
+}\r
+// requestindikator\r
+var requestcounter = 0;\r
+function requestIndicatorUpdate(){\r
+       //debug(requestcounter+" open requests");\r
+       if(requestcounter>=1){\r
+               $('RequestIndicator').style.display = "inline";\r
+       }else{\r
+               $('RequestIndicator').style.display = "none";\r
+       }\r
+}\r
+function requestStarted(){\r
+       requestcounter +=1;\r
+       requestIndicatorUpdate();\r
+}\r
+function requestFinished(){\r
+       requestcounter -=1;\r
+       requestIndicatorUpdate();\r
+}\r
+// end requestindikator\r
+function doRequest(url, readyFunction, save){\r
+       requestStarted();\r
+       doRequestMemorySave[url] = save;\r
+       debug("doRequest: Requesting: "+url);\r
+       if(save == true && typeof(doRequestMemory[url]) != "undefined") {\r
+               readyFunction(doRequestMemory[url]);\r
+       } else {\r
+               debug("doRequest: loading");\r
+               new Ajax.Request(url,\r
+                       {\r
+                               asynchronous: true,\r
+                               method: 'GET',\r
+                               requestHeaders: ['Pragma', 'no-cache', 'Cache-Control', 'must-revalidate', 'If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],\r
+                               onException: function(o,e){ throw(e); },                                \r
+                               onSuccess: function (transport, json) {\r
+                                                       if(typeof(doRequestMemorySave[url]) != "undefined") {\r
+                                                               if(doRequestMemorySave[url]) {\r
+                                                                       debug("doRequest: saving request"); \r
+                                                                       doRequestMemory[url] = transport;\r
+                                                               }\r
+                                                       }\r
+                                                       readyFunction(transport);\r
+                                               },\r
+                               onComplete: requestFinished \r
+                       });\r
+       }\r
+}\r
+\r
+function getXML(request){\r
+       if (document.implementation && document.implementation.createDocument){\r
+               var xmlDoc = request.responseXML\r
+       }\r
+       else if (window.ActiveXObject){\r
+               var xmlInsert = document.createElement('xml');\r
+\r
+               xmlInsert.setAttribute('innerHTML',request.responseText);\r
+               xmlInsert.setAttribute('id','_MakeAUniqueID');\r
+               document.body.appendChild(xmlInsert);\r
+               xmlDoc = $('_MakeAUniqueID');\r
+               document.body.removeChild($('_MakeAUniqueID'));\r
+       } else {\r
+               debug("Your Browser Sucks!");\r
+       }\r
+       return xmlDoc;\r
+}\r
+function parentPin(servicereference) {\r
+       servicereference = decodeURIComponent(servicereference);\r
+       if(parentControlList == null || String(getSettingByName("config.ParentalControl.configured")) != "True") {\r
+               return true;\r
+       }\r
+       debug("parentPin " + parentControlList.length);\r
+       if(getParentControlByRef(servicereference) == servicereference) {\r
+               if(String(getSettingByName("config.ParentalControl.type.value")) == "whitelist") {\r
+                       debug("leaving here 1");\r
+                       return true;\r
+               }\r
+       } else {\r
+               debug("leaving here 2");\r
+               return true;\r
+       }\r
+       debug("going to ask for PIN");\r
+\r
+       var userInput = prompt('ParentControll was switch on.<br> Please enter PIN','PIN');\r
+       if (userInput != '' && userInput != null) {\r
+               if(String(userInput) == String(getSettingByName("config.ParentalControl.servicepin.0")) ) {\r
+                       return true;\r
+               } else {\r
+                       return parentPin(servicereference);\r
+               }\r
+       } else {\r
+               return false;\r
+       }\r
+}\r
+var SubServicePoller;\r
+var SubServicePollerCounter = 0;\r
+var SubServicePollerRef = null;\r
+function zap(servicereference){\r
+       if(parentPin(servicereference)) {\r
+               new Ajax.Request( "/web/zap?sRef=" + servicereference, \r
+                                                       {\r
+                                                               asynchronous: true,\r
+                                                               method: 'get'\r
+                                                       }\r
+                                               );\r
+               if(SubServicePoller != 0){\r
+                       clearInterval(SubServicePoller);\r
+                       SubServicePollerCounter = 0;\r
+               }\r
+               SubServicePollerRef = servicereference;\r
+               SubServicePoller = setInterval(getSubServices, 10000);\r
+               SubServicePollerCounter = 1;\r
+       }\r
+}\r
+\r
+//++++       SignalPanel                           ++++\r
+function initSignalPanel(){\r
+       $('SignalPanel').innerHTML = tplSignalPanelButton;\r
+}\r
+function openSignalDialog(){\r
+       openWindow("Signal Info",tplSignalPanel, 215, 75);\r
+}\r
+\r
+\r
+//++++ EPG functions                               ++++\r
+function loadEPGBySearchString(string){\r
+               doRequest(url_epgsearch+escape(string),incomingEPGrequest, false);\r
+}\r
+function loadEPGByServiceReference(servicereference){\r
+               doRequest(url_epgservice+servicereference,incomingEPGrequest, false);\r
+}\r
+function incomingEPGrequest(request){\r
+       debug("incoming request" +request.readyState);          \r
+       if (request.readyState == 4){\r
+               var EPGItems = new EPGList(getXML(request)).getArray(true);\r
+               debug("have "+EPGItems.length+" e2events");\r
+               if(EPGItems.length > 0){                        \r
+                       var html = tplEPGListHeader;\r
+                       for (var i=0; i < EPGItems.length; i++){\r
+                               try{\r
+                                       var item = EPGItems[i];                         \r
+                                       var namespace = {       \r
+                                                       'date': item.getTimeDay(),\r
+                                                       'eventid': item.getEventId(),\r
+                                                       'servicereference': item.getServiceReference(),\r
+                                                       'servicename': quotes2html(item.getServiceName()),\r
+                                                       'title': quotes2html(item.getTitle()),\r
+                                                       'titleESC': escape(item.getTitle()),\r
+                                                       'starttime': item.getTimeStartString(), \r
+                                                       'duration': Math.ceil(item.getDuration()/60000), \r
+                                                       'description': quotes2html(item.getDescription()),\r
+                                                       'endtime': item.getTimeEndString(), \r
+                                                       'extdescription': quotes2html(item.getDescriptionExtended()),\r
+                                                       'number': String(i),\r
+                                                       'extdescriptionSmall': extdescriptionSmall(item.getDescriptionExtended(),String(i)),\r
+                                                       'start': item.getTimeBegin(),\r
+                                                       'end': item.getTimeEnd()\r
+                                               };\r
+                                       //Fill template with data and add id to our result\r
+                                       html += RND(tplEPGListItem, namespace);\r
+                               } catch (blubb) { debug("Error rendering: "+blubb);     }\r
+                       }\r
+                       html += tplEPGListFooter;\r
+                       openWindow("Electronic Program Guide", html, 900, 500);\r
+               } else {\r
+                       messageBox('No Items found!', 'Sorry but i could not find any EPG Content containing your search value');\r
+               }\r
+       }\r
+}\r
+function extdescriptionSmall(txt,num) {\r
+       if(txt.length > 410) {\r
+               var shortTxt = txt.substr(0,410);\r
+               txt = txt.replace(/\'\'/g, '&quot;');\r
+               txt = txt.replace(/\\/g, '\\\\');\r
+               txt = txt.replace(/\'/g, '\\\'');\r
+               txt = txt.replace(/\"/g, '&quot;');\r
+               var smallNamespace = { 'txt':txt,'number':num, 'shortTxt':shortTxt};\r
+               return RND(tplEPGListItemExtend, smallNamespace);\r
+       } else {\r
+               return txt;\r
+       }\r
+}      \r
+\r
+/////////////////////////\r
+\r
+function loadServiceEPGNowNext(servicereference){\r
+       var url = url_epgnow+servicereference;\r
+       doRequest(url, incomingServiceEPGNowNext, false);       \r
+}\r
+\r
+function incomingServiceEPGNowNext(request){\r
+       if(request.readyState == 4){\r
+               var epgevents = getXML(request).getElementsByTagName("e2eventlist").item(0).getElementsByTagName("e2event");\r
+               for (var c =0; c < epgevents.length;c++){\r
+                       var eventnow = new EPGEvent(epgevents.item(c));\r
+                       \r
+                       if (eventnow.getEventId() != 'None'){\r
+                               buildServiceListEPGItem(eventnow,"NOW");\r
+                       }\r
+               }\r
+       }\r
+}\r
+function buildServiceListEPGItem(epgevent,nownext){\r
+       var e = $(epgevent.getServiceReference()+'EPG'+nownext);\r
+               try{\r
+                       var namespace = {       \r
+                               'starttime': epgevent.getTimeStartString(), \r
+                               'title': epgevent.getTitle(), \r
+                               'length': Math.ceil(epgevent.duration/60) \r
+                       };\r
+                       e.innerHTML = RND(tplServiceListEPGItem, namespace);\r
+               } catch (blubb) {\r
+                       debug("Error rendering: "+blubb);\r
+               }       \r
+}\r
+///////////////////\r
+\r
+\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+//++++ GUI functions                               ++++\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+\r
+var currentBodyMainElement = null\r
+\r
+function setBodyMainContent(newelementname){\r
+       newelement =$(newelementname);\r
+       if(currentBodyMainElement != null){\r
+               currentBodyMainElement.style.display = "none";\r
+               \r
+       }\r
+       newelement.style.display = "";\r
+       currentBodyMainElement = newelement;\r
+}\r
+\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+//++++ volume functions                            ++++\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+//+++++++++++++++++++++++++++++++++++++++++++++++++++++\r
+\r
+function initVolumePanel(){\r
+       $('VolumePanel').innerHTML = tplVolumePanel;\r
+       getVolume(); \r
+}\r
+function getVolume(){\r
+       doRequest(url_getvolume,handleVolumeRequest, false);\r
+}\r
+function volumeSet(newvalue){\r
+       doRequest(url_setvolume+newvalue,handleVolumeRequest, false);\r
+}\r
+function volumeUp(){\r
+       doRequest(url_volumeup,handleVolumeRequest, false);\r
+}\r
+function volumeDown(){\r
+       doRequest(url_volumedown,handleVolumeRequest, false);   \r
+}\r
+function volumeMute(){\r
+       doRequest(url_volumemute,handleVolumeRequest, false);\r
+}\r
+function handleVolumeRequest(request){\r
+       if (request.readyState == 4) {\r
+               var b = getXML(request).getElementsByTagName("e2volume");\r
+               var newvalue = b.item(0).getElementsByTagName('e2current').item(0).firstChild.data;\r
+               var mute = b.item(0).getElementsByTagName('e2ismuted').item(0).firstChild.data;\r
+               debug("volume"+newvalue+";"+mute);\r
+               \r
+               for (var i = 1; i <= 10; i++)           {\r
+                       if ( (newvalue/10)>=i){\r
+                               $("volume"+i).src = "/webdata/gfx/led_on.png";\r
+                       }else{\r
+                               $("volume"+i).src = "/webdata/gfx/led_off.png";\r
+                       }\r
+               }\r
+               if (mute == "False"){\r
+                       $("speaker").src = "/webdata/gfx/speak_on.png";\r
+               }else{\r
+                       $("speaker").src = "/webdata/gfx/speak_off.png";\r
+               }\r
+       }       \r
+}\r
+\r
+var bouqetsMemory = new Object();\r
+\r
+function initChannelList(){\r
+       //debug("init ChannelList");    \r
+       var url = url_getServices+encodeURIComponent(bouqet_tv);\r
+       doRequest(url, incomingTVBouquetList, true);\r
+\r
+       var url = url_getServices+encodeURIComponent(bouqet_radio);\r
+       doRequest(url, incomingRadioBouquetList, true);\r
+\r
+       var url = url_getServices+encodeURIComponent(bouqet_provider_tv);\r
+       doRequest(url, incomingProviderTVBouquetList, true);\r
+\r
+       var url = url_getServices+encodeURIComponent(bouqet_provider_radio);\r
+       doRequest(url, incomingProviderRadioBouquetList, true);\r
+       \r
+       getSettings();\r
+}\r
+\r
+var servicereftoloadepgnow = "";\r
+var loadedChannellist = new Object();\r
+function loadBouquet(servicereference){ \r
+       debug("loading bouquet with "+servicereference);\r
+       servicereftoloadepgnow = servicereference;\r
+       debug("loadBouquet " + typeof(loadedChannellist[servicereftoloadepgnow]));\r
+       if(typeof(loadedChannellist[servicereftoloadepgnow]) == "undefined") {\r
+               doRequest(url_getServices+servicereference, incomingChannellist, true);\r
+       } else {\r
+               incomingChannellist();\r
+       }\r
+}\r
+\r
+function incomingTVBouquetList(request){\r
+       if (request.readyState == 4) {\r
+               var list0 = new ServiceList(getXML(request)).getArray();\r
+               debug("have "+list0.length+" TV Bouquet ");     \r
+               $('accordionMenueBouquetContentTV').innerHTML = renderBouquetTable(list0,tplBouquetListHeader,tplBouquetListItem,tplBouquetListFooter);\r
+               //loading first entry of TV Favorites as default for ServiceList\r
+               loadBouquet(list0[0].getServiceReference());\r
+               bouqetsMemory["bouqet_tv"] = list0;\r
+       }\r
+}\r
+function incomingRadioBouquetList(request){\r
+       if (request.readyState == 4) {\r
+               var list1 = new ServiceList(getXML(request)).getArray();\r
+               debug("have "+list1.length+" Radio Bouquet ");  \r
+               $('accordionMenueBouquetContentRadio').innerHTML = renderBouquetTable(list1,tplBouquetListHeader,tplBouquetListItem,tplBouquetListFooter);\r
+       }       \r
+}\r
+function incomingProviderTVBouquetList(request){\r
+       if (request.readyState == 4) {\r
+               var list2 = new ServiceList(getXML(request)).getArray();\r
+               debug("have "+list2.length+" TV Provider Bouquet ");    \r
+               $('accordionMenueBouquetContentProviderTV').innerHTML = renderBouquetTable(list2,tplBouquetListHeader,tplBouquetListItem,tplBouquetListFooter);\r
+       }       \r
+}\r
+function incomingProviderRadioBouquetList(request){\r
+       if (request.readyState == 4) {\r
+               var list2 = new ServiceList(getXML(request)).getArray();\r
+               debug("have "+list2.length+" Radio Provider Bouquet "); \r
+               $('accordionMenueBouquetContentProviderRadio').innerHTML = renderBouquetTable(list2,tplBouquetListHeader,tplBouquetListItem,tplBouquetListFooter);\r
+       }       \r
+}\r
+\r
+function renderBouquetTable(bouquet,templateHeader,templateItem,templateFooter){\r
+       debug("renderBouquetTable with "+bouquet.length+" Bouqet");     \r
+       var html = templateHeader;\r
+       for (var i=0; i < bouquet.length; i++){\r
+               try{\r
+                       var namespace = {\r
+                               'servicereference': bouquet[i].getServiceReference(), \r
+                               'bouquetname': bouquet[i].getServiceName()\r
+                       };\r
+                       html += RND(templateItem, namespace);\r
+               } catch (blubb) {}\r
+       }\r
+       html += templateFooter;\r
+       return html;\r
+}      \r
+\r
+function incomingChannellist(request){\r
+       var services = null;\r
+       if(typeof(loadedChannellist[servicereftoloadepgnow]) != "undefined"){\r
+               services = loadedChannellist[servicereftoloadepgnow];\r
+       } else if(request.readyState == 4) {\r
+               services = new ServiceList(getXML(request)).getArray();\r
+               loadedChannellist[servicereftoloadepgnow] = services;\r
+               debug("got "+services.length+" Services");\r
+       }\r
+       if(services != null) {\r
+               var smallNamespace = {'mainServiceRef': servicereftoloadepgnow };\r
+               listerHtml = RND(tplServiceListHeader, smallNamespace);\r
+               for ( var i = 0; i < services.length ; i++){\r
+                       var reference = services[i];\r
+                       var namespace = {       \r
+                               'servicereference': reference.getServiceReference(),\r
+                               'servicename': reference.getServiceName()\r
+                       };\r
+                       listerHtml += RND(tplServiceListItem, namespace);\r
+               }               \r
+               listerHtml += tplServiceListFooter;\r
+               $('BodyContentChannellist').innerHTML = listerHtml;\r
+               setBodyMainContent('BodyContentChannellist');\r
+               loadServiceEPGNowNext(servicereftoloadepgnow);\r
+               debug("incomingChannellist " + typeof(loadedChannellist[servicereftoloadepgnow]));\r
+       }\r
+}\r
+// Movies\r
+function loadMovieList(){\r
+       debug("loading movies");\r
+       doRequest(url_movielist, incomingMovieList);    \r
+}\r
+\r
+function incomingMovieList(request){\r
+       if(request.readyState == 4){\r
+               var movies = new MovieList(getXML(request)).getArray();\r
+               debug("have "+movies.length+" movies");\r
+               listerHtml      = tplMovieListHeader;           \r
+               for ( var i = 0; i <movies.length; i++){\r
+                       var movie = movies[i];\r
+                       var namespace = {       \r
+                               'servicereference': movie.getServiceReference(),\r
+                               'servicename': movie.getServiceName() ,\r
+                               'title': movie.getTitle(), \r
+                               'description': movie.getDescription(), \r
+                               'descriptionextended': movie.getDescriptionExtended(),\r
+                               'filelink': String(movie.getFilename()).substr(17,movie.getFilename().length),\r
+                               'filename': String(movie.getFilename()),\r
+                               'tags': movie.getTags().join(', ') \r
+                       };\r
+                       listerHtml += RND(tplMovieListItem, namespace);\r
+               }\r
+               listerHtml += tplMovieListFooter;\r
+               $('BodyContentChannellist').innerHTML = listerHtml;\r
+               setBodyMainContent('BodyContentChannellist');\r
+               \r
+       }               \r
+}\r
+function delMovieFile(file,servicename,title,description) {\r
+       debug("delMovieFile: file("+file+"),servicename("+servicename+"),title("+title+"),description("+description+")");\r
+       Dialog.confirm(\r
+               "Selected timer:<br>"\r
+               +"Servicename: "+servicename+"<br>"\r
+               +"Title: "+title+"<br>"\r
+               +"Description: "+description+"<br>"\r
+               +"Are you sure that you want to delete the Timer?",\r
+                {windowParameters: {width:300, className: windowStyle},\r
+                       okLabel: "delete",\r
+                       buttonClass: "myButtonClass",\r
+                       cancel: function(win) {debug("delMovieFile cancel confirm panel")},\r
+                       ok: function(win) { debug("delMovieFile ok confirm panel"); doRequest(url_moviefiledelete+"?filename="+file, incomingDelMovieFileResult, false); return true; }\r
+                       }\r
+       );\r
+       \r
+}\r
+function incomingDelMovieFileResult(request) {\r
+       debug("incomingDelMovieFileResult");\r
+       if(request.readyState == 4){\r
+               var delresult = new SimpleXMLResult(getXML(request));\r
+               if(delresult.getState()){\r
+                       loadMovieList();\r
+               }else{\r
+                       messageBox("Deletion Error","Reason: "+delresult.getStateText());\r
+               }\r
+       }               \r
+}\r
+\r
+\r
+// send Messages\r
+function showMessageSendForm(){\r
+               $('BodyContentChannellist').innerHTML = tplMessageSendForm;\r
+}\r
+function sendMessage(messagetext,messagetype,messagetimeout){\r
+       if(!messagetext){\r
+               messagetext = $('MessageSendFormText').value;\r
+       }       \r
+       if(!messagetimeout){\r
+               messagetimeout = $('MessageSendFormTimeout').value;\r
+       }       \r
+       if(!messagetype){\r
+               var index = $('MessageSendFormType').selectedIndex;\r
+               messagetype = $('MessageSendFormType').options[index].value;\r
+       }       \r
+       doRequest(url_message+'?text='+messagetext+'&type='+messagetype+'&timeout='+messagetimeout, incomingMessageResult, false);\r
+}\r
+function incomingMessageResult(request){\r
+\r
+       if(request.readyState== 4){\r
+               var b = getXML(request).getElementsByTagName("e2message");\r
+               var result = b.item(0).getElementsByTagName('e2result').item(0).firstChild.data;\r
+               var resulttext = b.item(0).getElementsByTagName('e2resulttext').item(0).firstChild.data;\r
+               if (result=="True"){\r
+                       messageBox('message send','message send successfully! it appears on TV-Screen');\r
+               }else{\r
+                       messageBox('message send failed',resulttext);\r
+               }\r
+       }               \r
+}\r
+\r
+// PowerState Code\r
+function showPowerStateSendForm(){\r
+               $('BodyContentChannellist').innerHTML = tplPowerStateSendForm;\r
+}\r
+function sendPowerState(newState){\r
+       doRequest(url_powerstate+'?newstate='+newState, incomingPowerStateResult, false);\r
+}\r
+function incomingPowerStateResult(request){\r
+       debug(request.readyState);\r
+       if(request.readyState == 4){\r
+               var b = getXML(request).getElementsByTagName("e2powerstate");\r
+               var result = b.item(0).getElementsByTagName('e2result').item(0).firstChild.data;\r
+               var resulttext = b.item(0).getElementsByTagName('e2resulttext').item(0).firstChild.data;\r
+               var tplPowerStateSendForm2 = '<h1>PowerState is changing to:'+resulttext+ '</h1>' + tplPowerStateSendForm;\r
+               $('BodyContentChannellist').innerHTML = tplPowerStateSendForm2;\r
+       } else {\r
+               $('BodyContentChannellist').innerHTML = "<h1>some unknown error</h1>" + tplPasswordSendForm;\r
+       }\r
+}\r
+\r
+// RemoteControl Code\r
+function showRemoteControllSendForm(){\r
+       if(! $('rcWindow')){\r
+               openWindow("Remote", tplRemoteControlForm, 220, 615, "rcWindow");\r
+       }\r
+}\r
+function sendRemoteControlRequest(command){\r
+       doRequest(url_remotecontrol+'?command='+command, incomingRemoteControlResult, false);\r
+}\r
+function incomingRemoteControlResult(request){\r
+       if(request.readyState == 4){\r
+               var b = getXML(request).getElementsByTagName("e2remotecontrol");\r
+               var result = b.item(0).getElementsByTagName('e2result').item(0).firstChild.data;\r
+               var resulttext = b.item(0).getElementsByTagName('e2resulttext').item(0).firstChild.data;\r
+       } else {\r
+               $('rcWindow').innerHTML = "<h1>some unknown error</h1>" + tplRemoteControlForm;\r
+       }\r
+}\r
+\r
+function getSettings(){\r
+       doRequest(url_settings, incomingGetSettings, false);\r
+}\r
+\r
+function incomingGetSettings(request){\r
+       if(request.readyState == 4){\r
+               settings = new Settings(getXML(request)).getArray();\r
+       }\r
+       if(String(getSettingByName("config.ParentalControl.configured")) == "True") {\r
+               getParentControl();\r
+       }\r
+}\r
+function getSettingByName(txt) {\r
+       debug("getSettingByName ("+txt+")");\r
+       for(i = 0; i < settings.length; i++) {\r
+               debug("("+settings[i].getSettingName()+") (" +settings[i].getSettingValue()+")");\r
+               if(String(settings[i].getSettingName()) == String(txt)) {\r
+                       return settings[i].getSettingValue();\r
+               } \r
+       }\r
+       return "";\r
+}\r
+function getParentControl() {\r
+       doRequest(url_parentcontrol, incomingParentControl, false);\r
+}\r
+function incomingParentControl(request) {\r
+       if(request.readyState == 4){\r
+               parentControlList = new ServiceList(getXML(request)).getArray();\r
+               debug("parentControlList got "+parentControlList.length + " services");\r
+       }\r
+}\r
+function getParentControlByRef(txt) {\r
+       debug("getParentControlByRef ("+txt+")");\r
+       for(i = 0; i < parentControlList.length; i++) {\r
+               debug("("+parentControlList[i].getClearServiceReference()+")");\r
+               if(String(parentControlList[i].getClearServiceReference()) == String(txt)) {\r
+                       return parentControlList[i].getClearServiceReference();\r
+               } \r
+       }\r
+       return "";\r
+}\r
+function sendToggleTimerDisable(justplay,begin,end,repeated,channel,name,description,afterEvent,disabled){\r
+       disabled = (ownLazyNumber(disabled) == 0) ? 1 : 0;\r
+       \r
+       var descriptionClean = (description == " " || description == "N/A") ? "" : description;\r
+       var nameClean = (name == " " || name == "N/A") ? "" : name;\r
+\r
+       doRequest(url_timerchange+"?"+"sRef="+channel.replace("&quot;", '"')+"&begin="+begin\r
+        +"&end="+end+"&name="+escape(nameClean)+"&description="+escape(descriptionClean)\r
+        +"&afterevent="+afterEvent+"&eit=0&disabled="+disabled\r
+        +"&justplay="+justplay+"&repeated="+repeated\r
+        +"&channelOld="+channel\r
+        +"&beginOld="+begin+"&endOld="+end\r
+        +"&deleteOldOnSave=1", incomingTimerAddResult, false);\r
+}\r
+function ownLazyNumber(num) {\r
+       if(isNaN(num)){\r
+               return 0;\r
+       } else {\r
+               return Number(num);\r
+       }\r
+}\r
+\r
+var subServicesInsertedList = new Object();\r
+\r
+function getSubServices(servicereference) {\r
+       clearInterval(SubServicePoller);\r
+       SubServicePollerCounter = 0;\r
+       doRequest(url_subservices,incomingSubServiceRequest, false);\r
+}\r
+function incomingSubServiceRequest(request){\r
+       if(request.readyState == 4){\r
+               var services = new ServiceList(getXML(request)).getArray();\r
+               listerHtml      = '';           \r
+               debug("got "+services.length+" SubServices");\r
+               if(services.length > 1) {\r
+                       \r
+                       first = services[0];\r
+                       var mainChannellist = loadedChannellist[String($('mainServiceRef').value)];\r
+                       \r
+                       var oldEntryPosition = -1;\r
+                       for(i = 0; i < mainChannellist.length; i++) {\r
+                               var service = mainChannellist[i];\r
+                               if(String(service.getServiceReference()) == String(first.getServiceReference())) {\r
+                                       oldEntryPosition = i + 1;\r
+                                       break;\r
+                               }\r
+                       }\r
+                       if(typeof(subServicesInsertedList[String(first.getServiceReference())]) != "undefined") {\r
+                               for ( var i = 1; i < subServicesInsertedList[String(first.getServiceReference())].length ; i++){\r
+                                       var reference = subServicesInsertedList[String(first.getServiceReference())][i];\r
+                                       $(reference.getServiceReference()+'extend').innerHTML = "";\r
+                               }\r
+                               for(i = oldEntryPosition; i < oldEntryPosition + subServicesInsertedList[String(first.getServiceReference())].length; i++) {\r
+                                       mainChannellist.splice(i);\r
+                               }\r
+                       }\r
+                       for ( var i = 0; i < services.length ; i++){\r
+                               var reference = services[i];\r
+                               var namespace = {       \r
+                                       'servicereference': reference.getServiceReference(),\r
+                                       'servicename': reference.getServiceName()\r
+                               };\r
+                               listerHtml += RND(tplServiceListItem, namespace);\r
+                               if(oldEntryPosition > -1) {\r
+                                       mainChannellist = mainChannellist.insert(oldEntryPosition++, reference);\r
+                               }\r
+                       }\r
+                       $(first.getServiceReference()+'extend').innerHTML = listerHtml;\r
+                       subServicesInsertedList[String(first.getServiceReference())] = services;\r
+                       loadedChannellist[$('mainServiceRef').value] = mainChannellist;\r
+               }\r
+       }\r
+}\r
+// Array.insert( index, value ) - Insert value at index, without overwriting existing keys\r
+Array.prototype.insert = function( j, v ) {\r
+ if( j>=0 ) {\r
+  var a = this.slice(), b = a.splice( j );\r
+  a[j] = v;\r
+  return a.concat( b );\r
+ }\r
+}\r
+// Array.splice() - Remove or replace several elements and return any deleted elements\r
+if( typeof Array.prototype.splice==='undefined' ) {\r
+ Array.prototype.splice = function( a, c ) {\r
+  var i = 0, e = arguments, d = this.copy(), f = a, l = this.length;\r
+  if( !c ) { c = l - a; }\r
+  for( i; i < e.length - 2; i++ ) { this[a + i] = e[i + 2]; }\r
+  for( a; a < l - c; a++ ) { this[a + e.length - 2] = d[a - c]; }\r
+  this.length -= c - e.length + 2;\r
+  return d.slice( f, f + c );\r
+ };\r
+}\r
+function writeTimerListNow() {\r
+       new Ajax.Request( url_timerlistwrite, { asynchronous: true, method: 'get' });\r
+}\r
+function recordingPushed() {\r
+       doRequest(url_timerlist, incomingRecordingPushed, false);\r
+}\r
+function incomingRecordingPushed(request) {\r
+       if(request.readyState == 4){\r
+               var timers = new TimerList(getXML(request)).getArray();\r
+               debug("have "+timers.length+" timer");\r
+               \r
+               var aftereventReadable = new Array ('Nothing', 'Standby', 'Deepstandby/Shutdown');\r
+               var justplayReadable = new Array('record', 'zap');\r
+               var OnOff = new Array('on', 'off');\r
+               \r
+               listerHtml = '';\r
+               \r
+               for ( var i = 0; i <timers.length; i++){\r
+                       var timer = timers[i];\r
+\r
+                       if(ownLazyNumber(timer.getDontSave()) == 1) {\r
+                               var beginDate = new Date(Number(timer.getTimeBegin())*1000);\r
+                               var endDate = new Date(Number(timer.getTimeEnd())*1000);\r
+                               var namespace = {\r
+                               'servicereference': timer.getServiceReference(),\r
+                               'servicename': timer.getServiceName() ,\r
+                               'title': timer.getName(), \r
+                               'description': timer.getDescription(), \r
+                               'descriptionextended': timer.getDescriptionExtended(), \r
+                               'begin': timer.getTimeBegin(),\r
+                               'beginDate': beginDate.toLocaleString(),\r
+                               'end': timer.getTimeEnd(),\r
+                               'endDate': endDate.toLocaleString(),\r
+                               'state': timer.getState(),\r
+                               'duration': Math.ceil((timer.getDuration()/60)),\r
+                               'repeated': timer.getRepeated(),\r
+                               'repeatedReadable': repeatedReadable(timer.getRepeated()),\r
+                               'justplay': timer.getJustplay(),\r
+                               'justplayReadable': justplayReadable[Number(timer.getJustplay())],\r
+                               'afterevent': timer.getAfterevent(),\r
+                               'aftereventReadable': aftereventReadable[Number(timer.getAfterevent())],\r
+                               'disabled': timer.getDisabled(),\r
+                               'onOff': OnOff[Number(timer.getDisabled())],\r
+                               'color': colorTimerListEntry( timer.getState() )\r
+                               };\r
+                               listerHtml += RND(tplTimerListItem, namespace);\r
+                       }\r
+               }\r
+               openWindow("Record Now", listerHtml+tplRecordingFooter, 900, 500, "Record now window");\r
+       }\r
+}\r
+function inserteSizes() {\r
+/*     var screenW = 640, screenH = 480;\r
+       if (parseInt(navigator.appVersion)>3) { \r
+               screenW = screen.width;\r
+               screenH = screen.height;\r
+       } else if (navigator.appName == "Netscape"\r
+          && parseInt(navigator.appVersion)==3\r
+          && navigator.javaEnabled() ) {\r
+               var jToolkit = java.awt.Toolkit.getDefaultToolkit();\r
+               var jScreenSize = jToolkit.getScreenSize();\r
+               screenW = jScreenSize.width;\r
+               screenH = jScreenSize.height;\r
+       }\r
+       debug("screenW:"+screenW+" screenH:"+screenH);\r
+       /* 640x480\r
+        * 800x600\r
+        * 1024x768\r
+        * 1280x1024\r
+        * 1600x1280\r
+       if(screenH == 800) {\r
+               debug("size 1");\r
+               $("BodyContentChannellist").style.height = '20%';\r
+       } else if(screenH == 1024) {\r
+               debug("1024")\r
+               $("BodyContentChannellist").style.height = '760px';\r
+               \r
+       } else {\r
+               alert("unsupported screensize");\r
+       }*/\r
+       \r
+}\r
+function recordingPushedDecision(recordNowNothing,recordNowUndefinitely,recordNowCurrent) {\r
+       var recordNow = recordNowNothing;\r
+       recordNow = (recordNow == "") ? recordNowUndefinitely: recordNow;\r
+       recordNow = (recordNow == "") ? recordNowCurrent: recordNow;\r
+       if(recordNow != "nothing" && recordNow != "") {\r
+               doRequest(url_recordnow+"?recordnow="+recordNow, incomingTimerAddResult, false);\r
+       }\r
+}\r
+\r
+function ifChecked(rObj) {\r
+       if(rObj.checked) {\r
+               return rObj.value;\r
+       } else {\r
+               return "";\r
+       }\r
+}\r
+function showAbout() {\r
+       doRequest(url_about, incomingAbout, false);\r
+}\r
+function incomingAbout(request) {\r
+       if(request.readyState == 4){\r
+               debug("incomingAbout returned");\r
+               var aboutEntries = getXML(request).getElementsByTagName("e2abouts").item(0).getElementsByTagName("e2about");\r
+               for (var c =0; c < aboutEntries.length;c++){\r
+                       var xml = aboutEntries.item(c);\r
+                       try{\r
+                               var fptext = "V"+xml.getElementsByTagName('e2fpversion').item(0).firstChild.data;\r
+                               var tunerinfo = "";\r
+                               \r
+                               var nims = xml.getElementsByTagName('e2tunerinfo').item(0).getElementsByTagName("e2nim");\r
+                               for(var i=0;i< nims.length;i++){\r
+                                       tunerinfo += nims.item(i).firstChild.data+"<br>";\r
+                               }\r
+                               \r
+                               var hdddata = xml.getElementsByTagName('e2hddinfo').item(0);\r
+                               var hddinfo = "";\r
+                               if(hdddata.firstChild.data != "None"){\r
+                                       hddinfo += "Model: "+hdddata.getElementsByTagName("model").item(0).firstChild.data;\r
+                                       hddinfo += "<br>Capacity: "+hdddata.getElementsByTagName("capacity").item(0).firstChild.data;\r
+                                       hddinfo += "<br>Free: "+hdddata.getElementsByTagName("free").item(0).firstChild.data;\r
+                               }else{\r
+                                       hddinfo +="no Harddisc";
+                               }\r
+\r
+                               var namespace = {\r
+                                       'enigmaVersion': xml.getElementsByTagName('e2enigmaversion').item(0).firstChild.data\r
+/*\r
+                                       ,'lanDHCP': xml.getElementsByTagName('e2landhcp').item(0).firstChild.data\r
+                                       ,'lanIP': xml.getElementsByTagName('e2lanip').item(0).firstChild.data\r
+                                       ,'lanMask': xml.getElementsByTagName('e2lanmask').item(0).firstChild.data\r
+                                       ,'lanGW': xml.getElementsByTagName('e2langw').item(0).firstChild.data\r
+                                       ,'lanDNS': xml.getElementsByTagName('e2landns').item(0).firstChild.data\r
+*/\r
+                                       ,'fpVersion': fptext\r
+                                       ,'tunerInfo': tunerinfo\r
+                                       ,'hddInfo': hddinfo\r
+                                       ,'serviceName': xml.getElementsByTagName('e2servicename').item(0).firstChild.data\r
+                                       ,'serviceProvider': xml.getElementsByTagName('e2serviceprovider').item(0).firstChild.data\r
+                                       ,'serviceAspect': xml.getElementsByTagName('e2serviceaspect').item(0).firstChild.data\r
+                                       ,'serviceNamespace': xml.getElementsByTagName('e2servicenamespace').item(0).firstChild.data\r
+                                       ,'vPID': xml.getElementsByTagName('e2vpid').item(0).firstChild.data\r
+                                        ,'vPIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2vpid').item(0).firstChild.data),16)+" "\r
+                                       ,'aPID': xml.getElementsByTagName('e2apid').item(0).firstChild.data+" "\r
+                                        ,'aPIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2apid').item(0).firstChild.data),16)+" "\r
+                                       ,'pcrID': xml.getElementsByTagName('e2pcrid').item(0).firstChild.data\r
+                                        ,'pcrIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2pcrid').item(0).firstChild.data),16)+" "\r
+                                       ,'pmtPID': xml.getElementsByTagName('e2pmtpid').item(0).firstChild.data\r
+                                        ,'pmtPIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2pmtpid').item(0).firstChild.data),16)+" "\r
+                                       ,'txtPID': xml.getElementsByTagName('e2txtpid').item(0).firstChild.data\r
+                                        ,'txtPIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2txtpid').item(0).firstChild.data),16)+" "\r
+                                       ,'tsID': xml.getElementsByTagName('e2tsid').item(0).firstChild.data\r
+                                        ,'tsIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2tsid').item(0).firstChild.data),16)+" "\r
+                                       ,'onID': xml.getElementsByTagName('e2onid').item(0).firstChild.data\r
+                                        ,'onIDh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2onid').item(0).firstChild.data),16)+" "\r
+                                       ,'sid': xml.getElementsByTagName('e2sid').item(0).firstChild.data\r
+                                        ,'sidh': parseInt(ownLazyNumber(xml.getElementsByTagName('e2sid').item(0).firstChild.data),16)+" "\r
+                                 };\r
+                               $('BodyContentChannellist').innerHTML = RND(tplAbout, namespace);;\r
+                               setBodyMainContent('BodyContentChannellist');\r
+                               \r
+                       } catch (e) {\r
+                               debug("About parsing Error" + e);\r
+                       }       \r
+               }\r
+       }\r
+}\r
+function quotes2html(txt) {\r
+       txt = txt.replace(/"/g, '&quot;');\r
+       return txt.replace(/'/g, '&#39;');\r
+}\r
+\r
+// Spezial functions, mostly for testing purpose\r
+function openHiddenFunctions(){\r
+       openWindow("Extra Hidden Functions",tplExtraHiddenFunctions,300,100);\r
+}\r
+function restartUpdateStream() {\r
+       clearInterval(UpdateStreamReaderPollTimer);\r
+       UpdateStreamReaderRequest.abort();\r
+       UpdateStreamReaderRequest = null;\r
+       UpdateStreamReaderPollTimerCounter = 0;\r
+       UpdateStreamReaderStart();\r
+}\r
+function startDebugWindow() {\r
+       DBG = true;\r
+       debugWin = openWindow("DEBUG", "", 300, 300, "debugWindow");\r
+}\r
+function restartTwisted() {\r
+       new Ajax.Request( "/web/restarttwisted", { asynchronous: true, method: "get" })\r
 }
\ No newline at end of file
index 6a6c982..3f7bc62 100644 (file)
@@ -1,31 +1,31 @@
-<e2:screen name="TestScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
-&lt;e2abouts><e2:element source="About" ><e2:convert type="web:ListFiller" >
-       &lt;e2about>
-               &lt;e2enigmaversion><e2:item name="enigmaVersion"  filter="xml"/>&lt;/e2enigmaversion>
-<!--
-               &lt;e2landhcp><e2:item name="lanDHCP"  filter="xml"/>&lt;/e2landhcp>
-               &lt;e2lanip><e2:item name="lanIP"  filter="xml"/>&lt;/e2lanip>
-               &lt;e2lanmask><e2:item name="lanMask" filter="xml"/>&lt;/e2lanmask>
-               &lt;e2langw><e2:item name="lanGW"  filter="xml"/>&lt;/e2langw>
-               &lt;e2landns><e2:item name="lanDNS"  filter="xml"/>&lt;/e2landns>
--->
-               &lt;e2fpversion><e2:item name="fpVersion"  filter="xml"/>&lt;/e2fpversion>
-               &lt;e2tunerinfo><e2:item name="tunerInfo"  filter="xml"/>&lt;/e2tunerinfo>
-               &lt;e2hddinfo><e2:item name="hddInfo"  filter="xml"/>&lt;/e2hddinfo>
-               &lt;e2servicename><e2:item name="serviceName"  filter="xml"/>&lt;/e2servicename>
-               &lt;e2serviceprovider><e2:item name="serviceProvider"  filter="xml"/>  &lt;/e2serviceprovider>
-               &lt;e2serviceaspect><e2:item name="serviceAspect"  filter="xml"/>&lt;/e2serviceaspect>
-               &lt;e2servicenamespace><e2:item name="serviceNamespace"  filter="xml"/>&lt;/e2servicenamespace>
-               &lt;e2vpid><e2:item name="vPID"  filter="xml"/>&lt;/e2vpid>
-               &lt;e2apid><e2:item name="aPID"  filter="xml"/>&lt;/e2apid>
-               &lt;e2pcrid><e2:item name="pcrID"  filter="xml"/>&lt;/e2pcrid>
-               &lt;e2pmtpid><e2:item name="pmtPID"  filter="xml"/>&lt;/e2pmtpid>
-               &lt;e2txtpid><e2:item name="txtPID"  filter="xml"/>&lt;/e2txtpid>
-               &lt;e2tsid><e2:item name="tsID"  filter="xml"/>&lt;/e2tsid>
-               &lt;e2onid><e2:item name="onID"  filter="xml"/>&lt;/e2onid>
-               &lt;e2sid><e2:item name="sid"  filter="xml"/>&lt;/e2sid>
-       &lt;/e2about>
-       </e2:convert>
-       <e2:convert type="web:TextToHTML" /></e2:element>
-&lt;/e2abouts>
+<e2:screen name="TestScreen">&lt;?xml version="1.0" encoding="UTF-8"?>\r
+&lt;e2abouts><e2:element source="About" ><e2:convert type="web:ListFiller" >\r
+       &lt;e2about>\r
+               &lt;e2enigmaversion><e2:item name="enigmaVersion"  filter="xml"/>&lt;/e2enigmaversion>\r
+<!--\r
+               &lt;e2landhcp><e2:item name="lanDHCP"  filter="xml"/>&lt;/e2landhcp>\r
+               &lt;e2lanip><e2:item name="lanIP"  filter="xml"/>&lt;/e2lanip>\r
+               &lt;e2lanmask><e2:item name="lanMask" filter="xml"/>&lt;/e2lanmask>\r
+               &lt;e2langw><e2:item name="lanGW"  filter="xml"/>&lt;/e2langw>\r
+               &lt;e2landns><e2:item name="lanDNS"  filter="xml"/>&lt;/e2landns>\r
+-->\r
+               &lt;e2fpversion><e2:item name="fpVersion"  filter="xml"/>&lt;/e2fpversion>\r
+               &lt;e2tunerinfo><e2:item name="tunerInfo" />&lt;/e2tunerinfo>\r
+               &lt;e2hddinfo><e2:item name="hddInfo"  />&lt;/e2hddinfo>\r
+               &lt;e2servicename><e2:item name="serviceName"  filter="xml"/>&lt;/e2servicename>\r
+               &lt;e2serviceprovider><e2:item name="serviceProvider"  filter="xml"/>  &lt;/e2serviceprovider>\r
+               &lt;e2serviceaspect><e2:item name="serviceAspect"  filter="xml"/>&lt;/e2serviceaspect>\r
+               &lt;e2servicenamespace><e2:item name="serviceNamespace"  filter="xml"/>&lt;/e2servicenamespace>\r
+               &lt;e2vpid><e2:item name="vPID"  filter="xml"/>&lt;/e2vpid>\r
+               &lt;e2apid><e2:item name="aPID"  filter="xml"/>&lt;/e2apid>\r
+               &lt;e2pcrid><e2:item name="pcrID"  filter="xml"/>&lt;/e2pcrid>\r
+               &lt;e2pmtpid><e2:item name="pmtPID"  filter="xml"/>&lt;/e2pmtpid>\r
+               &lt;e2txtpid><e2:item name="txtPID"  filter="xml"/>&lt;/e2txtpid>\r
+               &lt;e2tsid><e2:item name="tsID"  filter="xml"/>&lt;/e2tsid>\r
+               &lt;e2onid><e2:item name="onID"  filter="xml"/>&lt;/e2onid>\r
+               &lt;e2sid><e2:item name="sid"  filter="xml"/>&lt;/e2sid>\r
+       &lt;/e2about>\r
+       </e2:convert>\r
+       <e2:convert type="web:TextToHTML" /></e2:element>\r
+&lt;/e2abouts>\r
 </e2:screen>
\ No newline at end of file