/**
 * @author schiesser
 */
Ext.onReady(function(){
    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
    Ext.QuickTips.init();
    // turn on validation errors beside the field globally
    Ext.form.Field.prototype.msgTarget = 'side';
    Ext.form.VTypes.emailText = "Bei Ihre Eingabe handelt es sich keine E-Mail-Adresse im Format 'benutzer@domain.de'";
});

// register default view of widget
Ext.ns('efiport');

efiport.Book = function(config){
    Ext.apply(this, config);
    
    // create instances
    this.model = efiport.book.model(this);
    this.controller = {};
    this.controller.address = efiport.book.controller.address(this);
    this.controller.payment = efiport.book.controller.payment(this);
    this.controller.commit = efiport.book.controller.commit(this);
    
    var that = this;
    Extreme.util.ViewHelper.setViewFactory(this.element, function(viewClass){
        return viewClass(that);
    });
    Extreme.util.ViewHelper.setViewClasses(this.element, [efiport.book.view.address, efiport.book.view.payment, efiport.book.view.commit]);
    
    efiport.Book.superclass.constructor.call(this);
    this.addEvents("alreadyBooked");
    
    // just finalize payment if we are coming back from a CC payment
    if (!this.controller.commit.finalizeCC(this.itemToBook)) {
        // check whether already booked and render
        this.checkBooked();
    }
};

Ext.extend(efiport.Book, Ext.util.Observable, {

    render: function(){
        if (!this.doNotRender) {
            Extreme.util.ViewHelper.setView(this.element, efiport.book.view.address);
        }
    },
    addressText: 'Bitte vervollständigen Sie ihre Adresse.',
    paymentText: 'Bitte wählen Sie eine Zahlungsart.',
    agbLink: 'http://www.efiport.de',
    boughtLink: 'http://www.efiport.de',
    waitText: 'Bitte warten... wir überprüfen Ihre Daten.',
    directDebitNotCheckedText: 'Bitte erteilen Sie die Einzugsermächtigung um fortzufahren',
    directDebitText: 'Ja, ich erteile Ihnen hiermit die Einzugsermächtigung von meinem Konto',
    creditCardPayment: true,
    commitView: efiport.book.view.commit,
	checkBooking: true,
    
    checkBooked: function(){
        var that = this;
        if (!that.checkBooking) {
            that.render();
        }
        else {
            Ext.Ajax.simpleRequest({
                url: '/axis2/services/EventService/isEventBooked',
                returnType: 'boolean',
                success: function(itemBooked){
                    if (itemBooked) {
                        that.fireEvent('alreadyBooked');
                    }
                    else {
                        that.render();
                    }
                },
                params: {
                    goid: that.itemToBook
                }
            });
        }
    }
});

