/*
|----------------------------------------------------------------------------|
|                           DigitalRightsPlayer                              |
|----------------------------------------------------------------------------|
*/
var DigitalRightsPlayer = Class.create(Player, {
    initialize: function($super, mediaURL, licenseURL, drmURL, deliveryType) {
        $super(mediaURL, deliveryType);
        this.licenseURL = licenseURL;
        this.drmURL = drmURL;
        this.netobj = $('netobj');
    },

    onPlay: function() {
        this.getLicenseData();
    },

    getLicenseData: function() {
        var oThis = this;
        log('<strong>DRM REQUEST:</strong> ' + this.licenseURL);
        var params = this.selectedIds.serialize('selection');
        log('DRM Parameters: ' + params);
        this.setStateOverlay('requesting_license');
        var ajax = new Ajax.Request(this.licenseURL, {
            method: 'post',
            parameters: params,
            onSuccess: function(transport) {
                log('<strong>DRM RESPONSE:</strong> ' + transport.responseText);
                try {
                    var json = transport.responseText.evalJSON();
                    if (json.state == 'ok') {
                        oThis.getLicenseFromDRM(json.list);
                    } else if (json.state == 'notCredit') {
                        oThis.setErrorOverlay('not_credit');
                        log('DRM User has not enough credit');
                    } else {
                        oThis.setErrorOverlay();
                        log('DRM Cannot register license request');
                    }
                } catch (exception) {
                    oThis.setErrorOverlay();
                    log('DRM Error parsing response from AJAX request: ' + exception.message);
                }
            },
            onFailure: function(transport) {
                oThis.setErrorOverlay(transport.getStatus());
                log('<strong>DRM FAILURE</strong> statusCode: ' + transport.getStatus() + ', ' + transport.getStatusText());
            },
            onException: function(transport, exception) {
                oThis.setErrorOverlay();
                log('<strong>DRM EXCEPTION:</strong> ' + exception.message);
            }
        });
    },

    getLicenseFromDRM: function(records) {
        var oThis = this;
        log('<strong>DRM REQUEST:</strong> ' + this.drmURL);
        var params = records.serialize('logId') + '&clientInfo=' +  netobj.GetSystemInfo();
        log('DRM Parameters: ' + params);
        var ajax = new Ajax.Request(this.drmURL, {
            method: 'post',
            parameters: params,
            onSuccess: function(transport) {
                log('<strong>DRM RESPONSE:</strong> ' + transport.responseText);
                try {
                    var json = transport.responseText.evalJSON();
                    if (json.state == 'ok') {
                        oThis.updateUserState(json.license);
                    } else {
                        oThis.setErrorOverlay();
                        log('DRM Cannot obtain license from DRM service, reason: ' + json.reason);
                    }
                } catch (exception) {
                    oThis.setErrorOverlay();
                    log('DRM Error parsing response from AJAX request: ' + exception.message);
                }
            },
            onFailure: function(transport) {
                oThis.setErrorOverlay(transport.getStatus());
                log('<strong>DRM FAILURE:</strong> statusCode: ' + transport.getStatus() + ', ' + transport.getStatusText());
            },
            onException: function(transport, exception) {
                oThis.setErrorOverlay();
                log('<strong>DRM EXCEPTION:</strong> ' + exception.message);
            }
        });
    },

    updateUserState: function(license) {
        var oThis = this;
        log('<strong>DRM REQUEST:</strong> ' + this.licenseURL);
        var params = 'method=updateUserState';
        log('DRM Parameters: ' + params);
        var ajax = new Ajax.Request(this.licenseURL, {
            method: 'post',
            parameters: params,
            onSuccess : function(transport) {
                log('<strong>DRM RESPONSE:</strong> ' + transport.responseText);
                try {
                    var json = transport.responseText.evalJSON();
                    if (json.state == 'ok') {
                        oThis.updateUserStateElements(json);
                        netobj.StoreLicense(license);
                        oThis.doPlay();
                    } else {
                        oThis.setErrorOverlay();
                        log('DRM Cannot update user time, reason: ' + json.reason);
                    }
                } catch (exception) {
                    oThis.setErrorOverlay();
                    log('DRM Error parsing response from AJAX request: ' + exception.message);
                }
            },
            onFailure : function(transport) {
                oThis.setErrorOverlay(transport.getStatus());
                log('<strong>DRM FAILURE:</strong> statusCode: ' + transport.getStatus() + ', ' + transport.getStatusText());
            },
            onException : function(transport, exception) {
                oThis.setErrorOverlay();
                log('<strong>DRM EXCEPTION:</strong> ' + exception.message);
            }
        });
    }
});
