var validateInstance=null;function Validate(b,a){if(validateInstance&&!b){return validateInstance}else{validateInstance=this}this.form=b;this.submitAction=a;$(this.form+" input.validate").change(function(){new Validate().check(this)});$(this.form+" input.validate").blur(function(){new Validate().check(this)});$(this.form).submit(function(){return new Validate().validform()});this.validform=function(){$(this.form+" input.validate").each(function(){if(!$(this).hasClass("valid")){$(this).change()}});if($(this.form+" input.valid").length==$(this.form+" input.validate").length){return this.submitAction()}else{return false}};this.drawErrors=function(){};this.help=function(c){$(this.form+">.help").text(c)};this.check=function(h){var i=$(h).val();var d=$(h).attr("title");if(i.replace(/\s/g,"").length==0){var g=d+" cannot be blank.";this.help(g);$(h).addClass("invalid");return false}if($(h).attr("minlength")&&parseInt($(h).attr("minlength"))>i.length){var g=d+" must be at least "+$(h).attr("minlength")+" character.";this.help(g);$(h).addClass("invalid");return false}if($(h).attr("filter")){var e=new RegExp($(h).attr("filter"),"i");if(e.exec(i)==null){if($(h).attr("help")){var g=$(h).attr("help")}else{var g=d+" is not valid."}this.help(g);$(h).addClass("invalid");return false}}if($(h).attr("match")){var c=$(this.form+" #"+$(h).attr("match")).val();var f=$(this.form+" #"+$(h).attr("match")).attr("title");if(c.length>0){$(this.form+" #"+$(h).attr("match")).removeClass("invalid");if(i!=c){var g=d+" fields do not match.";this.help(g);$(h).addClass("invalid");$(this.form+" #"+$(h).attr("match")).addClass("invalid");return false}}}this.help("");$(h).removeClass("invalid").addClass("valid");return true}}function UI(){this.fit=function(){var a=$(window).height();var b=$(window).width();$("#divMain").css({width:b+"px",height:a+"px"});a-=$("#divTopNav").height();$("#divLeft").css({height:a+"px"});a-=$("#divPreview").attr("offsetHeight");b-=$("#divLeft").attr("offsetWidth");$("#ifmViewer").css({height:a+"px"});$("#ifmViewer").css({width:b+"px"});$("#divPreview").css({width:b+"px"});$("#divPreview").resizable({maxHeight:$(window).height()-$("#divTopNav").attr("offsetHeight"),maxWidth:b,minHeight:60,minWidth:b,handles:"n",resize:function(c,d){new UI().fitVwr()}})};this.fitVwr=function(){availH=$("#divMain").height()-$("#divPreview").height()-$("#divTopNav").height();$("#ifmViewer").css({height:availH+"px"});$("#divPreview").css({top:"0px"});var a=$("#divPreview").height()-$("#divPreview div.nav").height()-$("#divPreview .resize").height();$("#divPreview>div.view").css({height:a+"px"})}}function Text(){this.fit=function(d,c,e){var j=4;var b=1;var h=1;var a=1;var f=1;var g=32;var i=$("#divSizing>span").html(d).css({"font-family":"'"+c+"'"});while(g>2){if(e&&e!=0&&e!=""){j=e}else{j+=g}b=$(i).css({"font-size":j+"px"}).attr("offsetWidth");h=$(i).attr("offsetHeight");a=b;f=h;if(e&&e!=0&&e!=""){break}if(b>maxWidth||h>maxHeight){j-=g;g=g/2}}return{size:j,height:f,width:a}}}function Template(a){this.tmplText=a;this.evaluate=function(f){var e=this.tmplText.match(/\#\{[^}]+\}/g);var g=this.tmplText;for(var c=0;c<e.length;c++){var d=e[c].replace(/[{}#]/g,"");var b="";if(f&&f[d]){b=f[d]}g=g.replace(e[c],b)}return g}}var tag_instance=null;function Tag(){if(tag_instance){return tag_instance}else{tag_instance=this}this.names=[];this.queryUrl="query/query.tag.php";this.rs=null;this.addIcons=function(){var e=$("#divFontInfo .tags").text();$("#divFontInfo .tags").empty();if(e.length==0){return false}e=e.replace(/tag\_/g,"").split(" ");var d="";for(var b in e){for(var c in this.rs){if(parseInt(this.rs[c]["tagid"])==parseInt(e[b])){var a=$("<div></div>").attr("tagid",this.rs[c]["tagid"]).text(this.rs[c]["tagname"]).appendTo("#divFontInfo .tags");$("<a>X</a>").appendTo(a);break}}}};this.unTagFont=function(c){var a=$(".activeFont:first").text();tagId=$(c).parent("div").attr("tagid");$(c).parent("div").remove();var b=$("#ifmViewer").contents().find(".view>div[fontcode="+a+"]").removeClass("tag_"+tagId);$.get(this.queryUrl,{mode:"unTagFont",tagid:tagId,fontcode:a})};this.tagFont=function(c){var a=$(".activeFont:first").text();var b=$(c).val();$(c).val(0);$("#ifmViewer").contents().find(".view>div[fontcode="+a+"]").addClass("tag_"+b);$.get(this.queryUrl,{mode:"tagFont",tagid:b,fontcode:a});var d=$("#ifmViewer").contents().find(".view>div[fontcode="+a+"]");toggleFont(d)};this.del=function(b){var a=$(".tagmenuitem.on").attr("tagid");if(!a){return false}if(!confirm("Are you sure that you want to delete this tag from your catalog?")){return false}$("#ifmViewer").contents().find(".view>div").removeClass("tag_"+a);$.get(this.queryUrl,{mode:"delete",id:a},function(){new Tag().list()})};this.create=function(a){if(a){a=a.replace(/[^a-zA-Z0-9-_ ]/g,"");a=a.replace(/\s+/g," ");if(a.length==0||a==" "){alert("Please provide a tag name. Valid characters are letters, numbers, spaces, hyphens, and underscores.");return false}if($.inArray(a.toLowerCase(),this.names)>0){alert("Tag name already exists.");return false}$.get(this.queryUrl,{mode:"add",name:a},function(){new Tag().list()})}else{a=prompt("Enter new tag name.","");if(a){this.create(a)}}};this.clear=function(){$(".tagselect").empty();$("#divLeftNav>div.tag").remove();$(".tagselect").append($("<option></option>").val(0).text("Tag Font..."))};this.placeTag=function(a,b){$(".tagselect").append($("<option></option>").val(a).text(b));$('<a href="#"></a>').addClass("tagmenuitem tag").attr("title",b).attr("tagid",a).text(b).appendTo("#divLeftNav>div:first");this.names.push(b.toLowerCase())};this.list=function(a){if(typeof a=="undefined"){var b="query/query.tag.php";$.get(b,{mode:"list"},function(d){new Tag().list(d)},"json");return false}$("#divLeftNav>div a.tagmenuitem.tag").remove();this.rs=a;this.clear();for(var c in a){this.placeTag(a[c]["tagid"],a[c]["tagname"])}}}function Stars(a){this.draw=function(b){$("div.stars>div").eq(b).siblings().removeClass("on");$("div.stars>div").eq(b).prevAll().andSelf().addClass("on")};this.set=function(d){var c=$("div.stars>div").index(d);var b=c+1;this.draw(c);var e=$(".activeFont").text();$.get("query/query.font.php",{mode:"rate",value:b,fontcode:e});$("#ifmViewer").contents().find(".view>div[fontcode="+e+"]").attr("rating",b)};if(a){this.draw(a-1)}}var progress=null;function Progress(b){if(progress){return progress}else{progress=this}this.target=b;this.barW=0;this.barH=0;var a=new Image();a.src="images/progress_wheel.gif";this.bar=function(e,c){$(this.target+" .wheel").css({display:"none"});$(this.target+" .progressbar").css({display:"block"});var d=parseInt($(this.target+" .progressbar").width()*(e/c));if(!d||d<0){d=0}$(this.target+" .progressbar>.bar").css({width:d+"px"})};this.wheel=function(c){$(this.target+" .progressbar").css({display:"none"});$(this.target+" .wheel").css({display:"block"});$(this.target+" .wheel>.status").text(c)};this.initialize=function(){var d=0;var c=0;if(!d){d=$(this.target).width()}if(!c){c=$(this.target).height()}this.barW=d;this.barH="30"};this.draw=function(){this.initialize();var e={border:"1px solid #333333",width:this.barW+"px",height:this.barH+"px","line-height":this.barH+"px",overflow:"hidden",display:"none"};var d={"z-index":"2",position:"absolute",overflow:"hidden",color:"#ffffff",width:"0px",background:"#999999"};var c=$("#tmplProgress").html();$(this.target).html(c);$(".progressbar").css(e);$(".bar").css(d)}}var fontbook=null;function Fontbook(a){if(fontbook){return fontbook}else{fontbook=this}this.fonts=a;this.drawInterval=50;this.scaleToFit=true;this.fontCatalog=null;this.updateDB=false;this.fontCnt=0;this.reduce=function(d){var c=[];var g=[];$.each(d,function(){g.push(this["fontcode"])});for(var e in this.fonts){var b=Base64.encode(this.fonts[e].toString());if(!g.length||$.inArray(b,g)===-1){c.push(b)}}if(c.length>0){return c.join(",")}else{return false}};this.build=function(){var b=[];for(var c in a){var d=new Object();d.fontname=a[c];d.tags="bold ";d.swatch100="1";b.push(d)}this.fontCatalog=b};this.catalog=function(h){if(1==2){if(typeof h=="undefined"){var e="query/query.font.php";$.get(e,{mode:"list"},function(f){new Fontbook().catalog(f)},"json");return false}var e="query/query.font.php?mode=catalog";var c=this.reduce(h);new Progress().wheel("requesting data...");if(c){$.post(e,{fonts:c},function(f){new Fontbook().show(f)},"json")}else{new Fontbook().show(h)}}else{if(typeof h=="undefined"){var e="query/query.font.php";$.get(e,{mode:"list"},function(f){new Fontbook().catalog(f)},"json");var d=[];for(var j in this.fonts){var b={fontname:this.fonts[j],fontcode:Base64.encode(this.fonts[j]),titlesize_100:"0",tags:"",rating:""};d.push(b)}new Fontbook().show(d);return false}var c=this.reduce(h);if(c){var e="query/query.font.php?mode=catalog";$.post(e,{fonts:c},function(f){return true},"json")}for(var g in h){$(".view>div[fontcode="+h[g]["fontcode"]+"]").attr({tags:h[g]["tags"],rating:h[g]["rating"]}).addClass(h[g]["tags"])}}};this.save=function(){var f=[];for(var e in this.fontCatalog){var d=this.fontCatalog[e];var b={fontcode:d.fontcode,rating:d.rating,titlesize_100:d.titlesize_100};f.push(b)}$.post("query/query.font.php?mode=catalogJSON",{fonts:$.toJSON(f)})};this.show=function(b){this.fontCatalog=b;for(var c in this.fontCatalog){if(!new Font().ok(this.fontCatalog[c]["fontname"])){this.fontCatalog.splice(c,1)}}$(".fontcnt").text(this.fontCatalog.length);$("#divLoading").find(".status").html("rendering&nbsp;"+this.fontCatalog.length+"&nbsp;fonts");this._ready=function(){this.updateDB=false;fontUI();this._ready=function(){return true};$("#divSizing>span").css({"white-space":"nowrap"});this.drawInterval=300;this.scaleToFit=false;this.drawCatalog("#divListView","The five boxing wizards jump quickly.")};this.drawCatalog("#divSwatchView")};this.drawCatalog=function(c,d){var b=$("<div></div>").appendTo(c);maxWidth=parseInt($(b).css("width"));maxHeight=parseInt($(b).css("height"));if(isNaN(maxWidth)){maxWidth=$(window).width()}$("#divSizing").css({width:maxWidth+"px"});$(c).empty();$("#divStatus").html("");this.drawFonts(c,this.fontCatalog,d)};this._ready=function(){return true};this.drawFonts=function(p,l,o,e,h){if(!h){h=40}if(!e){e=0}if(!o){o=false}var n=l.length;if(this.fontCnt!=0){n=this.fontCnt}for(var g=e;g<(e+h)&&g<n;g++){if(l[g]["fontname"].replace(/\s/g,"")!=""){if(o){var f=o}else{var f=l[g]["fontname"]}var r="";var d="0";if(this.scaleToFit){if(l[g]["titlesize_100"]!=0){r=l[g]["titlesize_100"]}else{this.updateDB=true}var k=new Text().fit(f,l[g]["fontname"],r);r=k.size+"px";l[g]["titlesize_100"]=k.size;var d=parseInt((maxHeight-k.height)/2);if(isNaN(d)||parseInt(d)<0){d=0}}var c={"font-family":"'"+l[g]["fontname"]+"'","font-size":r,"padding-top":d+"px"};var j=p.replace("div","tmpl");if($(j).html()){var m=new Template($(j).html());var q=l[g];q.sample=f;var b=m.evaluate(q);b=$(b).appendTo(p);$(b).find("p.sample").css(c)}else{var b=$("<div></div>").appendTo(p);$("<p></p>").html(f).css(c).appendTo(b)}$(b).attr({padding100:d,titleSz100:l[g]["titlesize_100"],fontcode:l[g]["fontcode"],tags:l[g]["tags"],title:l[g]["fontname"],rating:l[g]["rating"]}).addClass(l[g]["tags"]).get(0).catalog=l[g]}}if(g<n){new Progress().bar(g,n);setTimeout(function(){new Fontbook().drawFonts(p,l,o,g)},new Fontbook().drawInterval)}else{this._ready()}}}var fontInstance=null;function Font(){if(fontInstance){return fontInstance}else{fontInstance=this}this.ok=function(a){if(a=="Times New Roman"){return true}if(/\d+pt\s*$/.test(a)){return false}if(!/[0-9a-zA-Z]+/.test(a)){return false}var b=this.checkOffsetWidth("'"+a+"', 'Times New Roman'","120px");return(b!=this.fallbackWidth())};this.fallbackWidth=function(){if(!this._fallbackWidthCache){this._fallbackWidthCache=this.checkOffsetWidth("Times New Roman","120px")}return this._fallbackWidthCache};this.checkOffsetWidth=function(c,a){var d=document.createElement("p");$(d).css("font-family",c);$(d).css("font-size",a);$(d).css("display","inline");$(d).addClass("font-test");$(d).html("mmmmmmmmml");$("body").append(d);var b=d.offsetWidth;$("body p.font-test").remove();return b};this.smartTag=function(a){var h="";var a=a.toLowerCase();var f={bold:["black","bold"],symbols:["symbols","ornaments","icons","embellishments","dings","fff extras","mt extra"],script:["script","handwriting","cursive","hand"]};for(var i in f){for(var c=0;c<f[i].length;c++){if(a.indexOf(f[i][c])>=0){h+=" tag_"+i;break}}}$("#divFontStat>span").css({"font-size":"40px","font-family":"'"+a+"'","font-weight":"normal","text-transform":"none"});var e=$("#divFontStat>span").text("i").attr("offsetWidth");var b=$("#divFontStat>span").text("m").attr("offsetWidth");if(e==b){h+=" tag_monospace"}if(h.indexOf("tag_bold")<0&&h.indexOf("tag_symbols")<0&&h.indexOf("tag_monospace")<0){$("#divFontStat>span").css({"font-weight":"bold"});var g=$("#divFontStat>span").attr("offsetWidth");if(g==b){h+=" tag_bold"}else{var d=$("#divFontStat>span").css({"font-weight":"normal","text-transform":"uppercase"}).attr("offsetWidth");if(d==b){h+=" tag_bold"}}}return h}}function Dialog(a){this.html="";this.title="";this.top="100px";this.left="200px";this.align="";for(var b in this){if(a[b]){this[b]=a[b]}}this.logoUrl="images/logo_100.png";this.medWin={css:{position:"absolute","z-index":"100",background:"url(images/win/hud_600.png) no-repeat",width:"614px",height:"333px",color:"#ffffff",top:this.top,left:this.left,overflow:"hidden"}};this.closeX={css:{margin:"6px 10px",position:"absolute",height:"14px","line-height":"14px",width:"16px",cursor:"pointer"}};if(this.align=="center"){this.medWin.css.top=($(window).height()-parseInt(this.medWin.css.height))/2+"px";this.medWin.css.left=($(window).width()-parseInt(this.medWin.css.width))/2+"px";if(!this.medWin.css.top||this.medWin.css.top<100){this.medWin.css.top=100}if(this.medWin.css.left<100){this.medWin.css.left=100}}this.initialize=function(){var f=$("<div></div>").css(this.medWin.css).appendTo("body");var d=$("<div></div>").css(this.closeX.css).appendTo(f);var h=$("<div></div>").css({"text-align":"center","line-height":"26px"}).text(this.title).appendTo(f);var e=$("<img>").css({"float":"left",width:"100px",margin:"30px 40px"}).attr({src:this.logoUrl}).appendTo(f);var c=$("<div></div>").css({"float":"left",width:"370px",margin:"20px 20px"}).html(this.html).appendTo(f);$("<br>").css({clear:"both"}).appendTo(f);var g=$("<div></div>").css({padding:"4px 10px",border:"1px solid #cccccc",color:"#cccccc",cursor:"pointer",width:"100px",margin:"auto","text-align":"center"}).text("close window").appendTo(f);$(g).click(function(){$(this).parent("div").remove()});$(d).click(function(){$(this).parent("div").remove()})};this.initialize()};