/*!
 * JS Typograf
 * The Javascript Typography Correcter
 * 
 * @version   1.1 (build 16102010)
 * @author    Васильев Артем <mail@undershot.ru>
 * @link      www.undershot.ru
 * @license   http://www.freebsd.org/copyright/freebsd-license.html
 * @example   typo({obj:["my_button","button2"],bind:"click",type:"norm",txts:["textarea1","bl17~textarea2","+abc"],off:["quotes"]})
 */

(function(undefined){window.typo=window.jstypograf=jstypo=function(TYPO){var a=document,lochash=a.location.pathname.split("/")[1];function init(){var g=lochash,i=g=="forum"||g=="gb"?"message":["brief","message"],b;if(typof(TYPO,"object")){if(TYPO.txts){i=arrayEditor(i,TYPO.txts)}if(inst(i,Array)){for(var o in i){i[o]=typof(i[o],"string")?id(i[o]):i[o];if(i[o]&&i[o].value!=undefined){b=i[o];b.value=runTypograf(b.value)}}}else{b=id(i);b.value=runTypograf(b.value)}}};function id(b){return a.getElementById(b)};function addEvent(a,b,c){try{a.addEventListener(b,c,false)}catch(e){a.attachEvent("on"+b,c)}};function inst(a,b){return a instanceof b};function typof(a,b){return typeof(a)==b};function arrayEditor(a,b){var u=typof(b,"string")?[b]:b,a=typof(a,"string")?[a]:a;for(var i=0,r;i<u.length;i++){u[i]=u[i];r=u.length==1?u[0]:u[i];if(/^\+/g.test(r)){a.push(r.replace(/^\+/g,""))}else if(/^-/g.test(r)){for(var o=0;o<a.length;o++){if(a[o]==r.replace(/^-/g,"")){a.splice(o,a[o]==a[0]?o+1:o)}}}else if(/~/g.test(r)){r=r.split("~");for(var o=0;o<a.length;o++){if(a[o]==r[0]){a[o]=r[1]}}}else{a=b}}return a};function runTypograf(a){var s,sym,m=[],tag="untypo",r=function(a,b){return new RegExp(a,b)},w,off=TYPO.only?[]:!TYPO.off?[]:TYPO.off,opts=["quotes","functions","chars","spaces","dashs"],t=function(a){return off.indexOf(a)==-1},untypo=true;switch(TYPO.type){case"norm":sym=["\u2014","\u00ab","\u00bb","\u2026","\u00a9","\u00ae","\u2122","\u2190","\u2192","\u2191","\u2193","\u2194","\u00b0","\u0301","\u00d7","\u2260","\u00b1","\u2195","\u201E","\u201C"];break;case"html":sym=["&mdash;","&laquo;","&raquo;","&#8230;","&copy;","&reg;","&trade;","&larr;","&rarr;","&uarr;","&darr;","&harr;","&#176;","&#769;","&#215;","&ne;","&#177;","&#8597;","&#8222;","&#8220;"];break};if(TYPO.only){var i=TYPO.only;for(var u=0;u<opts.length;u++){if(typeof i=="object"){if(opts[u]!=i[u]){off.push(opts[u])}}else{if(opts[u]!=i){off.push(opts[u])}}}};a=a.replace(/(\[code\]|<pre[^<>]*?>)/g,"<"+tag+">"+"$1").replace(/(\[\/code\]|<\/pre>)/g,"$1"+"</"+tag+">");s=a.match(r("<"+tag+">[\\s\\S]+?</"+tag+">","g"));if(s){for(var i=0;i<s.length;i++){var re=s[i].replace(r("<\\/?"+tag+">","g"),"");m.push(re);a=a.replace("<"+tag+">"+re+"</"+tag+">","UNTYPO"+i)}};if(t("dashs")){a=a.replace(/([\wА-я]+)—([\wА-я]+)/gi,"$1-$2").replace(/( - |--)/g," "+sym[0]+" ")};if(t("chars")){a=a.replace(/\.{2,4}/g,"…").replace(/(\.|\,|!|\?)([^\w=?:,\."]+)/gi,"$1 $2").replace(/(\? !|\?\?!|!\?|! \?|!!\?)/g,"?!").replace(/(!|\?)(\.|,|\:)/g,"$1").replace(/ (\.|,|!|\?|;|:)/g,"$1").replace(/(\d+?)x(\d+?)/g,"$1"+sym[14]+"$2").replace(/([\d\wА-я]*)\^(\d?)/g,function(b,c,d){return c+(d==1?"\u00b9":d==2?"\u00b2":d==3?"\u00b3":d)}).replace(/!=/g,sym[15]).replace(/\+\/\-/g,sym[16]).replace(/^(\.| ?|,)/g,"").replace(/(\?|!) …/g,"$1..").replace(/([а-яa-z]+)'([a-zа-я]+)?/gi,function(a,b,c){return b+"’"+(c==undefined?"":c)})};a=a.replace(/(http|ftp|sttp|javascript)\: ([^,]+?)/gi,"$1:$2").replace(/(href|src)="([^"]+?)"|/g,function(a,b,c){return a.replace(/ ?/g,"")});if(t("quotes")){a=a.replace(/«|»|”|“|„/g,'"').replace(/(^| |\()"/g,"$1«").replace(/"($| |\.|,|!|\?|:|;|\))/g,"»$1").replace(/«\)/g,"»)").replace(/«( ?)/g,"«").replace(/( ?)»/g,"»").replace(/>"/g,">«").replace(/"</g,"»<").replace(/("{2}|"»)/g,"»»");for(var i=0;i<30;i++){a=a.replace(/«([^"]+?)»/g,function(a,b){return"«"+b.replace(/«/g,"„").replace(/»/g,"“")+"»"}).replace(/„([^"„“«»]+?)»/g,"„$1“")};a=a.replace(/“{2}/g,"“»").replace(/«([^„“«»]+?)“»/g,"„$1“»").replace(/«([^«»]+?)»/g,function(a,b){return"«"+b.replace(/«/g,"„")+"»"}).replace(/(«|»)<(.*)>(«|»)/g,"«<$2>»").replace(/"([^«»]+?)»/g,"«$1»").replace(/=(«|")([^"]+?)(»|")/g,'="$2"').replace(/«([^«»“„]+)«/g,"«$1»").replace(/\."/g,".»").replace(/[ \.,:;]+ ?([\)»“]+)/g,"$1")};a=a.replace(/\( /g,"(").replace(/ \)/g,")").replace(/\(([\s\S]+?)\){2}/g,"($1)");if(t("functions")){a=a.replace(/УДАР\(([\wА-я]{1})\)/g,"$1"+sym[13]).replace(/СТРЛ\(([\wА-я]+?)\)/g,function(b,a){return a=="В"?sym[9]:a=="Н"?sym[10]:a=="Л"?sym[7]:a=="П"?sym[8]:a=="ЛП"?sym[11]:a=="ВН"?sym[17]:b}).replace(/\(([\wА-я]+)\)/g,function(b,a){return a=="c"?sym[4]:a=="r"?sym[5]:a=="tm"?sym[6]:b}).replace(/ГРАД\((\d+?)\)/g,"$1"+sym[12])};if(t("spaces")){a=a.replace(/^ {3,}/g,"  ")};a=a.replace(/ (\))/g,"$1").replace(/ {2}/g," ").replace(/(т\. д|т \. п|т \.к|г \.|\. т \. д)/g,function(a,b){return b.replace(/ /g,"")}).replace(/(\.? )(Вы|Ты|Вам)( |\.)/g,function(a,b,c,d){return b==". "?b+c+d:" "+(c=="Вы"?"вы":c=="Ты"?"ты":c=="Вам"?"вам":c)+d}).replace(/(\d{3})(\d{3})/g,"$1&nbsp;$2").replace(/([«»„“]+)/g,function(a,b){return b=="«"?sym[1]:b=="»"?sym[2]:b=="„"?sym[18]:b=="“"?sym[19]:b}).replace(/…/g,sym[3]);for(var i=0;i<m.length;i++){a=a.replace("UNTYPO"+i,"<"+tag+">"+m[i]+"</"+tag+">")};if(lochash=="forum"||id("addcBut"))untypo=false;a=a.replace(r("(<\\/?"+tag+">)+","g"),function(a,b){return untypo?b:""});return a};if(TYPO.bind){var b=lochash,i=["addcBut",b=="blog"?"blF7":b=="news"?"nwF7":b=="dir"?"drF16":b=="publ"?"puF9":b=="photo"?"phF4":b=="board"?"bdF77":b=="load"?"ldF18":b=="gb"?"gbsbm":b=="forum"?"frF16":""],g;if(TYPO.obj){i=arrayEditor(i,TYPO.obj)};i=typof(i,"object")?i:[i];for(var o in i){i[o]=typof(i[o],"string")?id(i[o]):i[o];if(i[o])addEvent(i[o],TYPO.bind,init)}}}})();
