3 // TimerEdit variables:
4 var addTimerEditFormArray = [];
5 addTimerEditFormArray.TVListFilled = 0;
6 addTimerEditFormArray.RadioListFilled = 0;
7 addTimerEditFormArray.deleteOldOnSave = 0;
8 addTimerEditFormArray.eventID = 0;
9 addTimerEditFormArray.locationsList = [];
10 addTimerEditFormArray.tagsList = [];
12 days = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su'];
15 function addTimerFormChangeType() {
16 selected = ($('tvradio').checked === true) ? addTimerEditFormArray.TVList: addTimerEditFormArray.RadioList;
18 for (i = $('channel').options.length; i !== 0; i--) {
19 $('channel').options[i - 1] = null;
23 for(element in selected) {
24 if(element != "extend") {
26 $('channel').options[i] = new Option(selected[element]);
27 $('channel').options[i].value = element;
32 function addTimerFormChangeLocation(newloc) {
36 function addTimerFormPrepareTagsMenu(currtags) {
39 taglist = addTimerEditFormArray.tagsList;
43 result[""] = "<None>";
44 for (i = 0; i < taglist.length; i++) {
45 result[taglist[i]] = taglist[i];
48 result[currtags] = currtags;
49 tags = currtags.split(" ");
50 for (i = 0; i < taglist.length; i++) {
53 for (j=0; j<tags.length; j++) {
54 if (tags[j] != taglist[i]) {
61 res += " "+taglist[i];
64 res = res.substring(1,res.length);
67 resultsuff[res] = "- "+taglist[i];
69 result[res] = "+ "+taglist[i];
72 if (tags.length > 1) {
73 for (ele in resultsuff) {
74 result[ele] = resultsuff[ele];
77 result[""] = "<None>";
82 function addTimerFormChangeTags(newtags) {
83 lst = addTimerFormPrepareTagsMenu(newtags);
85 for (i = $('tags').options.length; i !== 0; i--) {
86 $('tags').options[i - 1] = null;
90 $('tags').options[i] = new Option(lst[element]);
91 $('tags').options[i].value = element;
98 function addTimerByID(sRef,eventID,justplay){
100 debug("[addTimerByID] eventID: "+eventID);
101 doRequest(url_timeraddbyeventid+"?sRef="+sRef+"&eventid="+eventID+"&justplay="+justplay, incomingTimerAddResult, false);
106 function incomingTimerAddResult(request){
107 debug("[incomingTimerAddResult] called");
108 if(request.readyState == 4){
109 var result = new SimpleXMLResult(getXML(request));
110 if(result.getState()){
111 //timer has been added
112 notify(result.getStateText(), result.getState());
115 notify(result.getStateText(), result.getState());
121 function loadTimerList(){
122 doRequest(url_timerlist, incomingTimerList, false);
126 function incomingTimerList(request){
127 if(request.readyState == 4){
128 var timers = new TimerList(getXML(request)).getArray();
129 debug("[incomingTimerList] Got " + timers.length + " timers");
131 var aftereventReadable = ['Nothing', 'Standby', 'Deepstandby/Shutdown', 'Auto'];
132 var justplayReadable = ['record', 'zap'];
135 var cssclass = "even";
137 for ( var i = 0; i < timers.length; i++){
138 var timer = timers[i];
139 var beginDate = new Date(Number(timer.getTimeBegin())*1000);
140 var endDate = new Date(Number(timer.getTimeEnd())*1000);
142 var enDis = timer.getToggleDisabledIMG() == "on" ? "Disable Timer" : "Enable Timer";
144 cssclass = cssclass == 'even' ? 'odd' : 'even';
147 'servicereference': timer.getServiceReference(),
148 'servicename': quotes2html(timer.getServiceName()),
149 'title': quotes2html(timer.getName()),
150 'description': quotes2html(timer.getDescription()),
151 'descriptionextended': quotes2html(timer.getDescriptionExtended()),
152 'begin': timer.getTimeBegin(),
153 'beginDate': dateToString(beginDate),
154 'end': timer.getTimeEnd(),
155 'endDate': dateToString(endDate),
156 'state': timer.getState(),
157 'duration': Math.ceil((timer.getDuration()/60)),
158 'repeated': timer.getRepeated(),
159 'repeatedReadable': repeatedReadable(timer.getRepeated()),
160 'justplay': timer.getJustplay(),
161 'justplayReadable': justplayReadable[Number(timer.getJustplay())],
162 'afterevent': timer.getAfterevent(),
163 'aftereventReadable': aftereventReadable[Number(timer.getAfterevent())],
164 'dirname' : timer.getDirname(),
165 'tags' : timer.getTags(),
166 'disabled': timer.getDisabled(),
167 'onOff': timer.getToggleDisabledIMG(),
168 'enDis': timer.getToggleDisabledText(),
172 data = { timer : namespace };
173 processTpl('tplTimerList', data, 'contentMain');
178 function repeatedReadable(num) {
186 Repeated["Mo-Su"] =127;
187 Repeated["Mo-Fr"] = 31;
196 for(rep in Repeated) {
197 if(rep.toString() != 'extend') {
198 var check = Number(Repeated[rep]);
202 retVal += rep.toString();
204 retVal = rep.toString()+','+retVal;
213 function delTimer(sRef, begin, end, servicename, title, description, readyFunction){
214 debug("[delTimer] sRef("+sRef+"),begin("+begin+"),end("+end+"),servicename("+servicename+"),title("+title+"),description("+description+")");
215 var result = confirm(
216 "Selected timer:\n" +
217 "Channel: "+servicename+"\n" +
218 "Title: "+title+"\n" +
219 "Description: "+description+"\n" +
220 "Are you sure that you want to delete the Timer?");
222 debug("[delTimer] ok confirm panel");
223 doRequest(url_timerdelete+"?sRef="+sRef+"&begin="+begin+"&end="+end, readyFunction, false);
227 debug("[delTimer] cancel confirm panel");
233 function incomingTimerDelResult(request){
234 debug("[incomingTimerDelResult] called");
235 if(request.readyState == 4){
236 var result = new SimpleXMLResult(getXML(request));
237 notify(result.getStateText(), result.getState());
238 debug("[incomingTimerDelResult] Loading List");
244 function loadTimerFormNow() {
245 var now = new Date();
246 addTimerEditFormArray.year = now.getFullYear();
247 addTimerEditFormArray.month = now.getMonth() + 1;
248 addTimerEditFormArray.day = now.getDate();
249 addTimerEditFormArray.shour = now.getHours();
250 addTimerEditFormArray.smin = now.getMinutes();
252 var plusTwoHours = new Date(now.getTime() + ((120 *60)*1000) );
253 addTimerEditFormArray.ehour = plusTwoHours.getHours();
254 addTimerEditFormArray.emin = plusTwoHours.getMinutes();
256 addTimerEditFormArray.justplay = "0";
257 addTimerEditFormArray.channel = "";
258 addTimerEditFormArray.channelName = "";
259 addTimerEditFormArray.channelSort = "tv";
260 addTimerEditFormArray.name = "";
261 addTimerEditFormArray.description = "";
262 addTimerEditFormArray.dirname = "";
263 addTimerEditFormArray.tags = "";
264 addTimerEditFormArray.repeated = 0;
265 addTimerEditFormArray.afterEvent = "3";
266 addTimerEditFormArray.deleteOldOnSave = 0;
268 addTimerEditFormArray.beginOld = 0;
269 addTimerEditFormArray.endOld = 0;
272 debug("[loadTimerFormNow] done");
277 function loadTimerEditForm(justplay, begin, end, repeated, channel, channelName, name, description, dirname, tags, afterEvent, deleteOldOnSave, eit) {
278 debug('[loadTimerEditForm] justplay: ' + justplay + ',begin: ' + begin + ',end: ' + end + ',repeated: ' + repeated + ',channel: ' + channel + ',name: ' + name +',description: ' + description +',dirname: ' + dirname +',tags: ' + tags + ',afterEvent: ' + afterEvent + ',deleteOldOnSave: ' + deleteOldOnSave);
279 var start = new Date(Number(begin)*1000);
280 addTimerEditFormArray.year = start.getFullYear();
281 addTimerEditFormArray.month = start.getMonth() + 1;
282 addTimerEditFormArray.day = start.getDate();
283 addTimerEditFormArray.shour = start.getHours();
284 addTimerEditFormArray.smin = start.getMinutes();
286 var stopp = new Date(Number(end)*1000);
287 addTimerEditFormArray.ehour = stopp.getHours();
288 addTimerEditFormArray.emin = stopp.getMinutes();
290 addTimerEditFormArray.justplay = String(justplay);
291 addTimerEditFormArray.channel = decodeURIComponent(String(channel));
292 addTimerEditFormArray.channelName = String(channelName);
293 addTimerEditFormArray.channelSort = "";
294 addTimerEditFormArray.name = String(name);
295 addTimerEditFormArray.description = String(description);
296 addTimerEditFormArray.dirname = String(dirname);
297 addTimerEditFormArray.tags = String(tags);
298 addTimerEditFormArray.repeated = Number(repeated);
299 addTimerEditFormArray.afterEvent = Number(afterEvent);
301 debug("[loadTimerEditForm]" + justplay + "|" + begin + "|" + end + "|" + repeated + "|"+channel+"|"+name+"|"+description+"|"+dirname+"|"+tags+"|"+afterEvent);
303 addTimerEditFormArray.deleteOldOnSave = Number(deleteOldOnSave);
304 addTimerEditFormArray.beginOld = Number(begin);
305 addTimerEditFormArray.endOld = Number(end);
307 addTimerEditFormArray.eventID = Number(eit);
312 function loadTimerFormTags() {
313 doRequest(url_getTags, incomingTimerFormTags, false);
316 function incomingTimerFormTags(request){
317 debug("[incomingTimerFormTags] called");
318 if(request.readyState == 4){
319 var result = new SimpleXMLResult(getXML(request));
320 addTimerEditFormArray.tagsList = (typeof(result.getStateText()) != 'undefined' ? result.getStateText().split(" ") : []);
321 loadTimerFormLocations();
325 function loadTimerFormLocations() {
326 doRequest(url_getLocations, incomingTimerFormLocations, false);
329 function incomingTimerFormLocations(request){
330 debug("[incomingTimerFormLocations] called");
331 if(request.readyState == 4){
332 var result = new SimpleXMLResult(getXML(request));
333 addTimerEditFormArray.locationsList = (typeof(result.getStateText()) != 'undefined' ? result.getStateText().split(" ") : ["/hdd/movie"]);
334 loadTimerFormChannels();
339 // startin to load for TV
340 function loadTimerFormChannels() {
341 if(addTimerEditFormArray.TVListFilled === 1 && addTimerEditFormArray.RadioListFilled === 1) {
343 } else if(addTimerEditFormArray.TVListFilled === 1 && addTimerEditFormArray.RadioListFilled === 0) {
344 addTimerListFormatTV();
346 var favorites = '1%3A7%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3AFROM%20BOUQUET%20%22userbouquet.favourites.tv%22%20ORDER%20BY%20bouquet';
347 doRequest(url_getServices+favorites, addTimerListFormatTV, false);
352 function addTimerListFormatTV(request) {
353 if(addTimerEditFormArray.RadioListFilled === 0) {
354 if(request.readyState == 4){
355 var services = new ServiceList(getXML(request)).getArray();
357 for ( var i = 0; i < services.length ; i++){
358 var reference = services[i];
359 tv[reference.servicereference] = reference.servicename;
361 addTimerEditFormArray.TVListFilled = 1;
362 addTimerEditFormArray.TVList = tv;
365 if(addTimerEditFormArray.RadioListFilled == 1) {
368 var favorites = '1%3A7%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3AFROM%20BOUQUET%20%22userbouquet.favourites.radio%22%20ORDER%20BY%20bouquet';
369 doRequest(url_getServices+favorites, addTimerListFormatRadio, false);
374 function addTimerListFormatRadio(request) {
375 if(request.readyState == 4){
376 var services = new ServiceList(getXML(request)).getArray();
378 for ( var i = 0; i < services.length ; i++){
379 var reference = services[i];
380 radio[reference.servicereference] = reference.servicename;
382 addTimerEditFormArray.RadioListFilled = 1;
383 addTimerEditFormArray.RadioList = radio;
389 function loadTimerForm(){
392 Action["0"] = "Record";
396 Repeated["1"] = "mo";
397 Repeated["2"] = "tu";
398 Repeated["4"] = "we";
399 Repeated["8"] = "th";
400 Repeated["16"] = "fr";
401 Repeated["32"] = "sa";
402 Repeated["64"] = "su";
403 Repeated["31"] = "mf";
404 Repeated["127"] = "ms";
407 AfterEvent["0"] = "Nothing";
408 AfterEvent["1"] = "Standby";
409 AfterEvent["2"] = "Deepstandby/Shutdown";
410 AfterEvent["3"] = "Auto";
412 addTimerEditFormArray.name = (typeof(addTimerEditFormArray.name) != 'undefined') ? addTimerEditFormArray.name : '';
413 addTimerEditFormArray.name = (addTimerEditFormArray.name === '') ? ' ' : addTimerEditFormArray.name;
415 addTimerEditFormArray.description = (typeof(addTimerEditFormArray.description) != 'undefined') ? addTimerEditFormArray.description : '';
416 addTimerEditFormArray.description = (addTimerEditFormArray.description === '') ? ' ' : addTimerEditFormArray.description;
418 var channelObject = addTimerEditFormArray.TVList;
419 if( addTimerEditFormArray.channelSort === 'tv') {
421 } else if( addTimerEditFormArray.channelSort === 'radio') {
422 channelObject = addTimerEditFormArray.RadioList;
425 for( element in addTimerEditFormArray.TVList) {
426 if( element == addTimerEditFormArray.channel) {
432 for( element in addTimerEditFormArray.RadioList) {
433 if( element == addTimerEditFormArray.channel) {
434 channelObject = addTimerEditFormArray.RadioList;
441 addTimerEditFormArray.TVList[addTimerEditFormArray.channel] = addTimerEditFormArray.channelName;
445 var dashString = "------";
447 channelObject[dashString] = "- Bouquets -";
449 var listeNeu = new ServiceList(getXML(doRequestMemory[url_getServices+encodeURIComponent(bouquetsTv)])).getArray();
450 if(addTimerEditFormArray.channelSort == "radio") {
451 listeNeu = new ServiceList(getXML(doRequestMemory[url_getServices+encodeURIComponent(bouquetsRadio)])).getArray();
454 for (i = 1; i < listeNeu.length; i++) {
455 element = listeNeu[i];
456 channelObject[String(dashString+i)] = "---";
457 channelObject[element.getServiceReference()] = element.getServiceName();
460 var locationsObject = {};
461 for (i = 0; i < addTimerEditFormArray.locationsList.length; i++) {
462 str = addTimerEditFormArray.locationsList[i];
463 locationsObject[str] = str;
466 var tagsObject = addTimerFormPrepareTagsMenu(addTimerEditFormArray.tags);
469 year: createOptions(2008,2015,addTimerEditFormArray.year),
470 month: createOptions(1,12,addTimerEditFormArray.month),
471 day: createOptions(1,31,addTimerEditFormArray.day),
472 shour: createOptions(0,23,addTimerEditFormArray.shour),
473 smin: createOptions(0,59,addTimerEditFormArray.smin),
474 ehour: createOptions(0,23,addTimerEditFormArray.ehour),
475 emin: createOptions(0,59,addTimerEditFormArray.emin),
476 action: createOptionList(Action, addTimerEditFormArray.justplay),
477 channel: createOptionList(channelObject, addTimerEditFormArray.channel),
478 afterEvent: createOptionList(AfterEvent, addTimerEditFormArray.afterEvent),
479 repeated: createOptionListRepeated(Repeated, addTimerEditFormArray.repeated),
480 dirname: createOptionList(locationsObject, addTimerEditFormArray.dirname),
481 tags: createOptionList(tagsObject, addTimerEditFormArray.tags),
484 name: addTimerEditFormArray.name,
485 description: addTimerEditFormArray.description,
486 deleteOldOnSave: addTimerEditFormArray.deleteOldOnSave,
487 channelOld: addTimerEditFormArray.channel,
488 beginOld: addTimerEditFormArray.beginOld,
489 endOld: addTimerEditFormArray.endOld,
490 eventID: addTimerEditFormArray.eventID
494 processTpl('tplTimerEdit', data, 'contentMain');
496 var listerHtml = RND(tplAddTimerForm, namespace);
497 $('BodyContent').innerHTML = listerHtml;
500 // Empty some stuff, but keep others to have the performance
501 var tmp1 = addTimerEditFormArray.RadioList;
502 var tmp2 = addTimerEditFormArray.TVList;
503 var tmp3 = addTimerEditFormArray.locationsList;
504 var tmp4 = addTimerEditFormArray.tagsList;
505 addTimerEditFormArray = [];
506 addTimerEditFormArray.deleteOldOnSave = 0;
507 addTimerEditFormArray.RadioList = tmp1;
508 addTimerEditFormArray.TVList = tmp2;
509 addTimerEditFormArray.locationsList = tmp3;
510 addTimerEditFormArray.tagsList = tmp4;
511 addTimerEditFormArray.TVListFilled = 1;
512 addTimerEditFormArray.RadioListFilled = 1;
516 function createOptions(start, end, number) {
519 for(i = start; i <= end; i++) {
520 var txt = (String(i).length == 1) ? "0" + String(i) : String(i);
521 var selected = (i == Number(number)) ? "selected" : " ";
525 'selected': selected };
531 function createOptionList(object, selected) {
532 var namespace = Array();
535 for(var element in object) {
536 var txt = String(object[element]);
539 if(element == selected) {
543 if(element != "extend") {
556 function createOptionListRepeated(Repeated, repeated) {
557 num = Number(repeated);
559 list = [1, 2, 4, 8, 16, 32, 64, 31, 127];
562 for(var i = 0; i < list.length; i++) {
563 txt = String(Repeated[String(list[i])]);
564 if( String(Repeated[String(list[i])]) == "mf") {
566 } else if( String(Repeated[String(list[i])]) == "ms") {
569 txt = txt.substr(0,1).toUpperCase() + txt.substr(1,1);
572 if (!(~num & list[i])) {
575 namespace[i] = { 'id': Repeated[String(list[i])],
576 'name': Repeated[String(list[i])],
586 function sendAddTimer() {
587 debug("[sendAddTimer]" + "parentChannel:" +$('channel').value);
589 if(parentPin($('channel').value)) {
590 beginD = new Date(ownLazyNumber($('year').value), (ownLazyNumber($('month').value) - 1), ownLazyNumber($('day').value), ownLazyNumber($('shour').value), ownLazyNumber($('smin').value));
591 begin = beginD.getTime()/1000;
593 endD = new Date(ownLazyNumber($('year').value), (ownLazyNumber($('month').value) - 1), ownLazyNumber($('day').value), ownLazyNumber($('ehour').value), ownLazyNumber($('emin').value));
594 end = endD.getTime()/1000;
600 if( $('ms').checked ) {
602 } else if($('mf').checked) {
604 if($('sa').checked) {
605 repeated += ownLazyNumber($('sa').value);
607 if($('su').checked) {
608 repeated += ownLazyNumber($('su').value);
611 check = ['mo', 'tu', 'we', 'th', 'fr'];
612 for(i = 0; i < check.length; i++) {
613 if($(check[i]).checked) {
614 repeated += Number($(check[i]).value);
619 descriptionClean = ($('descr').value == " " || $('descr').value == "N/A") ? "" : $('descr').value;
620 nameClean = ($('name').value == " " || $('name').value == "N/A") ? "" : $('name').value;
622 neverString = "[0-9a-zA-Z\\-_\\.\\!\\(\\)&=\\+$,;\\?/:\\\\ ]*";
623 if(descriptionClean != descriptionClean.match(neverString) ||
624 nameClean != nameClean.match(neverString)) {
625 alert("Please only use "+neverString+" in the name and the description field");
629 dirname = $('dirname').value;
630 tags = $('tags').value;
632 if($('ms').checked) {
633 repeated = ownLazyNumber($('ms').value);
634 } else if($('mf').checked) {
635 repeated = ownLazyNumber($('mf').value);
636 if($('su').checked) {
637 repeated += ownLazyNumber($('su').value);
639 if($('sa').checked) {
640 repeated += ownLazyNumber($('sa').value);
643 for(i = 0; i < days.length; i++){
644 if($(days[i]).checked) {
645 repeated += ownLazyNumber($(days[i]).value);
649 //addTimerByID(\'%(servicereference)\',\'%(eventid)\',\'False\');
650 doRequest(url_timerchange+"?"+"sRef="+($('channel').value).replace(""", '"')+"&begin="+ begin +
651 "&end="+end+"&name="+escape(nameClean)+"&description="+escape(descriptionClean) +
652 "&dirname="+dirname+"&tags="+escape(tags) +
653 "&afterevent="+$('after_event').value+"&eit=0&disabled=0" +
654 "&justplay="+ownLazyNumber($('justplay').value)+"&repeated="+repeated +
655 "&channelOld="+$('channelOld').value +
656 "&beginOld="+$('beginOld').value+"&endOld="+$('endOld').value +
657 "&eventID"+$('eventID').value +
658 "&deleteOldOnSave="+ownLazyNumber($('deleteOldOnSave').value), incomingTimerAddResult, false);
663 function cleanTimerListNow(){
664 debug("[cleanTimerListNow] called");
665 doRequest(url_timerlist, incomingCleanTimerListNow, false);
669 function incomingCleanTimerListNow(request) {
670 if(request.readyState == 4){
671 var timers = new TimerList(getXML(request)).getArray();
672 debug("[cleanTimerListNow] Got "+timers.length+" timer");
673 for ( var i = 0; i <timers.length; i++){
674 var timer = timers[i];
675 debug("[cleanTimerListNow]" + timer.getState() + " " + quotes2html(timer.getName()));
676 if(timer.getState() != "0" && timer.getState() != "2") {
677 delTimer(timer.getServiceReference(),timer.getTimeBegin(),timer.getTimeEnd(),
678 quotes2html(timer.getServiceName()),quotes2html(timer.getName()),quotes2html(timer.getDescription()),incomingJustDoNothing);
686 function incomingJustDoNothing(request){
687 debug("[incomingJustDoNothing] called");
691 function sendToggleTimerDisable(justplay,begin,end,repeated,channel,name,description,dirname,tags,afterEvent,disabled){
692 disabled = (ownLazyNumber(disabled) === 0) ? 1 : 0;
694 var descriptionClean = (description == " " || description == "N/A") ? "" : description;
695 var nameClean = (name == " " || name == "N/A") ? "" : name;
697 doRequest(url_timerchange+"?"+"sRef="+channel.replace(""", '"')+"&begin="+begin +
698 "&end="+end+"&name="+escape(nameClean)+"&description="+escape(descriptionClean) +
699 "&dirname="+dirname+"&tags="+escape(tags) +
700 "&afterevent="+afterEvent+"&eit=0&disabled="+disabled +
701 "&justplay="+justplay+"&repeated="+repeated +
702 "&channelOld="+channel +
703 "&beginOld="+begin+"&endOld="+end +
704 "&deleteOldOnSave=1", incomingTimerAddResult, false);
707 function incomingWriteTimerListNow(request){
708 var result = new SimpleXMLResult(getXML(request));
709 notify(result.getStateText(), result.getState());
712 function writeTimerListNow() {
713 var request = doRequest(url_timerlistwrite, incomingWriteTimerListNow);