$( function(  ) {
    window.App = Backbone.View.extend( {
        abonent: 0,
        initialize: function(  ) {
            this.render(  );
        },
        render: function( name, variables ) {
            // default template variables
            if ( !variables ) variables = {  };
            if ( !variables.errors ) variables.errors = '';

            // default template
            if ( !name ) {
                if ( $.cookie( 'r' ) ) name = "result";
                else name = "promo";
            }

            var template = _.template( $( "#tpl_" + name ).html(  ), variables );
            this.el.find( '#appContainer' ).html( template );
        },
        events: {
            "click .action" : "process"
        },
        process: function( event ) {
            var params = {  };
            if ( event.manual ) params.q = event.action; 
            else params.q = $( event.currentTarget ).data('action');
            switch( params.q ) {
                case "promo":
                    this.render(  );
                    break;
                case "startSubscriptionProcess":
                    this.render( 'phone' );
                    break;
                case "processPhone":
                    params.phone = this.getPhoneNumber(  );
                    this.loadFromServer( params );
                    break;
                case "processCode":
                    params.phone = this.abonent;
                    params.pin = this.getPinCode(  );
                    this.loadFromServer( params );
                    break;
                case "resendPin":
                    params.phone = this.abonent;
                    this.loadFromServer( params );
                    break;
            }
        },
        loadFromServer: function( params ) {
            var self = this;
            $.get( "", params,
                function( data ) {
                    response = $.parseJSON( data );
                    if ( response.variables.web_aware ) window.location.href = response.variables.web_aware;
                    self.render( response.state, response.variables );
                }
            );
        },
        getPhoneNumber: function(  ) {
            var p = $.trim( $( "input[name=abonent]" ).val(  ) );
            p = p.replace( /\D+/, "" );
            this.abonent = p;
            $.cookie( "abn", p );
            return p;
        },
        getPinCode: function(  ) {
            var c = $.trim( $( "input[name=pincode]" ).val(  ) );
            c = c.replace( /\D+/, "" );
            return c;
        }
    } );

    _app = new App( { el: $( "body" ) } );
} );

