CB-10636 Add JSHint for plugins
diff --git a/.gitignore b/.gitignore
index 52b558e..6964ea0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,7 +12,7 @@
 *.swp
 *.user
 
-
+node_modules
 
 
 
diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 0000000..df32482
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,17 @@
+{
+    "browser": true
+  , "devel": true
+  , "bitwise": true
+  , "undef": true
+  , "trailing": true
+  , "quotmark": false
+  , "indent": 4
+  , "unused": "vars"
+  , "latedef": "nofunc"
+  , "globals": {
+        "module": false,
+        "exports": false,
+        "require": false,
+        "cordova": true
+    }
+}
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..b9af4c5
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+sudo: false
+node_js:
+  - "4.2"
diff --git a/README.md b/README.md
index fccf9b6..e4ac8c0 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,8 @@
 #         under the License.
 -->
 
+[![Build Status](https://travis-ci.org/apache/cordova-plugin-battery-status.svg?branch=master)](https://travis-ci.org/apache/cordova-plugin-battery-status)
+
 # cordova-plugin-battery-status
 
 
diff --git a/package.json b/package.json
index 05823bd..165ee95 100644
--- a/package.json
+++ b/package.json
@@ -34,6 +34,13 @@
     "cordova-tizen",
     "cordova-firefoxos"
   ],
+  "scripts": {
+    "test": "npm run jshint",
+    "jshint": "node node_modules/jshint/bin/jshint www && node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint tests"
+  },
   "author": "Apache Software Foundation",
-  "license": "Apache-2.0"
+  "license": "Apache-2.0",
+  "devDependencies": {
+    "jshint": "^2.6.0"
+  }
 }
diff --git a/src/blackberry10/index.js b/src/blackberry10/index.js
index f757ee7..a105f60 100644
--- a/src/blackberry10/index.js
+++ b/src/blackberry10/index.js
@@ -19,8 +19,10 @@
  *
 */
 
-    var _clientListeners = {},
-        _webkitBattery = navigator.webkitBattery || navigator.battery;
+/* global PluginResult */
+
+var _clientListeners = {},
+    _webkitBattery = navigator.webkitBattery || navigator.battery;
 
 module.exports = {
     start: function (success, fail, args, env) {
@@ -35,8 +37,8 @@
 
                     //put data from webkitBattery into a format cordova expects
                     //webkitBattery seems to return level as a decimal pre 10.2
-                    resultInfo.level = info.level <= 1 ? info.level * 100 : info.level,
-                    resultInfo.isPlugged = info.charging
+                    resultInfo.level = info.level <= 1 ? info.level * 100 : info.level;
+                    resultInfo.isPlugged = info.charging;
                 }
 
                 result.callbackOk(resultInfo, true);
diff --git a/src/browser/BatteryProxy.js b/src/browser/BatteryProxy.js
index d9bc059..d36c567 100644
--- a/src/browser/BatteryProxy.js
+++ b/src/browser/BatteryProxy.js
@@ -42,7 +42,7 @@
                     w3cBattery.onlevelchange = success;
                     w3cBattery.onchargingchange = success;
                 }
-            }
+            };
 
             if (typeof navigator.getBattery === 'function') {
                 navigator.getBattery().then(function(battery) { 
@@ -59,7 +59,7 @@
             }
         } catch(e) {
             fail(e);
-        };
+        }
     },
 
     stop: function() {
@@ -73,7 +73,7 @@
             }
         } catch(e) {
             console.warn('Error occured while trying to stop battery: ' + JSON.stringify(e));
-        };
+        }
     }
 };
 
diff --git a/src/tizen/BatteryStatusProxy.js b/src/tizen/BatteryStatusProxy.js
index 44dad00..5149f54 100644
--- a/src/tizen/BatteryStatusProxy.js
+++ b/src/tizen/BatteryStatusProxy.js
@@ -19,7 +19,7 @@
  *
 */
 
-var cordova = require('cordova');
+/* global tizen */
 
 var batteryListenerId = null;
 
diff --git a/src/windows/BatteryProxy.js b/src/windows/BatteryProxy.js
index 4c7e101..ed91bcb 100644
--- a/src/windows/BatteryProxy.js
+++ b/src/windows/BatteryProxy.js
@@ -19,6 +19,8 @@
  *
  */
 
