(function(D){D.fn.htmlClean=function(X){return this.each(function(){var Y=D(this);if(this.value){this.value=D.htmlClean(this.value,X)}else{this.innerHTML=D.htmlClean(this.innerHTML,X)}})};D.htmlClean=function(c,Y){Y=D.extend({},D.htmlClean.defaults,Y);var d=/<(\/)?(\w+:)?([\w]+)([^>]*)>/gi;var j=/(\w+)=(".*?"|'.*?'|[^\s>]*)/gi;var r;var l=new Q();var b=[l];var e=l;var k=false;if(Y.bodyOnly){if(r=/<body[^>]*>((\n|.)*)<\/body>/i.exec(c)){c=r[1]}}c=c.concat("<xxx>");var o;while(r=d.exec(c)){var t=new I(r[3],r[1],r[4],Y);var f=c.substring(o,r.index);if(f.length>0){var a=e.children[e.children.length-1];if(e.children.length>0&&M(a=e.children[e.children.length-1])){e.children[e.children.length-1]=a.concat(f)}else{e.children.push(f)}}o=d.lastIndex;if(t.isClosing){if(J(b,[t.name])){b.pop();e=b[b.length-1]}}else{var X=new Q(t);var Z;while(Z=j.exec(t.rawAttributes)){if(Z[1].toLowerCase()=="style"&&Y.replaceStyles){var g=!t.isInline;for(var n=0;n<Y.replaceStyles.length;n++){if(Y.replaceStyles[n][0].test(Z[2])){if(!g){t.render=false;g=true}e.children.push(X);b.push(X);e=X;t=new I(Y.replaceStyles[n][1],"","",Y);X=new Q(t)}}}if(t.allowedAttributes!=null&&(t.allowedAttributes.length==0||D.inArray(Z[1],t.allowedAttributes)>-1)){X.attributes.push(new A(Z[1],Z[2]))}}D.each(t.requiredAttributes,function(){var u=this.toString();if(!X.hasAttribute(u)){X.attributes.push(new A(u,""))}});for(var m=0;m<Y.replace.length;m++){for(var q=0;q<Y.replace[m][0].length;q++){var p=typeof (Y.replace[m][0][q])=="string";if((p&&Y.replace[m][0][q]==t.name)||(!p&&Y.replace[m][0][q].test(r))){t.render=false;e.children.push(X);b.push(X);e=X;t=new I(Y.replace[m][1],r[1],r[4],Y);X=new Q(t);X.attributes=e.attributes;m=Y.replace.length;break}}}var h=true;if(!e.isRoot){if(e.tag.isInline&&!t.isInline){h=false}else{if(e.tag.disallowNest&&t.disallowNest&&!t.requiredParent){h=false}else{if(t.requiredParent){if(h=J(b,t.requiredParent)){e=b[b.length-1]}}}}}if(h){e.children.push(X);if(t.toProtect){while(tagMatch2=d.exec(c)){var s=new I(tagMatch2[3],tagMatch2[1],tagMatch2[4],Y);if(s.isClosing&&s.name==t.name){X.children.push(RegExp.leftContext.substring(o));o=d.lastIndex;break}}}else{if(!t.isSelfClosing&&!t.isNonClosing){b.push(X);e=X}}}}}return V(l,Y).join("")};D.htmlClean.defaults={Only:true,allowedTags:[],removeTags:["basefont","center","dir","font","frame","frameset","iframe","isindex","menu","noframes","s","strike","u"],removeAttrs:[],allowedClasses:[],notRenderedTags:[],format:false,formatIndent:0,replace:[[["b","big"],"strong"],[["i"],"em"]],replaceStyles:[[/font-weight:\s*bold/i,"strong"],[/font-style:\s*italic/i,"em"],[/vertical-align:\s*super/i,"sup"],[/vertical-align:\s*sub/i,"sub"]]};function H(a,Z,Y,X){if(!a.tag.isInline&&Y.length>0){Y.push("\n");for(i=0;i<X;i++){Y.push("\t")}}}function V(b,h){var Y=[],e=b.attributes.length==0,Z;var c=this.name.concat(b.tag.rawAttributes==undefined?"":b.tag.rawAttributes);var g=b.tag.render&&(h.allowedTags.length==0||D.inArray(b.tag.name,h.allowedTags)>-1)&&(h.removeTags.length==0||D.inArray(b.tag.name,h.removeTags)==-1);if(!b.isRoot&&g){Y.push("<");Y.push(b.tag.name);D.each(b.attributes,function(){if(D.inArray(this.name,h.removeAttrs)==-1){var j=RegExp(/^(['"]?)(.*?)['"]?$/).exec(this.value);var k=j[2];var l=j[1]||"'";if(this.name=="class"){k=D.grep(k.split(" "),function(m){return D.grep(h.allowedClasses,function(n){return n[0]==m&&(n.length==1||D.inArray(b.tag.name,n[1])>-1)}).length>0}).join(" ");l="'"}if(k!=null&&(k.length>0||D.inArray(this.name,b.tag.requiredAttributes)>-1)){Y.push(" ");Y.push(this.name);Y.push("=");Y.push(l);Y.push(k);Y.push(l)}}})}if(b.tag.isSelfClosing){if(g){Y.push(" />")}e=false}else{if(b.tag.isNonClosing){e=false}else{if(!b.isRoot&&g){Y.push(">")}var Z=h.formatIndent++;if(b.tag.toProtect){var d=D.htmlClean.trim(b.children.join("")).replace(/<br>/ig,"\n");Y.push(d);e=d.length==0}else{var d=[];for(var a=0;a<b.children.length;a++){var X=b.children[a];var f=D.htmlClean.trim(C(M(X)?X:X.childrenToString()));if(P(X)){if(a>0&&f.length>0&&(U(X)||E(b.children[a-1]))){d.push(" ")}}if(M(X)){if(f.length>0){d.push(f)}}else{if(a!=b.children.length-1||X.tag.name!="br"){if(h.format){H(X,h,d,Z)}d=d.concat(V(X,h))}}}h.formatIndent--;if(d.length>0){if(h.format&&d[0]!="\n"){H(b,h,Y,Z)}Y=Y.concat(d);e=false}}if(!b.isRoot&&g){if(h.format){H(b,h,Y,Z-1)}Y.push("</");Y.push(b.tag.name);Y.push(">")}}}if(!b.tag.allowEmpty&&e){return[]}return Y}function J(X,Z,Y){Y=Y||1;if(D.inArray(X[X.length-Y].tag.name,Z)>-1){return true}else{if(X.length-(Y+1)>0&&J(X,Z,Y+1)){X.pop();return true}}return false}function Q(X){if(X){this.tag=X;this.isRoot=false}else{this.tag=new I("root");this.isRoot=true}this.attributes=[];this.children=[];this.hasAttribute=function(Y){for(var Z=0;Z<this.attributes.length;Z++){if(this.attributes[Z].name==Y){return true}}return false};this.childrenToString=function(){return this.children.join("")};return this}function A(X,Y){this.name=X;this.value=Y;return this}function I(Y,a,Z,X){this.name=Y.toLowerCase();this.isSelfClosing=D.inArray(this.name,K)>-1;this.isNonClosing=D.inArray(this.name,R)>-1;this.isClosing=(a!=undefined&&a.length>0);this.isInline=D.inArray(this.name,S)>-1;this.disallowNest=D.inArray(this.name,O)>-1;this.requiredParent=F[D.inArray(this.name,F)+1];this.allowEmpty=D.inArray(this.name,B)>-1;this.toProtect=D.inArray(this.name,G)>-1;this.rawAttributes=Z;this.allowedAttributes=L[D.inArray(this.name,L)+1];this.requiredAttributes=W[D.inArray(this.name,W)+1];this.render=X&&D.inArray(this.name,X.notRenderedTags)==-1;return this}function U(X){while(N(X)&&X.children.length>0){X=X.children[0]}return M(X)&&X.length>0&&D.htmlClean.isWhitespace(X.charAt(0))}function E(X){while(N(X)&&X.children.length>0){X=X.children[X.children.length-1]}return M(X)&&X.length>0&&D.htmlClean.isWhitespace(X.charAt(X.length-1))}function M(X){return X.constructor==String}function P(X){return M(X)||X.tag.isInline}function N(X){return X.constructor==Q}function C(X){return X.replace(/&nbsp;|\n/g," ").replace(/\s\s+/g," ")}D.htmlClean.trim=function(X){return D.htmlClean.trimStart(D.htmlClean.trimEnd(X))};D.htmlClean.trimStart=function(X){return X.substring(D.htmlClean.trimStartIndex(X))};D.htmlClean.trimStartIndex=function(X){for(var Y=0;Y<X.length-1&&D.htmlClean.isWhitespace(X.charAt(Y));Y++){}return Y};D.htmlClean.trimEnd=function(X){return X.substring(0,D.htmlClean.trimEndIndex(X))};D.htmlClean.trimEndIndex=function(Y){for(var X=Y.length-1;X>=0&&D.htmlClean.isWhitespace(Y.charAt(X));X--){}return X+1};D.htmlClean.isWhitespace=function(X){return D.inArray(X,T)!=-1};var S=["a","abbr","acronym","address","b","big","br","button","caption","cite","code","del","em","font","hr","i","input","img","ins","label","legend","map","q","samp","select","small","span","strong","sub","sup","tt","var"];var O=["h1","h2","h3","h4","h5","h6","p","th","td"];var B=["th","td"];var F=[null,"li",["ul","ol"],"dt",["dl"],"dd",["dl"],"td",["tr"],"th",["tr"],"tr",["table","thead","tbody","tfoot"],"thead",["table"],"tbody",["table"],"tfoot",["table"]];var G=["script","style","pre","code"];var K=["br","hr","img","link","meta"];var R=["!doctype","?xml"];var L=[["class"],"?xml",[],"!doctype",[],"a",["accesskey","class","href","name","title","rel","rev","type","tabindex"],"abbr",["class","title"],"acronym",["class","title"],"blockquote",["cite","class"],"button",["class","disabled","name","type","value"],"del",["cite","class","datetime"],"form",["accept","action","class","enctype","method","name"],"input",["accept","accesskey","alt","checked","class","disabled","ismap","maxlength","name","size","readonly","src","tabindex","type","usemap","value"],"img",["alt","class","height","src","width"],"ins",["cite","class","datetime"],"label",["accesskey","class","for"],"legend",["accesskey","class"],"link",["href","rel","type"],"meta",["content","http-equiv","name","scheme"],"map",["name"],"optgroup",["class","disabled","label"],"option",["class","disabled","label","selected","value"],"q",["class","cite"],"script",["src","type"],"select",["class","disabled","multiple","name","size","tabindex"],"style",["type"],"table",["class","summary"],"textarea",["accesskey","class","cols","disabled","name","readonly","rows","tabindex"]];var W=[[],"img",["alt"]];var T=[" "," ","\t","\n","\r","\f"]})(jQuery);
