/**
 * Esse arquivo fornece algumas funções de uso geral, como toggle_next, que faz desaparecer o elemento seguinte
 */


//ao clicar em algum elemento com classe toggle_next ele some ou mostra o elemento seguinte
function toggle_next(){
	$('.toggle_next').click(function(){
		$(this).nextAll('.toggle:first').slideToggle('fast');
		$(this).toggleClass('exibindo');
		return false;
	});
}

//ao clicar em algum elemento com classe toggle_prev ele some ou mostra o primeiro elemento anterior .toggle
function toggle_prev(){
	$('.toggle_prev').click(function(){
		$(this).prevAll('.toggle:first').toggle('fast');
		return false;
	});
}

/* FUNÇÃO funciona da seguinte maneira: tu cria um div com classe toggle_next_radio.
Dentro dele você coloca duas coisas: radios e um elemento classe toggle. Quando rolar um change no radio, 
ele faz um toggle no elemento classe toggle. 
*/

    
function toggle_next_radio(){
    $('.toggle_next_radio').each(function(){//entra em cada div que determina o comportamento
        $('input:radio',this).each(function(){//entra em todos os radios dentro dele
           if($(this).attr('checked')){
                $(this).attr({
	                check: 'ok' //se o radio estiver selecionado, colocamos um ok
                })
            }
        $(this).click(function(){
             
            if($(this).attr('check') != 'ok'){ //agora define uma função pro click de cada radio
                   
                var pai = $($(this).parents(".toggle_next_radio")[0])
                $('.toggle:first', pai).toggle('fast');
                var name = $(this).attr('name')
                $('input:radio', pai).each(function(){
                    $(this).attr({ check: 'null' })
                })
                $(this).attr({ check: 'ok' })
                    
                }
            })
        })       
    })
}


/*essa função é de uso mais raro e é meio complicado de usála. Mas nada muito difícil. 
A demanda era a seguinte: eu tinha quatro radios e quando o cara clicasse em dois deles era pra mostrar coisas distintas e quando
clicasse em outros dois era pra esconder tudo. É preciso então identificar os radios que mandam abrir coisas
Pra isolá-los, é preciso deixar todos os radios da sequência dentro de um elemento .radio_multiple
Também é preciso colocar um atributo action="mostra" no radio que mostra. Sei que o Cauê não gosta, mas paciência, não vi
jeito melhor de fazer isso.
*/
function toggle_next_radio_multiple(){
	$('.toggle_next_radio_multiple').each(function(){//entra em cada div que determina o comportamento
        $('input:radio',this).each(function(){//entra em todos os radios dentro dele
           if($(this).attr('checked')){
                $(this).attr({
	                check: 'ok' //se o radio estiver selecionado, colocamos um ok
                })
            }
        $(this).click(function(){
             
            if($(this).attr('check') != 'ok'){ //agora define uma função pro click de cada radio
		var pai = $($(this).parents(".toggle_next_radio_multiple")[0]) //apaga todos os divs da serie
                $('.toggle', pai).each(function(){
                    $(this).hide('fast')
                })
                $('input:radio', pai).each(function(){
                    $(this).attr({ check: 'null' })
                })                
                var div = $(this).parent().nextAll('.toggle:first')
                div.slideDown('fast')
                
                $(this).attr({ check: 'ok' })
                    
                }
            })
        })       
    })
	/*
	$('.toggle_next_radio_multiple').change(function(){
	
		var pai = $(this).parents('.radio_multiple');
		$('.toggle', pai).hide('fast');
		if($(this).attr('action') == 'mostra'){
			$(this).nextAll('.toggle:first').show('fast');
		}
									
	});	
	*/
}

/*esse funciona com select. Você aplica a classe .toggle_next_select no select. E no option que deve mostrar
algo você coloca action="mostra"
*/
function toggle_next_select(){
	$('.toggle_next_select').change(function(){
		if($('option:selected', this).attr('action') == 'mostra'){
			$(this).nextAll('.toggle:first').show('fast');
		}else{
			$(this).nextAll('.toggle:first').hide('fast');
		}								
	});	
}

/* Esse serve quando você tem uma lista de checkbox e quer que o último mostre alguma coisa, 
se selecionado
*/
function checkbox_last_toggle_next(){
    $('.checkbox_last_toggle_next').each(function(){
        $('input:checkbox:last', this).click(function(){
            var div = $(this).parents('.checkbox_last_toggle_next:first').nextAll('.toggle:first')
            if($(this).attr('checked')){
               div.slideDown('fast')
            }else{
                div.slideUp('fast')
            }
        })
    })
}
/* Se um checkbox e selecionado, ele mostra o elemento .toggle que for next ao elemento que envolve o checkbox
Com isso, quero dizer que ele so funciona se estiver envolvido por um label, div ou li, sei la
*/
function checkbox_toggle_next(){
     
    $('.checkbox_toggle_next').each(function(){
        $('input:checkbox', this).each(function(){
           
            $(this).click(function(){
                var div = $(this).parent().nextAll('.toggle:first')
                if($(this).attr('checked')){
                   div.slideDown('fast')
                }else{
                    div.slideUp('fast')
                }
            })
            
        })
    })
}

