/**
 * @private
 */
Ext.define('Ext.device.compass.Cordova', {
    alternateClassName: 'Ext.device.compass.PhoneGap',
    extend: 'Ext.device.compass.Abstract',
    activeWatchID: null,
    getHeadingAvailable:function(config) {
        var callback = function(result) {
            if(result.hasOwnProperty("code")) {
                config.callback.call(config.scope || this, false);
            } else{
                config.callback.call(config.scope || this, true);
            }
        };

        this.getCurrentHeading({success: callback, failure: callback});
    },
    getCurrentHeading: function(config) {
        config = this.callParent(arguments);
        navigator.compass.getCurrentHeading(config.success, config.failure);
        return config;
    },

    watchHeading: function(config) {
        config = this.callParent(arguments);
        if (this.activeWatchID) {
            this.clearWatch();
        }
        this.activeWatchID = navigator.compass.watchHeading(config.callback, config.failure, config);
        return config;
    },

    clearWatch: function() {
        if (this.activeWatchID) {
            navigator.compass.clearWatch(this.activeWatchID);
            this.activeWatchID = null;
        }
    }
});