$(document).ready(function()
    {
        /**
         * "Efeito sanfona" 
         */
        $("dt a").click(function()
            {
                $("dd:visible").slideUp("slow");
                $(this).parent().next().slideDown("slow");
                if(this.blur)this.blur();
                return false;
            });
        
        
        /**
         * Gerador de classe completa
         */
        // A cada clique no bot? "+", adiciona uma nova linha  tabela.
        $('#btnAdicionarPropriedadeClasseCompleta').click(function(){
            $('#tabelaGeradorClasseCompleta').append('<tr class="propriedadesGeradorClasseCompleta">' + $('tr.propriedadesGeradorClasseCompleta').html() + '</tr>');
        });
        
        $('#btnGerarGeradorClasseCompleta').click(function(){
            /*
             * Tratamento para a defini?o da classe. 
             */
            
            // Se o campo de "implements" for diferente de vazio (quer dizer, a apessoa digitou algo nele)...
            if ($('#implementaGeradorClasseCompleta').val() != ''){
                // Faz um array no qual cada elemento  um nome diferente do campo "implements" (o espa?  o separador).
                var arrayImplementaClasseCompleta = $('#implementaGeradorClasseCompleta').val();
                arrayImplementaClasseCompleta = arrayImplementaClasseCompleta.split(' ');
                var qtdeArrayImplementaClasseCompleta = arrayImplementaClasseCompleta.length;

                var implements = '';
                
                // Tratamento para o caso de a classe que est sendo criado implementar 1 interface ou v?ias interfaces.
                // Se for mais de 1, na hora de escrever na textarea separa cada um com ",".
                if (qtdeArrayImplementaClasseCompleta <= 1) {
                    implements += arrayImplementaClasseCompleta[0];
                } else {
                    var i = 0;
                    while (i < qtdeArrayImplementaClasseCompleta) {
                            if (i != qtdeArrayImplementaClasseCompleta){
                                implements += arrayImplementaClasseCompleta[i] + ', ';
                            } else {
                                implements += arrayImplementaClasseCompleta[i]
                            }
                        i++;
                    }
                }
                implements = ' implements ' + implements;
            }
            
            $('#textareaGeradorClasseCompleta').val('class ' + $('#nomeGeradorClasseCompleta').val());
            
            // Se h valores em "extends"...
            if ($('#extendeGeradorClasseCompleta').val() != '') {
                $('#textareaGeradorClasseCompleta').val($('#textareaGeradorClasseCompleta').val() + ' extends ' + $('#extendeGeradorClasseCompleta').val());
            }
            
            // Se h valores em "implements"...
            if ($('#implementaGeradorClasseCompleta').val() != '') {
                $('#textareaGeradorClasseCompleta').val($('#textareaGeradorClasseCompleta').val() + implements);
            }
            
            cntdoTextAreaGeradorClasseCompleta = $('#textareaGeradorClasseCompleta').val();
            
            // Testa se h mais de uma interface implementada.
            // Se houver, retira o ?timo caracter da textarea (que  uma v?gula "solta" que n? serve para nada).
            if (cntdoTextAreaGeradorClasseCompleta.search(/,/) > 1) {
                qtdeTextAreaGeradorClasseCompleta = cntdoTextAreaGeradorClasseCompleta.length;
                $('#textareaGeradorClasseCompleta').val(cntdoTextAreaGeradorClasseCompleta.substring(0,qtdeTextAreaGeradorClasseCompleta - 2)  + ' {');
            } else {
                $('#textareaGeradorClasseCompleta').val(cntdoTextAreaGeradorClasseCompleta + ' {');
            }
            
            /*
             * Tratamento para as propriedades da classe.
             */
            var todosSelectGeradorClasseCompleta = new Array;
            var todosInputGeradorClasseCompleta = new Array;
            
            $('tr.propriedadesGeradorClasseCompleta select').each(function(){
                todosSelectGeradorClasseCompleta.push($(this).val());
            });
            
            $('tr.propriedadesGeradorClasseCompleta input').each(function(){
                todosInputGeradorClasseCompleta.push($(this).val());
            });
            
            //alert(todosSelectGeradorClasseCompleta);
            //alert(todosInputGeradorClasseCompleta);
            
            $('#textareaGeradorClasseCompleta').val($('#textareaGeradorClasseCompleta').val() + "\n");
            var todasPropriedadesGeradorClasseCompleta = '';
            for (var i = 0; i < todosInputGeradorClasseCompleta.length; i++){
                $('#textareaGeradorClasseCompleta').val($('#textareaGeradorClasseCompleta').val() + '    ' +todosSelectGeradorClasseCompleta[i] + ' $' + todosInputGeradorClasseCompleta[i] + ';' + "\n");
                //todosSelectGeradorClasseCompleta[i] + '=>' + todosInputGeradorClasseCompleta[i];
            }
            
            
            /*
             * set() e get() da classe
             */
            $('#textareaGeradorClasseCompleta').val($('#textareaGeradorClasseCompleta').val());
            
            for (var i = 0; i < todosInputGeradorClasseCompleta.length; i++){
                $('#textareaGeradorClasseCompleta').val($('#textareaGeradorClasseCompleta').val() +
                    "\n" + '    public function set' + (todosInputGeradorClasseCompleta[i]).substring(0,1).toUpperCase() + (todosInputGeradorClasseCompleta[i]).substring(1) + '($' + todosInputGeradorClasseCompleta[i] + '){' + "\n" +
                    '        $this->' + todosInputGeradorClasseCompleta[i] + ' = $' + todosInputGeradorClasseCompleta[i] + ";\n" +
                    '    }' + "\n\n" +
                    '    public function get' + (todosInputGeradorClasseCompleta[i]).substring(0,1).toUpperCase() + (todosInputGeradorClasseCompleta[i]).substring(1) + '(){' + "\n" +
                    '        return $this->' + todosInputGeradorClasseCompleta[i] + ";\n" +
                    '    }' + "\n"
                )
                //$('#textareaGeradorClasseCompleta').val($('#textareaGeradorClasseCompleta').val() + '    ' +todosSelectGeradorClasseCompleta[i] + ' $' + todosInputGeradorClasseCompleta[i] + ';' + "\n");
            }
            
            
            /*
             * O fechamento da classe
             */
            $('#textareaGeradorClasseCompleta').val($('#textareaGeradorClasseCompleta').val() + '}');
        });
        
        
        /**
         * Gerador de SETs e GETs
         */
        $('#btnGerarClasseGeradorSetGet').click(function(){
            $('#textareaGeradorSetGet').val('');
            
            var arrayConteudoGerarSetGet = $('#propriedadesClasseGeradorSetGet').val();
            arrayConteudoGerarSetGet = arrayConteudoGerarSetGet.split(' ');
            var qtdeArrayConteudoGerarSetGet = arrayConteudoGerarSetGet.length;
            
            var i = 0;
            while (i < qtdeArrayConteudoGerarSetGet) {
                $('#textareaGeradorSetGet').val($('#textareaGeradorSetGet').val() +
                    'public function set' + (arrayConteudoGerarSetGet[i]).substring(0,1).toUpperCase() + (arrayConteudoGerarSetGet[i]).substring(1) + '($' + arrayConteudoGerarSetGet[i] + ') {' + "\n" +
                    '   $this->' + arrayConteudoGerarSetGet[i] + ' = $' + arrayConteudoGerarSetGet[i] + ";\n" +
                    '}' + "\n\n" +
                    'public function get' + (arrayConteudoGerarSetGet[i]).substring(0,1).toUpperCase() + (arrayConteudoGerarSetGet[i]).substring(1) + '() {' + "\n" +
                    '    return $this->' + arrayConteudoGerarSetGet[i] + ";\n" +
                    '}' + "\n\n"
                ); 
                i++;
            }
        });
        
        // no 'mouseover' de #textareaGeradorSetGet e #textareaGeradorClasseCompleta, seleciona todo seu conte?o
        $('#textareaGeradorSetGet,#textareaGeradorClasseCompleta').focus(function(){
            $(this).select();
        });
    });