/**
 * jqCheckbox
 *
 * abstract:
 *
 * @version
 * 
 * @author		Erkki-Ilmari Rajakoski  [erkki-ilmari dot rajakoski at creanor dot com]
 * @copyright	Creanor (c) 2010. All rights reserved.
 * @license     http://www.opensource.org/licenses/gpl-license.php
 *
 * @package     jQuery Plugins
 * 
 * USAGE OPTIONS:
 * 
 * skin: skin to use
 * 
 */
  
(function($) {
	
	/**
	 * Create objects
	 * @access      Public
	 * @param       Object options
	 */
	$.fn.jqCheckbox = function(options) {
		return this.each(function() {
			return new $.jqCheckbox(this, options);
		});
	};
	
	$.jqCheckbox = function(element,options) {
		//store options etc
		this.element = $(element);
		
		this.options = $.extend({
			skin : 'default' //can be overrided
		},options);
		
		//hide original checkbox
		this.hideOriginalCheckbox();
		
		//set skin
		this.setSkin();
		
		//make text container clickable
		this.setButton();
		
		//initialize checkbox label
		this.initCheckedStatus();
	};
	
	/**
	 * Protected members
	 */
	$.extend($.jqCheckbox.prototype, {
		hideOriginalCheckbox : function() {
			$(this.element).hide();
		},
		
		setSkin : function() {
			$(this.element).next().addClass('jqCheckbox-' + this.options.skin + '-button');
		},
		
		setButton : function() {
			var element = this.element;
			$(element).next().css({cursor : 'pointer'});
			$(element).next().bind('click', function() {
				var checked = $(element).is(':checked');
				if (checked) {
					$(element).attr('checked', '');
					$(element).next().removeClass('active');
				} else {
					$(element).attr('checked', 'checked');
					$(element).next().addClass('active');
				}
				$(element).trigger('change');
			});
		},
		
		initCheckedStatus : function() {
			var element = this.element;
			if ($(element).is(':checked')) {
				$(element).next().addClass('active');
			}
		}
	});
})(jQuery);