+/* global WinJS, BatteryStatus */
+
 var stopped;
 
 function handleResponse(successCb, errorCb, jsonResponse) {
@@ -34,6 +36,24 @@
 
 var Battery = {
     start: function (win, fail, args, env) {
+        function getBatteryStatus(success, error) {
+            handleResponse(success, error, BatteryStatus.BatteryStatus.start());
+        }
+
+        function getBatteryStatusLevelChangeEvent(success, error) {
+            return BatteryStatus.BatteryStatus.getBatteryStatusChangeEvent().done(function (result) {
+                if (stopped) {
+                    return;
+                }
+
+                handleResponse(success, error, result);
+
+                setTimeout(function() { getBatteryStatusLevelChangeEvent(success, error); }, 0);
+            }, function(err) {
+                fail(err);
+            });
+        }
+
         // Battery API supported on Phone devices only so in case of
         // desktop/tablet the only one choice is to fail with appropriate message.
         if (!WinJS.Utilities.isPhone) {
@@ -43,30 +63,11 @@
 
         stopped = false;
         try {
-            function getBatteryStatus(success, error) {
-                handleResponse(success, error, BatteryStatus.BatteryStatus.start());
-            }
-
-            function getBatteryStatusLevelChangeEvent(success, error) {
-                return BatteryStatus.BatteryStatus.getBatteryStatusChangeEvent().done(function (result) {
-                    if (stopped) {
-                        return;
-                    }
-
-                    handleResponse(success, error, result);
-
-                    setTimeout(function() { getBatteryStatusLevelChangeEvent(success, error); }, 0);
-                }, function(err) {
-                    fail(err);
-                });
-            }
-
             getBatteryStatus(win, fail);
-
             getBatteryStatusLevelChangeEvent(win, fail);
         } catch(e) {
             fail(e);
-        }        
+        }
     },
 
     stop: function () {
diff --git a/tests/tests.js b/tests/tests.js
index fa06ead..ad21d3b 100644
--- a/tests/tests.js
+++ b/tests/tests.js
@@ -19,6 +19,9 @@
  *
  */
 
+/* jshint jasmine: true */
+/* global WinJS */
+
 exports.defineAutoTests = function () {
     var isWindowsStore = (cordova.platformId == "windows8") || (cordova.platformId == "windows" && !WinJS.Utilities.isPhone),
         onEvent;
@@ -44,7 +47,7 @@
                         window.removeEventListener("batterystatus", onEvent, false);
                     }
                     catch (e) {
-                        console.err('Error removing batterystatus event listener: ' + e)
+                        console.err('Error removing batterystatus event listener: ' + e);
                     }
                 }
             });
@@ -80,7 +83,7 @@
                         window.removeEventListener("batterylow", onEvent, false);
                     }
                     catch (e) {
-                        console.err('Error removing batterylow event listener: ' + e)
+                        console.err('Error removing batterylow event listener: ' + e);
                     }
                 }
             });
@@ -199,7 +202,7 @@
                         window.removeEventListener("batterycritical", onEvent, false);
                     }
                     catch (e) {
-                        console.err('Error removing batterycritical event listener: ' + e)
+                        console.err('Error removing batterycritical event listener: ' + e);
                     }
                 }
             });
diff --git a/www/battery.js b/www/battery.js
index 1c6c6ab..242503d 100644
--- a/www/battery.js
+++ b/www/battery.js
@@ -26,12 +26,6 @@
 var cordova = require('cordova'),
     exec = require('cordova/exec');
 
-function handlers() {
-  return battery.channels.batterystatus.numHandlers +
-         battery.channels.batterylow.numHandlers +
-         battery.channels.batterycritical.numHandlers;
-}
-
 var STATUS_CRITICAL = 5;
 var STATUS_LOW = 20;
 
@@ -48,6 +42,13 @@
         this.channels[key].onHasSubscribersChange = Battery.onHasSubscribersChange;
     }
 };
+
+function handlers() {
+    return battery.channels.batterystatus.numHandlers +
+        battery.channels.batterylow.numHandlers +
+        battery.channels.batterycritical.numHandlers;
+}
+
 /**
  * Event handlers for when callbacks get registered for the battery.
  * Keep track of how many handlers we have so we can start and stop the native battery listener
@@ -72,7 +73,7 @@
     if (info) {
         if (battery._level !== info.level || battery._isPlugged !== info.isPlugged) {
             
-            if(info.level == null && battery._level != null) {
+            if(info.level === null && battery._level !== null) {
                 return; // special case where callback is called because we stopped listening to the native side.
             }
             
@@ -104,7 +105,6 @@
     console.log("Error initializing Battery: " + e);
 };
 
-var battery = new Battery();
+var battery = new Battery(); // jshint ignore:line
 
 module.exports = battery;
-