/* * @name: RadioSwitch * @version: 0.2 * @release: 2009-08-31 21:58:25 * @type: jQuery plugin * @author: David Sklar --------------------------------------- */ (function($){var RadioSwitch=function(box,opts){var $this=box;var trigger;var region;var box;var slide;var css;var exception;var easing=[];var duration;var options=opts;trigger=options.trigger;region=$(options.region);css=options.css;box=$('
').css({position:'relative',overflow:'hidden'});slide=$('
').css({position:'relative',overflow:'hidden'});easing.show=$.easing[opts.easing.show]?opts.easing.show:'swing';easing.hide=$.easing[opts.easing.hide]?opts.easing.hide:'swing';duration=options.duration;region.each(function(i){switch(this.nodeName.toLowerCase()){case'tr':$(this).find('th, td').wrapInner(box);break;case'th':case'td':$(this).wrapInner(box);break;default:$(this).addClass(css);}});exception=$this.find(':checked').attr('id');$('.'+css).wrapInner(slide);var slider=$('.'+css).children('div');var parent=$('.'+css).parent();if(parseInt(parent.css('padding-top'))!=0||parseInt(parent.css('padding-bottom'))!=0){slider.css({'padding-top':parseInt(parent.css('padding-top')),'padding-bottom':parseInt(parent.css('padding-bottom'))});parent.css({'padding-top':0,'padding-bottom':0});} slider.data('height',$('.'+css).height());slider.data('dh',$('.'+css).height()-slider.height());if(!$('.'+css).parents().hasClass(exception)){hide($('.'+css));} $this.bind(options.event,function(e){if($(e.target).is(trigger)&&$this.data('log')!=e.target){$this.data('log',e.target);hide($('.'+css));var id=e.target.id;if(id){if($('.'+id).hasClass(css)){show($('.'+id));}else{show($('.'+id).find('.'+css));}}} if(options.prevent){e.preventDefault();}});function show(obj){var box=obj;var slider=obj.children('div');box.animate({height:slider.data('height')+slider.data('dh')},{duration:duration.show/2,easing:easing.show});slider.animate({top:0},{duration:duration.show,easing:easing.show,complete:function(){slider.find(':disabled').removeAttr('disabled');}});};function hide(obj){var box=obj;var slider=obj.children('div');box.find('input, button').attr({disabled:'disabled'});slider.animate({top:(-1)*slider.data('height')},{duration:duration.show/2,easing:easing.hide});box.animate({height:0},{duration:duration.show,easing:easing.hide,complete:function(){}});};};$.fn.radioSwitch=function(options){var opts=$.extend({},{trigger:':radio',event:'click',prevent:false,region:'.part',css:'radio-switch-box',easing:{show:'easeOutQuart',hide:'easeOutQuint'},duration:{show:400,hide:200}},options);return this.each(function(){return new RadioSwitch($(this),opts);});};})(jQuery);