1 var url_getvolume = '/web/vol?set=state';
2 var url_setvolume = '/web/vol?set=set'; // plus new value eq. set=set15
3 var url_volumeup = '/web/vol?set=up';
4 var url_volumedown = '/web/vol?set=down';
5 var url_volumemute = '/web/vol?set=mute';
7 var url_epgservice = "/web/epgservice?ref="; // plus serviceRev
8 var url_epgsearch = "/web/epgsearch?search="; // plus serviceRev
9 var url_epgnownext = "/web/epgnownext?ref="; // plus serviceRev
13 function openWindow(title, inner, width, height, id){
14 if(id == null) id = new Date().toUTCString();
17 var win = new Window(id, {className: "alphacube", title: title, width: width, height: height});
18 win.getContent().innerHTML = inner;
19 win.setDestroyOnClose();
21 debug("opening Window: "+title);
25 function messageBox(t, m){
26 Dialog.alert(m, {windowParameters: {title: t, className: "alphacube", width:200}, okLabel: "Close"});
29 function getHTTPObject( ){
32 // try to create a new instance of the xmlhttprequest object
35 if( window.ActiveXObject ){
36 for( var i = 5; i; i-- ){
38 // loading of a newer version of msxml dll (msxml3 - msxml5) failed
39 // use fallback solution
40 // old style msxml version independent, deprecated
42 xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
44 // try to use the latest msxml dll
47 xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
51 catch( excNotLoadable ){
56 // Mozilla, Opera und Safari
57 else if( window.XMLHttpRequest ){
58 xmlHttp = new XMLHttpRequest();
61 // loading of xmlhttp object failed
62 catch( excNotLoadable ){
68 //RND Template Function
69 function RND(tmpl, ns) {
70 var fn = function(w, g) {
74 //Support for filter functions
75 for(var i=1; i < g.length; i++) {
76 cnt = eval(g[i])(cnt);
80 return tmpl.replace(/%\(([A-Za-z0-9_|.]*)\)/g, fn);
86 debugWin.getContent().innerHTML += "DEBUG: "+text+"<br>";
87 } catch (windowNotPresent) {}
91 function showhide(id){
92 o = document.getElementById(id).style;
93 o.display = (o.display!="none")? "none":"";
96 function set(what, value){
97 //debug(what+"-"+value);
98 element = document.getElementById(what);
99 element.innerHTML = value;
100 //$('scriptzone').innerHTML = ""; // deleting set() from page, to keep the page short and to save memory
103 function doRequest(url, readyFunction){
105 new Ajax.Request(url,
108 onSuccess: readyFunction
112 function getXML(request){
113 if (document.implementation && document.implementation.createDocument){
114 debug("using responseXML");
115 var xmlDoc = request.responseXML
117 else if (window.ActiveXObject){
118 debug("Creating XML for IE");
119 var xmlInsert = document.createElement('xml');
121 xmlInsert.setAttribute('innerHTML',request.responseText);
122 xmlInsert.setAttribute('id','_MakeAUniqueID');
123 document.body.appendChild(xmlInsert);
124 xmlDoc = document.getElementById('_MakeAUniqueID');
125 document.body.removeChild(document.getElementById('_MakeAUniqueID'));
127 debug("Your Browser Sucks!");
133 var url = "/web/zap?ZapTo=" + escape(li.id);
134 //debug("requesting "+url);
135 new Ajax.Request( url,
142 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
143 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
144 //++++ EPG functions ++++
145 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
146 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
147 var EPGList = Class.create();
148 EPGList.prototype = {
150 initialize: function(){
151 debug("init class EPGList");
153 getBySearchString: function(string){
154 debug("requesting "+ url_epgsearch+string);
155 new Ajax.Request( url_epgsearch+string,
158 onComplete: this.incomingEPGrequest
162 getByServiceReference: function(serviceRef){
163 new Ajax.Request(url_epgservice+serviceRef,
166 onComplete: this.incomingEPGrequest
172 renderTable: function(epglist){
173 debug("rendering Table with "+epglist.length+" events");
174 var html='<table width="100%" border="0" cellspacing="1" cellpadding="0" border="1">';
175 for (var i=0; i < epglist.length; i++){
177 var item = epglist[i];
179 //Create JSON Object for Template
180 var namespace = { 'date': item.getTimeDay(),
181 'servicename': item.getServiceName(),
182 'title': item.getTitle(),
183 'titleESC': escape(item.getTitle()),
184 'starttime': item.getTimeStartString(),
185 'duration': (item.getDuration()/60000),
186 'description': item.getDescription(),
187 'endtime': item.getTimeEndString(),
188 'extdescription': item.getDescriptionExtended()
190 //Fill template with data and add id to our result
191 html += RND(tplEPGListItem, namespace);
193 //debug("Error rendering: "+blubb);
198 //element.innerHTML = html;
199 openWindow("Electronic Program Guide", html, 900, 500);
202 incomingEPGrequest: function(request){
203 debug("incoming request" +request.readyState);
204 if (request.readyState == 4)
206 var EPGItems = getXML(request).getElementsByTagName("e2eventlist").item(0).getElementsByTagName("e2event");
208 debug("have "+EPGItems.length+" e2events");
209 if(EPGItems.length > 0){
211 epglist = new Array();
212 for(var i=0; i < EPGItems.length; i++){
213 epglist.push(new EPGEvent(EPGItems.item(i)));
215 debug("Calling prototype.renderTable(epglist)");
216 EPGList.prototype.renderTable(epglist);
219 messageBox('No Items found!', 'Sorry but i could not find any EPG Content containing your search value');
227 function EPGEvent(element){
228 // parsing values from xml-element
230 this.eventID = element.getElementsByTagName('e2eventid').item(0).firstChild.data;
231 this.startTime = element.getElementsByTagName('e2eventstart').item(0).firstChild.data;
232 this.duration = element.getElementsByTagName('e2eventduration').item(0).firstChild.data;
233 this.title = element.getElementsByTagName('e2eventtitle').item(0).firstChild.data;
234 this.description = element.getElementsByTagName('e2eventdescription').item(0).firstChild.data;
235 this.descriptionE = element.getElementsByTagName('e2eventdescriptionextended').item(0).firstChild.data;
236 this.serviceRef = element.getElementsByTagName('e2eventservicereference').item(0).firstChild.data;
237 this.serviceName = element.getElementsByTagName('e2eventservicename').item(0).firstChild.data;
239 //debug("Bullshit is:"+bullshit);
241 this.getEventId = function ()
245 this.getTimeStart = function ()
247 var date = new Date(parseInt(this.startTime)*1000);
250 this.getTimeStartString = function ()
252 var h = this.getTimeStart().getHours();
253 var m = this.getTimeStart().getMinutes();
259 this.getTimeDay = function ()
261 var Wochentag = new Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
262 var wday = Wochentag[this.getTimeStart().getDay()];
263 var day = this.getTimeStart().getDate();
264 var month = this.getTimeStart().getMonth()+1;
265 var year = this.getTimeStart().getFullYear();
267 return wday+". "+day+"."+month+"."+year;
269 this.getTimeEnd = function ()
271 var date = new Date((parseInt(this.startTime)+parseInt(this.duration))*1000);
274 this.getTimeEndString = function ()
276 var h = this.getTimeEnd().getHours();
277 var m = this.getTimeEnd().getMinutes();
283 this.getDuration = function ()
285 return new Date(parseInt(this.duration)*1000);
287 this.getTitle = function ()
291 this.getDescription = function ()
293 return this.description;
295 this.getDescriptionExtended = function ()
297 return this.descriptionE;
299 this.getServiceReference = function ()
301 return this.serviceRef;
303 this.getServiceName = function ()
305 return this.serviceName.replace(" "," ");
307 }//END class EPGEvent
309 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
310 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
311 //++++ GUI functions ++++
312 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
313 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
314 var currentBodyMainElement = null
316 function setBodyMainContent(newelementname){
317 newelement =document.getElementById(newelementname);
318 if(currentBodyMainElement != null){
319 currentBodyMainElement.style.display = "none";
322 newelement.style.display = "";
323 currentBodyMainElement = newelement;
326 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
327 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
328 //++++ volume functions ++++
329 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
330 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
332 function initVolumePanel(){
333 document.getElementById('VolumePanel').innerHTML = tplVolumePanel;
338 doRequest(url_getvolume,handleVolumeRequest);
340 function volumeSet(newvalue)
342 doRequest(url_setvolume+newvalue,handleVolumeRequest);
346 doRequest(url_volumeup,handleVolumeRequest);
348 function volumeDown()
350 doRequest(url_volumedown,handleVolumeRequest);
352 function volumeMute()
354 doRequest(url_volumemute,handleVolumeRequest);
356 function handleVolumeRequest(request){
357 if (request.readyState == 4) {
358 var b = getXML(request).getElementsByTagName("e2volume");
359 debug(b.item(0).getElementsByTagName('e2current').length);
361 var newvalue = b.item(0).getElementsByTagName('e2current').item(0).firstChild.data;
362 var mute = b.item(0).getElementsByTagName('e2ismuted').item(0).firstChild.data;
363 debug("volume"+newvalue+";"+mute);
365 for (var i = 1; i <= 10; i++)
367 if ( (newvalue/10)>=i){
368 $("volume"+i).src = "/webdata/gfx/led_on.png";
370 $("volume"+i).src = "/webdata/gfx/led_off.png";
373 if (mute == "False"){
374 $("speaker").src = "/webdata/gfx/speak_on.png";
376 $("speaker").src = "/webdata/gfx/speak_off.png";
380 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
381 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
382 //++++ bouquet managing functions ++++
383 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
384 //+++++++++++++++++++++++++++++++++++++++++++++++++++++
385 function loadRootTVbouquet(){
386 url = '/web/fetchchannels?ServiceListBrowse='+escape('1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) FROM BOUQUET "bouquets.tv" ORDER BY bouquet');
390 function loadBouquet(url){
391 doRequest(url, incomingBouquet);
394 function incomingBouquet(request){
395 if((request.readyState == 4) && (t.status == 200)) {
398 var b = getXML(request).getElementsByTagName("e2servicelist").item(0).getElementsByTagName("e2service");
400 bouquets = new Array();
401 for ( var i=0; i < b.length; i++){
402 bRef = b.item(i).getElementsByTagName('e2servicereference').item(0).firstChild.data;
403 bName = b.item(i).getElementsByTagName('e2servicename').item(0).firstChild.data;
405 bu = new Array(bName,bRef);
408 refreshSelect(bouquets);
410 // die Anfrage enthielt Fehler;
411 // die Antwort war z.B. 404 (nicht gefunden)
412 // oder 500 (interner Server-Fehler)
417 // to add the bouquetts to the list
418 function refreshSelect(arraybouquet){
419 doRequest(url, incomingChannellist);
420 sel = document.getElementById("accordionMenuebouquetContent");
421 // options neu eintragen
423 for ( var i = 0 ; i < arraybouquet.length ; i++ ){
424 if(arraybouquet[i][0] && arraybouquet[i][1]){
426 html+="<a onclick=\"bouquetSelected(this); setBodyMainContent('BodyContentChannellist');\" id='";
427 html+= arraybouquet[i][1];
429 html+= arraybouquet[i][0];
436 refreshChannellist(arraybouquet[0][0],arraybouquet[0][1]);
439 //++++++++++++++++++++++
440 function bouquetSelected(element){
441 refreshChannellist(element.value,element.id)
444 function refreshChannellist(bname, bref){
445 var url = '/web/fetchchannels?ServiceListBrowse='+escape(bref);
446 doRequest(url, incomingChannellist);
449 function incomingChannellist(request){
450 if(request.readyState == 4){
452 services = getXML(request).getElementsByTagName("e2servicelist").item(0).getElementsByTagName("e2service");
454 listerHtml = tplServiceListHeader;
456 debug("got "+services.length+" Services");
458 for ( var i = 0; i < (services.length ); i++){
459 sRef = services.item(i).getElementsByTagName('e2servicereference').item(0).firstChild.data;
460 sName = services.item(i).getElementsByTagName('e2servicename').item(0).firstChild.data;
462 var namespace = { 'serviceref': sRef,
463 'servicerefESC': escape(sRef),
467 listerHtml += RND(tplServiceListItem, namespace);
471 listerHtml += tplServiceListFooter;
472 document.getElementById('BodyContentChannellist').innerHTML = listerHtml;
473 setBodyMainContent('BodyContentChannellist');