/**
 * Magento Enterprise Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Enterprise Edition License
 * that is bundled with this package in the file LICENSE_EE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.magentocommerce.com/license/enterprise-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    design
 * @package     enterprise_connect
 * @copyright   Copyright (c) 2011 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://www.magentocommerce.com/license/enterprise-edition
 */

var getExtensionVersionButton = Class.create({
    idSuffix: null,
    defaultConnectVersion: null,
    hasPackageUploadedToChannel10: null,
    hasPackageUploadedToChannel20: null,
    extensionKey10: null,
    extensionKey20: null,
    btnTitleInstallNowMsg: null,
    acceptAgreementMsg: null,
    button: null,
    buttonLabel: null,
    buttonFree: null,

    /**
     * Initialize button
     */
    initialize: function(config)
    {
        //Initialize config values
        this.idSuffix = config.idSuffix;
        this.defaultConnectVersion = config.defaultConnectVersion;
        this.hasPackageUploadedToChannel10 = config.hasPackageUploadedToChannel10;
        this.hasPackageUploadedToChannel20 = config.hasPackageUploadedToChannel20;
        this.extensionKey10 = config.extensionKey10;
        this.extensionKey20 = config.extensionKey20;
        this.btnTitleInstallNowMsg = config.btnTitleInstallNowMsg;
        this.acceptAgreementMsg = config.acceptAgreementMsg;

        //Initialize DOM elements
        this.buttonContainer = $('button-purchase' + this.idSuffix);
        this.button = $('button-purchase-input' + this.idSuffix);
        this.buttonLabel = $('button-purchase-label' + this.idSuffix);
        this.buttonFree = $('get-extension-button-free' + this.idSuffix);
        this.licenseAgreementBox = $('license-agreement-box' + this.idSuffix);
        this.extensionKeyBox = $('extension-key-box' + this.idSuffix);
        this.extensionKeyInput = $('extension-key-input' + this.idSuffix);

        this.initEvents();
    },

    /**
     * Initialize events
     */
    initEvents: function()
    {
        Event.stopObserving(this.buttonFree, 'click');
        Event.observe(this.buttonFree, 'click', this.onButtonFreeClick.bind(this));
        Event.stopObserving($('select-extension-key' + this.idSuffix), 'click');
        Event.observe($('select-extension-key' + this.idSuffix), 'click', this.onSelectExtensionKey.bind(this));

        this.renderButton();
        Event.stopObserving(this.button, 'click');
        Event.observe(this.button, 'click', this.actionButton.bind(this));
    },

    onSelectExtensionKey: function()
    {
        this.extensionKeyInput.focus();
        this.extensionKeyInput.select();
    },

    /**
     * Render button title and label
     */
    renderButton: function()
    {
        this.licenseAgreementBox.hide();
        this.extensionKeyBox.hide();
        this.buttonContainer.setStyle({display: 'block'});

        this.button.writeAttribute('title', this.btnTitleInstallNowMsg);
        this.buttonLabel.innerHTML = this.btnTitleInstallNowMsg;

        // if there is free button and no package to download show error message otherwise render button
        if ((!this.hasPackageUploadedToChannel10) && (!this.hasPackageUploadedToChannel20)) {
            $('get-extension-button' + this.idSuffix).setStyle({display: 'none'});
        } else {
            $('get-extension-button' + this.idSuffix).setStyle({display: 'block'});
        }
    },

    /**
     * Button action
     */
    actionButton: function()
    {
        if (LOGGED_IN) {
            this.buttonContainer.hide();
            this.licenseAgreementBox.setStyle({display: 'block'});
        } else {
            this.manageLoginBox('login-required-box-free' + this.idSuffix);
        }
    },

    /**
     * Show and hide overlaid box
     *
     * @param String boxId
     */
    manageLoginBox: function(boxId)
    {
        var loginBox = $(boxId);
        if (null !== loginBox) {
            loginBox.setStyle({display: 'block'});
            var closeButton = loginBox.select('.close-ext-popup')[0];
            if ('undefined' !== typeof closeButton) {
                Event.observe(closeButton, 'click', function(event) {
                    loginBox.hide();
                    Event.stop(event);
                });
            }
        }
    },

    /**
     * Get Extension Key button actions
     */
    onButtonFreeClick: function()
    {
        if (!$('licence-agreement-checkbox' + this.idSuffix).up().hasClassName('checked')) {
            alert(this.acceptAgreementMsg);
        } else {
            this.licenseAgreementBox.hide();

            var extensionKeyInput = this.extensionKeyInput;
            if (this.hasPackageUploadedToChannel10 && this.hasPackageUploadedToChannel20) {
                var connectVersionSelect = $('connect-version-id' + this.idSuffix);
                var magentoConnectVersion = connectVersionSelect.options[connectVersionSelect.selectedIndex].innerHTML;

                if (connectVersionSelect.getValue() == this.defaultConnectVersion) {
                    extensionKeyInput.value = this.extensionKey10;
                } else {
                    extensionKeyInput.value = this.extensionKey20;
                }

                $('magento-connect-version' + this.idSuffix).innerHTML = magentoConnectVersion;

                Event.observe($('magento-connect-version-switch' + this.idSuffix), 'click', function(event){
                    Event.stop(event);
                    this.extensionKeyBox.hide();
                    this.licenseAgreementBox.setStyle({display: 'block'});
                }.bind(this));
            } else if (this.hasPackageUploadedToChannel10) {
                extensionKeyInput.value = this.extensionKey10;
            } else if (this.hasPackageUploadedToChannel20) {
                extensionKeyInput.value = this.extensionKey20;
            } else {
                alert('Package was not uploaded');
                //throw new Error('Package was not uploaded');
            }

            this.extensionKeyBox.setStyle({display: 'block'});
        }
    }
});

