/* ------------------------------------------------------------------------
prettyCheckboxes

Developped By: Stephane Caron (http://www.no-margin-for-errors.com)
Inspired By: All the non user friendly custom checkboxes solutions ;)
Version: 1.0.1

Copyright: Feel free to redistribute the script/modify it, as
                   long as you leave my infos at the top.
------------------------------------------------------------------------- */
	
jQuery.fn.prettyCheckboxes = function(settings) {
    settings = jQuery.extend({
        checkboxWidth: 17,
        checkboxHeight: 17,
        className : 'prettyCheckbox',
        display: 'list'
    }, settings);

    $(this).each(function(){
        // Find the label
        $label = $('label[for="'+$(this).attr('id')+'"]');

        // Add the checkbox holder to the label
        $label.prepend("<span class='holderWrap'><span class='holder'></span></span>");

        // If the checkbox is checked, display it as checked
        if($(this).is(':checked')) {
            $label.addClass('checked');
        };

        // Assign the class on the label
        $label.addClass(settings.className).addClass($(this).attr('type')).addClass(settings.display);

        // Assign the dimensions to the checkbox display
        $label.find('span.holderWrap').width(settings.checkboxWidth).height(settings.checkboxHeight);
        $label.find('span.holder').width(settings.checkboxWidth);

        // Hide the checkbox
        $(this).addClass('hiddenCheckbox');

        if ($.browser.msie) {
            $('span.holderWrap').css('margin-left', '0px');
        }

        // Associate the click event
        $label.bind('click',function(event){
            var $toCheck = $('input#' + $(this).attr('for'));
            //$toCheck.triggerHandler('click');
				
            if($toCheck.is(':checkbox')){
                $(this).toggleClass('checked');
                
                if ($.browser.msie) {
                    $toCheck.triggerHandler('click');
                    if ($toCheck.is(':checked')) {
                        $toCheck.removeAttr('checked');
                    } else {
                        $toCheck.attr('checked', 'checked');
                    }
                    $toCheck.triggerHandler('change');
                    event.preventDefault();
                }					
            }else{
                // Uncheck all radio
                $('input[name="'+$toCheck.attr('name')+'"]').each(function(){
                    $('label[for="' + $(this).attr('id')+'"]').removeClass('checked');	
                });

                $(this).addClass('checked');
					
                if ($.browser.msie) {
                    $toCheck.triggerHandler('click');
                    $toCheck.attr('checked', 'checked');
                    $toCheck.triggerHandler('change');
                    event.preventDefault();
                }
            };
        });
			
        $('input#' + $label.attr('for')).bind('keypress',function(e){
            if(e.keyCode == 32){
                if($.browser.msie){
                    $('label[for="'+$(this).attr('id')+'"]').toggleClass("checked");
                }else{
                    $(this).trigger('click');
                }
                return false;
            };
        });
    });
};
	
checkAllPrettyCheckboxes = function(caller, container){
    if($(caller).is(':checked')){
        // Find the label corresponding to each checkbox and click it
        $(container).find('input[type=checkbox]:not(:checked)').each(function(){
            $('label[for="'+$(this).attr('id')+'"]').trigger('click');
            if($.browser.msie){
                $(this).attr('checked','checked');
            }else{
                $(this).trigger('click');
            };
        });
    }else{
        $(container).find('input[type=checkbox]:checked').each(function(){
            $('label[for="'+$(this).attr('id')+'"]').trigger('click');
            if($.browser.msie){
                $(this).attr('checked','');
            }else{
                $(this).trigger('click');
            };
        });
    };
};
