function sm_click_handler(sm_name){

	var container = $('#sm_'+sm_name+'_container');
	
	if(container.is(":visible"))
		container.fadeOut();
	else
		container.fadeIn();
		
}

function sm_click_container(event,sm_name){
	
	var event_target ;

	//LE IF AU CAS OU EST SUR IE
	if( event.target == null)
		event_target = event.srcElement ;
	else
		event_target = event.target ;

	
	//alert(event_target.tagName);

	//on a clické sur un input
	if(event_target.tagName.toLowerCase() == 'input'){
		//on est bien sur un input
		sm_input_clicked(event_target,sm_name) ;	
	}else if(event_target.tagName.toLowerCase() == 'a'){//on a clické sur un lien
		sm_link_clicked(event_target,sm_name);
	}else if(event_target.tagName.toLowerCase() == 'span'){//on a clické sur un bouton
		sm_link_clicked($($($(event_target).parent()).parent()).parent(),sm_name);		
	}

	sm_caculate_resume(sm_name);

}

function sm_link_clicked(link,sm_name){
	if($(link).hasClass('apply')){
		sm_click_handler(sm_name);
	}else if($(link).hasClass('checkAll')){
		sm_change_all_input(sm_name,true);
	}else if($(link).hasClass('unCheckAll')){
		sm_change_all_input(sm_name,false);
	}else if($(link).attr('id').match("sm_rollover_.*")){
		sm_swap_rollover(link,sm_name);
	}
}

function sm_swap_rollover(link,sm_name){

	var regExp=new RegExp("sm_rollover_(.*)_([0-9]+)");
	var matchRes = regExp.exec($(link).attr('id'));
	var parent_val = matchRes[2];
	var childs = $('#sm_'+sm_name+'_childs_'+parent_val) ;

	if(!childs.is(":visible")){
		childs.fadeIn();
		$(link).removeClass("sm_rollover_down");
		$(link).addClass("sm_rollover_up");
	}
	else{
		childs.fadeOut();
		$(link).removeClass("sm_rollover_up");
		$(link).addClass("sm_rollover_down");
	}
}

function sm_change_all_input(sm_name,value){
	var selector = "#sm_"+sm_name+"_container input[type='checkbox']" ;
	$(selector).attr('checked',value);
}

function sm_input_clicked(input,sm_name){
	var childs = sm_get_childs(sm_name,input.value);
		
	//on coche/décoche les inputs fils
	childs.attr('checked',input.checked);

	//on va chercher le input père
	var parent = sm_get_parent(input,sm_name);
		
	if(parent!=null){
		//on récupère les input frères
		var brothers = sm_get_childs(sm_name,parent.attr('value'));

		//on regarde si ils sont tous cochés
		var allchecked = true ;

		for(var i = 0 ; i < brothers.size() && allchecked == true ; i++ ){
			if(! brothers.get(i).checked)
				allchecked = false ;
		}
		
		//si tous les frères sont cochés alors on coche le père sinon on décoche le père
		parent.attr('checked',allchecked);
	}
}

function sm_get_childs(sm_name,value){
	// le sélécteur qui trouve des input fils		
	var childs_selector = '#sm_'+sm_name+'_childs_'+value+' input' ;
	return $(childs_selector) ; //la liste des input fils
}

function sm_get_parent(input,sm_name){

	var parent = $(input).parent();

	var i =0 ;// i c'est une sécurité si on oublie de mettre le id="sm_..._container"

	//on remonte tous les parents. jusqu'au container
	while(parent.attr('id')!='sm_'+sm_name+'_container' && i < 100){
		var pattern = '^sm_'+sm_name+'_childs_([0-9]+)$' ;
		if(parent.attr('id').match(pattern)){// le input fait parti d'un enfant
			var regExp=new RegExp(pattern);
			var matchRes = regExp.exec(parent.attr('id'));
			var father_value = matchRes[1]; // on connait maintenant la valeur de l'input père
			
			var father_selector = '#sm_'+sm_name+'_input_'+father_value ;
			return $(father_selector)
		}
		parent = $(parent).parent();
		i++;
	}
	return null ;
}

function sm_caculate_resume(sm_name){
	var selector = '#sm_'+sm_name+"_container input[type='checkbox']" ;
	var values = new Array() ;
	var valuesUp = new Array() ;

	$(selector).each(function(index,input){
		if(input.checked){
			var parent = sm_get_parent(input,sm_name) ;
			if(parent==null)
				valuesUp.push('<span class="valueUp">'+$("#sm_"+sm_name+"_input_"+input.value+"_label").html()+"</span>") ;
			else if(parent.attr('checked') == false){
				var label = $('#sm_'+sm_name+'_input_'+parent.attr('value')+'_label');
				values.push('<span class="value"><strong>'+label.html()+'</strong> &gt; '+$("#sm_"+sm_name+"_input_"+input.value+"_label").html()+"</span>") ;
			}
			
		}
	})

	var recap = $('#sm_'+sm_name+'_recap') ;

	if((valuesUp.length + values.length) == 0 )
		recap.html('Aucun');
	else
		recap.html( valuesUp.join(' ') + " " + values.join(' ') );
	
}

