      1 /*
      2  * This is system 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 /**
     10  * This represents the configuration API itself, and provides a global namespace for operating configuration service.
     11  * @class
     12  */
     13 cordova.define('cordova/plugin/configuration', function (require, exports, module) { // jshint ignore:line
     14
     15     function log(msg) {
     16     //    //console.log//will be removed // jshint ignore:line
     17     }
     18
     19     var service;
     20     if (window.PalmSystem) { // jshint ignore:line
     21         log("Window.PalmSystem Available");
     22         service = require('cordova/plugin/webos/service');
     23     } else {
     24         service = {
     25             Request : function (uri, params) {
     26                 log(uri + " invoked. But I am a dummy because PalmSystem is not available");
     27
     28                if (typeof params.onFailure === 'function') {
     29                     params.onFailure({
     30                         returnValue:false,
     31                         errorText:"PalmSystem Not Available. Cordova is not installed?"
     32                     });
     33                 }
     34         }};
     35     }
     36
     37     /**
     38      * configuration interface
     39      */
     40     var Configuration = function () {
     41     };
     42
     43     function checkErrorCodeNText(result, errorCode, errorText) {
     44
     45         if (result.errorCode === undefined || result.errorCode === null ) {
     46             result.errorCode = errorCode;
     47         }
     48         if (result.errorText === undefined || result.errorText === null) {
     49             result.errorText = errorText;
     50         }
     51     }
     52
     53     /**
     54      * @namespace Configuration.PictureMode
     55      */
     56     Configuration.PictureMode = {
     57     /**
     58      * vivid
     59      * @since 1.0
     60      * @constant
     61      */
     62     VIVID : "vivid",
     63     /**
     64      * standard
     65      * @since 1.0
     66      * @constant
     67      */
     68     STANDARD : "normal",
     69     /**
     70      * APS (Auto Power Saving)
     71      * @since 1.0
     72      * @constant
     73      */
     74     APS : "eco",
     75     /**
     76      * cinema
     77      * @since 1.0
     78      * @constant
     79      */
     80     CINEMA : "cinema",
     81     /**
     82      * game
     83      * @since 1.0
     84      * @constant
     85      */
     86     GAME : "game",
     87     /**
     88      * sports
     89      * @since 1.0
     90      * @constant
     91      */
     92     SPORTS : "sports",
     93     /**
     94      * expert1
     95      * @since 1.0
     96      * @constant
     97      */
     98     EXPERT1 : "expert1",
     99     /**
    100      * expert2 (calibration)
    101      * @since 1.0
    102      * @constant
    103      */
    104     EXPERT2 : "expert2"
    105     };
    106
    107
    108     /**
    109      * @namespace Configuration.AppMode
    110      */
    111     Configuration.AppMode = {
    112     /**
    113      * local
    114      * @since 1.1
    115      * @constant
    116      */
    117     LOCAL : "local",
    118     /**
    119      * usb
    120      * @since 1.1
    121      * @constant
    122      */
    123     USB : "usb",
    124     /**
    125      * remote
    126      * @since 1.1
    127      * @constant
    128      */
    129     REMOTE : "remote"
    130     };
    131
    132     /**
    133      * @namespace Configuration.AppType
    134      */
    135     Configuration.AppType = {
    136     /**
    137      * IPK App
    138      * @since 1.4.1
    139      * @constant
    140      */
    141     IPK : "ipk",
    142     /**
    143      * ZIP App
    144      * @since 1.4.1
    145      * @constant
    146      */
    147     ZIP : "zip"
    148     };
    149
    150     Configuration.LocaleList =
    151         [{
    152             'language': 'čeština',
    153             'languageCode': 'cs',
    154             'countries': [{
    155                 'name': '',
    156                 'specifier': 'cs-CZ'
    157             }]
    158         }, {
    159             'language': 'dansk',
    160             'languageCode': 'da',
    161             'countries': [{
    162                 'name': '',
    163                 'specifier': 'da-DK'
    164             }]
    165         }, {
    166             'language': 'Deutsch',
    167             'languageCode': 'de',
    168             'countries': [{
    169                 'name': '',
    170                 'specifier': 'de-DE'
    171             }]
    172         }, {
    173             'language': 'English',
    174             'languageCode': 'en',
    175             'countries': [{
    176                 'name': '',
    177                 'specifier': 'en-US'
    178             }]
    179         }, {
    180             'language': 'Español',
    181             'languageCode': 'es',
    182             'countries': [{
    183                 'name': '',
    184                 'specifier': 'es-ES'
    185             }]
    186         }, {
    187             'language': 'ελληνική γλώσσα',
    188             'languageCode': 'el',
    189             'countries': [{
    190                 'name': '',
    191                 'specifier': 'el-GR'
    192             }]
    193         }, {
    194             'language': 'Français',
    195             'languageCode': 'fr',
    196             'countries': [{
    197                 'name': '',
    198                 'specifier': 'fr-FR'
    199             }]
    200         }, {
    201             'language': 'italiano',
    202             'languageCode': 'it',
    203             'countries': [{
    204                 'name': '',
    205                 'specifier': 'it-IT'
    206             }]
    207         }, {
    208             'language': 'Nederlands',
    209             'languageCode': 'nl',
    210             'countries': [{
    211                 'name': '',
    212                 'specifier': 'nl-NL'
    213             }]
    214         }, {
    215             'language': 'norsk',
    216             'languageCode': 'nb',
    217             'countries': [{
    218                 'name': '',
    219                 'specifier': 'nb-NO'
    220             }]
    221         }, {
    222             'language': 'português',
    223             'languageCode': 'pt',
    224             'countries': [{
    225                 'name': 'Portugal',
    226                 'specifier': 'pt-PT'
    227             }, {
    228                 'name': 'Brasil',
    229                 'specifier': 'pt-BR'
    230             }]
    231         }, {
    232             'language': 'русский',
    233             'languageCode': 'ru',
    234             'countries': [{
    235                 'name': '',
    236                 'specifier': 'ru-RU'
    237             }]
    238         }, {
    239             'language': 'suomi',
    240             'languageCode': 'fi',
    241             'countries': [{
    242                 'name': '',
    243                 'specifier': 'fi-FI'
    244             }]
    245         }, {
    246             'language': 'svenska',
    247             'languageCode': 'sv',
    248             'countries': [{
    249                 'name': '',
    250                 'specifier': 'sv-SE'
    251             }]
    252         }, {
    253             'language': '한국어',
    254             'languageCode': 'ko',
    255             'countries': [{
    256                 'name': '',
    257                 'specifier': 'ko-KR'
    258             }]
    259         }, {
    260             'language': '中文',
    261             'languageCode': 'zh-Hans',
    262             'countries': [{
    263                 'name': '中国',
    264                 'specifier': 'zh-Hans-CN'
    265             }]
    266         }, {
    267             'language': '日本語',
    268             'languageCode': 'ja',
    269             'countries': [{
    270                 'name': '',
    271                 'specifier': 'ja-JP'
    272             }]
    273         }, {
    274             'language': '中文',
    275             'languageCode': 'zh',
    276             'countries': [{
    277                 'name': '香港',
    278                 'specifier': 'zh-Hant-HK'
    279             }]
    280         }];
    281
    282
    283     function isValidSpecifier(value) {
    284         var arr = Configuration.LocaleList;
    285
    286         for (var i=0; i<arr.length; i++) {
    287             var countries = arr[i].countries;
    288
    289             for(var j=0; j<countries.length; j++)
    290             {
    291                 if (countries[j].specifier === value) {
    292                     return true;
    293                 }
    294             }
    295         }
    296
    297         return false;
    298     }
    299
    300     function isValidLanguageCode(value) {
    301         var arr = Configuration.LocaleList;
    302
    303         for (var i = 0; i < arr.length; i++) {
    304             if (arr[i].languageCode === value) {
    305                 return true;
    306             }
    307         }
    308
    309         return false
    310     }
    311
    312     var version = null;
    313     function checkPlatformVersion(cb) {
    314
    315         if (version === null) {
    316
    317             service.Request('luna://com.webos.service.tv.systemproperty', {
    318                 method: 'getSystemInfo',
    319                 parameters: {
    320                     keys: ["sdkVersion"]
    321                 },
    322                 onSuccess: function(result) {
    323                     log("getPlatformInfo: onSuccess");
    324
    325                     var temp = result.sdkVersion.split('.');
    326                     if (temp.length >= 1 && temp[0] === '1') {
    327                         version = 1;
    328                     } else if (temp.length >= 1 && temp[0] === '2') {
    329                         version = 2;
    330                     } else if (temp.length >= 1 && temp[0] === '3') {
    331                         version = 3;
    332                     } else {
    333                         version = 0;
    334                     }
    335
    336                     delete result.returnValue;
    337
    338                     cb(version);
    339
    340                 },
    341                 onFailure: function(error) {
    342                     log("getPlatformInfo: onFailure");
    343                     delete error.returnValue;
    344                     version = 0;
    345
    346                     cb(version);
    347                 }
    348             });
    349
    350         } else {
    351             cb(version);
    352         }
    353     }
    354
    355     /**
    356      * Sets picture mode. Each <a href="Configuration.PictureMode.html#constructor">PictureMode</a> has a set of predefined picture properties. And each picture properties can be changed with setPictureProperty().
    357      *
    358      * @class Configuration
    359      * @param {Function} successCallback success callback function.
    360      * @param {Function} errorCallback failure callback function.
    361      * @param {Object} options
    362      * <div align=left>
    363      * <table class="hcap_spec" width=400>
    364      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    365      *   <tbody>
    366      *       <tr><th>mode</th><th>String</th><th><a href="Configuration.PictureMode.html#constructor">Configuration.PictureMode</a></th><th>required</th></tr>
    367      *   </tbody>
    368      * </table>
    369      * </div>
    370      * @example
    371      * // Javascript code
    372      * function setPictureMode () {
    373      *   var options = {
    374      *      mode : Configuration.PictureMode.VIVID
    375      *   };
    376      *
    377      *   function successCb() {
    378      *      // Do something
    379      *   }
    380      *
    381      *   function failureCb(cbObject) {
    382      *      var errorCode = cbObject.errorCode;
    383      *      var errorText = cbObject.errorText;
    384      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    385      *   }
    386      *
    387      *   var configuration = new Configuration();
    388      *   configuration.setPictureMode(successCb, failureCb, options);
    389      * }
    390      * @since 1.0
    391      * @return <p>If the method is successfully executed, success callback function is called without a parameter.</br>
    392      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
    393      * @see
    394      * <a href="Configuration%23getPictureMode.html">Configuration.getPictureMode()</a><br>
    395      */
    396     Configuration.prototype.setPictureMode = function (successCallback, errorCallback, options) {
    397
    398         log("setPictureMode: " + JSON.stringify(options));
    399
    400         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    401             method : "set",
    402             parameters : {
    403                 category : "picture",
    404                 settings : {
    405                     "pictureMode" : options.mode
    406                 }
    407             },
    408             onSuccess : function(result) {
    409                 log("setPictureMode: On Success");
    410
    411                 if (result.returnValue === true) {
    412                     if(typeof successCallback === 'function') {
    413                         successCallback();
    414                     }
    415                 }
    416             },
    417             onFailure : function(result) {
    418                 log("setPictureMode: On Failure");
    419                 delete result.returnValue;
    420                 if (typeof errorCallback === 'function') {
    421                     checkErrorCodeNText(result, "CSPM", "Configuration.setPictureMode returns failure.");
    422                     errorCallback(result);
    423                 }
    424             }
    425         });
    426
    427         log("Configuration.setPictureMode Done");
    428     };
    429
    430     /**
    431      * Gets picture mode. Each <a href="Configuration.PictureMode.html#constructor">PictureMode</a> has a set of predefined picture properties.
    432      *
    433      * @class Configuration
    434      * @param {Function} successCallback success callback function.
    435      * @param {Function} errorCallback failure callback function.
    436      * @return {Object}
    437      * <div align=left>
    438      * <table class="hcap_spec" width=400>
    439      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
    440      *   <tbody>
    441      *       <tr><th>mode</th><th>String</th><th><a href="Configuration.PictureMode.html#constructor">Configuration.PictureMode</a></th></tr>
    442      *   </tbody>
    443      * </table>
    444      * </div>
    445      *
    446      * @example
    447      * // Javascript code
    448      * function getPictureMode () {
    449      *   function successCb(cbObject) {
    450      *      console.log("cbObject : " + JSON.stringify(cbObject));
    451      *      console.log("mode : " + cbObject.mode);
    452      *
    453      *      // Do something
    454      *         ...
    455      *   }
    456      *
    457      *   function failureCb(cbObject) {
    458      *      var errorCode = cbObject.errorCode;
    459      *      var errorText = cbObject.errorText;
    460      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    461      *   }
    462      *
    463      *   var configuration = new Configuration();
    464      *   configuration.getPictureMode(successCb, failureCb);
    465      * }
    466      * @since 1.0
    467      * @see
    468      * <a href="Configuration%23setPictureMode.html">Configuration.setPictureMode()</a><br>
    469      */
    470     Configuration.prototype.getPictureMode = function (successCallback, errorCallback) {
    471
    472         log("getPictureMode: ");
    473
    474         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    475             method : "get",
    476             parameters : {
    477                 category : "picture",
    478                 keys : ["pictureMode"]
    479             },
    480             onSuccess : function(result) {
    481                 log("getPictureMode: On Success");
    482
    483                 if (result.returnValue === true) {
    484                     if (typeof successCallback === 'function') {
    485                         var cbObj = {};
    486                         cbObj.mode = result.settings.pictureMode;
    487
    488                         successCallback(cbObj);
    489                     }
    490                 }
    491             },
    492             onFailure : function(result) {
    493                 log("getPictureMode: On Failure");
    494                 delete result.returnValue;
    495                 if (typeof errorCallback === 'function') {
    496                     checkErrorCodeNText(result, "CGPM", "Configuration.getPictureMode returns failure.");
    497                     errorCallback(result);
    498                 }
    499             }
    500         });
    501
    502     log("Configuration.getPictureMode Done");
    503
    504     };
    505
    506     /**
    507      * Sets picture property. Each picture mode has a set of picture properties.
    508      * If picture mode is changed, picture properties of that mode will be set accordingly.
    509      *
    510      *
    511      * <div align=left>
    512      * <table class="hcap_spec" width=400>
    513      *   <thead><tr><th>Property</th><th>VIVID</th><th>STANDARD</th><th>APS</th><th>CINEMA</th><th>SPORTS</th><th>GAME</th><th>EXPERTS1</th><th>EXPERTS2</th></tr></thead>
    514      *   <tbody>
    515      *                   <tr><th>backlight</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    516      *       <tr class="odd"><th>contrast</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    517      *                   <tr><th>brightness</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    518      *       <tr class="odd"><th>sharpness</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> X </th><th> X </th></tr>
    519      *                   <tr><th>hSharpness</th><th> X </th><th> X </th><th> X </th><th> X </th><th> X </th><th> X </th><th> O </th><th> O </th></tr>
    520      *       <tr class="odd"><th>vSharpness</th><th> X </th><th> X </th><th> X </th><th> X </th><th> X </th><th> X </th><th> O </th><th> O </th></tr>
    521      *                   <tr><th>color</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    522      *       <tr class="odd"><th>tint</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    523      *                   <tr><th>colorTemperature</th><th> O </th><th> O </th><th> O </th><th> X </th><th> O </th><th> O </th><th> X </th><th> X </th></tr>
    524      *       <tr class="odd"><th>dynamicContrast</th><th> X </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    525      *                   <tr><th>superResolution</th><th> X </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    526      *       <tr class="odd"><th>colorGamut</th><th> X </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    527      *                   <tr><th>dynamicColor</th><th> X </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    528      *       <tr class="odd"><th>noiseReduction</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    529      *                   <tr><th>mpegNoiseReduction</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    530      *       <tr class="odd"><th>blackLevel</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    531      *                   <tr><th>gamma</th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th><th> O </th></tr>
    532      *   </tbody>
    533      * </table>
    534      * </div>
    535      *
    536      * @class Configuration
    537      * @param {Function} successCallback success callback function.
    538      * @param {Function} errorCallback failure callback function.
    539      * @param {Object} options
    540      * <div align=left>
    541      * <table class="hcap_spec" width=400>
    542      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    543      *   <tbody>
    544      *       <tr><th>backlight</th><th>Number</th><th>backlight of display (0~100) </th><th>optional</th></tr>
    545      *       <tr class="odd"><th>contrast</th><th>Number</th><th>contrast of display (0~100) </th><th>optional</th></tr>
    546      *                   <tr><th>brightness</th><th>Number</th><th>brightness of display (0~100) </th><th>optional</th></tr>
    547      *       <tr class="odd"><th>sharpness</th><th>Number</th><th>sharpness of display (0~50) </th><th>optional</th></tr>
    548      *                   <tr><th>hSharpness</th><th>Number</th><th>hSharpness of display (0~50)</th><th>optional</th></tr>
    549      *       <tr class="odd"><th>vSharpness</th><th>Number</th><th>vSharpness of display (0~50) </th><th>optional</th></tr>
    550      *                   <tr><th>color</th><th>Number</th><th>color of display (0~100) </th><th>optional</th></tr>
    551      *       <tr class="odd"><th>tint</th><th>Number</th><th>tint of display (0~100) R:0, G:100</th><th>optional</th></tr>
    552      *                   <tr><th>colorTemperature</th><th>Number</th><th>colorTemperature of display (0~100) W:0, C:100 </th><th>optional</th></tr>
    553      *       <tr class="odd"><th>dynamicContrast</th><th>String</th><th>dynamicContrast of display (off/low/medium/high) </th><th>optional</th></tr>
    554      *                   <tr><th>superResolution</th><th>String</th><th>superResolution of display (off/low/medium/high) </th><th>optional</th></tr>
    555      *       <tr class="odd"><th>colorGamut</th><th>String</th><th>colorGamut of display (wide/standard) </th><th>optional</th></tr>
    556      *                   <tr><th>dynamicColor</th><th>String</th><th>dynamicColor of display (off/low/medium/high) </th><th>optional</th></tr>
    557      *       <tr class="odd"><th>noiseReduction</th><th>String</th><th>noiseReduction of display (auto/off/low/medium/high) </th><th>optional</th></tr>
    558      *                   <tr><th>mpegNoiseReduction</th><th>String</th><th>mpegNoiseReduction of display (auto/off/low/medium/high) </th><th>optional</th></tr>
    559      *       <tr class="odd"><th>blackLevel</th><th>String</th><th>blackLevel of display (low/high) </th><th>optional</th></tr>
    560      *                   <tr><th>gamma</th><th>String</th><th>gamma of display (low/medium/high/high2) </th><th>optional</th></tr>
    561      *   </tbody>
    562      * </table>
    563      * </div>
    564      *
    565      * Note : 'high2' option is depends on platform.
    566      * @example
    567      * // Javascript code
    568      * function setPictureProperty () {
    569      *   var options = {
    570      *   // For example, expert1 mode.
    571      *      backlight : 50,
    572      *      contrast : 50,
    573      *      brightness : 50,
    574      *      hSharpness : 50,
    575      *      vSharpness : 50,
    576      *      color : 50,
    577      *      tint : 50,
    578      *      colorTemperature : 50,
    579      *      dynamicContrast : "low",
    580      *      superResolution : "low",
    581      *      colorGamut : "wide",
    582      *      dynamicColor : "high",
    583      *      noiseReduction : "medium",
    584      *      mpegNoiseReduction : "low",
    585      *      blackLevel : "low",
    586      *      gamma : "medium"
    587      *   };
    588      *
    589      *   function successCb() {
    590      *      // Do something
    591      *   }
    592      *
    593      *   function failureCb(cbObject) {
    594      *      var errorCode = cbObject.errorCode;
    595      *      var errorText = cbObject.errorText;
    596      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    597      *   }
    598      *
    599      *   var configuration = new Configuration();
    600      *   configuration.setPictureProperty(successCb, failureCb, options);
    601      * }
    602      * @since 1.0
    603      * @return <p>If the method is successfully executed, success callback function is called without a parameter.</br>
    604      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
    605      * @see
    606      * <a href="Configuration%23getPictureProperty.html">Configuration.getPictureProperty()</a><br>
    607      */
    608     Configuration.prototype.setPictureProperty = function (successCallback, errorCallback, options) {
    609
    610         log("setPictureProperty: " + JSON.stringify(options));
    611
    612         checkPlatformVersion(function(ver){
    613
    614             var sets = {};
    615
    616             for (var key in options) {
    617                 if (key !== undefined && key !== null) {
    618                     sets[key] = options[key];
    619                     if (key === 'tint' || key === 'colorTemperature') {
    620                         sets[key] -=50;
    621                     }
    622                     else if (key === 'blackLevel') {
    623                         sets[key] = {
    624                             "unknown": options[key]
    625                         };
    626                         if (options[key] !== "low" && options[key] !== "high" ) {
    627                             log("setPictureProperty: gamma value error " + JSON.stringify(options));
    628                             var result = {};
    629                             checkErrorCodeNText(result, "CSPP", "Configuration.setPictureProperty, There is No matched item : blackLevel.");
    630                             errorCallback(result);
    631                             return;
    632                         }
    633                     } else if (key === 'gamma' && (ver === 2  || ver === 3) && options[key] === "high") {
    634                         sets[key] = "high1";
    635                     }
    636                 }
    637             }
    638
    639             log(JSON.stringify(sets));
    640
    641             service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    642                 method : "set",
    643                 parameters : {
    644                     category : "picture",
    645                     settings : sets
    646                 },
    647                 onSuccess : function(result) {
    648                     log("setPictureProperty: On Success");
    649
    650                     if (result.returnValue === true) {
    651                         if (typeof successCallback === 'function') {
    652                             successCallback();
    653                         }
    654                     }
    655                 },
    656                 onFailure : function(result) {
    657                     log("setPictureProperty: On Failure");
    658                     delete result.returnValue;
    659                     if (typeof errorCallback === 'function') {
    660                         checkErrorCodeNText(result, "CSPP", "Configuration.setPictureProperty returns failure.");
    661                         errorCallback(result);
    662                     }
    663                 }
    664             });
    665             log("Configuration.setPictureProperty Done");
    666         });
    667     };
    668
    669     /**
    670      * Gets picture property. Each <a href="Configuration.PictureMode.html#constructor">PictureMode</a> has a set of predefined picture properties.
    671      *
    672      * @class Configuration
    673      * @param {Function} successCallback success callback function.
    674      * @param {Function} errorCallback failure callback function.
    675      * @return {Object}
    676      * <div align=left>
    677      * <table class="hcap_spec" width=400>
    678      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Available</th></tr></thead>
    679      *   <tbody>
    680      *       <tr><th>backlight</th><th>Number</th><th>backlight of display (0~100) </th><th>optional</th></tr>
    681      *       <tr class="odd"><th>contrast</th><th>Number</th><th>contrast of display (0~100) </th><th>optional</th></tr>
    682      *                   <tr><th>brightness</th><th>Number</th><th>brightness of display (0~100) </th><th>optional</th></tr>
    683      *       <tr class="odd"><th>sharpness</th><th>Number</th><th>sharpness of display (0~50) </th><th>optional</th></tr>
    684      *                   <tr><th>hSharpness</th><th>Number</th><th>hSharpness of display (0~50)</th><th>optional</th></tr>
    685      *       <tr class="odd"><th>vSharpness</th><th>Number</th><th>vSharpness of display (0~50) </th><th>optional</th></tr>
    686      *                   <tr><th>color</th><th>Number</th><th>color of display (0~100) </th><th>optional</th></tr>
    687      *       <tr class="odd"><th>tint</th><th>Number</th><th>tint of display (0~100) R:0, G:100</th><th>optional</th></tr>
    688      *                   <tr><th>colorTemperature</th><th>Number</th><th>colorTemperature of display (0~100) W:0, C:100 </th><th>optional</th></tr>
    689      *       <tr class="odd"><th>dynamicContrast</th><th>String</th><th>dynamicContrast of display (off/low/medium/high) </th><th>optional</th></tr>
    690      *                   <tr><th>superResolution</th><th>String</th><th>superResolution of display (off/low/medium/high) </th><th>optional</th></tr>
    691      *       <tr class="odd"><th>colorGamut</th><th>String</th><th>colorGamut of display (wide/standard) </th><th>optional</th></tr>
    692      *                   <tr><th>dynamicColor</th><th>String</th><th>dynamicColor of display (off/low/medium/high) </th><th>optional</th></tr>
    693      *       <tr class="odd"><th>noiseReduction</th><th>String</th><th>noiseReduction of display (auto/off/low/medium/high) </th><th>optional</th></tr>
    694      *                   <tr><th>mpegNoiseReduction</th><th>String</th><th>mpegNoiseReduction of display (auto/off/low/medium/high) </th><th>optional</th></tr>
    695      *       <tr class="odd"><th>blackLevel</th><th>String</th><th>blackLevel of display (low/high) </th><th>optional</th></tr>
    696      *                   <tr><th>gamma</th><th>String</th><th>gamma of display (low/medium/high) </th><th>optional</th></tr>
    697      *   </tbody>
    698      * </table>
    699      * </div>
    700      *
    701      * @example
    702      * // Javascript code
    703      * function getPictureProperty () {
    704      *   function successCb(cbObject) {
    705      *      console.log("cbObject : " + JSON.stringify(cbObject));
    706      *
    707      *      console.log("back light : " + cbObject.backlight);
    708      *      console.log("contrast : " + cbObject.contrast);
    709      *      console.log("brightness : " + cbObject.brightness);
    710      *      console.log("color : " + cbObject.color);
    711      *      console.log("tint : " + cbObject.tint);
    712      *
    713      *      // Do something
    714      *         ...
    715      *   }
    716      *
    717      *   function failureCb(cbObject) {
    718      *      var errorCode = cbObject.errorCode;
    719      *      var errorText = cbObject.errorText;
    720      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    721      *   }
    722      *
    723      *   var configuration = new Configuration();
    724      *   configuration.getPictureProperty(successCb, failureCb);
    725      * }
    726      * @since 1.0
    727      * @see
    728      * <a href="Configuration%23setPictureProperty.html">Configuration.setPictureProperty()</a><br>
    729      */
    730     Configuration.prototype.getPictureProperty = function (successCallback, errorCallback) {
    731
    732         log("getPictureProperty: ");
    733
    734         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    735             method : "get",
    736             parameters : {
    737                 category : "picture",
    738                 keys : ["brightness", "contrast", "color", "tint", "backlight",
    739                         "sharpness", "hSharpness", "vSharpness", "colorTemperature",
    740                         "dynamicContrast", "superResolution", "colorGamut", "dynamicColor",
    741                         "noiseReduction", "mpegNoiseReduction", "blackLevel", "gamma" ]
    742             },
    743             onSuccess : function(result) {
    744                 log("getPictureProperty: On Success");
    745
    746                 if (result.returnValue === true) {
    747                     if (typeof successCallback === 'function') {
    748                         var cbObj = {};
    749
    750                         for (var key in result.settings) {
    751                             if (key !== undefined && key !== null) {
    752                                 cbObj[key] = (isNaN(result.settings[key]) ? result.settings[key] : Number(result.settings[key]) );
    753                                 if (key === 'tint' || key === 'colorTemperature') {
    754                                     cbObj[key] += 50;
    755                                 }
    756                                 else if (key === 'blackLevel') {
    757                                     cbObj[key] = result.settings[key].unknown;
    758                                 }
    759                                 else if (key === 'gamma' && result.settings[key] === "high1") {
    760                                     cbObj[key] = "high";
    761                                 }
    762                             }
    763                         }
    764
    765                         successCallback(cbObj);
    766                     }
    767                 }
    768             },
    769             onFailure : function(result) {
    770                 log("getPictureProperty: On Failure");
    771                 delete result.returnValue;
    772                 if (typeof errorCallback === 'function') {
    773                     checkErrorCodeNText(result, "CGPP", "Configuration.getPictureProperty returns failure.");
    774                     errorCallback(result);
    775                 }
    776             }
    777         });
    778
    779         log("Configuration.getPictureProperty Done");
    780
    781     };
    782
    783     var mapTable = {
    784         "alias" : "signageName"
    785     };
    786
    787     /**
    788      * Sets property.
    789      * @class Configuration
    790      * @param {Function} successCallback success callback function.
    791      * @param {Function} errorCallback failure callback function.
    792      * @param {Object} options string in JSON format. Refer to Configuration.getProperty for available keys of property(e.g. '{"alias":"display_1"}').
    793      *
    794      * @example
    795      * // Javascript code
    796      * function setProperty () {
    797      *   var options = '{"alias":"display_1"}';
    798      *
    799      *   function successCb() {
    800      *      // Do something
    801      *   }
    802      *
    803      *   function failureCb(cbObject) {
    804      *      var errorCode = cbObject.errorCode;
    805      *      var errorText = cbObject.errorText;
    806      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    807      *   }
    808      *
    809      *   var configuration = new Configuration();
    810      *   configuration.setProperty(successCb, failureCb, options);
    811      * }
    812      *
    813      * @return
    814      * <p>If the method is successfully executed, success callback function is called without a parameter.</br>
    815      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
    816      * @since 1.0
    817      */
    818     Configuration.prototype.setProperty = function (successCallback, errorCallback, options) {
    819
    820         log("setProperty: " + JSON.stringify(options));
    821
    822         var ret    = JSON.parse(options);
    823         var sets   = {};
    824         var params = {};
    825
    826         checkPlatformVersion(function(ver) {
    827             if (ver === 3) {
    828                 mapTable.alias = "deviceName";
    829                 params.category = "network";
    830             }
    831             else
    832             {
    833                 mapTable.alias = "signageName";
    834                 params.category = "commercial";
    835             }
    836
    837             for (var key in ret) {
    838                 if (mapTable[key] !== undefined) {
    839                     sets[(mapTable[key])] = ret[key];
    840                 }
    841             }
    842
    843             params.settings = sets;
    844
    845             service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    846                 method: "set",
    847                 parameters: params,
    848                 onSuccess: function(result) {
    849                     log("setProperty: On Success");
    850
    851                     if (result.returnValue === true) {
    852                         if (typeof successCallback === 'function') {
    853                             successCallback();
    854                         }
    855                     }
    856                 },
    857                 onFailure: function(result) {
    858                     log("setProperty: On Failure");
    859                     delete result.returnValue;
    860                     if (typeof errorCallback === 'function') {
    861                         checkErrorCodeNText(result, "CSP", "Configuration.setProperty returns failure.");
    862                         errorCallback(result);
    863                     }
    864                 }
    865             });
    866         });
    867
    868         log("Configuration.setProperty Done");
    869     };
    870
    871     /**
    872      * Gets the property of platform using key. This property can be either platform specific or user set value.
    873      * @class Configuration
    874      * @param {Function} successCallback success callback function.
    875      * @param {Function} errorCallback failure callback function.
    876      * @param {Object} options string in JSON. It should have "keys" string in JSON which has an array of keys for the value. For example, '{"keys":["alias","key2"]}' .
    877      * <div align=left>
    878      * <table class="hcap_spec" width=400>
    879      *   <thead><tr><th>Key</th><th>Description</th><th>Format</th><th>Read/Write</th><th>Example</th></tr></thead>
    880      *   <tbody>
    881      *                   <tr><th>alias</th><th>Display alias name</th><th>String</th><th>read/write</th><th>display_1</th></tr>
    882      *   </tbody>
    883      * </table>
    884      * </div>
    885      *
    886      * @return {Object} String in JSON. For example, '{"alias":"display_1"}'.
    887      *
    888      * @example
    889      * // Javascript code
    890      * function getProperty () {
    891      *   var options = '{"keys":["alias"]}';
    892      *
    893      *   function successCb(cbObject) {
    894      *      console.log("cbObject : " + JSON.stringify(cbObject));
    895      *      var parsedString = JSON.parse(cbObject);
    896      *
    897      *      for(var key in parsedString) {
    898      *         var value = parsedString[key];
    899      *         console.log(key + ": " + value);
    900      *      }
    901      *   }
    902      *
    903      *   function failureCb(cbObject) {
    904      *      var errorCode = cbObject.errorCode;
    905      *      var errorText = cbObject.errorText;
    906      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    907      *   }
    908      *
    909      *   var configuration = new Configuration();
    910      *   configuration.getProperty(successCb, failureCb, options);
    911      * }
    912      *
    913      * @since 1.0
    914      */
    915     Configuration.prototype.getProperty = function (successCallback, errorCallback, options) {
    916
    917         log("getProperty: ");
    918
    919         var ret       = JSON.parse(options);
    920         var keys      = ret.keys;
    921         var params    = {};
    922         var arrayKeys = [];
    923
    924         checkPlatformVersion(function(ver) {
    925
    926             if (ver === 3) {
    927                 mapTable.alias = "deviceName";
    928                 params.category = "network";
    929             }
    930             else
    931             {
    932                 mapTable.alias = "signageName";
    933                 params.category = "commercial";
    934             }
    935
    936             for (var key in keys) {
    937                 if (key !== null && key !== undefined) {
    938                     log("key" + keys[key]);
    939                     arrayKeys.push(mapTable[keys[key]]);
    940                 }
    941             }
    942
    943             params.keys = arrayKeys;
    944
    945             log(arrayKeys);
    946
    947             service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    948                 method: "get",
    949                 parameters: params,
    950                 onSuccess: function(result) {
    951                     log("getProperty: On Success");
    952
    953                     if (result.returnValue === true) {
    954                         if (typeof successCallback === 'function') {
    955                             var cbObj = {};
    956
    957                             for (var key in keys) {
    958                                 if (key !== null || key !== undefined) {
    959                                     log("key" + keys[key]);
    960                                     if (result.settings[mapTable[keys[key]]] !== undefined || result.settings[mapTable[keys[key]]] !== null) {
    961                                         cbObj[keys[key]] = result.settings[mapTable[keys[key]]];
    962                                     }
    963                                 }
    964                             }
    965                             successCallback(JSON.stringify(cbObj));
    966
    967                         }
    968                     }
    969                 },
    970                 onFailure: function(result) {
    971                     log("getProperty: On Failure");
    972                     delete result.returnValue;
    973                     if (typeof errorCallback === 'function') {
    974                         checkErrorCodeNText(result, "CGP", "Configuration.getProperty returns failure.");
    975                         errorCallback(result);
    976                     }
    977                 }
    978             });
    979         });
    980
    981         log("Configuration.getProperty Done");
    982     };
    983
    984     /**
    985      * Sets current time.
    986      * @class Configuration
    987      * @param {Function} successCallback success callback function.
    988      * @param {Function} errorCallback failure callback function.
    989      * @param {Object} options
    990      * <div align=left>
    991      * <table class="hcap_spec" width=400>
    992      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    993      *   <tbody>
    994      *       <tr><th>year</th><th>Number</th><th>year (2000~2037)</th><th>required</th></tr>
    995      *       <tr class="odd"><th>month</th><th>Number</th><th>month (1~12)</th><th>required</th></tr>
    996      *       <tr><th>day</th><th>Number</th><th>day (1~31)</th><th>required</th></tr>
    997      *       <tr class="odd"><th>hour</th><th>Number</th><th>hour (0~23)</th><th>required</th></tr>
    998      *       <tr><th>minute</th><th>Number</th><th>minute (0~59)</th><th>required</th></tr>
    999      *       <tr class="odd"><th>sec</th><th>Number</th><th>sec (0~59)</th><th>required</th></tr>
    1000      *       <tr><th>ntp</th><th>Boolean</th><th>NTP(Network Time Protocol) is enabled. If ntp is enabled, other setting values are ignored. true : enabled / false : disabled (default)</th><th>optional</th></tr>
    1001      *   </tbody>
    1002      * </table>
    1003      * </div>
    1004      *
    1005      * @example
    1006      * // Javascript code
    1007      * function setCurrentTime () {
    1008      *   var options = {
    1009      *      year : 2014,
    1010      *      month : 1,
    1011      *      day : 6,
    1012      *      hour : 14,
    1013      *      minute : 40,
    1014      *      sec : 50
    1015      *   };
    1016      *
    1017      *   function successCb() {
    1018      *      // Do something
    1019      *   }
    1020      *
    1021      *   function failureCb(cbObject) {
    1022      *      var errorCode = cbObject.errorCode;
    1023      *      var errorText = cbObject.errorText;
    1024      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1025      *   }
    1026      *
    1027      *   var configuration = new Configuration();
    1028      *   configuration.setCurrentTime(successCb, failureCb, options);
    1029      * }
    1030      *
    1031      * @return <p>If the method is successfully executed, success callback function is called without a parameter.</br>
    1032      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
    1033      * @since 1.0
    1034      * @since 1.3 options.ntp
    1035      * @see
    1036      * <a href="Configuration%23getCurrentTime.html">Configuration.getCurrentTime()</a><br>
    1037      */
    1038     Configuration.prototype.setCurrentTime = function (successCallback, errorCallback, options) {
    1039
    1040         log("setCurrentTime: " + JSON.stringify(options));
    1041         var input = new Date(options.year, options.month-1, options.day, options.hour, options.minute, options.sec);
    1042
    1043         if (options.year < 2000 || options.year > 2037 || options.month < 1 || options.month > 12 ||
    1044             options.day < 1 || options.day > 31 || options.hour < 0 || options.hour > 23 ||
    1045             options.minute < 0 || options.minute > 59 || options.sec < 0 || options.sec > 59 ||
    1046             input.getFullYear() !== options.year || //for checking leap year (SCAP-221)
    1047             input.getMonth() !== (options.month-1) ||
    1048             input.getDate() !== options.day ||
    1049             input.getHours() !== options.hour ||
    1050             input.getMinutes() !== options.minute ||
    1051             input.getSeconds() !== options.sec)
    1052         {
    1053
    1054             if (typeof errorCallback === 'function') {
    1055                 log("setCurrentTime: out of range or invalid parameter type");
    1056                 var result = {};
    1057                 checkErrorCodeNText(result, "CSCT", "Configuration.setCurrentTime returns failure for out of range.");
    1058                 errorCallback(result);
    1059                 return;
    1060             }
    1061         }
    1062
    1063         log("setCurrentTime: " + JSON.stringify(options));
    1064
    1065         //var utcSec = input.getTime()/1000; //removed timezone offset. it will calculate in storage service
    1066
    1067         var time    = {};
    1068         time.year   = options.year;
    1069         time.month  = options.month;
    1070         time.day    = options.day;
    1071         time.hour   = options.hour;
    1072         time.minute = options.minute;
    1073         time.sec    = options.sec;
    1074
    1075         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    1076                 method : "setSystemTime",
    1077                 parameters : {
    1078                     time : time,
    1079                     ntp : options.ntp
    1080                 },
    1081                 onSuccess : function() {
    1082                     log("setCurrentTime: On Success");
    1083                     if (typeof successCallback === 'function') {
    1084                         successCallback();
    1085                     }
    1086                 },
    1087                 onFailure : function(result) {
    1088                     log("setCurrentTime: On Failure");
    1089
    1090                     delete result.returnValue;
    1091                     if (typeof errorCallback === 'function') {
    1092                         checkErrorCodeNText(result, "CSCT", "Configuration.setCurrentTime returns failure.");
    1093                         errorCallback(result);
    1094                     }
    1095                 }
    1096             });
    1097
    1098         log("Configuration.setCurrentTime Done");
    1099
    1100     };
    1101
    1102     /**
    1103      * Gets current time.
    1104      * @class Configuration
    1105      * @param {Function} successCallback success callback function.
    1106      * @param {Function} errorCallback failure callback function.
    1107      * @return {Object}
    1108      * <div align=left>
    1109      * <table class="hcap_spec" width=400>
    1110      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    1111      *   <tbody>
    1112      *       <tr><th>year</th><th>Number</th><th>year (2000~2037)</th><th>required</th></tr>
    1113      *       <tr class="odd"><th>month</th><th>Number</th><th>month (1~12)</th><th>required</th></tr>
    1114      *       <tr><th>day</th><th>Number</th><th>day (1~31)</th><th>required</th></tr>
    1115      *       <tr class="odd"><th>hour</th><th>Number</th><th>hour (0~23)</th><th>required</th></tr>
    1116      *       <tr><th>minute</th><th>Number</th><th>minute (0~59)</th><th>required</th></tr>
    1117      *       <tr class="odd"><th>sec</th><th>Number</th><th>sec (0~59)</th><th>required</th></tr>
    1118      *       <tr><th>ntp</th><th>Boolean</th><th>NTP(Network Time Protocol) is enabled. true : enabled / false : disabled (default)</th><th>optional</th></tr>
    1119      *   </tbody>
    1120      * </table>
    1121      * </div>
    1122      *
    1123      * @example
    1124      * // Javascript code
    1125      * function getCurrentTime () {
    1126      *   function successCb(cbObject) {
    1127      *      console.log("cbObject : " + JSON.stringify(cbObject));
    1128      *   }
    1129      *
    1130      *   function failureCb(cbObject) {
    1131      *      var errorCode = cbObject.errorCode;
    1132      *      var errorText = cbObject.errorText;
    1133      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1134      *   }
    1135      *
    1136      *   var configuration = new Configuration();
    1137      *   configuration.getCurrentTime(successCb, failureCb);
    1138      * }
    1139      *
    1140      * @since 1.0
    1141      * @since 1.3 returns.ntp
    1142      * @see
    1143      * <a href="Configuration%23setCurrentTime.html">Configuration.setCurrentTime()</a><br>
    1144      */
    1145     Configuration.prototype.getCurrentTime = function (successCallback, errorCallback) {
    1146
    1147         log("getCurrentTime: ");
    1148
    1149         service.Request("luna://com.palm.systemservice/time/", {
    1150             method : "getEffectiveBroadcastTime",
    1151             onSuccess : function(result) {
    1152                 log("getCurrentTime : On Success");
    1153
    1154                 if(result.returnValue === true) {
    1155                     var cbObj = {};
    1156                     var d = new Date(result.adjustedUtc * 1000);
    1157                     cbObj.year = d.getFullYear();
    1158                     cbObj.month = d.getMonth() + 1;
    1159                     cbObj.day = d.getDate();
    1160                     cbObj.hour = d.getHours();
    1161                     cbObj.minute = d.getMinutes();
    1162                     cbObj.sec = d.getSeconds();
    1163
    1164                     service.Request("luna://com.palm.systemservice/", {
    1165                         method : "getPreferences",
    1166                         parameters : {
    1167                             keys : ["useNetworkTime"]
    1168                         },
    1169                         onSuccess : function(res) {
    1170                             log("getPreferences : On Success");
    1171
    1172                             if(res.returnValue === true) {
    1173
    1174                                 cbObj.ntp = res.useNetworkTime;
    1175
    1176                                 if (typeof successCallback === 'function') {
    1177                                     successCallback(cbObj);
    1178                                 }
    1179
    1180                             } else {
    1181
    1182                                 if (typeof errorCallback === 'function') {
    1183                                     checkErrorCodeNText(result, "CGCT", "Configuration.getCurrentTime returns failure.");
    1184                                     errorCallback(result);
    1185                                 }
    1186                             }
    1187                         },
    1188                         onFailure : function(result) {
    1189                             log("getCurrentTime: On Failure");
    1190                             delete result.returnValue;
    1191                             if (typeof errorCallback === 'function') {
    1192                                 checkErrorCodeNText(result, "CGCT", "Configuration.getCurrentTime returns failure.");
    1193                                 errorCallback(result);
    1194                             }
    1195                         }
    1196                     });
    1197                 } else {
    1198                     if (typeof errorCallback === 'function') {
    1199                         checkErrorCodeNText(result, "CGCT", "Configuration.getCurrentTime returns failure.");
    1200                         errorCallback(result);
    1201                     }
    1202                 }
    1203
    1204             },
    1205             onFailure : function(result) {
    1206                 log("getCurrentTime: On Failure");
    1207                 delete result.returnValue;
    1208                 if (typeof errorCallback === 'function') {
    1209                     checkErrorCodeNText(result, "CGCT", "Configuration.getCurrentTime returns failure.");
    1210                     errorCallback(result);
    1211                 }
    1212             }
    1213         });
    1214
    1215         log("Configuration.getCurrentTime Done");
    1216
    1217     };
    1218
    1219     /**
    1220      * Restarts the application.
    1221      * @class Configuration
    1222      * @param {Function} successCallback success callback function.
    1223      * @param {Function} errorCallback failure callback function.
    1224      *
    1225      * @example
    1226      * // Javascript code
    1227      * function restartApplication () {
    1228      *   function successCb() {
    1229      *      console.log("restart success : ");
    1230      *   }
    1231      *
    1232      *   function failureCb(cbObject) {
    1233      *      var errorCode = cbObject.errorCode;
    1234      *      var errorText = cbObject.errorText;
    1235      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1236      *   }
    1237      *
    1238      *   var configuration = new Configuration();
    1239      *   configuration.restartApplication(successCb, failureCb);
    1240      * }
    1241      *
    1242      * @since 1.0
    1243      */
    1244     Configuration.prototype.restartApplication = function (successCallback, errorCallback) {
    1245
    1246         log("restartApp: ");
    1247
    1248         service.Request("luna://com.webos.service.commercial.signage.storageservice/", {
    1249                 method : "restart_application",
    1250                 onSuccess : function(result) {
    1251                     log("restartApp: On Success");
    1252
    1253                     if (typeof successCallback === 'function') {
    1254                         successCallback(result);
    1255                     }
    1256                 },
    1257                 onFailure : function(result) {
    1258                     log("restartApp: On Failure");
    1259                     delete result.returnValue;
    1260                     if (typeof errorCallback === 'function') {
    1261                         checkErrorCodeNText(result, "CRA", "Configuration.restartApp returns failure.");
    1262                         errorCallback(result);
    1263                     }
    1264                 }
    1265             });
    1266
    1267         log("Configuration.restartApp Done");
    1268
    1269     };
    1270
    1271
    1272     /**
    1273      * Gets server property. Server property has information about application mode and server settings for application upgrade and launch.
    1274      *
    1275      * @class Configuration
    1276      * @param {Function} successCallback success callback function.
    1277      * @param {Function} errorCallback failure callback function.
    1278      * @return {Object}
    1279      * <div align=left>
    1280      * <table class="hcap_spec" width=400>
    1281      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
    1282      *   <tbody>
    1283      *                   <tr><th>serverIp</th><th>String</th><th>IP address (local, usb : to upgrade / remote : to launch )</th></tr>
    1284      *       <tr class="odd"><th>serverPort</th><th>Number</th><th>Port number (local, usb : to upgrade / remote : to launch )</th></tr>
    1285      *                   <tr><th>secureConnection</th><th>Boolean</th><th>true : https, false : http </th></tr>
    1286      *       <tr class="odd"><th>appLaunchMode</th><th>String</th><th>launch mode <a href="Configuration.AppMode.html#constructor">Configuration.AppMode</th></tr>
    1287      *       <tr><th>appType</th><th>String</th><th>app type <a href="Configuration.AppType.html#constructor">Configuration.AppType</th></tr>
    1288      *                   <tr class="odd"><th>fqdnMode</th><th>Boolean</th><th>true : use fqdn settings for application upgrade or launch, <br>false : use serverIp and serverPort settings for application upgrade or launch</th></tr>
    1289      *       <tr><th>fqdnAddr</th><th>String</th><th>FQDN url. for example, http://lge.com/index.html or https://lge.com/index.html </th></tr>
    1290      *   </tbody>
    1291      * </table>
    1292      * </div>
    1293      *
    1294      * @example
    1295      * // Javascript code
    1296      * function getServerProperty () {
    1297      *   function successCb(cbObject) {
    1298      *      console.log("cbObject : " + JSON.stringify(cbObject));
    1299      *
    1300      *      console.log("server IP : " + cbObject.serverIp);
    1301      *      console.log("server Port : " + cbObject.serverPort);
    1302      *      console.log("secure Connection : " + cbObject.secureConnection);
    1303      *      console.log("applicationLaunchMode : " + cbObject.appLaunchMode);
    1304      *      console.log("application type : " + cbObject.appType);
    1305      *      console.log("fully Qualified Domain Name Mode : " + cbObject.fqdnMode);
    1306      *      console.log("fully Qualified Domain Name Address: " + cbObject.fqdnAddr);
    1307      *
    1308      *      // Do something
    1309      *   }
    1310      *
    1311      *   function failureCb(cbObject) {
    1312      *      var errorCode = cbObject.errorCode;
    1313      *      var errorText = cbObject.errorText;
    1314      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1315      *   }
    1316      *
    1317      *   var configuration = new Configuration();
    1318      *   configuration.getServerProperty(successCb, failureCb);
    1319      * }
    1320      * @since 1.1
    1321      * @see
    1322      * <a href="Configuration%23setServerProperty.html">Configuration.setServerProperty()</a><br>
    1323      */
    1324     Configuration.prototype.getServerProperty = function (successCallback, errorCallback) {
    1325
    1326         log("getServerProperty: ");
    1327
    1328         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    1329             method : "get",
    1330             parameters : {
    1331                 category : "commercial",
    1332                 keys : ["serverIpPort", "siServerIp", "secureConnection", "appLaunchMode", "fqdnAddr", "fqdnMode", "appType"]
    1333             },
    1334
    1335             onSuccess : function(result) {
    1336                 log("getPictureProperty: On Success");
    1337
    1338                 if (result.returnValue === true) {
    1339                     if (typeof successCallback === 'function') {
    1340                         var cbObj = {};
    1341                         cbObj.serverIp = result.settings.siServerIp;
    1342                         cbObj.serverPort = parseInt(result.settings.serverIpPort, 10);
    1343                         cbObj.secureConnection = (result.settings.secureConnection === "off" ? false : true );
    1344                         cbObj.appLaunchMode  = result.settings.appLaunchMode;
    1345                         cbObj.appType  = result.settings.appType;
    1346                         cbObj.fqdnMode = (result.settings.fqdnMode === "off" ? false : true );
    1347                         cbObj.fqdnAddr = result.settings.fqdnAddr;
    1348
    1349                         successCallback(cbObj);
    1350                     }
    1351                 }
    1352             },
    1353             onFailure : function(result) {
    1354                 log("getServerProperty: On Failure");
    1355                 delete result.returnValue;
    1356                 if (typeof errorCallback === 'function') {
    1357                     checkErrorCodeNText(result, "CGSP", "Configuration.getServerProperty returns failure.");
    1358                     errorCallback(result);
    1359                 }
    1360             }
    1361         });
    1362
    1363         log("Configuration.getServerProperty Done");
    1364
    1365     };
    1366
    1367     /**
    1368      * Sets the server property.
    1369      * <br>
    1370      * <hr>
    1371      * <b>scap_installation.json</b><br>
    1372      * If scap_installation.json file exists under root directory of usb memory and 'Auto Set' is enabled in server settings menu,
    1373      * server properties will be set as described in scap_installation.json and 'Auto Set' will be disabled automatically.
    1374      * Factory default setting of 'Auto Set' is 'enabled'.</br>
    1375      * scap_installation.json schema is as below.
    1376      *
    1377      * <div><pre class="code prettyprint">
    1378 {
    1379   "$schema": "http://json-schema.org/draft-04/schema#",
    1380   "id": "",
    1381   "type": "object",
    1382   "properties": {
    1383     "serverIp": {
    1384       "id": "serverIp",
    1385       "type": "string"
    1386     },
    1387     "serverPort": {
    1388       "id": "serverPort",
    1389       "type": "integer"
    1390     },
    1391     "secureConnection": {
    1392       "id": "secureConnection",
    1393       "type": "boolean"
    1394     },
    1395     "appLaunchMode": {
    1396       "id": "appLaunchMode",
    1397       "type": "string",
    1398       "enum": [
    1399         "local",
    1400         "usb",
    1401         "remote"
    1402       ]
    1403     },
    1404     "fqdnMode": {
    1405       "id": "fqdnMode",
    1406       "type": "boolean"
    1407     },
    1408     "fqdnAddr": {
    1409       "id": "fqdnAddr",
    1410       "type": "string"
    1411     },
    1412     "required": [
    1413       "serverIp",
    1414       "serverPort",
    1415       "secureConnection",
    1416       "appLaunchMode",
    1417       "fqdnMode",
    1418       "fqdnAddr"
    1419     ]
    1420   }
    1421 }
    1422      * </pre></div>
    1423      * scap_installation.json example is as below. <br>
    1424      *  {<br>
    1425      *    "serverIp":"10.177.211.51", <br>
    1426      *    "serverPort":80, <br>
    1427      *    "secureConnection":false, <br>
    1428      *    "appLaunchMode":"local",<br>
    1429      *    "fqdnMode":true,<br>
    1430      *    "fqdnAddr":"http://192.168.0.1:2000/lgapp.zip"<br>
    1431      *  }<br>
    1432      * <hr>
    1433      * @class Configuration
    1434      * @param {Function} successCallback success callback function.
    1435      * @param {Function} errorCallback failure callback function.
    1436      * @param {Object} options
    1437      * <div align=left>
    1438      * <table class="hcap_spec" width=400>
    1439      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    1440      *   <tbody>
    1441      *                   <tr><th>serverIp</th><th>String</th><th>IP address (local, usb : to upgrade / remote : to launch )</th><th>required</th></tr>
    1442      *       <tr class="odd"><th>serverPort</th><th>Number</th><th>Port number (local, usb : to upgrade / remote : to launch )</th><th>required</th></tr>
    1443      *                   <tr><th>secureConnection</th><th>Boolean</th><th>true : https, false : http </th><th>required</th></tr>
    1444      *       <tr class="odd"><th>appLaunchMode</th><th>String</th><th>launch mode <a href="Configuration.AppMode.html#constructor">Configuration.AppMode</th><th>required</th></tr>
    1445      *       <tr><th>appType</th><th>String</th><th>app type <a href="Configuration.AppType.html#constructor">Configuration.AppType</th><th>optional</th></tr>
    1446      *                   <tr class="odd"><th>fqdnMode</th><th>Boolean</th><th>true : use fqdn settings when an application upgrades or launches,
    1447      *                   <br>false : use serverIp and serverPort settings when an application upgrades or launches</th><th>required</th></tr>
    1448      *       <tr><th>fqdnAddr</th><th>String</th><th>FQDN url. for example, http://lge.com/index.html or https://lge.com/index.html </th><th>required</th></tr>
    1449      *   </tbody>
    1450      * </table>
    1451      * </div>
    1452      *
    1453      * @example
    1454      * // Javascript code
    1455      * function setServerProperty () {
    1456      *   var options = {
    1457      *      serverIp : "192.168.0.2",
    1458      *      serverPort : 80,
    1459      *      secureConnection : false,
    1460      *      appLaunchMode : Configuration.AppMode.REMOTE,
    1461      *      appType : Configuration.AppType.ZIP,
    1462      *      fqdnMode : false,
    1463      *      fqdnAddr : "http://signage.domain.com/index.html"
    1464      *   };
    1465      *
    1466      *   function successCb() {
    1467      *      // Do something
    1468      *   }
    1469      *
    1470      *   function failureCb(cbObject) {
    1471      *      var errorCode = cbObject.errorCode;
    1472      *      var errorText = cbObject.errorText;
    1473      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1474      *   }
    1475      *
    1476      *   var configuration = new Configuration();
    1477      *   configuration.setServerProperty(successCb, failureCb, options);
    1478      * }
    1479      * @since 1.1
    1480      * @return <p>If the method is successfully executed, success callback function is called without a parameter.</br>
    1481      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
    1482      * @see
    1483      * <a href="Configuration%23getServerProperty.html">Configuration.getServerProperty()</a><br>
    1484      */
    1485     Configuration.prototype.setServerProperty = function (successCallback, errorCallback, options) {
    1486
    1487         log("setServerProperty: " + JSON.stringify(options));
    1488
    1489         if(options === undefined ||
    1490                 typeof options.serverIp !== 'string'|| /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(options.serverIp) === false ||
    1491                 isNaN(options.serverPort) || options.serverPort < 0 || options.serverPort > 65535 || typeof options.serverPort !== 'number' ||
    1492                 typeof options.secureConnection !== 'boolean' || typeof options.appLaunchMode !== 'string' ||
    1493                 (options.appLaunchMode !== Configuration.AppMode.USB && options.appLaunchMode !== Configuration.AppMode.LOCAL && options.appLaunchMode !== Configuration.AppMode.REMOTE) ||
    1494                 typeof options.fqdnMode !== 'boolean' || typeof options.fqdnAddr !== 'string') {
    1495
    1496             if (typeof errorCallback === 'function') {
    1497                 var result = {};
    1498                 checkErrorCodeNText(result, "CSSP", "Configuration.setServerProperty, Invalid parameters.");
    1499                 log ("options.serverIp : " + typeof options.serverIp + " options.serverPort : " + typeof options.serverPort + " options.secureConnection : " + typeof options.secureConnection +
    1500                         " options.appLaunchMode : " + typeof options.appLaunchMode + " options.fqdnMode : " + typeof options.fqdnMode + " options.fqdnAddr : " + options.fqdnAddr);
    1501
    1502                 errorCallback(result);
    1503                 return;
    1504             }
    1505
    1506         }
    1507
    1508         var sets = {};
    1509
    1510         sets.siServerIp       = options.serverIp;
    1511         sets.serverIpPort     = options.serverPort + '';
    1512         sets.secureConnection = ( options.secureConnection === true ? "on" : "off");
    1513         sets.appLaunchMode    = options.appLaunchMode;
    1514         sets.fqdnMode         = ( options.fqdnMode === true ? "on" : "off" );
    1515         sets.fqdnAddr         = options.fqdnAddr;
    1516
    1517         if(typeof options.appType !== 'undefined')
    1518             sets.appType = options.appType;
    1519
    1520         log(JSON.stringify(sets));
    1521
    1522         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    1523             method : "set",
    1524             parameters : {
    1525                 category : "commercial",
    1526                 settings : sets
    1527             },
    1528             onSuccess : function(result) {
    1529                 log("setServerProperty: On Success");
    1530
    1531                 if (result.returnValue === true) {
    1532                     if (typeof successCallback === 'function') {
    1533                         successCallback();
    1534                     }
    1535                 }
    1536             },
    1537             onFailure : function(result) {
    1538                 log("setServerProperty: On Failure");
    1539                 delete result.returnValue;
    1540                 if (typeof errorCallback === 'function') {
    1541                     checkErrorCodeNText(result, "CSSP", "Configuration.setServerProperty returns failure.");
    1542                     errorCallback(result);
    1543                 }
    1544             }
    1545         });
    1546
    1547         log("Configuration.setServerProperty Done");
    1548     };
    1549
    1550     /**
    1551      * Clears the cache data on signage monitor.
    1552      * @class Configuration
    1553      * @param {Function} successCallback success callback function.
    1554      * @param {Function} errorCallback failure callback function.
    1555      *
    1556      * @example
    1557      * // Javascript code
    1558      * function clearCache () {
    1559      *   function successCb() {
    1560      *      console.log("clearCache success : ");
    1561      *   }
    1562      *
    1563      *   function failureCb(cbObject) {
    1564      *      var errorCode = cbObject.errorCode;
    1565      *      var errorText = cbObject.errorText;
    1566      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1567      *   }
    1568      *
    1569      *   var configuration = new Configuration();
    1570      *   configuration.clearCache(successCb, failureCb);
    1571      * }
    1572      *
    1573      * @since 1.3
    1574      */
    1575     Configuration.prototype.clearCache = function (successCallback, errorCallback) {
    1576
    1577         log("clearCache: ");
    1578
    1579         service.Request("luna://com.webos.service.commercial.signage.storageservice/", {
    1580                 method : "clearCache",
    1581                 onSuccess : function(result) {
    1582                     log("clearCache: On Success");
    1583
    1584                     if (typeof successCallback === 'function') {
    1585                         successCallback();
    1586                     }
    1587                 },
    1588                 onFailure : function(result) {
    1589                     log("clearCache: On Failure");
    1590                     delete result.returnValue;
    1591                     if (typeof errorCallback === 'function') {
    1592                         checkErrorCodeNText(result, "CCC", "Configuration.clearCache returns failure.");
    1593                         errorCallback(result);
    1594                     }
    1595                 }
    1596             });
    1597
    1598         log("Configuration.clearCache Done");
    1599
    1600     };
    1601
    1602     /**
    1603      * Gets list of time zone supported on signage monitor.
    1604      *
    1605      * @class Configuration
    1606      * @param {Function} successCallback success callback function.
    1607      * @param {Function} errorCallback failure callback function.
    1608      * @return {Object}
    1609      * <div align=left>
    1610      * <table class="hcap_spec" width=400>
    1611      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    1612      *   <tbody>
    1613      *       <tr><th>timeZone[]</th><th>Array</th><th> </th><th>required</th></tr>
    1614      *       <tr class="odd"><th>timeZone[].continent</th><th>String</th><th>continent</th><th>required</th></tr>
    1615      *                   <tr><th>timeZone[].country</th><th>String</th><th>country</th><th>required</th></tr>
    1616      *       <tr class="odd"><th>timeZone[].city</th><th>String</th><th>city</th><th>required</th></tr>
    1617      *   </tbody>
    1618      * </table>
    1619      * </div>
    1620      *
    1621      * @example
    1622      * // Javascript code
    1623      * function getTimeZoneList () {
    1624      *   function successCb(cbObject) {
    1625      *
    1626      *      for (var i = cbObject.timeZone.length-1; i>=0; i--) {
    1627      *          console.log("timeZone [" + i + "].continent : " + cbObject.timeZone[i].continent);
    1628      *          console.log("timeZone [" + i + "].country : " + cbObject.timeZone[i].country);
    1629      *          console.log("timeZone [" + i + "].city : " + cbObject.timeZone[i].city);
    1630      *
    1631      *      }
    1632      *
    1633      *      // Do something
    1634      *
    1635      *   }
    1636      *
    1637      *   function failureCb(cbObject) {
    1638      *      var errorCode = cbObject.errorCode;
    1639      *      var errorText = cbObject.errorText;
    1640      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1641      *   }
    1642      *
    1643      *   var configuration = new Configuration();
    1644      *   configuration.getTimeZoneList(successCb, failureCb);
    1645      * }
    1646      * @since 1.3
    1647      * @see
    1648      * <a href="Configuration%23setTimeZone.html">Configuration.setTimeZone()</a><br>
    1649      * <a href="Configuration%23getTimeZone.html">Configuration.getTimeZone()</a><br>
    1650      */
    1651     Configuration.prototype.getTimeZoneList = function (successCallback, errorCallback) {
    1652
    1653         log("getTimeZoneList: ");
    1654
    1655         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    1656             method : "getTimeZoneList",
    1657             onSuccess : function(result) {
    1658                 log("getTimeZoneList: On Success");
    1659
    1660                 if (result.returnValue === true) {
    1661                     if (typeof successCallback === 'function') {
    1662                         delete result.returnValue;
    1663                         successCallback(result);
    1664                     }
    1665                 }
    1666             },
    1667             onFailure : function(result) {
    1668                 log("getTimeZoneList: On Failure");
    1669                 delete result.returnValue;
    1670                 if (typeof errorCallback === 'function') {
    1671                     checkErrorCodeNText(result, "CGTL", "Configuration.getTimeZoneList returns failure.");
    1672                     errorCallback(result);
    1673                 }
    1674             }
    1675         });
    1676
    1677         log("Configuration.getTimeZoneList Done");
    1678
    1679     };
    1680
    1681     /**
    1682      * Gets time zone.
    1683      *
    1684      * @class Configuration
    1685      * @param {Function} successCallback success callback function.
    1686      * @param {Function} errorCallback failure callback function.
    1687      * @return {Object}
    1688      * <div align=left>
    1689      * <table class="hcap_spec" width=400>
    1690      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    1691      *   <tbody>
    1692      *       <tr><th>timeZone</th><th>Object</th><th> </th><th>required</th></tr>
    1693      *       <tr class="odd"><th>timeZone.continent</th><th>String</th><th>continent</th><th>required</th></tr>
    1694      *                   <tr><th>timeZone.country</th><th>String</th><th>country</th><th>required</th></tr>
    1695      *       <tr class="odd"><th>timeZone.city</th><th>String</th><th>city</th><th>required</th></tr>
    1696      *   </tbody>
    1697      * </table>
    1698      * </div>
    1699      *
    1700      * @example
    1701      * // Javascript code
    1702      * function getTimeZone () {
    1703      *   function successCb(cbObject) {
    1704      *
    1705      *      console.log("timeZone.continent : " + cbObject.timeZone.continent);
    1706      *      console.log("timeZone.country : " + cbObject.timeZone.country);
    1707      *      console.log("timeZone.city : " + cbObject.timeZone.city);
    1708      *
    1709      *
    1710      *      // Do something
    1711      *
    1712      *   }
    1713      *
    1714      *   function failureCb(cbObject) {
    1715      *      var errorCode = cbObject.errorCode;
    1716      *      var errorText = cbObject.errorText;
    1717      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1718      *   }
    1719      *
    1720      *   var configuration = new Configuration();
    1721      *   configuration.getTimeZone(successCb, failureCb);
    1722      * }
    1723      * @since 1.3
    1724      * @see
    1725      * <a href="Configuration%23setTimeZone.html">Configuration.setTimeZone()</a><br>
    1726      * <a href="Configuration%23getTimeZoneList.html">Configuration.getTimeZoneList()</a><br>
    1727      */
    1728     Configuration.prototype.getTimeZone = function (successCallback, errorCallback) {
    1729
    1730         log("getTimeZone: ");
    1731
    1732         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    1733             method : "getTimeZone",
    1734             onSuccess : function(result) {
    1735                 log("getTimeZone: On Success");
    1736
    1737                 if (result.returnValue === true) {
    1738                     if (typeof successCallback === 'function') {
    1739                         delete result.returnValue;
    1740                         successCallback(result);
    1741                     }
    1742                 }
    1743             },
    1744             onFailure : function(result) {
    1745                 log("getTimeZone: On Failure");
    1746                 delete result.returnValue;
    1747                 if (typeof errorCallback === 'function') {
    1748                     checkErrorCodeNText(result, "CGTZ", "Configuration.getTimeZone returns failure.");
    1749                     errorCallback(result);
    1750                 }
    1751             }
    1752         });
    1753
    1754         log("Configuration.getTimeZone Done");
    1755
    1756     };
    1757
    1758
    1759     /**
    1760      * Sets time zone which should be one of the list from getTimeZoneList.
    1761      *
    1762      * @class Configuration
    1763      * @param {Function} successCallback success callback function.
    1764      * @param {Function} errorCallback failure callback function.
    1765      * @param {Object} options
    1766      * <div align=left>
    1767      * <table class="hcap_spec" width=400>
    1768      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    1769      *   <tbody>
    1770      *       <tr><th>timeZone</th><th>Object</th><th> </th><th>required</th></tr>
    1771      *       <tr class="odd"><th>timeZone.continent</th><th>String</th><th>continent</th><th>required</th></tr>
    1772      *                   <tr><th>timeZone.country</th><th>String</th><th>country</th><th>required</th></tr>
    1773      *       <tr class="odd"><th>timeZone.city</th><th>String</th><th>city</th><th>required</th></tr>
    1774      *   </tbody>
    1775      * </table>
    1776      * </div>
    1777      *
    1778      * @example
    1779      * // Javascript code
    1780      * function setTimeZone () {
    1781      *   function successCb(cbObject) {
    1782      *
    1783      *      // Do something
    1784      *
    1785      *   }
    1786      *
    1787      *   function failureCb(cbObject) {
    1788      *      var errorCode = cbObject.errorCode;
    1789      *      var errorText = cbObject.errorText;
    1790      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1791      *   }
    1792      *
    1793      *   var configuration = new Configuration();
    1794      *   var timeZone = {
    1795      *       continent : "Asia",
    1796      *       country : "South Korea",
    1797      *       city : "Seoul"
    1798      *   };
    1799      *   var options = { timeZone : timeZone };
    1800      *
    1801      *   configuration.setTimeZone(successCb, failureCb, options);
    1802      * }
    1803      *
    1804      * @return <p>If the method is successfully executed, success callback function is called without a parameter.</br>
    1805      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
    1806      *
    1807      * @since 1.3
    1808      * @see
    1809      * <a href="Configuration%23getTimeZone.html">Configuration.getTimeZone()</a><br>
    1810      * <a href="Configuration%23getTimeZoneList.html">Configuration.getTimeZoneList()</a><br>
    1811      */
    1812     Configuration.prototype.setTimeZone = function (successCallback, errorCallback, options) {
    1813
    1814         log("setTimeZone: ");
    1815
    1816         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    1817             method : "get",
    1818             parameters : {
    1819                 category : "time",
    1820                 keys : ["autoClock"]
    1821             },
    1822             onSuccess : function(result) {
    1823                 if (result.returnValue === true) {
    1824                     if (typeof successCallback === 'function') {
    1825                         if(result.settings.autoClock === "off") {
    1826                             delete result.returnValue;
    1827                             if (typeof errorCallback === 'function') {
    1828                                 checkErrorCodeNText(result, "CSTZ", "Configuration.setTimeZone returns failure. autoClock is off");
    1829                                 errorCallback(result);
    1830                             }
    1831                         } else {
    1832                             service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    1833                                 method: "setTimeZone",
    1834                                 parameters: options,
    1835                                 onSuccess: function(result) {
    1836                                     log("setTimeZone: On Success");
    1837                                     if (result.returnValue === true) {
    1838                                         if (typeof successCallback === 'function') {
    1839                                             delete result.returnValue;
    1840                                             successCallback(result);
    1841                                         }
    1842                                     }
    1843                                 },
    1844                                 onFailure: function(result) {
    1845                                     log("setTimeZone: On Failure");
    1846                                     delete result.returnValue;
    1847                                     if (typeof errorCallback === 'function') {
    1848                                         checkErrorCodeNText(result, "CSTZ", "Configuration.setTimeZone returns failure.");
    1849                                         errorCallback(result);
    1850                                     }
    1851                                 }
    1852                             });
    1853                         }
    1854                     }
    1855                 }
    1856             },
    1857             onFailure : function(result) {
    1858                 log("setTimeZone: On Failure");
    1859                 delete result.returnValue;
    1860                 if (typeof errorCallback === 'function') {
    1861                     checkErrorCodeNText(result, "CSTZ", "Configuration.setTimeZone returns failure.");
    1862                     errorCallback(result);
    1863                 }
    1864             }
    1865         });
    1866
    1867         log("Configuration.setTimeZone Done");
    1868
    1869     };
    1870
    1871     // hidden for debug
    1872     Configuration.prototype.debug = function (successCallback, errorCallback, options) {
    1873
    1874     // options.enabled = true / false;
    1875
    1876     log("debug: " + options.enabled);
    1877
    1878     service.Request("luna://com.webos.service.commercial.signage.storageservice/", {
    1879             method : "debug",
    1880             parameters : {
    1881                     enabled : options.enabled
    1882                 },
    1883             onSuccess : function(result) {
    1884                 log("debug: On Success");
    1885
    1886                 if (typeof successCallback === 'function') {
    1887                     successCallback(result);
    1888                 }
    1889             },
    1890             onFailure : function(result) {
    1891                 log("debug: On Failure");
    1892                 delete result.returnValue;
    1893                 if (typeof errorCallback === 'function') {
    1894                     checkErrorCodeNText(result, "CD", "Configuration.debug returns failure.");
    1895                     errorCallback(result);
    1896                 }
    1897             }
    1898         });
    1899
    1900         log("Configuration.debug Done");
    1901
    1902     };
    1903
    1904
    1905 	/**
    1906      * set USBLock enabled/disabled
    1907      * @class Configuration
    1908      * @param {Function} successCallback success callback function.
    1909      * @param {Function} errorCallback failure callback function.
    1910      * @param {Object} options
    1911      * <div align=left>
    1912      * <table class="hcap_spec" width=400>
    1913      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    1914      *   <tbody>
    1915      *       <tr><th>enabled</th><th>Boolean</th><th>true: usb is disable(lock on) / false: usb is enabled (lock off) </th><th>required</th></tr>
    1916      *   </tbody>
    1917      * </table>
    1918      * </div>
    1919      * @return <p>If the method is successfully executed, call the success callback function without a parameter.</br>
    1920      * If an error occurs, failure callback function is called with failure callback object as a parameter.</p>
    1921      * @example
    1922      * // Javascript code
    1923      *
    1924      * function setUSBLock () {
    1925      *   var options = {
    1926      *      enabled : true
    1927      *   };
    1928      *
    1929      *   function successCb() {
    1930      *      // Do something
    1931      *   }
    1932      *
    1933      *   function failureCb(cbObject) {
    1934      *      var errorCode = cbObject.errorCode;
    1935      *      var errorText = cbObject.errorText;
    1936      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    1937      *   }
    1938      *
    1939      *   var configuration = new Configuration();
    1940      *   configuration.setUSBLock(successCb, failureCb, options);
    1941      * }
    1942      * @since 1.4
    1943      * @see
    1944      * <a href="Configuration%23getUSBLock.html">Configuration.getUSBLock()</a><br>
    1945      */
    1946
    1947     Configuration.prototype.setUSBLock = function (successCallback, errorCallback, options) {
    1948         log("setUSBLock: " + options.enabled);
    1949
    1950         if (options.enabled === null && typeof errorCallback === 'function') {
    1951             var result = {};
    1952             checkErrorCodeNText(result, "CSUL", "Configuration.setUSBLock returns failure. command was not defined.");
    1953             errorCallback(result);
    1954             log("Configuration.setUSBLock invalid ");
    1955             return;
    1956         }
    1957
    1958         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    1959             method : "set",
    1960             parameters : {
    1961                 category : "commercial",
    1962                 settings : {
    1963                     "enableUsb" : (options.enabled === true ) ? "off" : "on"
    1964                 }
    1965             },
    1966             onSuccess : function(result) {
    1967                 log("setUSBLock: On Success");
    1968
    1969                 if (result.returnValue === true) {
    1970                     if(typeof successCallback === 'function') {
    1971                         successCallback();
    1972                     }
    1973                 }
    1974             },
    1975             onFailure : function(result) {
    1976                 log("setUSBLock: On Failure");
    1977                 delete result.returnValue;
    1978                 if (typeof errorCallback === 'function') {
    1979                     checkErrorCodeNText(result, "CSUL", "Configuration.setUSBLock returns failure.");
    1980                     errorCallback(result);
    1981                 }
    1982             }
    1983         });
    1984
    1985         log("Configuration.setUSBLock Done");
    1986     };
    1987 	/**
    1988      * Gets USBLock enabled
    1989      * @class Configuration
    1990      * @param {Function} successCallback success callback function.
    1991      * @param {Function} errorCallback failure callback function.
    1992      * @return {Object}
    1993      * <div align=left>
    1994      * <table class="hcap_spec" width=400>
    1995      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
    1996      *   <tbody>
    1997      *       <tr><th>enabled</th><th>Boolean</th><th>true: usb is disable(lock on) / false: usb is enabled (lock off) </th></tr>
    1998      *   </tbody>
    1999      * </table>
    2000      * </div>
    2001      *
    2002      * @example
    2003      * // Javascript code
    2004      * function getUSBLock () {
    2005      *   function successCb(cbObject) {
    2006      *      console.log("cbObject : " + JSON.stringify(cbObject));
    2007      *      console.log("enabled : " + cbObject.enabled);
    2008      *
    2009      *      // Do something
    2010      *   }
    2011      *
    2012      *   function failureCb(cbObject) {
    2013      *      var errorCode = cbObject.errorCode;
    2014      *      var errorText = cbObject.errorText;
    2015      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    2016      *   }
    2017      *
    2018      *   var configuration = new Configuration();
    2019      *   configuration.getUSBLock(successCb, failureCb);
    2020      * }
    2021      * @since 1.4
    2022      * @see
    2023      * <a href="Configuration%23setUSBLock.html">Configuration.setUSBLock()</a><br>
    2024      */
    2025     Configuration.prototype.getUSBLock = function (successCallback, errorCallback) {
    2026
    2027         log("getUSBLock: ");
    2028
    2029         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    2030             method: "get",
    2031             parameters: {
    2032                 category: "commercial",
    2033                 keys: ["enableUsb"]
    2034             },
    2035             onSuccess: function(result) {
    2036                 log("getUSBLock: On Success");
    2037
    2038                 if (result.returnValue === true) {
    2039                     var cbObj = {};
    2040                     cbObj.enabled = (result.settings.enableUsb === "off") ? true : false;
    2041
    2042                     if (typeof successCallback === 'function') {
    2043                         successCallback(cbObj);
    2044                     }
    2045                 }
    2046             },
    2047             onFailure: function(result) {
    2048                 log("getUSBLock: On Failure");
    2049                 delete result.returnValue;
    2050                 if (typeof errorCallback === 'function') {
    2051                     checkErrorCodeNText(result, "CGUL", "Configuration.getUSBLock returns failure.");
    2052                     errorCallback(result);
    2053                 }
    2054             }
    2055         });
    2056
    2057         log("Configuration.getUSBLock Done");
    2058     };
    2059
    2060 	/**
    2061      * set OSDLock enabled/disabled
    2062      * @class Configuration
    2063      * @param {Function} successCallback success callback function.
    2064      * @param {Function} errorCallback failure callback function.
    2065      * @param {Object} options
    2066      * <div align=left>
    2067      * <table class="hcap_spec" width=400>
    2068      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    2069      *   <tbody>
    2070      *       <tr><th>enabled</th><th>Boolean</th><th>true: osd is disable(lock on) / false: osd is enabled (lock off) </th><th>required</th></tr>
    2071      *   </tbody>
    2072      * </table>
    2073      * </div>
    2074      * @return <p>If the method is successfully executed, call the success callback function without a parameter.</br>
    2075      * If an error occurs, failure callback function is called with failure callback object as a parameter.</p>
    2076      * @example
    2077      * // Javascript code
    2078      *
    2079      * function setOSDLock () {
    2080      *   var options = {
    2081      *      enabled : true
    2082      *   };
    2083      *
    2084      *   function successCb() {
    2085      *      // Do something
    2086      *   }
    2087      *
    2088      *   function failureCb(cbObject) {
    2089      *      var errorCode = cbObject.errorCode;
    2090      *      var errorText = cbObject.errorText;
    2091      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    2092      *   }
    2093      *
    2094      *   var configuration = new Configuration();
    2095      *   configuration.setOSDLock(successCb, failureCb, options);
    2096      * }
    2097      * @since 1.4
    2098      * @see
    2099      * <a href="Configuration%23getOSDLock.html">Configuration.getOSDLock()</a><br>
    2100      */
    2101
    2102     Configuration.prototype.setOSDLock = function (successCallback, errorCallback, options) {
    2103         log("setOSDLock: " + options.enabled);
    2104
    2105         if (options.enabled === null && typeof errorCallback === 'function') {
    2106             var result = {};
    2107             checkErrorCodeNText(result, "CSOL", "Configuration.setOSDLock returns failure. command was not defined.");
    2108             errorCallback(result);
    2109             log("Configuration.setOSDLock invalid ");
    2110             return;
    2111         }
    2112
    2113         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    2114             method : "set",
    2115             parameters : {
    2116                 category : "hotelMode",
    2117                 notifySelf : false,
    2118                 settings : {
    2119                     "enableMrcu" : (options.enabled === true ) ? "off" : "on",
    2120                     "enableOsdVisibility" : (options.enabled === true ) ? "off" : "on"
    2121                 }
    2122             },
    2123             onSuccess : function(result) {
    2124                 log("setOSDLock: On Success");
    2125
    2126                 if (result.returnValue === true) {
    2127                     if(typeof successCallback === 'function') {
    2128                         successCallback();
    2129                     }
    2130                 }
    2131             },
    2132             onFailure : function(result) {
    2133                 log("setOSDLock: On Failure");
    2134                 delete result.returnValue;
    2135                 if (typeof errorCallback === 'function') {
    2136                     checkErrorCodeNText(result, "CSOL", "Configuration.setOSDLock returns failure.");
    2137                     errorCallback(result);
    2138                 }
    2139             }
    2140         });
    2141
    2142         log("Configuration.setOSDLock Done");
    2143     };
    2144 	/**
    2145      * Gets OSDLock enabled
    2146      * @class Configuration
    2147      * @param {Function} successCallback success callback function.
    2148      * @param {Function} errorCallback failure callback function.
    2149      * @return {Object}
    2150      * <div align=left>
    2151      * <table class="hcap_spec" width=400>
    2152      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
    2153      *   <tbody>
    2154      *       <tr><th>enabled</th><th>Boolean</th><th>true: osd is disable(lock on) / false: osd is enabled (lock off) </th></tr>
    2155      *   </tbody>
    2156      * </table>
    2157      * </div>
    2158      *
    2159      * @example
    2160      * // Javascript code
    2161      * function getOSDLock () {
    2162      *   function successCb(cbObject) {
    2163      *      console.log("cbObject : " + JSON.stringify(cbObject));
    2164      *      console.log("enabled : " + cbObject.enabled);
    2165      *
    2166      *      // Do something
    2167      *   }
    2168      *
    2169      *   function failureCb(cbObject) {
    2170      *      var errorCode = cbObject.errorCode;
    2171      *      var errorText = cbObject.errorText;
    2172      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    2173      *   }
    2174      *
    2175      *   var configuration = new Configuration();
    2176      *   configuration.getOSDLock(successCb, failureCb);
    2177      * }
    2178      * @since 1.4
    2179      * @see
    2180      * <a href="Configuration%23setOSDLock.html">Configuration.setOSDLock()</a><br>
    2181      */
    2182     Configuration.prototype.getOSDLock = function (successCallback, errorCallback) {
    2183
    2184         log("getOSDLock: ");
    2185
    2186         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    2187             method: "get",
    2188             parameters: {
    2189                 category: "hotelMode",
    2190                 keys: ["enableMrcu", "enableOsdVisibility"]
    2191             },
    2192             onSuccess: function(result) {
    2193                 log("getOSDLock: On Success");
    2194
    2195                 if (result.returnValue === true) {
    2196                     var cbObj = {};
    2197                     cbObj.enabled = (result.settings.enableMrcu === "on" && result.settings.enableOsdVisibility === "on") ? false : true;
    2198
    2199                     if (typeof successCallback === 'function') {
    2200                         successCallback(cbObj);
    2201                     }
    2202                 }
    2203             },
    2204             onFailure: function(result) {
    2205                 log("getOSDLock: On Failure");
    2206                 delete result.returnValue;
    2207                 if (typeof errorCallback === 'function') {
    2208                     checkErrorCodeNText(result, "CGOL", "Configuration.getOSDLock returns failure.");
    2209                     errorCallback(result);
    2210                 }
    2211             }
    2212         });
    2213
    2214         log("Configuration.getOSDLock Done");
    2215     };
    2216
    2217
    2218 	/**
    2219      * Gets the supported locale item list with an item (specifier, language name, country name).
    2220      * Locale specifier is composed of {language code}-{country code} and it is worked as the identifier when setting language.
    2221      * @class Configuration
    2222      * @param {Function} successCallback success callback function.
    2223      * @param {Function} errorCallback failure callback function.
    2224      * @return {Object}
    2225      * <div align=left>
    2226      * <table class="hcap_spec" width=400>
    2227      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
    2228      *   <tbody>
    2229      *       <tr><th>localeList</th><th>Array</th><th>locale list</th></tr>
    2230      * 		 <tr class="odd"><th>localeList.language</th><th>String</th><th>language name</th></tr>
    2231      *       <tr><th>localeList.languageCode</th><th>String</th><th>language code</th></tr>
    2232      * 		 <tr class="odd"><th>localeList.countries</th><th>Array</th><th>country list</th></tr>
    2233      *       <tr><th>localeList.countries.name</th><th>String</th><th>country name</th></tr>
    2234      * 		 <tr class="odd"><th>localeList.countries.spercifier</th><th>String</th><th>locale specifier ({language code}-{country code} such as "en-GB" and "ko-KR")</th></tr>
    2235      *   </tbody>
    2236      * </table>
    2237      * </div>
    2238      *
    2239      * @example
    2240      * // Javascript code
    2241      * function getLocaleList () {
    2242      *   function successCb(cbObject) {
    2243      *      console.log("cbObject : " + JSON.stringify(cbObject));
    2244      *		var localeList = cbObject.localeList;
    2245      *      console.log("localeList : " + JSON.stringify(localeList));
    2246      *
    2247      *      // Do something
    2248      *   }
    2249      *
    2250      *   function failureCb(cbObject) {
    2251      *      var errorCode = cbObject.errorCode;
    2252      *      var errorText = cbObject.errorText;
    2253      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    2254      *   }
    2255      *
    2256      *   var configuration = new Configuration();
    2257      *   configuration.getLocaleList(successCb, failureCb);
    2258      * }
    2259      * @since 1.4
    2260      * @see
    2261      * <a href="Configuration%23getOSDLock.html">Configuration.setOSDLock()</a><br>
    2262      */
    2263     Configuration.prototype.getLocaleList = function (successCallback, errorCallback) {
    2264
    2265         log("getLocaleList: ");
    2266
    2267         //it will get localelist from system after SCAP v1.5
    2268         var cbObj = {};
    2269         cbObj.localeList = Configuration.LocaleList;
    2270
    2271         if (typeof successCallback === 'function') {
    2272             successCallback(cbObj);
    2273         }
    2274
    2275         log("Configuration.getLocaleList Done");
    2276     };
    2277
    2278
    2279
    2280     /**
    2281      * set OSDLanguage
    2282      * @class Configuration
    2283      * @param {Function} successCallback success callback function.
    2284      * @param {Function} errorCallback failure callback function.
    2285      * @param {Object} options
    2286      * <div align=left>
    2287      * <table class="hcap_spec" width=400>
    2288      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    2289      *   <tbody>
    2290      *       <tr><th>specifier</th><th>String</th><th>locale specifier</th><th>required</th></tr>
    2291      *   </tbody>
    2292      * </table>
    2293      * </div>
    2294      * @return <p>If the method is successfully executed, call the success callback function without a parameter.</br>
    2295      * If an error occurs, failure callback function is called with failure callback object as a parameter.</p>
    2296      * @example
    2297      * // Javascript code
    2298      * function setOSDLanguage () {
    2299      *   var options = {
    2300      *      specifier : "ko-KR"
    2301      *   };
    2302      *
    2303      *   function successCb() {
    2304      *      // Do something
    2305      *   }
    2306      *
    2307      *   function failureCb(cbObject) {
    2308      *      var errorCode = cbObject.errorCode;
    2309      *      var errorText = cbObject.errorText;
    2310      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    2311      *   }
    2312      *
    2313      *   var configuration = new Configuration();
    2314      *   configuration.setOSDLanguage(successCb, failureCb, options);
    2315      * }
    2316      * @since 1.4
    2317      * @see
    2318      * <a href="Configuration%23getOSDLanguage.html">Configuration.getOSDLanguage()</a><br>
    2319      */
    2320     Configuration.prototype.setOSDLanguage = function (successCallback, errorCallback, options) {
    2321         log("setOSDLanguage: " + options.specifier);
    2322
    2323         if ((options.specifier === null || typeof options.specifier !== 'string') && typeof errorCallback === 'function') {
    2324             var result = {};
    2325             checkErrorCodeNText(result, "CSOL", "Configuration.setOSDLanguage returns failure. command was not defined.");
    2326             errorCallback(result);
    2327             log("Configuration.setOSDLanguage invalid ");
    2328             return;
    2329         }
    2330
    2331         if (isValidSpecifier(options.specifier) === true) {
    2332             log("Specifier is valid");
    2333
    2334             service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    2335                 method: "get",
    2336                 parameters: {
    2337                     keys: ["localeInfo"]
    2338                 },
    2339                 onSuccess: function(result) {
    2340                     if (result.returnValue === true) {
    2341                         var localeInfo = {};
    2342                         localeInfo             = result.settings.localeInfo;
    2343                         localeInfo.locales.UI  = options.specifier;
    2344                         localeInfo.locales.FMT = options.specifier;
    2345                         localeInfo.locales.TV  = options.specifier;
    2346
    2347                         log("localeInfo : " + JSON.stringify(localeInfo));
    2348
    2349                         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    2350                             method: "set",
    2351                             parameters: {
    2352                                 settings: {
    2353                                     localeInfo: localeInfo
    2354                                 }
    2355                             },
    2356                             onSuccess: function(result) {
    2357                                 log("setOSDLanguage: On Success");
    2358
    2359                                 if (result.returnValue === true) {
    2360                                     if (typeof successCallback === 'function') {
    2361                                         successCallback();
    2362                                     }
    2363                                 }
    2364                             },
    2365                             onFailure: function(result) {
    2366                                 log("setOSDLanguage: On Failure");
    2367                                 delete result.returnValue;
    2368                                 if (typeof errorCallback === 'function') {
    2369                                     checkErrorCodeNText(result, "CSOL", "Configuration.setOSDLanguage returns failure.");
    2370                                     errorCallback(result);
    2371                                 }
    2372                             }
    2373                         });
    2374                     }
    2375                 },
    2376                 onFailure: function(result) {
    2377                     delete result.returnValue;
    2378                     if (typeof errorCallback === 'function') {
    2379                         checkErrorCodeNText(result, "CSOL", "Configuration.setOSDLanguage returns failure.");
    2380                         errorCallback(result);
    2381                     }
    2382                 }
    2383             });
    2384         }else {
    2385             var result = {};
    2386             checkErrorCodeNText(result, "CSOL", "Configuration.setOSDLanguage returns failure. specifier is not valid.");
    2387             errorCallback(result);
    2388             log("Configuration.setOSDLanguage invalid ");
    2389             return;
    2390         }
    2391
    2392         log("Configuration.setOSDLanguage Done");
    2393     };
    2394
    2395
    2396 	/**
    2397      * Gets OSDLanguage
    2398      * @class Configuration
    2399      * @param {Function} successCallback success callback function.
    2400      * @param {Function} errorCallback failure callback function.
    2401      * @return {Object}
    2402      * <div align=left>
    2403      * <table class="hcap_spec" width=400>
    2404      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
    2405      *   <tbody>
    2406      *       <tr><th>specifier</th><th>String</th><th>locale specifier</th></tr>
    2407      *   </tbody>
    2408      * </table>
    2409      * </div>
    2410      *
    2411      * @example
    2412      * // Javascript code
    2413      * function getOSDLanguage () {
    2414      *   function successCb(cbObject) {
    2415      *      console.log("cbObject : " + JSON.stringify(cbObject));
    2416      *
    2417      *      console.log("specifier : " + cbObject.specifier);
    2418      *
    2419      *      // Do something
    2420      *   }
    2421      *
    2422      *   function failureCb(cbObject) {
    2423      *      var errorCode = cbObject.errorCode;
    2424      *      var errorText = cbObject.errorText;
    2425      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    2426      *   }
    2427      *
    2428      *   var configuration = new Configuration();
    2429      *   configuration.getOSDLanguage(successCb, failureCb);
    2430      * }
    2431      * @since 1.4
    2432      * @see
    2433      * <a href="Configuration%23setOSDLanguage.html">Configuration.setOSDLanguage()</a><br>
    2434      */
    2435
    2436     Configuration.prototype.getOSDLanguage = function (successCallback, errorCallback) {
    2437
    2438         log("getOSDLanguage: ");
    2439
    2440         service.Request("luna://com.webos.service.commercial.signage.storageservice/settings/", {
    2441             method: "get",
    2442             parameters: {
    2443                 keys: ["localeInfo"]
    2444             },
    2445             onSuccess: function(result) {
    2446                 log("getOSDLanguage: On Success");
    2447
    2448                 if (result.returnValue === true) {
    2449                     var cbObj = {};
    2450                     log("localeInfo : " + JSON.stringify(result.settings.localeInfo));
    2451                     cbObj.specifier = result.settings.localeInfo.locales.UI;
    2452
    2453                     if (typeof successCallback === 'function') {
    2454                         successCallback(cbObj);
    2455                     }
    2456                 }
    2457             },
    2458             onFailure: function(result) {
    2459                 log("getOSDLanguage: On Failure");
    2460                 delete result.returnValue;
    2461                 if (typeof errorCallback === 'function') {
    2462                     checkErrorCodeNText(result, "CGOL", "Configuration.getOSDLanguage returns failure.");
    2463                     errorCallback(result);
    2464                 }
    2465             }
    2466         });
    2467
    2468         log("Configuration.getOSDLanguage Done");
    2469     };
    2470
    2471
    2472     /**
    2473      * set VirtualKeyboardLanguage
    2474      * @class Configuration
    2475      * @param {Function} successCallback success callback function.
    2476      * @param {Function} errorCallback failure callback function.
    2477      * @param {Object} options
    2478      * <div align=left>
    2479      * <table class="hcap_spec" width=400>
    2480      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
    2481      *   <tbody>
    2482      *       <tr><th>languageCodeList</th><th>Array</th><th>locale languageCodeList</th><th>required</th></tr>
    2483      *   </tbody>
    2484      * </table>
    2485      * </div>
    2486      * @return <p>If the method is successfully executed, call the success callback function without a parameter.</br>
    2487      * If an error occurs, failure callback function is called with failure callback object as a parameter.</p>
    2488      * @example
    2489      * // Javascript code
    2490      *
    2491      * function setVirtualKeyboardLanguage () {
    2492      *   var options = {
    2493      *      languageCodeList : ["fr", "es", "ko"]
    2494      *   };
    2495      *
    2496      *   function successCb() {
    2497      *      // Do something
    2498      *   }
    2499      *
    2500      *   function failureCb(cbObject) {
    2501      *      var errorCode = cbObject.errorCode;
    2502      *      var errorText = cbObject.errorText;
    2503      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    2504      *   }
    2505      *
    2506      *   var configuration = new Configuration();
    2507      *   configuration.setVirtualKeyboardLanguage(successCb, failureCb, options);
    2508      * }
    2509      * @since 1.4
    2510      * @see
    2511      * <a href="Configuration%23getVirtualKeyboardLanguage.html">Configuration.getVirtualKeyboardLanguage()</a><br>
    2512      */
    2513
    2514     Configuration.prototype.setVirtualKeyboardLanguage = function (successCallback, errorCallback, options) {
    2515         log("setVirtualKeyboardLanguage: " + options.languageCodeList);
    2516
    2517         if (options.languageCodeList === null && typeof errorCallback === 'function') {
    2518             var result = {};
    2519             checkErrorCodeNText(result, "CSKL", "Configuration.setVirtualKeyboardLanguage returns failure. command was not defined.");
    2520             errorCallback(result);
    2521             log("Configuration.setVirtualKeyboardLanguage invalid ");
    2522             return;
    2523         }
    2524
    2525         for(var i=0; i<options.languageCodeList.length; i++){
    2526             if(isValidLanguageCode(options.languageCodeList[i]) === false) {
    2527                 var result = {};
    2528                 checkErrorCodeNText(result, "CSKL", "Configuration.setVirtualKeyboardLanguage returns failure. language code is not valid.");
    2529                 errorCallback(result);
    2530                 log("Configuration.setVirtualKeyboardLanguage invalid ");
    2531                 return;
    2532             }
    2533         }
    2534
    2535         log("languageCodeList is valid");
    2536
    2537         service.Request("luna://com.webos.service.commercial.signage.storageservice/configuration/", {
    2538             method: "setVirtualKeyboardLanguage",
    2539             parameters: {
    2540                 languageCodeList : options.languageCodeList
    2541             },
    2542             onSuccess: function(result) {
    2543                 log("setVirtualKeyboardLanguage: On Success");
    2544
    2545                 if (result.returnValue === true) {
    2546                     if (typeof successCallback === 'function') {
    2547                         successCallback();
    2548                     }
    2549                 }
    2550             },
    2551             onFailure: function(result) {
    2552                 log("setVirtualKeyboardLanguage: On Failure");
    2553                 delete result.returnValue;
    2554                 if (typeof errorCallback === 'function') {
    2555                     checkErrorCodeNText(result, "CSKL", "Configuration.setVirtualKeyboardLanguage returns failure.");
    2556                     errorCallback(result);
    2557                 }
    2558             }
    2559         });
    2560
    2561         log("Configuration.setVirtualKeyboardLanguage Done");
    2562     };
    2563
    2564 	/**
    2565      * Gets VirtualKeyboardLanguage list
    2566      * @class Configuration
    2567      * @param {Function} successCallback success callback function.
    2568      * @param {Function} errorCallback failure callback function.
    2569      * @return {Object}
    2570      * <div align=left>
    2571      * <table class="hcap_spec" width=400>
    2572      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
    2573      *   <tbody>
    2574      *       <tr><th>languageCodeList</th><th>Array</th><th>language code list ex)["fr","es","ko"]</th></tr>
    2575      *   </tbody>
    2576      * </table>
    2577      * </div>
    2578      *
    2579      * @example
    2580      * // Javascript code
    2581      * function getVirtualKeyboardLanguage () {
    2582      *   function successCb(cbObject) {
    2583      *      console.log("cbObject : " + JSON.stringify(cbObject));
    2584      *
    2585      *      for(var i = cbObject.languageCodeList.length-1; i>=0; i--) {
    2586 	 * 			console.log("languageCodeList [" + i + "] : " + cbObject.languageCodeList[i]);
    2587 	 * 		}
    2588      *      // Do something
    2589      *         ...
    2590      *   }
    2591      *
    2592      *   function failureCb(cbObject) {
    2593      *      var errorCode = cbObject.errorCode;
    2594      *      var errorText = cbObject.errorText;
    2595      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
    2596      *   }
    2597      *
    2598      *   var configuration = new Configuration();
    2599      *   configuration.getVirtualKeyboardLanguage(successCb, failureCb);
    2600      * }
    2601      * @since 1.4
    2602      * @see
    2603      * <a href="Configuration%23setVirtualKeyboardLanguage.html">Configuration.setVirtualKeyboardLanguage()</a><br>
    2604      */
    2605
    2606     Configuration.prototype.getVirtualKeyboardLanguage = function (successCallback, errorCallback) {
    2607
    2608         log("getVirtualKeyboardLanguage: ");
    2609
    2610         service.Request("luna://com.webos.service.commercial.signage.storageservice/configuration/", {
    2611             method: "getVirtualKeyboardLanguage",
    2612             parameters: {},
    2613             onSuccess: function(result) {
    2614                 log("getVirtualKeyboardLanguage: On Success");
    2615
    2616                 if (result.returnValue === true) {
    2617                     var cbObj = {};
    2618                     log("keyboards : " + JSON.stringify(result.languageCodeList));
    2619                     cbObj.languageCodeList = result.languageCodeList;
    2620
    2621                     if (typeof successCallback === 'function') {
    2622                         successCallback(cbObj);
    2623                     }
    2624                 }
    2625             },
    2626             onFailure: function(result) {
    2627                 log("getVirtualKeyboardLanguage: On Failure");
    2628                 delete result.returnValue;
    2629                 if (typeof errorCallback === 'function') {
    2630                     checkErrorCodeNText(result, "CGKL", "Configuration.getVirtualKeyboardLanguage returns failure.");
    2631                     errorCallback(result);
    2632                 }
    2633             }
    2634         });
    2635
    2636         log("Configuration.getVirtualKeyboardLanguage Done");
    2637     };
    2638
    2639     module.exports = Configuration;
    2640 });
    2641
    2642 Configuration = cordova.require('cordova/plugin/configuration'); // jshint ignore:line
    2643
    2644