/*
 * jQuery Expander Plugin v1.3
 *
 * Date: Sat Sep 17 00:37:34 2011 EDT
 * Requires: jQuery v1.3+
 *
 * Copyright 2011, Karl Swedberg
 * Dual licensed under the MIT and GPL licenses (just like jQuery):
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
*/

(function(b){b.expander={version:"1.3",defaults:{slicePoint:450,preserveWords:true,widow:4,expandText:"Read more",expandPrefix:"&hellip; ",summaryClass:"summary",detailClass:"details",moreClass:"read_more",lessClass:"read_less",collapseTimer:0,expandEffect:"fadeIn",expandSpeed:250,collapseEffect:"fadeOut",collapseSpeed:200,userCollapse:true,userCollapseText:"Read less",userCollapsePrefix:" ",onSlice:null,beforeExpand:null,afterExpand:null,onCollapse:null}};b.fn.expander=function(r){function C(a,b){var f= "span",g=a.summary;b?(f="div",g=g.replace(/(<\/[^>]+>)\s*$/,a.moreLabel+"$1"),g='<div class="'+a.summaryClass+'">'+g+"</div>"):g+=a.moreLabel;return[g,"<",f+' class="'+a.detailClass+'"',">",a.details,"</"+f+">"].join("")}function D(a){var b='<span class="'+a.moreClass+'">'+a.expandPrefix;b+='<a href="#">'+a.expandText+"</a></span>";return b}function t(a,b){a.lastIndexOf("<")>a.lastIndexOf(">")&&(a=a.slice(0,a.lastIndexOf("<")));b&&(a=a.replace(E,""));return a}function u(a,b){b.stop(true,true)[a.collapseEffect](a.collapseSpeed, function(){b.prev("span."+a.moreClass).show().length||b.parent().children("div."+a.summaryClass).show().find("span."+a.moreClass).show()})}function F(a,o,f){a.collapseTimer&&(v=setTimeout(function(){u(a,o);b.isFunction(a.onCollapse)&&a.onCollapse.call(f,false)},a.collapseTimer))}var w=b.extend({},b.expander.defaults,r),G=/^<(?:area|br|col|embed|hr|img|input|link|meta|param).*>$/i,E=/(&(?:[^;]+;)?|\w+)$/,H=/<\/?(\w+)[^>]*>/g,x=/<(\w+)[^>]*>/g,y=/<\/(\w+)>/g,I=/^<[^>]+>.?/,v;this.each(function(){var J; var a,o,f,g,i,h,k,s,z=[],p=[],l={},m=this,e=b(this),A=b([]),c=b.meta?b.extend({},w,e.data()):w;h=!!e.find("."+c.detailClass).length;var n=!!e.find("*").filter(function(){return/^block|table|list/.test(b(this).css("display"))}).length,q=(n?"div":"span")+"."+c.detailClass,B="span."+c.moreClass,r=c.expandSpeed||0,j=b.trim(e.html());b.trim(e.text());var d=j.slice(0,c.slicePoint);if(!b.data(this,"expander")){b.data(this,"expander",true);b.each(["onSlice","beforeExpand","afterExpand","onCollapse"],function(a, d){l[d]=b.isFunction(c[d])});d=t(d);for(summTagless=d.replace(H,"").length;summTagless<c.slicePoint;)newChar=j.charAt(d.length),newChar=="<"&&(newChar=j.slice(d.length).match(I)[0]),d+=newChar,summTagless++;d=t(d,c.preserveWords);g=d.match(x)||[];i=d.match(y)||[];f=[];b.each(g,function(a,b){G.test(b)||f.push(b)});g=f;o=i.length;for(a=0;a<o;a++)i[a]=i[a].replace(y,"$1");b.each(g,function(a,c){var d=c.replace(x,"$1"),e=b.inArray(d,i);e===-1?(z.push(c),p.push("</"+d+">")):i.splice(e,1)});p.reverse(); if(h)a=e.find(q).remove().html(),d=e.html(),j=d+a,h="";else{a=j.slice(d.length);if(a.split(/\s+/).length<c.widow&&!h)return;h=p.pop()||"";d+=p.join("");a=z.join("")+a}c.moreLabel=e.find(B).length?"":D(c);n&&(a=j);d+=h;c.summary=d;c.details=a;c.lastCloseTag=h;l.onSlice&&(J=(f=c.onSlice.call(m,c))&&f.details?f:c,c=J);n=C(c,n);e.html(n);k=e.find(q);s=e.find(B);k.hide();s.find("a").unbind("click.expander").bind("click.expander",function(a){a.preventDefault();s.hide();A.hide();l.beforeExpand&&c.beforeExpand.call(m); k.stop(false,true)[c.expandEffect](r,function(){k.css({zoom:""});l.afterExpand&&c.afterExpand.call(m);F(c,k,m)})});A=e.find("div."+c.summaryClass);c.userCollapse&&!e.find("span."+c.lessClass).length&&e.find(q).append('<span class="'+c.lessClass+'">'+c.userCollapsePrefix+'<a href="#">'+c.userCollapseText+"</a></span>");e.find("span."+c.lessClass+" a").unbind("click.expander").bind("click.expander",function(a){a.preventDefault();clearTimeout(v);a=b(this).closest(q);u(c,a);l.onCollapse&&c.onCollapse.call(m, true)})}});return this};b.fn.expander.defaults=b.expander.defaults})(jQuery);
