function Pedido(){
    
    var current = 1;
    
    var currentMassaTop = 0;
    var currentMassaBottom = 0;
    
    var currentBordaTop = 0;
    var currentBordaBottom = 0;
    
    var _isPromo = false;
    
    this.isPromo = function(){
        return _isPromo;
    }
    
    this.setPromo = function (value){
        _isPromo = value;
    }
    
    
    var UMA_BORDA = true;
    
    
    var canAddIngTop    = true;
    var canAddIngBottom = true;
    
    this.canAddIngTop    = function(){
        return canAddIngTop;
    }
    this.canAddIngBottom = function(){
        return canAddIngBottom;
    }
    
    this.setCanAddIngTop = function(bool){
        canAddIngTop = bool;
        
        if(!canAddIngTop){
            jQuery('#ingredientes .btn-top').fadeOut();
        } else {
            jQuery('#ingredientes .btn-top').fadeIn();
        }
        
    }
    var setCanAddIngTop = this.setCanAddIngTop; 
    
    this.setCanAddIngBottom = function(bool){
        canAddIngBottom = bool;
        
        if(!canAddIngBottom){
            jQuery('#ingredientes .btn-bottom').fadeOut();
        } else {
            jQuery('#ingredientes .btn-bottom').fadeIn();
        }
        
    }
    var setCanAddIngBottom = this.setCanAddIngBottom;    
       
    
    this.getCurrent = function(){
        return current;
    }
    
    this.setCurrent = function (value){
        current = value;
    }
    
    this.getMassaTop = function(){
        return currentMassaTop;
    }
    
    this.setMassaTop = function (value, isPromocao){
        currentMassaTop = value;
        if(value == 0){
            jQuery('#sabordapizza .btn-top').removeClass('selected');
            jQuery('#promocoes .btn-top').removeClass('selected');
            jQuery('#promocoes .item-picture').fadeTo(200, 1);   
        } else {
            if(!isPromocao){
                jQuery('#sabordapizza .btn-top').removeClass('selected');
                jQuery('#pizza-'+value+' .btn-top').addClass('selected');
                jQuery('#promocoes .item-picture').fadeTo(200, 1);    
            } else {
            	jQuery('#sabordapizza .btn-top').removeClass('selected');
                jQuery('#pizza-'+value+' .btn-top').addClass('selected');
                
                jQuery('#promocoes .btn-top').removeClass('selected');
                jQuery('#pizzapromo-'+value+' .btn-top').addClass('selected');
                
                jQuery('#pizzapromo-'+value+' .item-picture').fadeTo(200, 1);
                jQuery('#pizzapromo-'+value).parent().siblings().find('.item-picture').fadeTo(200, .5);
            }
        } 
                
    }
    var setMassaTop = this.setMassaTop;
    
    this.getMassaBottom = function(){
        return currentMassaBottom;
    }
    
    this.setMassaBottom = function (value, isPromocao){
        currentMassaBottom = value; 
        if(value == 0){
            jQuery('#sabordapizza .btn-bottom').removeClass('selected');
            jQuery('#promocoes .btn-bottom').removeClass('selected');
            jQuery('#promocoes .item-picture').fadeTo(200, 1);   
        } else {
            if(!isPromocao){
                jQuery('#sabordapizza .btn-bottom').removeClass('selected');
                jQuery('#pizza-'+value+' .btn-bottom').addClass('selected');
                jQuery('#promocoes .item-picture').fadeTo(200, 1);    
            } else {
            	jQuery('#sabordapizza .btn-bottom').removeClass('selected');
                jQuery('#pizza-'+value+' .btn-bottom').addClass('selected');
                
                jQuery('#promocoes .btn-bottom').removeClass('selected');
                jQuery('#pizzapromo-'+value+' .btn-bottom').addClass('selected');
                
                jQuery('#pizzapromo-'+value+' .item-picture').fadeTo(200, 1);
                jQuery('#pizzapromo-'+value).parent().siblings().find('.item-picture').fadeTo(200, .5);
            }
        }
    }
    var setMassaBottom = this.setMassaBottom;
    
    
    // BORDAS
    this.getBordaTop = function(){
        return currentBordaTop;
    }
    
    this.setBordaTop = function (value){
        currentBordaTop = value;
        jQuery('#bordarecheada .btn-top').removeClass('selected');
        jQuery('#borda-'+value+' .btn-top').addClass('selected');
        
        jQuery('#borda-'+value+' .item-picture').fadeTo(200, 1);
        jQuery('#borda-'+value).parent().siblings().find('.item-picture').fadeTo(200, .5);
    }
    var setBordaTop = this.setBordaTop;
    
    this.getBordaBottom = function(){
        return currentBordaBottom;
    }
    
    this.setBordaBottom = function (value){
        currentBordaBottom = value;
        
        jQuery('#bordarecheada .btn-bottom').removeClass('selected');
        jQuery('#borda-'+value+' .btn-bottom').addClass('selected');
        jQuery('#borda-'+value+' .item-picture').fadeTo(200, 1);
        jQuery('#borda-'+value).parent().siblings().find('.item-picture').fadeTo(200, .5);
    }
    var setBordaBottom = this.setBordaBottom;
    
    
    
    
    // Pizzas
    this.getPizzaName = function(){
        
        var name = null;
        
        var number = null;
        
        switch(parseInt(this.getCurrent())){
            case 1:
                name = 'Primeira';
                break;
            case 2:
                name = 'Segunda';
                break;
            case 3:
                name = 'Terceira';
                break;
            case 4:
                name = 'Quarta';
                break;
            case 5:
                name = 'Quinta';
                break;
            case 6:
                name = 'Sexta';
                break;
            case 7:
                name = 'Sétima';
                break;
            case 8:
                name = 'Oitava';
                break;
            case 9:
                name = 'Nona';
                break;
            case 10:
                name = 'Décima';
                break;
            default:
                number = this.getCurrent();
                break;
        }
        
        if(name != null){
            return name + ' Pizza';
        } else {
            return 'Pizza nº' + number;
        }
        
    }
    
    
    
    
    // Tem massa de cima?
    this.hasMassaTop = function(){
        return (currentMassaTop != 0);
    }
    var hasMassaTop = this.hasMassaTop;
    
    // Tem massa de baixo?
    this.hasMassaBottom = function(){
        return (currentMassaBottom != 0);
    }
    var hasMassaBottom = this.hasMassaBottom;
    
    // Tem massa?
    this.hasMassa = function(){
        return (hasMassaTop() || hasMassaBottom());
    }
    var hasMassa = this.hasMassa;
    
    
    this.layoutManager = new LayoutManager(this);
    var layoutManager = this.layoutManager;
    
    
    /**
    * Adiciona pizza
    */
    this.addPizza = function(){
         jQuery.post('/pedidos/pizzas/addpizza/', null, addedPizza, 'json');
         
         return false;
    }
    
    this.addedPizza = function(data){
        //layoutManager.addPizzaToList(data.current_pizza);
        selectPizza(data.current_pizza);    
    }
    var addedPizza = this.addedPizza;
    
    /**
    * Get total
    */
    this.getTotalPizzas = function(){
        return jQuery('#list-pizzas div').size();
    }
    var getTotalPizzas = this.getTotalPizzas;
    
    /**
    * Selecionar pizza corrente
    */
    this.selectPizza = function(id){
        if(id != current){
            current = id;
            jQuery.post('/pedidos/pizzas/selectpizza/'+id+'/', null, selectedPizza);
        }
        return false;
    }
    var selectPizza = this.selectPizza;
    
    /**
    * Callback para pizza selecionada.
    */
    this.selectedPizza = function(data){
        layoutManager.showPizza(current);    
    }
    var selectedPizza = this.selectedPizza;
    
    /**
    * Selecionar proxima pizza
    */
    this.selectNextPizza = function(){
        /*if(current < getTotalPizzas()){
            var nextId = parseInt(jQuery('#list-pizzas .item-unidade-on').nextAll(':not(.pizza-off)').attr('id').substring(10));
            selectPizza(nextId);
        }*/
        var nextId = parseInt(current) +1;
        selectPizza(nextId);
        return false;   
    }
    var selectNextPizza = this.selectNextPizza;
    
    /**
    * Selecionar pizza anterior
    */
    this.selectPreviousPizza = function(){
        /*if(current > 1){
            var prevId = parseInt(jQuery('#list-pizzas .item-unidade-on').prevAll(':not(.pizza-off)').attr('id').substring(10)); 
            selectPizza(prevId);
        }*/
        var prevId = parseInt(current) -1;
        selectPizza(prevId);
        return false;
    }
    var selectPreviousPizza = this.selectPreviousPizza;
    
    
    
    /**
    * Adiciona ingrediente
    */
    this.addIngrediente = function(id, position, flag){
        
        var can = false;
        
        if(position == 'top' && canAddIngTop)
            can = true;
        if(position == 'bottom' && canAddIngBottom)
            can = true;
        
        if(can || flag){
            jQuery.post('/pedidos/pizzas/addingrediente/'+position+'/'+id+'/', null, function(data){
                 
                 layoutManager.updateIngredientes('top', data.ingredientes_top);
                 layoutManager.updateIngredientes('bottom', data.ingredientes_bottom);
                 
                 jQuery('#preco-final').html(data.total);
                 layoutManager.updatePrice(data.total_pedido)
                 if(position == 'top')
                    setCanAddIngTop (parseInt(data.qtd_total) < 3);
                 
                 if(position == 'bottom')
                    setCanAddIngBottom(parseInt(data.qtd_total) < 3);
                 
            }, 'json');
        }
        return false;
    }
    
    /**
    * Remove ingrediente
    */
    this.removeIngrediente = function(id, position){
        jQuery.post('/pedidos/pizzas/removeingrediente/'+position+'/'+id+'/', null, function(data){
             layoutManager.updateIngredientes('top', data.ingredientes_top);
                 layoutManager.updateIngredientes('bottom', data.ingredientes_bottom);
             
             jQuery('#preco-final').html(data.total);
             layoutManager.updatePrice(data.total_pedido)
             
             if(position == 'top')
                setCanAddIngTop(parseInt(data.qtd_total) < 3);
             else
                setCanAddIngBottom(parseInt(data.qtd_total) < 3);
             
        }, 'json');
        return false;
    }
    
    /**
    * Define borda
    */
    this.setBorda = function(id, position){
        
        if(UMA_BORDA){
           setBordaTop(id);
           setBordaBottom(id); 
        } else {
           if(position == 'top'){
                setBordaTop(id);
            } else {
                setBordaBottom(id);
            } 
        }
        
        jQuery.post('/pedidos/pizzas/setborda/'+position+'/'+id+'/', null, function(data){
            
            layoutManager.updateIngredientes('top', data.ingredientes_top);
            layoutManager.updateIngredientes('bottom', data.ingredientes_bottom);
            
            if(data.massa_name_top)
                jQuery('#pizza-massa-top .type-pizza').html(data.massa_name_top);
            
            if(data.massa_name_bottom)
                jQuery('#pizza-massa-bottom .type-pizza').html(data.massa_name_bottom);
            
            
            Pedido.setPromo(false);
            Pedido.setMassaTop(Pedido.getMassaTop());
            Pedido.setMassaBottom(Pedido.getMassaBottom());
            
            jQuery('#preco-final').html(data.total);
            layoutManager.updatePrice(data.total_pedido)
            
            
            
            
            
        }, 'json');
        
        
        jQuery('#borda-'+id+' .item-picture').fadeTo(200, 1);
        jQuery('#borda-'+id).parent().siblings().find('.item-picture').fadeTo(200, .5);
        
        
        return false;
    }
    
    /**
    * Limpa borda
    */
    this.clearBorda = function(position){
        
        if(UMA_BORDA){
           setBordaTop(0);
           setBordaBottom(0); 
        } else {
           if(position == 'top'){
                setBordaTop(0);
            } else {
                setBordaBottom(0);
            } 
        }
        
        jQuery.post('/pedidos/pizzas/clearborda/'+position+'/', null, function(data){
            
            layoutManager.updateIngredientes('top', data.ingredientes_top);
            layoutManager.updateIngredientes('bottom', data.ingredientes_bottom);
            
            if(data.massa_name_top)
                jQuery('#pizza-massa-top .type-pizza').html(data.massa_name_top + ((data.is_promo) ? ' <span style="color: rgb(9, 64, 26);">(Promoção)</span>' : ''));
            
            if(data.massa_name_bottom)
                jQuery('#pizza-massa-bottom .type-pizza').html(data.massa_name_bottom  + ((data.is_promo) ? ' <span style="color: rgb(9, 64, 26);">(Promoção)</span>' : ''));
            
            jQuery('#preco-final').html(data.total);
            layoutManager.updatePrice(data.total_pedido)
        }, 'json');
        
        
        jQuery('#bordarecheada').find('.item-picture').fadeTo(200, 1);
        
        
        return false;
    }
    
    /**
    * Define a massa.
    */
    this.setMassa = function(id, position, isPromocao){
        
        var ok = false;
        
        if(!isPromocao){
            if(position == 'top' && (currentMassaTop != id || Pedido.isPromo() || isPromocao) ){
                setMassaTop(id, false);
                if(Pedido.isPromo()){
                    if(Pedido.hasMassaBottom()){
                       Pedido.setMassaBottom(Pedido.getMassaBottom(), false) ;
                    }
                }
                ok = true;
                Pedido.setPromo(false); 
            } else if(position == 'bottom' && (currentMassaBottom != id || Pedido.isPromo() || isPromocao)) {
                setMassaBottom(id, false);
                if(Pedido.isPromo()){
                    if(Pedido.hasMassaTop()){
                       Pedido.setMassaTop(Pedido.getMassaTop(), false) ;
                    }
                }
                ok = true;
                Pedido.setPromo(false); 
            }
        } else {
            jQuery('#bordarecheada').find('.item-picture').fadeTo(200, 1);
            jQuery('#bordarecheada').find('.btn-control').removeClass('selected');
            Pedido.setPromo(true);
            setMassaTop(id, true);  
            setMassaBottom(id, true);
            setBordaTop(0);
            setBordaBottom(0);
            ok = true;
        }
        
        if(ok){
            if(!isPromocao){
                jQuery.post('/pedidos/pizzas/setmassa/'+position+'/'+id+'/', null, function(data){
                    selectedMassa(position, data, false);
                }, 'json'); 
            } else {
                jQuery.post('/pedidos/pizzas/setmassapromo/'+id+'/', null, function(data){
                    selectedMassa(position, data, true);
                }, 'json'); 
            }
                
        }    
            
        
        return false;
    }
    
    /**
    * Callback para massa selecionada.
    */
    this.selectedMassa = function(position, data, isPromocao){
        if(!isPromocao){
            if(position == 'top')
                setCanAddIngTop(true);
            else
                setCanAddIngBottom (true);   
            layoutManager.showMassa(position, data);
            Pedido.setPromo(false);    
        } else {
            setCanAddIngTop(false);
            setCanAddIngBottom(false);
            setBordaBottom(0);
            setBordaTop(0);
            layoutManager.showMassa('promo', data);
            Pedido.setPromo(true);
        }
    }
    var selectedMassa = this.selectedMassa;
    
    /**
    * Limpa massa
    */
    this.clearMassa = function(position){        
        
        jQuery.post('/pedidos/pizzas/clearmassa/'+position+'/', null, function(data){
            
            if(position == 'top'){
                jQuery('#sabordapizza .btn-top').removeClass('selected').addClass('normal');
                currentMassaTop = 0;   
            } else if(position == 'bottom') {
                jQuery('#sabordapizza .btn-bottom').removeClass('selected').addClass('normal');
                currentMassaBottom = 0;
            }
            
            layoutManager.removeMassa(position, data);
            
            if(position == 'top')
                setCanAddIngTop(true);
            else
                setCanAddIngBottom(true);
                    
        }, 'json');
        return false;
    }
    
    
    
    /**
    * Seleciona o tamanho da pizza corrente.
    */
    this.setSizePizza = function(size){
        jQuery.post('/pedidos/pizzas/setsizepizza/'+size+'/', null, function(data){
            layoutManager.showSizeInfo(size, data);
            
            
            layoutManager.updateIngredientes('top', data.ingredientes_top);
            layoutManager.updateIngredientes('bottom', data.ingredientes_bottom);
            
            if(data.massa_name_top)
                jQuery('#pizza-massa-top .type-pizza').html(data.massa_name_top + ((data.is_promo) ? ' <span style="color: rgb(9, 64, 26);">(Promoção)</span>' : ''));
            
            if(data.massa_name_bottom)
                jQuery('#pizza-massa-bottom .type-pizza').html(data.massa_name_bottom + ((data.is_promo) ? ' <span style="color: rgb(9, 64, 26);">(Promoção)</span>' : ''));
            
            
            Pedido.setPromo(false);
            Pedido.setMassaTop(Pedido.getMassaTop());
            Pedido.setMassaBottom(Pedido.getMassaBottom());
            
            
            
        }, 'json');
        return false;
    }
    
    /**
    * Exclui a pizza.
    */
    this.removePizza = function(id){
        jQuery.post('/pedidos/pizzas/removepizza/'+id+'/', null, function(data){
            
            //var next = jQuery()
            layoutManager.updatePrice(data.total_pedido)
            layoutManager.removePizza(id);
            
            jQuery('#list-pizzas').html('');
            for(var i=1; i<=data.total_de_pizzas;i++)
                jQuery('#list-pizzas').append('<div id="btn-pizza-'+i+'" title="Selecionar pizza '+i+'" class="helptext item-unidade" style="visibility: visible;"><span class="replace" style="color:#0E672A;">'+i+'</span></div>');
            
            Pedido.setCurrent(0);
            Pedido.selectPizza(parseInt(data.current_pizza));
            
            /*
            
            Quando apagava a última e criava uma nova
            
            if(data.current_pizza != id)
                Pedido.selectPizza(parseInt(data.current_pizza));
            else 
                Pedido.addPizza();
            
            */
            
                
            
        }, 'json');
        return false;
    }
    
    /**
    * Retornar pizza.
    */
    this.ativarPizza = function(id){
        jQuery.post('/pedidos/pizzas/ativarpizza/'+id+'/', null, function(data){
            jQuery('#btn-pizza-'+id).removeClass('pizza-off');
            Pedido.selectPizza(id);
            layoutManager.updatePrice(data.total_pedido)
              
        }, 'json');
        return false;
    }
    
    /**
    * Nova em.
    */
    this.newPizzaAt = function(id){
        jQuery.post('/pedidos/pizzas/newpizzaat/'+id+'/', null, function(data){
            jQuery('#btn-pizza-'+id).removeClass('pizza-off');
            Pedido.selectPizza(id);
            layoutManager.updatePrice(data.total_pedido)  
        }, 'json');
        return false;
    }
    
    /**
    * Fechar pedido
    */
    this.fecharPedido = function(){
        if(cofirm('Deseja realmente fechar o pedido?')){
            return true;
        } else {
            return false;
        }
    }
    
};
