var ListAndForm = {
	init: function()
	{
		if ( $('goToPage') )
		{
			$('goToPage').addEvent('keypress', function(e){
				var event = new Event(e);
				
				switch(event.code)
				{
					case 13:
						var form = $('formSearch');
						
						var action = form.action.replace(/[0-9]+(\/[0-9]+\/[a-z]+\/(asc|desc))$/, (this.value!='' ?this.value :1) + "$1");
						
						form.action = action;
						form.submit();
						
						break;
					
					case 37:
					case 39:
						return true;
						
						break;
					
					default:
						if ('0123456789'.indexOf(String.fromCharCode(event.code)) > -1 || event.code < 9)
							return true;

						break;
				}
				
				event.stop();
			});
		}
		
		if ( $('limitPerPage') && $('formSearch') )
		{
			$('limitPerPage').addEvent('change', function(e){
				new Event(e).stop();
				
				var form = $('formSearch');
				
				var action = form.action.replace(/[0-9]+\/[0-9]+(\/[a-z]+\/(asc|desc))$/, '1/' + this.value + "$1");
				
				form.action = action;
				form.submit();
			});
		}
		
		if ( $$('.cancelFormBt') && $$('div.formDiv') )
		{			
			var buttons = $$('.cancelFormBt');
			var forms = $$('form.defaultRemoteForm');
			
			$$('div.formDiv').each(function(element, i){
				ListAndForm.slide(element, buttons[i], forms[i]);
				ListAndForm.submit(forms[i]);
			});
		}
	},
	
	slide: function(element, button, form)
	{
		var slide = new MySlide( element, {mode: 'vertical'});
        		
		if( button )
            button.addEvent('click', function(e)
            {
                new Event(e).stop();
                slide.toggle();
                ListAndForm.slideLabel( button, slide.isClosed() );
            });

        if ( form )
            slide.addEvent('complete', function(){
              if( slide.isClosed() ) form.reset();
            });
	},
	
	slideLabel: function ( botao, status )
    {
        var elem = $( botao );
        var tag = elem.get('tag');
        var text = elem.get('text');
        
        if ( tag == 'a' || tag == 'div' || tag == 'span' )
        {
            if ( text == 'Adicionar' && status )
			{
				$( botao ).set('text', 'Fechar');
			}
            else if ( text == 'Fechar' && !status )
            {
				$( botao ).set('text', 'Adicionar');
			}
			if ( text == 'Editar' && status )
			{
				$( botao ).set('text', 'Cancelar');
				$( botao ).removeClass('bts');
				$( botao ).addClass('bts_cancel');
			}
            else if ( text == 'Cancelar' && !status )
            {
				$( botao ).set('text', 'Editar');
				$( botao ).removeClass('bts_cancel');
				$( botao ).addClass('bts');
			}
			if ( text == '+' && status)
			{
				//alert($( botao ).parentNode.hasClass("itemCinzaEscuro"));
				$( botao ).set('text', '-');
				if($( botao ).getParent().hasClass('itemCinzaEscuro')==true)
				{
					$( botao ).getParent().addClass('itemActive');
					//$( botao ).parentNode.removeClass('itemCinzaEscuro');
				}
				else
				{
					$( botao ).getParent().addClass('itemActive');
					//$( botao ).parentNode.removeClass('itemCinzaClaro');
				}	
			}
            else if ( text == '-' && !status)
            {
				$( botao ).set('text', '+');	
				if($( botao ).getParent().hasClass('itemCinzaEscuro')==true)
				{
					$( botao ).getParent().addClass('itemCinzaEscuro');
					$( botao ).getParent().removeClass('itemActive');
				}
				else
				{
					$( botao ).getParent().addClass('itemCinzaClaro');
					$( botao ).getParent().removeClass('itemActive');
				}
			}
			if ( text == 'Adicionar Categoria' && status )
			{
				$( botao ).set('text', 'Cancelar Categoria');
				$( botao ).removeClass('bts');
				$( botao ).addClass('bts_cancel');
			}
            else if ( text == 'Cancelar Categoria' && !status )
            {
				$( botao ).set('text', 'Adicionar Categoria');
				$( botao ).removeClass('bts_cancel');
				$( botao ).addClass('bts');
			}
			if ( text == 'Markup' && status )
			{
				$( botao ).set('text', 'Cancelar Markup');
				$( botao ).removeClass('bts');
				$( botao ).addClass('bts_cancel');
			}
            else if ( text == 'Cancelar Markup' && !status )
            {
				$( botao ).set('text', 'Markup');
				$( botao ).removeClass('bts_cancel');
				$( botao ).addClass('bts');
			}
			if ( text == 'Enviar Aviso' && status )
			{
				$( botao ).set('text', 'Cancelar Envio');
				$( botao ).removeClass('bts');
				$( botao ).addClass('bts_cancel');
			}
            else if ( text == 'Cancelar Envio' && !status )
            {
				$( botao ).set('text', 'Enviar Aviso');
				$( botao ).removeClass('bts_cancel');
				$( botao ).addClass('bts');
			}
			if ( text == 'Adicionar Campanha' && status )
			{
				$( botao ).set('text', 'Cancelar Campanha');
				$( botao ).removeClass('bts');
				$( botao ).addClass('bts_cancel');
			}
            else if ( text == 'Cancelar Campanha' && !status )
            {
				$( botao ).set('text', 'Adicionar Campanha');
				$( botao ).removeClass('bts_cancel');
				$( botao ).addClass('bts');
			}
			if ( text == 'Filtrar' && status )
			{
				$( botao ).set('text', 'Cancelar Filtro');
				$( botao ).removeClass('bts');
				$( botao ).addClass('bts_cancel');
			}
            else if ( text == 'Cancelar Filtro' && !status )
            {
				$( botao ).set('text', 'Filtrar');
				$( botao ).removeClass('bts_cancel');
				$( botao ).addClass('bts');
			}
        }
    },
	
	submit: function(form)
	{
        form.reset();
		AIM.submit(form, {
			onComplete: function(felm, config, resHtml, resText)
		    {
                var result = JSON.decode( resText.replace( /\[\&([^\&]+)\&\]/gi, '<$1>' ) );
                
		    	if ( result.isOk )
		    	{

                        /* Retorno do Ajax VALIDADO e se nao possui erro procura todos os elementos do form de adicionar novo
                         *  que contenham '.' no id, para limpar o style de error caso possua.
                         *  e depois felm.reset() para limpar todos os campos escritos no form
                         */
                            felm.getElements("*[id*=.]").each( function( elem ){
                                $(elem).setStyle('border', '0px');
                            });
                    
		    		if ( result.isNew )
		    		{
		    			Util.call(
		    				result.controller + '/newElement/' + result.id,
		    				
		    				function(content){

								var div = new Element('DIV');
								
								div.addClass('item');
								
								div.set('html', content);
		    					
								div.inject($('newContents'), 'top');

								if( $('limitPerPage') )
                                {
                                    if ( $('newContents').getChildren().length > $('limitPerPage').value )
                                    {
                                        $('newContents').getLast().destroy();
                                    }
                                    else if ($('contents').getChildren().length + $('newContents').getChildren().length > $('limitPerPage').value)
                                    {
                                        $('contents').getLast().destroy();
                                    }
                                }
								
								ListAndForm.slide($('newFormDiv' + result.id), $('newCancelFormBt' + result.id), $('form' + result.id));
                                $('cancelFormBt').fireEvent('click', $('cancelFormBt'), 10 );
                                $('newCancelFormBt' + result.id).fireEvent('click', $('newCancelFormBt' + result.id), 100 );
								ListAndForm.submit($('newDefaultRemoteForm' + result.id));
							}
		    			);
		    		}
		    		else
		    		{
                        Util.call(
		    				result.controller + '/newElement/' + result.id + '/1',

		    				function( content )
                            {                                
		    					//Captura o registro ( item da listagem e o form )
                                var RegComplete = felm.getParent('div.item');

                                //Manter a cor de background do elemento a ser atualizado
                                var corAntiga = RegComplete.getChildren('div.resumoElemento').getStyle('background-color');

                                //Atualiza os dados
                                RegComplete.set('html',content);

                                // Aplica a cor salva no elemento
                                var ResumoElemento = RegComplete.getChildren('div.resumoElemento');
                                ResumoElemento.setStyle('background-color', corAntiga );


                                // Quando quiser que o elemento venha aberto adiciona essa classe
                                // No caso abaixo, adicionamos ela aberta, e logo apos
                                // o evento FireEvent ira fecha-la
                                ListAndForm.slide($('FormDiv' + result.id), $('CancelFormBt' + result.id), $('DefaultRemoteForm' + result.id));

                                // Esse bloco faz o div editado ser carregado aberto, simulando o click
                                $('CancelFormBt' + result.id).fireEvent('click', $('CancelFormBt' + result.id), 100 );
                                ListAndForm.submit($('DefaultRemoteForm' + result.id));
							}
		    			);
		    		}
		    	}else{
		    		// sem premissão?
                    if ( result.accessDenied )
                    {
		    			Util.permissionMessage();
                    }
                    else
                    {
                        if ( result.validation )
                            ListAndForm.styleValidation( result.validation, result.id);
                    }
                }
		    }
		});
	},

    styleValidation: function( validation, id )
    {
       
        // Percorre todos os campos da validacao do CI procurando por erros
        for ( regra in validation )
        {
            if ( validation[regra].label )
            {
                //alert( validation[regra].label.toLocaleLowerCase() + '.' + id );
                
                var campo = $( validation[regra].label.toLocaleLowerCase() + '.' + id  );

                if ( validation[regra].error != '' )
                    campo.setStyle('border', '1px solid #FF0000');
                else
                    campo.setStyle('border', '0px');
            }
        }
    }
};
