(function($){
    $.fn.Ticky = function(options){
        var $this = $(this),
            items = $this.children(),
            changeNameSpace = 'change.TickAll',
            options = $.extend({
                tickAllCls : '.tick-all'
            }, options), i = items.length;

        items.bind(changeNameSpace, function(e){

            var target = $(e.target),
                checked = !!e.target.checked;

            if(!target.is(options.tickAllCls)) return;

            var checkboxes = $(':checkbox', this).not(options.tickAllCls),
                c;

            c = $.grep(checkboxes, function(n, i){
                return (n.checked !== checked);
            })

            $(c).attr('checked', checked).trigger('change.addMyTcs');
        });

        for(;i;i=i-1){
            var selectboxes = $(':checkbox', items[i-1]).not(options.tickAllCls),
                selectedboxed = undefined,
                tickAllEl = $(options.tickAllCls, items[i-1]);

            selectedboxes = $.grep(selectboxes, function(n, i){
                return n.checked;
            })

            if(selectboxes.length === selectedboxes.length){
                $(tickAllEl).attr('checked',  true);

            }


        }

        return $this;
    }
})(jQuery)