/**
 * dependsOn - shows/hides an element based on the value of another element
 *
 * $(dependence).dependsOn({
 *   selector1: condition,
 *   selector2: condition,
 *   onSuccess: function() {},
 *   onFailure: function() {},
 *   toggleDisplay: true
 * });
 *
 * $('.priceContainer).dependsOn({ '.isChargeable': ':checked' });
 *
 */
(function($) {
	
	$.fn.extend({
		
		dependsOn: function(options) {
			
			var defaults = {
				onSuccess: function() {},
				onFailure: function() {},
				toggleDisplay: true,
				init: true
			};
			
			options = $.extend({}, defaults, options);
			
			var dependencies = {};
			$.each(options, function(key, val) {
				if (undefined === defaults[key]) {
					dependencies[key] = val;
				}
			});
			
			var selectorObj = $(this);
			
			var pass = true;
			
			$.each(dependencies, function(selector, condition) {
				if (options.init) {
					$(selector).bind('click change keyup', function() {
						selectorObj.dependsOn($.extend({}, options, { init: false }));
					});
				}
				
				if (!$(selector).is(condition)) {
					pass = false;
				}
				
			});
			
			if (pass) {
				if (options.toggleDisplay) $(selectorObj).show();
				options.onSuccess.call(selectorObj);
			} else {
				if (options.toggleDisplay) $(selectorObj).hide();
				options.onFailure.call(selectorObj);
			}
			
			return this;
			
		}
		
	});

})(jQuery);


var counter = 0;
