4 // TimerEdit variables:
5 var addTimerEditFormObject = new Object();
6 addTimerEditFormObject["TVListFilled"] = 0;
7 addTimerEditFormObject["RadioListFilled"] = 0;
8 addTimerEditFormObject["deleteOldOnSave"] = 0;
9 addTimerEditFormObject["eventID"] = 0;
20 function addTimerByID(sRef,eventID,justplay){
22 debug("addTimerByID\neventID: "+eventID);
23 doRequest(url_timeraddbyeventid+"?sRef="+sRef+"&eventid="+eventID+"&justplay="+justplay, incomingTimerAddResult, false);
26 function incomingTimerAddResult(request){
27 debug("onTimerAdded");
28 if(request.readyState == 4){
29 var addresult = new SimpleXMLResult(getXML(request));
30 if(addresult.getState()){
34 messageBox("Timer Error","your Timer could not be added!\nReason: "+addresult.getStateText());
38 function loadTimerList(){
39 doRequest(url_timerlist, incomingTimerList, false);
42 function incomingTimerList(request){
43 if(request.readyState == 4){
44 var timers = new TimerList(getXML(request)).getArray();
45 debug("have "+timers.length+" timer");
46 listerHtml = tplTimerListHeader;
47 var aftereventReadable = new Array ('Nothing', 'Standby', 'Deepstandby/Shutdown');
48 var justplayReadable = new Array('record', 'zap');
49 for ( var i = 0; i <timers.length; i++){
50 var timer = timers[i];
51 var beginDate = new Date(Number(timer.getTimeBegin())*1000);
52 var endDate = new Date(Number(timer.getTimeEnd())*1000);
54 'servicereference': timer.getServiceReference(),
55 'servicename': quotes2html(timer.getServiceName()),
56 'title': quotes2html(timer.getName()),
57 'description': quotes2html(timer.getDescription()),
58 'descriptionextended': quotes2html(timer.getDescriptionExtended()),
59 'begin': timer.getTimeBegin(),
60 'beginDate': beginDate.toLocaleString(),
61 'end': timer.getTimeEnd(),
62 'endDate': endDate.toLocaleString(),
63 'state': timer.getState(),
64 'duration': Math.ceil((timer.getDuration()/60)),
65 'repeated': timer.getRepeated(),
66 'repeatedReadable': repeatedReadable(timer.getRepeated()),
67 'justplay': timer.getJustplay(),
68 'justplayReadable': justplayReadable[Number(timer.getJustplay())],
69 'afterevent': timer.getAfterevent(),
70 'aftereventReadable': aftereventReadable[Number(timer.getAfterevent())],
71 'disabled': timer.getDisabled(),
72 'onOff': timer.getToggleDisabledIMG(),
73 'color': timer.getColor()
75 listerHtml += RND(tplTimerListItem, namespace);
77 listerHtml += tplTimerListFooter;
78 $('BodyContentChannellist').innerHTML = listerHtml;
79 setBodyMainContent('BodyContentChannellist');
82 function repeatedReadable(num) {
89 var Repeated = new Object();
90 Repeated["Mo-Su"] =127;
93 Repeated["Mo-Fr"] = 31;
100 for(rep in Repeated) {
101 if(rep.toString() != "extend") {
102 var check = Number(Repeated[rep]);
106 html += rep.toString();
108 html += "," + rep.toString();
116 function colorTimerListEntry (state) {
119 } else if(state == 1) {
121 } else if(state == 2) {
127 function delTimer(sRef,begin,end,servicename,title,description,readyFunction){
128 debug("delTimer: sRef("+sRef+"),begin("+begin+"),end("+end+"),servicename("+servicename+"),title("+title+"),description("+description+")");
130 "Selected timer:<br>"
131 +"Channel: "+servicename+"<br>"
132 +"Title: "+title+"<br>"
133 +"Description: "+description+"<br>"
134 +"Are you sure that you want to delete the Timer?",
135 {windowParameters: {width:300, className: windowStyle},
137 buttonClass: "myButtonClass",
138 cancel: function(win) {debug("delTimer cancel confirm panel")},
140 debug("delTimer ok confirm panel");
141 doRequest(url_timerdelete+"?sRef="+sRef+"&begin="+begin+"&end="+end, readyFunction, false);
148 function incomingTimerDelResult(request){
149 debug("onTimerDeleted");
150 if(request.readyState == 4){
151 var delresult = new SimpleXMLResult(getXML(request));
156 function loadTimerFormNow() {
157 var now = new Date();
158 addTimerEditFormObject["syear"] = now.getFullYear();
159 addTimerEditFormObject["smonth"] = now.getMonth() + 1;
160 addTimerEditFormObject["sday"] = now.getDate();
161 addTimerEditFormObject["shour"] = now.getHours();
162 addTimerEditFormObject["smin"] = now.getMinutes();
164 var plusTwoHours = new Date(now.getTime() + ((120 *60)*1000) );
165 addTimerEditFormObject["eyear"] = plusTwoHours.getFullYear();
166 addTimerEditFormObject["emonth"] = plusTwoHours.getMonth() + 1;
167 addTimerEditFormObject["eday"] = plusTwoHours.getDate();
168 addTimerEditFormObject["ehour"] = plusTwoHours.getHours();
169 addTimerEditFormObject["emin"] = plusTwoHours.getMinutes();
171 addTimerEditFormObject["justplay"] = "record";
172 addTimerEditFormObject["channel"] = "";
173 addTimerEditFormObject["channelName"] = "";
174 addTimerEditFormObject["channelSort"] = "tv";
175 addTimerEditFormObject["name"] = "";
176 addTimerEditFormObject["description"] = "";
177 addTimerEditFormObject["repeated"] = 0;
178 addTimerEditFormObject["afterEvent"] = "0";
179 addTimerEditFormObject["deleteOldOnSave"] = 0;
181 addTimerEditFormObject["beginOld"] = 0;
182 addTimerEditFormObject["endOld"] = 0;
185 debug("loadTimerFormNow 2");
186 loadTimerFormChannels();
189 function loadTimerFormSeconds(justplay,begin,end,repeated,channel,channelName,name,description,afterEvent,deleteOldOnSave,eit) {
190 debug('justplay:'+justplay+' begin:'+begin+' end:'+end+' repeated:'+repeated+' channel:'+channel+' name:'+name+' description:'+description+' afterEvent:'+afterEvent+' deleteOldOnSave:'+deleteOldOnSave);
191 var start = new Date(Number(begin)*1000);
192 addTimerEditFormObject["syear"] = start.getFullYear();
193 addTimerEditFormObject["smonth"] = start.getMonth() + 1;
194 addTimerEditFormObject["sday"] = start.getDate();
195 addTimerEditFormObject["shour"] = start.getHours();
196 addTimerEditFormObject["smin"] = start.getMinutes();
198 var stopp = new Date(Number(end)*1000);
199 addTimerEditFormObject["eyear"] = stopp.getFullYear();
200 addTimerEditFormObject["emonth"] = stopp.getMonth() + 1;
201 addTimerEditFormObject["eday"] = stopp.getDate();
202 addTimerEditFormObject["ehour"] = stopp.getHours();
203 addTimerEditFormObject["emin"] = stopp.getMinutes();
205 addTimerEditFormObject["justplay"] = String(justplay);
206 addTimerEditFormObject["channel"] = decodeURIComponent(String(channel));
207 addTimerEditFormObject["channelName"] = String(channelName);
208 addTimerEditFormObject["channelSort"] = "";
209 addTimerEditFormObject["name"] = String(name);
210 addTimerEditFormObject["description"] = String(description);
211 addTimerEditFormObject["repeated"] = Number(repeated);
212 addTimerEditFormObject["afterEvent"] = Number(afterEvent);
214 debug(justplay+"|"+begin+"|"+end+"|"+repeated+"|"+channel+"|"+name+"|"+description+"|"+afterEvent);
216 addTimerEditFormObject["deleteOldOnSave"] = Number(deleteOldOnSave);
217 addTimerEditFormObject["beginOld"] = Number(begin);
218 addTimerEditFormObject["endOld"] = Number(end);
220 addTimerEditFormObject["eventID"] = Number(eit);
222 loadTimerFormChannels();
225 // startin to load for TV
226 function loadTimerFormChannels() {
227 if(addTimerEditFormObject["TVListFilled"] == 1 && addTimerEditFormObject["RadioListFilled"] == 1) {
229 } else if(addTimerEditFormObject["TVListFilled"] == 1 && addTimerEditFormObject["RadioListFilled"] == 0) {
230 addTimerListFormatTV();
232 var favorites = '1%3A7%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3AFROM%20BOUQUET%20%22userbouquet.favourites.tv%22%20ORDER%20BY%20bouquet'
233 doRequest(url_getServices+favorites, addTimerListFormatTV, false);
237 function addTimerListFormatTV(request) {
238 if(addTimerEditFormObject["RadioListFilled"] == 0) {
239 if(request.readyState == 4){
240 var services = new ServiceList(getXML(request)).getArray();
241 var tv = new Object();
242 for ( var i = 0; i < services.length ; i++){
243 var reference = services[i];
244 tv[reference.servicereference] = reference.servicename;
246 addTimerEditFormObject["TVListFilled"] = 1;
247 addTimerEditFormObject["TVList"] = tv;
250 if(addTimerEditFormObject["RadioListFilled"] == 1) {
253 var favorites = '1%3A7%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3AFROM%20BOUQUET%20%22userbouquet.favourites.radio%22%20ORDER%20BY%20bouquet';
254 doRequest(url_getServices+favorites, addTimerListFormatRadio, false);
257 function addTimerListFormatRadio(request) {
258 if(request.readyState == 4){
259 var services = new ServiceList(getXML(request)).getArray();
260 var radio = new Object();
261 for ( var i = 0; i < services.length ; i++){
262 var reference = services[i];
263 radio[reference.servicereference] = reference.servicename;
265 addTimerEditFormObject["RadioListFilled"] = 1;
266 addTimerEditFormObject["RadioList"] = radio;
271 function loadTimerForm(){
273 var Action = new Object();
274 Action["0"] = "Record";
277 var Repeated = new Object();
278 Repeated["1"] = "mo";
279 Repeated["2"] = "tu";
280 Repeated["4"] = "we";
281 Repeated["8"] = "th";
282 Repeated["16"] = "fr";
283 Repeated["32"] = "sa";
284 Repeated["64"] = "su";
285 Repeated["31"] = "mf";
286 Repeated["127"] ="ms";
288 var AfterEvent = new Object();
289 AfterEvent["0"] = "Nothing";
290 AfterEvent["1"] = "Standby";
291 AfterEvent["2"] = "Deepstandby/Shutdown";
293 addTimerEditFormObject["name"] = (typeof(addTimerEditFormObject["name"]) != "undefined") ? addTimerEditFormObject["name"] : "";
294 addTimerEditFormObject["name"] = (addTimerEditFormObject["name"] == "") ? " " : addTimerEditFormObject["name"];
296 addTimerEditFormObject["description"] = (typeof(addTimerEditFormObject["description"]) != "undefined") ? addTimerEditFormObject["description"] : "";
297 addTimerEditFormObject["description"] = (addTimerEditFormObject["description"] == "") ? " " : addTimerEditFormObject["description"];
299 var channelObject = addTimerEditFormObject["TVList"];
300 if( addTimerEditFormObject["channelSort"] == "tv") {
302 } else if( addTimerEditFormObject["channelSort"] == "radio") {
303 channelObject = addTimerEditFormObject["RadioList"];
306 for( element in addTimerEditFormObject["TVList"]) {
307 if( element == addTimerEditFormObject["channel"]) {
313 for( element in addTimerEditFormObject["RadioList"]) {
314 if( element == addTimerEditFormObject["channel"]) {
315 channelObject = addTimerEditFormObject["RadioList"];
322 addTimerEditFormObject["TVList"][addTimerEditFormObject["channel"]] = addTimerEditFormObject["channelName"];
325 var dashString = "------";
326 channelObject[dashString] = "- Bouquets -";
327 var listeNeu = new ServiceList(getXML(doRequestMemory[url_getServices+encodeURIComponent(bouqet_tv)])).getArray();
328 if(addTimerEditFormObject["channelSort"] == "radio") {
330 listeNeu = new ServiceList(getXML(doRequestMemory[url_getServices+encodeURIComponent(bouqet_radio)])).getArray();
332 debug("hier" + listeNeu.length);
333 for (i = 1; i < listeNeu.length; i++) {
334 var element = listeNeu[i];
335 channelObject[String(dashString+i)] = "---";
336 channelObject[element.getServiceReference()] = element.getServiceName();
339 'justplay': addTimerFormCreateOptionList(Action, addTimerEditFormObject["justplay"]),
340 'syear': addTimerFormCreateOptions(2007,2010,addTimerEditFormObject["syear"]),
341 'smonth': addTimerFormCreateOptions(1,12,addTimerEditFormObject["smonth"]),
342 'sday': addTimerFormCreateOptions(1,31,addTimerEditFormObject["sday"]),
343 'shour': addTimerFormCreateOptions(0,23,addTimerEditFormObject["shour"]),
344 'smin': addTimerFormCreateOptions(0,59,addTimerEditFormObject["smin"]),
345 'eyear': addTimerFormCreateOptions(2007,2010,addTimerEditFormObject["eyear"]),
346 'emonth': addTimerFormCreateOptions(1,12,addTimerEditFormObject["emonth"]),
347 'eday': addTimerFormCreateOptions(1,31,addTimerEditFormObject["eday"]),
348 'ehour': addTimerFormCreateOptions(0,23,addTimerEditFormObject["ehour"]),
349 'emin': addTimerFormCreateOptions(0,59,addTimerEditFormObject["emin"]),
350 'channel': addTimerFormCreateOptionList(channelObject, addTimerEditFormObject["channel"]),
351 'name': addTimerEditFormObject["name"],
352 'description': addTimerEditFormObject["description"],
353 'repeated': addTimerFormCreateOptionListRepeated(Repeated, addTimerEditFormObject["repeated"]),
354 'deleteOldOnSave': addTimerEditFormObject["deleteOldOnSave"],
355 'channelOld': addTimerEditFormObject["channel"],
356 'beginOld': addTimerEditFormObject["beginOld"],
357 'endOld': addTimerEditFormObject["endOld"],
358 'afterEvent': addTimerFormCreateOptionList(AfterEvent, addTimerEditFormObject["afterEvent"]),
359 'eventID': addTimerEditFormObject["eventID"]
361 var listerHtml = RND(tplAddTimerForm, namespace);
362 $('BodyContentChannellist').innerHTML = listerHtml;
364 // Empty some stuff, but keep others to have the performance
365 var tmp1 = addTimerEditFormObject["RadioList"];
366 var tmp2 = addTimerEditFormObject["TVList"];
367 addTimerEditFormObject = new Object();
368 addTimerEditFormObject["deleteOldOnSave"] = 0;
369 addTimerEditFormObject["RadioList"] = tmp1;
370 addTimerEditFormObject["TVList"] = tmp2;
371 addTimerEditFormObject["TVListFilled"] = 1;
372 addTimerEditFormObject["RadioListFilled"] = 1;
375 function addTimerFormCreateOptions(start,end,number) {
377 for(i = start; i <= end; i++) {
378 var txt = (String(i).length == 1) ? "0" + String(i) : String(i);
379 var selected = (i == Number(number)) ? "selected" : " ";
383 'selected': selected };
384 html += RND(tplAddTimerFormOptions, namespace);
388 function addTimerFormCreateOptionList(object,selected) {
391 for(var element in object) {
392 var txt = String(object[element]);
394 if(element == selected) {
402 if(element != "extend") {
403 html += RND(tplAddTimerFormOptions, namespace);
415 function timerFormExtendChannellist(bouqet) {
416 var listeTV = new ServiceList(getXML(doRequestMemory[url_getServices+encodeURIComponent(bouqet_tv)])).getArray();
417 var listeRadio = new ServiceList(getXML(doRequestMemory[url_getServices+encodeURIComponent(bouqet_radio)])).getArray();
419 for(i = 0; i < listeTV.length; i++) {
420 var element = listeTV[i];
421 if(String(element.getServiceReference()) == bouqet) {
427 for(i = 0; i < listeRadio.length; i++) {
428 var element = listeTV[i];
429 if(String(element.getServiceReference()) == bouqet) {
436 servicereftoloadepgnow = bouqet;
437 if(typeof(loadedChannellist[servicereftoloadepgnow]) == "undefined") {
438 doRequest(url_getServices+servicereftoloadepgnow, incomingTimerFormExtendChannellist, true);
440 incomingTimerFormExtendChannellist();
444 function incomingTimerFormExtendChannellist(request) {
446 if(typeof(loadedChannellist[servicereftoloadepgnow]) != "undefined"){
447 services = loadedChannellist[servicereftoloadepgnow];
448 } else if(request.readyState == 4) {
449 services = new ServiceList(getXML(request)).getArray();
450 loadedChannellist[servicereftoloadepgnow] = services;
451 debug("got "+services.length+" Services");
453 var attachLater = new Object();
454 if(services != null) {
455 debug("incomingTimerFormExtendChannellist " + services.length);
456 var selected = $('channel').selectedIndex;
457 for(j = selected; j < $('channel').options.length; j++) {
458 if($('channel').options[j].value == servicereftoloadepgnow) {
460 for(var i = 0; i < services.length ; i++) {
461 var reference = services[i];
462 var newEntry = new Option(reference.getServiceName(), reference.getServiceReference(), false, true);
463 if(typeof($('channel').options[j]) != "undefined") {
464 attachLater[String($('channel').options[j].value)] = $('channel').options[j].text;
466 $('channel').options[j] = newEntry;
472 for(x in attachLater) {
473 var newEntry = new Option(attachLater[x], x, false, true);
475 $('channel').options[$('channel').options.length] = newEntry;
478 $('channel').options[selected].selected = true;
483 function addTimerFormChangeTime(which) {
484 var start = new Date( $('syear').value, ($('smonth').value -1), $('sday').value, $('shour').value, $('smin').value, 0);
485 var end = new Date($('eyear').value, ($('emonth').value -1), $('eday').value, $('ehour').value, $('emin').value, 0);
486 // debug("("+start+")(" + end+")");
488 if(start.getTime() > end.getTime()) {
489 opponent = (which.substr(0,1) == 's') ? 'e' + which.substr(1, which.length -1) : 's' + which.substr(1, which.length -1) ;
490 $(opponent).value = $(which).value;
492 var all = new Array('year','month','day','hour','min');
493 for(i=0; i < all.length; i++) {
494 if(which.substr(1, which.length -1) == all[i]) {
495 addTimerFormChangeTime(which.substr(0,1) + all[i+1] );
500 function addTimerFormChangeType() {
501 var selected = ($('tvradio').checked == true) ? addTimerEditFormObject["TVList"]: addTimerEditFormObject["RadioList"];
502 for (i = $('channel').options.length; i != 0; i--) {
503 $('channel').options[i - 1] = null;
506 for(element in selected) {
507 if(element != "extend") {
509 $('channel').options[i] = new Option(selected[element]);
510 $('channel').options[i].value = element;
514 function addTimerFormCreateOptionListRepeated(Repeated,repeated) {
515 var num = Number(repeated);
518 var list = new Array(127, 64, 32, 31, 16, 8, 4, 2, 1);
519 for(i = 0; i < list.length; i++) {
520 var txt = String(Repeated[String(list[i])]);
521 if( String(Repeated[String(list[i])]) == "mf") {
523 } else if( String(Repeated[String(list[i])]) == "ms") {
526 txt = txt.substr(0,1).toUpperCase() + txt.substr(1,1);
534 'id': Repeated[String(list[i])],
535 'name': Repeated[String(list[i])],
538 'checked': checked };
539 if(String(Repeated[String(list[i])]) == "mf" || String(Repeated[String(list[i])]) == "ms") {
540 html2 = RND(tplAddTimerFormCheckbox, namespace) + html2;
542 html = RND(tplAddTimerFormCheckbox, namespace) + html;
547 function sendAddTimer() {
548 debug("sendAddTimer" + "parentChannel:" +$('channel').value);
550 if(parentPin($('channel').value)) {
551 var beginD = new Date(ownLazyNumber($('syear').value), (ownLazyNumber($('smonth').value) - 1), ownLazyNumber($('sday').value), ownLazyNumber($('shour').value), ownLazyNumber($('smin').value));
552 var begin = beginD.getTime()/1000;
554 var endD = new Date(ownLazyNumber($('eyear').value), (ownLazyNumber($('emonth').value) - 1), ownLazyNumber($('eday').value), ownLazyNumber($('ehour').value), ownLazyNumber($('emin').value));
555 var end = endD.getTime()/1000;
558 if( $('ms').checked ) {
560 } else if($('mf').checked) {
562 if($('sa').checked) {
563 repeated += ownLazyNumber($('sa').value);
565 if($('su').checked) {
566 repeated += ownLazyNumber($('su').value);
569 var check = new Array('mo', 'tu', 'we', 'th', 'fr');
570 for(i = 0; i < check.length; i++) {
571 if($(check[i]).checked) {
572 repeated += Number($(check[i]).value);
577 var descriptionClean = ($('descr').value == " " || $('descr').value == "N/A") ? "" : $('descr').value;
578 var nameClean = ($('name').value == " " || $('name').value == "N/A") ? "" : $('name').value;
580 var neverString = "[0-9a-zA-Z\-_\.\!\(\)&=\+$,;\?/:\\\ ]*";
581 if(descriptionClean != descriptionClean.match(neverString) ||
582 nameClean != nameClean.match(neverString)) {
583 alert("Please only use "+neverString+" in the name and the description field");
588 if($('ms').checked) {
589 repeated = ownLazyNumber($('ms').value);
590 } else if($('mf').checked) {
591 repeated = ownLazyNumber($('mf').value);
592 if($('su').checked) {
593 repeated += ownLazyNumber($('su').value);
595 if($('sa').checked) {
596 repeated += ownLazyNumber($('sa').value);
599 for(i = 0; i < days.length; i++){
600 if($(days[i]).checked) {
601 repeated += ownLazyNumber($(days[i]).value);
605 //addTimerByID(\'%(servicereference)\',\'%(eventid)\',\'False\');
606 doRequest(url_timerchange+"?"+"sRef="+($('channel').value).replace(""", '"')+"&begin="+begin
607 +"&end="+end+"&name="+escape(nameClean)+"&description="+escape(descriptionClean)
608 +"&afterevent="+$('after_event').value+"&eit=0&disabled=0"
609 +"&justplay="+ownLazyNumber($('justplay').value)+"&repeated="+repeated
610 +"&channelOld="+$('channelOld').value
611 +"&beginOld="+$('beginOld').value+"&endOld="+$('endOld').value
612 +"&eventID"+$('eventID').value
613 +"&deleteOldOnSave="+ownLazyNumber($('deleteOldOnSave').value), incomingTimerAddResult, false);
617 function cleanTimerListNow(){
618 debug("cleanTimerListNow pushed");
619 doRequest(url_timerlist, incomingCleanTimerListNow, false);
621 function incomingCleanTimerListNow(request) {
622 if(request.readyState == 4){
623 var timers = new TimerList(getXML(request)).getArray();
624 debug("have "+timers.length+" timer");
625 for ( var i = 0; i <timers.length; i++){
626 var timer = timers[i];
627 debug(timer.getState() + " " + quotes2html(timer.getName()));
628 if(timer.getState() != 0) {
629 delTimer(timer.getServiceReference(),timer.getTimeBegin(),timer.getTimeEnd()
630 ,quotes2html(timer.getServiceName()),quotes2html(timer.getName()),quotes2html(timer.getDescription()),incomingJustDoNothing);
635 function incomingJustDoNothing(request){
636 debug("just do nothing");
638 function sendToggleTimerDisable(justplay,begin,end,repeated,channel,name,description,afterEvent,disabled){
639 disabled = (ownLazyNumber(disabled) == 0) ? 1 : 0;
641 var descriptionClean = (description == " " || description == "N/A") ? "" : description;
642 var nameClean = (name == " " || name == "N/A") ? "" : name;
644 doRequest(url_timerchange+"?"+"sRef="+channel.replace(""", '"')+"&begin="+begin
645 +"&end="+end+"&name="+escape(nameClean)+"&description="+escape(descriptionClean)
646 +"&afterevent="+afterEvent+"&eit=0&disabled="+disabled
647 +"&justplay="+justplay+"&repeated="+repeated
648 +"&channelOld="+channel
649 +"&beginOld="+begin+"&endOld="+end
650 +"&deleteOldOnSave=1", incomingTimerAddResult, false);