1 /*
  2  * This is time cordova_plugin (TV specific API).
  3  * Apache License (2004). See http://www.apache.org/licenses/LICENSE-2.0
  4  *
  5  * Copyright (c) 2014, LG Electronics, Inc.
  6  */
  7 
  8 /**
  9  * This represents the time API itself, and provides a global namespace for operating time service.
 10  * @class
 11  */
 12 cordova.define('cordova/plugin/time', function (require, exports, module) { // jshint ignore:line
 13     
 14     function log(msg) {
 15     //    //console.log//will be removed // jshint ignore:line
 16     }
 17     
 18     var service;
 19     if (window.PalmSystem) { // jshint ignore:line
 20         log("Window.PalmSystem Available");
 21         service = require('cordova/plugin/webos/service');
 22     } else {
 23         service = {
 24             Request : function(uri, params) {
 25                 log(uri + " invoked. But I am a dummy because PalmSystem is not available");
 26                         
 27                 if (typeof params.onFailure === 'function') {
 28                     params.onFailure({
 29                         returnValue:false,
 30                         errorText:"PalmSystem Not Available. Cordova is not installed?"
 31                     });
 32                }
 33         }};
 34     }
 35 
 36     /**
 37      * time interface
 38      */
 39     var Time = function () {
 40     };
 41     
 42     function checkErrorCodeNText(result, errorCode, errorText) {
 43         
 44         if (result.errorCode === undefined || result.errorCode === null ) {
 45             result.errorCode = errorCode;
 46         }
 47         if (result.errorText ===undefined || result.errorText === null) {
 48             result.errorText = errorText;
 49         }
 50     }
 51 
 52     var version = null;
 53     var platformInfoObj = {}; 
 54     function checkPlatformVersion(cb) {
 55 
 56         if (version === null) {
 57 
 58             service.Request('luna://com.webos.service.tv.systemproperty', {
 59                 method: 'getSystemInfo',
 60                 parameters: {
 61                     keys: ["sdkVersion", "boardType"]
 62                 },
 63                 onSuccess: function(result) {
 64                     log("getPlatformInfo: onSuccess");
 65                     log("version : " + result.sdkVersion);
 66 
 67                     var temp = result.sdkVersion.split('.');
 68                     if (temp.length >= 1 && temp[0] === '1') {
 69                         platformInfoObj = {
 70                             webOSVer: 1,
 71                             chipset: result.boardType.split("_")[0]
 72                         };
 73                     } else if (temp.length >= 1 && temp[0] === '2') {
 74                         platformInfoObj = {
 75                             webOSVer: 2,
 76                             chipset: result.boardType.split("_")[0]
 77                         };
 78                     } else if (temp.length >= 1 && temp[0] === '3') {
 79                         platformInfoObj = {
 80                             webOSVer: 3,
 81                             chipset: result.boardType.split("_")[0]
 82                         };
 83                     } else {
 84                         platformInfoObj = {
 85                             webOSVer: 0,
 86                             chipset: ""
 87                         };
 88                     }
 89                     version = platformInfoObj.webOSVer;
 90                     cb(platformInfoObj);
 91                 },
 92                 onFailure: function(error) {
 93                     log("getPlatformInfo: onFailure");
 94                     platformInfoObj = {
 95                         webOSVer: 0,
 96                         chipset: ""
 97                     }
 98                     cb(platformInfoObj);
 99                 }
100             });
101 
102         } else {
103             cb(platformInfoObj);
104         }
105     }
106 
107 		/**
108      * set HolidayScheduleMode enabled/disabled
109      * @class Time
110      * @param {Function} successCallback success callback function.
111      * @param {Function} errorCallback failure callback function.     
112      * @param {Object} options
113      * <div align=left>
114      * <table class="hcap_spec" width=400>
115      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
116      *   <tbody>
117      *       <tr><th>enabled</th><th>Boolean</th><th>Intelligent auto is enabled. true: enabled, false: disabled</th><th>required</th></tr>
118      *   </tbody>
119      * </table>
120      * </div>
121      * @return <p>If the method is successfully executed, call the success callback function without a parameter.</br>
122      * If an error occurs, failure callback function is called with failure callback object as a parameter.</p>
123      * @example
124      * // Javascript code
125      * 
126      * function setHolidayScheduleMode () {
127      *   var options = {
128      *      enabled : true
129      *   };   
130      *     
131      *   function successCb() {
132      *      // Do something
133      *   }
134      *
135      *   function failureCb(cbObject) {
136      *      var errorCode = cbObject.errorCode;
137      *      var errorText = cbObject.errorText;
138      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
139      *   }
140      *
141      *   var time = new Time();
142      *   time.setHolidayScheduleMode(successCb, failureCb, options);
143      * }
144      * @since 1.4
145      * @see
146      * <a href="Time%23getHolidayScheduleMode.html">Time.getHolidayScheduleMode()</a><br>
147      */
148     Time.prototype.setHolidayScheduleMode = function (successCallback, errorCallback, options) {        
149         log("setHolidayScheduleMode: " + options.enabled);
150 
151         var ret = { };
152         checkErrorCodeNText(ret, "ERROR", "This function is not supported on webOS 3.2");
153         errorCallback(ret);
154         return;
155 
156         if (options.enabled === null && typeof errorCallback === 'function') {
157             var result = {};
158             checkErrorCodeNText(result, "TSHM", "Time.setHolidayScheduleMode returns failure. command was not defined.");
159             errorCallback(result);
160             log("Time.setHolidayScheduleMode invalid ");
161             return;
162         }      
163         
164         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
165             method : "set",
166             parameters : {
167                 category : "commercial",        
168                 settings : {
169                     "holidayScheduleMode" : (options.enabled === true ) ? "on" : "off" 
170                 }
171             },
172             onSuccess : function(result) {
173                 log("setHolidayScheduleMode: On Success");
174 
175                 if (result.returnValue === true) {
176                     if(typeof successCallback === 'function') {
177                         successCallback();
178                     }
179                 }
180             },
181             onFailure : function(result) {
182                 log("setHolidayScheduleMode: On Failure");
183                 delete result.returnValue;
184                 if (typeof errorCallback === 'function') {
185                     checkErrorCodeNText(result, "TSHM", "Time.setHolidayScheduleMode returns failure.");
186                     errorCallback(result);
187                 }
188             }
189         });
190         
191         log("Time.setHolidayScheduleMode Done");
192     };
193 
194 		/**
195      * Gets HolidayScheduleMode enabled
196      * @class Time
197      * @param {Function} successCallback success callback function.
198      * @param {Function} errorCallback failure callback function.
199      * @return {Object} 
200      * <div align=left>
201      * <table class="hcap_spec" width=400>
202      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
203      *   <tbody>
204      *       <tr><th>enabled</th><th>Boolean</th><th>Intelligent auto is enabled. true: enabled, false: disabled</th></tr>
205      *   </tbody>
206      * </table>
207      * </div>
208      *
209      * @example
210      * // Javascript code
211      * function getHolidayScheduleMode () {
212      *   function successCb(cbObject) {
213      *      console.log("cbObject : " + JSON.stringify(cbObject));
214      *
215      *      console.log("enabled : " + cbObject.enabled);     
216      *
217      *      // Do something
218      *         ...
219      *   }
220      *
221      *   function failureCb(cbObject) {
222      *      var errorCode = cbObject.errorCode;
223      *      var errorText = cbObject.errorText;
224      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
225      *   }
226      *
227      *   var time = new Time();
228      *   time.getHolidayScheduleMode(successCb, failureCb);
229      * }
230      * @since 1.4
231      * @see
232      * <a href="Time%23setHolidayScheduleMode.html">Time.setHolidayScheduleMode()</a><br>  
233      */
234     Time.prototype.getHolidayScheduleMode = function (successCallback, errorCallback) {
235 
236         log("getHolidayScheduleMode: ");
237 
238         var ret = { };
239         checkErrorCodeNText(ret, "ERROR", "This function is not supported on webOS 3.2");
240         errorCallback(ret);
241         return;
242 
243         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
244             method: "get",
245             parameters: {
246                 category: "commercial",
247                 keys: ["holidayScheduleMode"]
248             },
249             onSuccess: function(result) {
250                 log("getHolidayScheduleMode: On Success");
251 
252                 if (result.returnValue === true) {
253                     var cbObj = {};
254                     cbObj.enabled = (result.settings.holidayScheduleMode === "on") ? true : false;
255 
256                     if (typeof successCallback === 'function') {
257                         successCallback(cbObj);
258                     }
259                 }
260             },
261             onFailure: function(result) {
262                 log("getHolidayScheduleMode: On Failure");
263                 delete result.returnValue;
264                 if (typeof errorCallback === 'function') {
265                     checkErrorCodeNText(result, "TGHM", "Time.getHolidayScheduleMode returns failure.");
266                     errorCallback(result);
267                 }
268             }
269         });
270 
271         log("Time.getHolidayScheduleMode Done");
272     };
273 
274 	/**
275      * add HolidaySchedule
276      * @class Time
277      * @param {Function} successCallback success callback function.
278      * @param {Function} errorCallback failure callback function.     
279      * @param {Object} options
280      * <div align=left>
281      * <table class="hcap_spec" width=400>
282      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
283      *   <tbody>
284      *       <tr><th>startMonth</th><th>Number</th><th>start month</th><th>required</th></tr>
285      *       <tr class="odd"><th>startDay</th><th>Number</th><th>start day</th><th>required</th></tr>
286      * 		 <tr><th>endMonth</th><th>Number</th><th>end month</th><th>required</th></tr>
287      *       <tr class="odd"><th>endDay</th><th>Number</th><th>end day</th><th>required</th></tr>
288      *   </tbody>
289      * </table>
290      * </div>
291      * @return <p>If the method is successfully executed, call the success callback function without a parameter.</br>
292      * If an error occurs, failure callback function is called with failure callback object as a parameter.</p>
293      * @example
294      * // Javascript code
295      * 
296      * function addHolidaySchedule () {
297      *   var options = {
298  	 *		startMonth : 3,
299 	 *		startDay : 7,
300 	 *		endMonth : 3,
301  	 *		endDay : 9 //ex. 3/7~3/9
302 	 *	 };  
303      *     
304      *   function successCb() {
305      *      // Do something
306      *   }
307      *
308      *   function failureCb(cbObject) {
309      *      var errorCode = cbObject.errorCode;
310      *      var errorText = cbObject.errorText;
311      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
312      *   }
313      *
314      *   var time = new Time();
315      *   time.addHolidaySchedule(successCb, failureCb, options);
316      * }
317      * @since 1.4
318      * @see
319      * <a href="Time%23getHolidayScheduleMode.html">Time.getHolidayScheduleMode()</a><br>
320      */
321     Time.prototype.addHolidaySchedule = function (successCallback, errorCallback, options) {        
322         log("addHolidaySchedule: " + "startMonth : " + options.startMonth + ", startDay : " + options.startDay + ", endMonth : " + options.endMonth + ", endDay : " + options.endDay);
323 
324         var ret = { };
325         checkErrorCodeNText(ret, "ERROR", "This function is not supported on webOS 3.2");
326         errorCallback(ret);
327         return;
328 
329         var startSch = new Date((new Date()).getFullYear(), options.startMonth-1, options.startDay, 0, 0);
330         var endSch = new Date((new Date()).getFullYear(), options.endMonth-1, options.endDay, 0, 0);         
331 
332         //validation check
333         if (typeof errorCallback === 'function') {
334             if (typeof options.startMonth !== 'number' || typeof options.startDay !== 'number' || isNaN(options.startMonth) || isNaN(options.startDay) ||
335                     typeof options.endMonth !== 'number' || typeof options.endDay !== 'number' || isNaN(options.endMonth) || isNaN(options.endDay)) {
336                 var result = {};
337                 checkErrorCodeNText(result, "TAHS", "Time.addHolidaySchedule returns failure. parmas are not valid.");
338                 errorCallback(result);                
339                 return;
340             }
341 
342             if (startSch.getMonth() !== options.startMonth - 1 || startSch.getDate() !== options.startDay ||
343                 endSch.getMonth() !== options.endMonth - 1 || endSch.getDate() !== options.endDay) {
344                 var result = {};
345                 checkErrorCodeNText(result, "TAHS", "Time.addHolidaySchedule returns failure for out of range.");
346                 errorCallback(result);                
347                 return;
348             }
349 
350             if (startSch.getTime() > endSch.getTime())
351             {
352                 var result = {};
353                 checkErrorCodeNText(result, "TAHS", "Time.addHolidaySchedule returns failure. schedule is not valid.");
354                 errorCallback(result);                
355                 return;
356             }           
357         }
358 
359         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
360             method : "get",
361             parameters : {
362                 category : "commercial",
363                 keys : ["holidaySchedule"]
364             },
365             onSuccess : function(result) {
366                 log("getHolidaySchedule: On Success");
367 
368                 if (result.returnValue === true) {
369                     if (typeof successCallback === 'function') {
370                         var schedule      = {};
371                         var savedStartSch = null
372                         var savedEndSch   = null
373                         var scheduleList  = result.settings.holidaySchedule;
374 
375                         if(scheduleList.length >= 7)
376                         {
377                             var result = {};
378                             checkErrorCodeNText(result, "TAHS", "Time.addHolidaySchedule returns failure. schedule list is full");
379                             errorCallback(result);                            
380                             return;
381                         }     
382 
383                         //check same schedule
384                         for(var i=0; i<scheduleList.length; i++) {
385 
386                             savedStartSch = new Date((new Date()).getFullYear(), scheduleList[i].startMonth - 1, scheduleList[i].startDay, 0, 0);
387                             savedEndSch   = new Date((new Date()).getFullYear(), scheduleList[i].endMonth - 1, scheduleList[i].endDay, 0, 0);
388 
389                             if ( ((savedStartSch.getTime() <= startSch.getTime()) && (savedEndSch.getTime() > startSch.getTime())) ||
390                                  ((savedStartSch.getTime() < endSch.getTime()) && (savedEndSch.getTime() >= endSch.getTime())) ||
391                                  ((savedStartSch.getTime() === startSch.getTime()) && (savedEndSch.getTime() === endSch.getTime())) ||
392                                  ((startSch.getTime() === endSch.getTime()) && (savedEndSch.getTime() === startSch.getTime())) ) {
393                                 var result = {};
394                                 checkErrorCodeNText(result, "TAHS", "Time.addHolidaySchedule returns failure. schedule is not valid");
395                                 errorCallback(result);                                
396                                 return;
397                             }                     
398                         }
399 
400                         schedule.startMonth = options.startMonth;
401                         schedule.startDay   = options.startDay;
402                         schedule.endMonth   = options.endMonth;
403                         schedule.endDay     = options.endDay;
404                         scheduleList.push(schedule);
405 
406                         log("scheduleList : " + JSON.stringify(scheduleList));
407 
408                         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
409                             method: "set",
410                             parameters: {
411                                 category: "commercial",
412                                 settings: {
413                                     "holidaySchedule": scheduleList
414                                 }
415                             },
416                             onSuccess: function(result) {
417                                 log("addHolidaySchedule: On Success");
418 
419                                 if (result.returnValue === true) {
420                                     if (typeof successCallback === 'function') {
421                                         successCallback();
422                                     }
423                                 }
424                             },
425                             onFailure: function(result) {
426                                 log("addHolidaySchedule: On Failure");
427                                 delete result.returnValue;
428                                 if (typeof errorCallback === 'function') {
429                                     checkErrorCodeNText(result, "TAHS", "Time.addHolidaySchedule returns failure.");
430                                     errorCallback(result);
431                                 }
432                             }
433                         });
434                     }
435                 }
436             },
437             onFailure : function(result) {
438                 log("addHolidaySchedule: On Failure");
439                 delete result.returnValue;
440                 if (typeof errorCallback === 'function') {
441                     checkErrorCodeNText(result, "TAHS", "Time.addHolidaySchedule returns failure.");
442                     errorCallback(result);
443                 }
444             }
445         });
446 
447         log("Time.addHolidaySchedule Done");
448     };
449 
450 	/**
451      * del HolidaySchedule
452      * @class Time
453      * @param {Function} successCallback success callback function.
454      * @param {Function} errorCallback failure callback function.     
455      * @param {Object} options
456      * <div align=left>
457      * <table class="hcap_spec" width=400>
458      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
459      *   <tbody>
460      *       <tr><th>schduleId</th><th>String</th><th>schedule id (getAllHolidaySchedules() ���� ���� schedule id)</th><th>required</th></tr>
461      *   </tbody>
462      * </table>
463      * </div>
464      * @return <p>If the method is successfully executed, call the success callback function without a parameter.</br>
465      * If an error occurs, failure callback function is called with failure callback object as a parameter.</p>
466      * @example
467      * // Javascript code
468      * 
469      * function delHolidaySchedule () {
470      *   var options = {
471  	 *		scheduleId : "d704"
472 	 *	 };  
473      *     
474      *   function successCb() {
475      *      // Do something
476      *   }
477      *
478      *   function failureCb(cbObject) {
479      *      var errorCode = cbObject.errorCode;
480      *      var errorText = cbObject.errorText;
481      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
482      *   }
483      *
484      *   var time = new Time();
485      *   time.delHolidaySchedule(successCb, failureCb, options);
486      * }
487      * @since 1.4
488      * @see
489      * <a href="Time%23getHolidayScheduleMode.html">Time.getHolidayScheduleMode()</a><br>
490      */
491     Time.prototype.delHolidaySchedule = function (successCallback, errorCallback, options) {        
492         log("delHolidaySchedule: " + "id : " + options.scheduleId);
493 
494         var ret = { };
495         checkErrorCodeNText(ret, "ERROR", "This function is not supported on webOS 3.2");
496         errorCallback(ret);
497         return;
498 
499         if ((typeof options.scheduleId !== 'string' || options.scheduleId === undefined || options.scheduleId === null) && typeof errorCallback === 'function') 
500         {
501             var result = {};
502             checkErrorCodeNText(result, "TDHS", "Time.delHolidaySchedule returns failure. scheduleId is not valid.");
503             errorCallback(result);
504             log("Time.delHolidaySchedule invalid ");
505             return;
506         }    
507 
508         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
509             method : "get",
510             parameters : {
511                 category : "commercial",
512                 keys : ["holidaySchedule"]
513             },
514             onSuccess : function(result) {
515                 log("getHolidaySchedule: On Success");
516 
517                 if (result.returnValue === true) {                
518                     if (typeof successCallback === 'function') {
519                         var scheduleList = null;
520                         var tempList     = [];
521                         var flag         = false;
522                         
523                         scheduleList     = result.settings.holidaySchedule;
524 
525                         log("before scheduleList : " + JSON.stringify(scheduleList));
526 
527                         for(var i=0; i<scheduleList.length; i++) {
528                             if(scheduleList[i]._id === options.scheduleId) {                                
529                                 flag = true;                      
530                             } else {
531                                 tempList.push(scheduleList[i]); //copy schedulelist except for schedule to remove
532                             }
533                         }                     
534                         
535                         if(flag === false && typeof errorCallback === 'function') {
536                             var result = {};
537                             checkErrorCodeNText(result, "TDHS", "Time.delHolidaySchedule returns failure. can not find schedule id.");
538                             errorCallback(result);
539                             log("Time.delHolidaySchedule invalid ");
540                             return;
541                         }
542 
543                         log("after scheduleList : " + JSON.stringify(tempList));
544 
545                         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
546                             method: "set",
547                             parameters: {
548                                 category: "commercial",
549                                 settings: {
550                                     "holidaySchedule": tempList
551                                 }
552                             },
553                             onSuccess: function(result) {
554                                 log("delHolidaySchedule: On Success");
555 
556                                 if (result.returnValue === true) {
557                                     if (typeof successCallback === 'function') {
558                                         successCallback();
559                                     }
560                                 }
561                             },
562                             onFailure: function(result) {
563                                 log("delHolidaySchedule: On Failure");
564                                 delete result.returnValue;
565                                 if (typeof errorCallback === 'function') {
566                                     checkErrorCodeNText(result, "TDHS", "Time.delHolidaySchedule returns failure.");
567                                     errorCallback(result);
568                                 }
569                             }
570                         });
571                     }                    
572                 }
573             },
574             onFailure : function(result) {
575                 log("delHolidaySchedule: On Failure");
576                 delete result.returnValue;
577                 if (typeof errorCallback === 'function') {
578                     checkErrorCodeNText(result, "TDHS", "Time.delHolidaySchedule returns failure.");
579                     errorCallback(result);
580                 }
581             }
582         });
583 
584         log("Time.delHolidaySchedule Done");
585     };
586 
587 	/**
588      * delAll HolidaySchedule
589      * @class Time
590      * @param {Function} successCallback success callback function.
591      * @param {Function} errorCallback failure callback function.     
592      * @param {Object} None
593      * @return <p>If the method is successfully executed, call the success callback function without a parameter.</br>
594      * If an error occurs, failure callback function is called with failure callback object as a parameter.</p>
595      * @example
596      * // Javascript code
597      * 
598      * function delAllHolidaySchedule () {
599      *   function successCb() {
600      *      // Do something
601      *   }
602      *
603      *   function failureCb(cbObject) {
604      *      var errorCode = cbObject.errorCode;
605      *      var errorText = cbObject.errorText;
606      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
607      *   }
608      *
609      *   var time = new Time();
610      *   time.delAllHolidaySchedule(successCb, failureCb);
611      * }
612      * @since 1.4
613      * @see
614      * <a href="Time%23getHolidayScheduleMode.html">Time.getHolidayScheduleMode()</a><br>
615      */
616     Time.prototype.delAllHolidaySchedules = function (successCallback, errorCallback) {        
617         log("delAllHolidaySchedules: ");
618 
619         var ret = { };
620         checkErrorCodeNText(ret, "ERROR", "This function is not supported on webOS 3.2");
621         errorCallback(ret);
622         return;
623 
624         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
625             method: "set",
626             parameters: {
627                 category: "commercial",
628                 settings: {
629                     "holidaySchedule": []
630                 }
631             },
632             onSuccess: function(result) {
633                 log("delAllHolidaySchedules: On Success");
634 
635                 if (result.returnValue === true) {
636                     if (typeof successCallback === 'function') {
637                         successCallback();
638                     }
639                 }
640             },
641             onFailure: function(result) {
642                 log("delAllHolidaySchedules: On Failure");
643                 delete result.returnValue;
644                 if (typeof errorCallback === 'function') {
645                     checkErrorCodeNText(result, "TDAS", "Time.delAllHolidaySchedules returns failure.");
646                     errorCallback(result);
647                 }
648             }
649         });
650 
651         log("Time.delAllHolidaySchedules Done");
652     };
653     
654 	/**
655      * Gets all HolidaySchedule List
656      * @class Time
657      * @param {Function} successCallback success callback function.
658      * @param {Function} errorCallback failure callback function.
659      * @return {Object} 
660      * <div align=left>
661      * <table class="hcap_spec" width=400>
662      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
663      *   <tbody>
664      *       <tr><th>holidayScheduleList[]</th><th>Array</th><th>holiday schedule list</th></tr>
665      *       <tr class="odd"><tr><th>holidayScheduleList[]._id</th><th>String</th><th>schedule id</th></tr>
666      *       <tr><th>holidayScheduleList[].startMonth</th><th>Number</th><th>start month</th></tr>
667      *       <tr class="odd"><tr><th>holidayScheduleList[].startDay</th><th>Number</th><th>	start day</th></tr>
668      *       <tr><th>holidayScheduleList[].endMonth</th><th>Number</th><th>end month</th></tr>
669      *       <tr class="odd"><tr><th>holidayScheduleList[].endDay</th><th>Number</th><th>end day</th></tr>
670      *   </tbody>
671      * </table>
672      *
673      * @example
674      * // Javascript code
675 	 *	function getAllHolidaySchedules () {
676 	 *		function successCb(cbObject) {
677 	 *			console.log("cbObject : " + JSON.stringify(cbObject));
678 	 *			for (var i = cbObject.holidayScheduleList.length-1; i>=0; i--) {
679 	 *				console.log("holidayScheduleList[" + i + "].startMonth : " + cbObject.holidayScheduleList[i].startMonth);
680 	 *				console.log("holidayScheduleList[" + i + "].startDay : " + cbObject.holidayScheduleList[i].startDay);
681 	 *				console.log("holidayScheduleList[" + i + "].endMonth : " + cbObject.holidayScheduleList[i].endMonth);
682 	 *				console.log("holidayScheduleList[" + i + "].endDay : " + cbObject.holidayScheduleList[i].endDay);
683 	 *			}
684 	 *		}
685 	 *		function failureCb(cbObject) {
686 	 *			var errorCode = cbObject.errorCode;
687 	 *			var errorText = cbObject.errorText;
688 	 *			console.log ("Error Code [" + errorCode + "]: " + errorText);
689 	 *		}
690 	 *		var time = new Time();
691 	 *		time.getAllHolidaySchedules(successCb, failureCb);
692 	 *	}
693      * @since 1.4
694      * @see
695      * <a href="Time%23getHolidayScheduleMode.html">Time.getHolidayScheduleMode()</a><br>
696      */
697     Time.prototype.getAllHolidaySchedules = function (successCallback, errorCallback) {           
698         log("getAllHolidaySchedules: ");
699 
700         var ret = { };
701         checkErrorCodeNText(ret, "ERROR", "This function is not supported on webOS 3.2");
702         errorCallback(ret);
703         return;
704 
705         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
706             method : "get",
707             parameters : {
708                 category : "commercial",
709                 keys : ["holidaySchedule"]
710             },
711             onSuccess : function(result) {
712                 log("getHolidaySchedule: On Success");
713 
714                 if (result.returnValue === true) {
715                     if (typeof successCallback === 'function') {
716                         var cbObj = {};
717                         cbObj.holidayScheduleList = result.settings.holidaySchedule;
718 
719                         if (typeof successCallback === 'function') {
720                             successCallback(cbObj);
721                         }
722                     }
723                 }
724             },
725             onFailure : function(result) {
726                 log("getAllHolidaySchedules: On Failure");
727                 delete result.returnValue;
728                 if (typeof errorCallback === 'function') {
729                     checkErrorCodeNText(result, "TGAS", "Time.getAllHolidaySchedules returns failure.");
730                     errorCallback(result);
731                 }
732             }
733         });
734 
735         log("Time.getAllHolidaySchedules Done");
736     };
737 
738     /**
739      * Gets HolidaySchedule
740      * @class Time
741      * @param {Function} successCallback success callback function.
742      * @param {Function} errorCallback failure callback function.
743      * @return {Object}
744      * <div align=left>
745      * <table class="hcap_spec" width=400>
746      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
747      *   <tbody>
748      *       <tr><th>holidayScheduleList[]</th><th>Array</th><th>holiday schedule list</th></tr>
749      *       <tr class="odd"><tr><th>holidayScheduleList[]._id</th><th>String</th><th>schedule id</th></tr>
750      *       <tr><th>holidayScheduleList[].month</th><th>Number</th><th>month</th></tr>
751      *       <tr class="odd"><tr><th>holidayScheduleList[].year</th><th>Number</th><th>year</th></tr>
752      *       <tr><th>holidayScheduleList[].date</th><th>Number</th><th>date</th></tr>
753      *       <tr class="odd"><tr><th>holidayScheduleList[].repeatBy</th><th>String</th><th>repeatBy</th></tr>
754      *       <tr><th>holidayScheduleList[].days</th><th>Number</th><th>days</th></tr>
755      *       <tr class="odd"><tr><th>holidayScheduleList[].repeat</th><th>String</th><th>repeat</th></tr>
756      *   </tbody>
757      * </table>
758      *
759      * @example
760      * // Javascript code
761      *  function getHolidaySchedules () {
762      *      function successCb(cbObject) {
763      *          console.log("cbObject : " + JSON.stringify(cbObject));
764      *          for (var i = cbObject.holidayScheduleList.length-1; i>=0; i--) {
765      *              console.log("holidayScheduleList[" + i + "]._id : " + cbObject.holidayScheduleList[i]._id);
766      *              console.log("holidayScheduleList[" + i + "].month : " + cbObject.holidayScheduleList[i].settings.month);
767      *              console.log("holidayScheduleList[" + i + "].year : " + cbObject.holidayScheduleList[i].settings.year);
768      *              console.log("holidayScheduleList[" + i + "].date : " + cbObject.holidayScheduleList[i].settings.date);
769      *              console.log("holidayScheduleList[" + i + "].repeatBy : " + cbObject.holidayScheduleList[i].settings.repeatBy);
770      *              console.log("holidayScheduleList[" + i + "].days : " + cbObject.holidayScheduleList[i].settings.days);
771      *              console.log("holidayScheduleList[" + i + "].repeat : " + cbObject.holidayScheduleList[i].settings.repeat);
772      *          }
773      *      }
774      *      function failureCb(cbObject) {
775      *          var errorCode = cbObject.errorCode;
776      *          var errorText = cbObject.errorText;
777      *          console.log ("Error Code [" + errorCode + "]: " + errorText);
778      *      }
779      *      var time = new Time();
780      *      time.getHolidaySchedule(successCb, failureCb);
781      *  }
782      * @since 1.5
783      * @see
784      * <a href="Time%23setHolidaySchedule.html">Time.setHolidaySchedule()</a><br>
785      * <a href="Time%23unsetHolidaySchedule.html">Time.unsetHolidaySchedule()</a><br>
786      */
787 
788     Time.prototype.getHolidaySchedule = function (successCallback, errorCallback) {
789         log("getHolidaySchedule: ");
790         service.Request("luna://com.webos.service.commercial.signage.storageservice/", {
791             method : "getHolidaySchedule",
792             parameters: {},
793             onSuccess : function(result) {
794                 log("getHolidaySchedule: On Success");
795 
796                 if (result.returnValue === true) {
797                     if (typeof successCallback === 'function') {
798                         var cbObj = {};
799                         cbObj.holidayScheduleList = result.settings.holidaySchedule;
800 
801                         if (typeof successCallback === 'function') {
802                             successCallback(cbObj);
803                         }
804                     }
805                 }
806             },
807             onFailure : function(result) {
808                 log("getHolidaySchedule: On Failure");
809                 delete result.returnValue;
810                 if (typeof errorCallback === 'function') {
811                     checkErrorCodeNText(result, "TGAS", "Time.getHolidaySchedule returns failure.");
812                     errorCallback(result);
813                 }
814             }
815         });
816 
817         log("Time.getHolidaySchedule Done");
818     };
819 
820     /**
821      * Sets HolidaySchedule
822      * @class Time
823      * @param {Function} successCallback success callback function.
824      * @param {Function} errorCallback failure callback function.
825      * @param {Object} options
826      * <div align=left>
827      * <table class="hcap_spec" width=400>
828      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
829      *   <tbody>
830      *       <tr><th>holidaySchedule[]</th><th>Array</th><th>holiday schedule list</th></tr>
831      *       <tr class="odd"><tr><th>holidaySchedule[].name</th><th>String</th><th>schedule name</th></tr>
832      *       <tr><th>holidaySchedule[].settings.year</th><th>Number</th><th>year</th></tr>
833      *       <tr class="odd"><tr><th>holidaySchedule[].settings.year</th><th>Number</th><th>month</th></tr>
834      *       <tr><th>holidaySchedule[].settings.date</th><th>Number</th><th>date</th></tr>
835      *       <tr class="odd"><tr><th>holidaySchedule[].settings.days</th><th>Number</th><th>day</th></tr>
836      *       <tr><th>holidaySchedule[].settings.repeat</th><th>String</th><th>repeat</th></tr>
837      *       <tr class="odd"><tr><th>holidaySchedule[].settings.repeatBy</th><th>String</th><th>repeatBy</th></tr>
838      *   </tbody>
839      * </table>
840      *
841      * @example
842      * // Javascript code
843      *  function setAllHolidaySchedules () {
844      *      var params = {
845      *          "holidaySchedule":[
846      *          {
847      *              "settings":{
848      *                   "year":2016,
849      *                   "month":12,
850      *                   "date":31,
851      *                   "days":1,
852      *                   "repeat":"none",
853      *                   "repeatBy":"none"
854      *               },
855      *               "name":"Holiday Name 01"
856      *               }
857      *          ]
858      *      }
859      *      function successCb(cbObject) {
860      *          console.log("sucess");
861      *          // Do something
862      *      }
863      *      function failureCb(cbObject) {
864      *          var errorCode = cbObject.errorCode;
865      *          var errorText = cbObject.errorText;
866      *          console.log ("Error Code [" + errorCode + "]: " + errorText);
867      *      }
868      *      var time = new Time();
869      *      time.setHolidaySchedule(successCb, failureCb, params);
870      *  }
871      * @since 1.4
872      * @see
873      * <a href="Time%23getHolidaySchedule.html">Time.getHolidaySchedule()</a><br>
874      * <a href="Time%23unsetHolidaySchedule.html">Time.unsetHolidaySchedule()</a><br>
875      */
876 
877     Time.prototype.setHolidaySchedule = function (successCallback, errorCallback, params) {
878         log("setHolidaySchedule: ");
879         service.Request("luna://com.webos.service.commercial.signage.storageservice/", {
880             method : "setHolidaySchedule",
881             parameters : params,
882             onSuccess : function(result) {
883                 log("setHolidaySchedule: On Success");
884 
885                 if (result.returnValue === true) {
886                     if (typeof successCallback === 'function') {
887                         if (typeof successCallback === 'function') {
888                             successCallback();
889                         }
890                     }
891                 }
892             },
893             onFailure : function(result) {
894                 log("setHolidaySchedule: On Failure");
895                 delete result.returnValue;
896                 if (typeof errorCallback === 'function') {
897                     checkErrorCodeNText(result, "TGAS", "Time.setHolidaySchedule returns failure.");
898                     errorCallback(result);
899                 }
900             }
901         });
902 
903         log("Time.setHolidaySchedule Done");
904     };
905 
906     /**
907      * Unset HolidaySchedule List
908      * @class Time
909      * @param {Function} successCallback success callback function.
910      * @param {Function} errorCallback failure callback function.
911      * @return {Object}
912      * <div align=left>
913      *
914      * @example
915      * // Javascript code
916      *  function unsetHolidaySchedule () {
917      *      function successCb(cbObject) {
918      *          console.log("sucess");
919      *          // Do something
920      *      }
921      *      function failureCb(cbObject) {
922      *          var errorCode = cbObject.errorCode;
923      *          var errorText = cbObject.errorText;
924      *          console.log ("Error Code [" + errorCode + "]: " + errorText);
925      *      }
926      *      var time = new Time();
927      *      time.unsetHolidaySchedule(successCb, failureCb);
928      *  }
929      * @since 1.5
930      * @see
931      * <a href="Time%23setHolidaySchedule.html">Time.setHolidaySchedule()</a><br>
932      * <a href="Time%23getHolidaySchedule.html">Time.getHolidaySchedule()</a><br>
933      */
934 
935     Time.prototype.unsetHolidaySchedule = function (successCallback, errorCallback) {
936         log("unsetHolidaySchedule: ");
937         service.Request("luna://com.webos.service.commercial.signage.storageservice/", {
938             method : "unsetHolidaySchedule",
939             parameters : {},
940             onSuccess : function(result) {
941                 log("unsetHolidaySchedule: On Success");
942 
943                 if (result.returnValue === true) {
944                     if (typeof successCallback === 'function') {
945                         if (typeof successCallback === 'function') {
946                             successCallback();
947                         }
948                     }
949                 }
950             },
951             onFailure : function(result) {
952                 log("unsetHolidaySchedule: On Failure");
953                 delete result.returnValue;
954                 if (typeof errorCallback === 'function') {
955                     checkErrorCodeNText(result, "TGAS", "Time.unsetHolidaySchedule returns failure.");
956                     errorCallback(result);
957                 }
958             }
959         });
960 
961         log("Time.unsetHolidaySchedule Done");
962     };
963 
964     module.exports = Time;
965 });
966 
967 Time = cordova.require('cordova/plugin/time'); // jshint ignore:line
968 
969