$(document).on("ready", function() {

	var chkIndet = '<div class="cbx-icon-null"></div>';
	var chkChekd = '<i class="glyphicon glyphicon-ok"></i>';    
	var i = $('input[data-toggle=checkbox-y]');
	
	//trigger button collapse
	$('.collapse-trigger').click(function(){
		$(this).parents('.box-header').children('.box-tools').children('button').trigger('click');
	})
	
    i.hide().wrap('<div class="cbx-container cbx-krajee-flatblue"></div>')
	$( '<div class="cbx cbx-sm cbx-active" tabindex="1000"><span class="cbx-icon"> </span></div>' ).insertBefore( 'input[data-toggle=checkbox-y]' );
    
	$.fn.changeCheckbox = function(chkpt)
	{		
		var o = getO(chkpt);
		
		if(o.val() == 1) 
		{
			$(this).updateAll(chkpt,'');
			return '';
		}
		else
		{
			$(this).updateAll(chkpt,1);
        	return 1;
		}
    }
	
	$.fn.updateAll = function(chkpt,val)
	{
		$(this).updateCheckbox(chkpt,val);
		$(this).updateByLevel(chkpt,val);
	}
    
	
    $.fn.updateCheckbox = function(chkpt,val)
	{
    	var o = getO(chkpt);
    	
        if(val === "") {
    		cCheck(o,'')
        	o.prop('value','')
		} else if(val === 0) {
        	cCheck(o,chkIndet)
        	o.val(0)
        } else if(val === 1) {
        	cCheck(o,chkChekd)
        	o.val(1)
        }
    }
    
    $.fn.updateByLevel = function(chkpt,val)
    {
    	var level = chkpt.children('.box-header').children('.form-group').find('input[type="checkbox"]').data('level');
    	
    	switch (level) 
    	{
    		case 1:    			
    			var all = chkpt.find('.chkpt');    			
    			all.each(function()
				{
					$(this).updateAll($(this),val);
				})
    		break;
    		case 2: // secoes change
    			$(this).updateParents(chkpt);
    			var all = chkpt.find('.chkpt');    			
    			all.each(function()
				{
					$(this).updateAll($(this),val);
				})
    		break;
    		case 3: // acoes change
    			$(this).updateParents(chkpt);
    			$(this).updateAcoes(chkpt,val);
    		break;	
    	}
    }
    
    $.fn.updateParents = function(chkpt)
    {
    	var parentChkpt = chkpt.parent('.box-body').parent('.chkpt');
    	var box = chkpt.parent('.box-body').children('.box');
    	var total = box.length;
    	var chkd = 0;
    	var indt = 0;
    	
    	box.each(function(){
    		var val = $(this).children('.box-header').find('input[type="checkbox"]').val();
    		if(val == 0 && val != "") indt++;
    		if(val == 1) chkd++;
    	})
    	
    	if(chkd == total)
		{
    		$(this).updateCheckbox(parentChkpt,1);	    		
		}
    	else if(chkd > 0 || indt > 0)
		{
    		$(this).updateCheckbox(parentChkpt,0);
		}
    	else
		{
    		$(this).updateCheckbox(parentChkpt,'');
		}
    	
    	if(!parentChkpt.hasClass("chkpt-primary"))
		{
    		$(this).updateParents(parentChkpt);
		}    	
    }

    function cCheck(o,status)
	{
		$(o).parent('.cbx-container').find('.cbx-icon').html(status);
	}
    
    function getO(chkpt)
	{
		return chkpt.children('.box-header').children('.form-group').find('input[type="checkbox"]');
	}
	
	$('.cbx').click(function()
	{
		var chkpt = $(this).closest('.chkpt');

		var val = $(this).changeCheckbox(chkpt);        
    })
	
	$.fn.updateAcoes = function(o,val)
	{
		o.find('.field-acoes').AllActions(val);		
	}
	
	$.fn.AllActions = function(act)
	{
		if(act !== 0)
		{
			if(act==1)
			{
				$(this).find('option:not(:selected)').each(function(){
					$(this).prop('selected', true);
				})			
			}
			if(act=="")
			{
				$(this).find('option:selected').each(function(){
					$(this).prop('selected', false);	
				})
			}
			$(".chosen-select-95").trigger('chosen:updated');
		}		
	}
	
	// acoes change
	$('select[data-level=4]').change(function() 
	{		
		var total = $(this).children('option').length;
		var selected = $(this).children('option:selected').length;
    	var chkpt = $(this).closest('.chkpt');
		var value = "";		
		if(selected < total && selected != "") value = 0;
		if(selected == total) value = 1;		
    	$(this).updateAll(chkpt,value);
	})
});