/*! kerning-ja.js - v0.1.0 - 2014-09-30
* https://github.com/kerning-ja.js
* Copyright (c) 2014 Karappo Inc; Licensed MIT */
"use strict";!function(global,d){function Kerning(a,b,c){if(null==c&&(c=!1),a="object"==typeof a?a:document.querySelectorAll(a),a.hasOwnProperty("length"))for(var d=0,e=a.length;e>d;d++)Kerning.kerning.call(a[d],b,c);else Kerning.kerning.call(a,b,c);return a}var merge=function(a,b){var c={};for(var d in a)c[d]=a[d];for(var d in b)c[d]=b[d];return c},mergeRecursive=function(){var a,b,c,d,e,f,g,h=[].slice;return g=Object.prototype.toString,c=function(a){var b;return"[object Array]"!==(b=g.call(a))&&"[object Object]"!==b||null===a},b=function(a){return null!==a&&"[object Object]"===g.call(a)},a=function(a){return"[object Array]"===g.call(a)},d=function(a,b){var d,h;if(c(a)||c(b))throw new Error("Can not merge scalar objects.");if(d=g.call(a),h=g.call(b),d!==h)throw new Error("Can not merge "+d+" with "+h+".");switch(d){case"[object Array]":return e(a,b);case"[object Object]":return f(a,b);default:throw new Error("Can not merge "+d+" objects.")}},e=function(c,e){var f,g,h,i,j,k,l,m,n;for(f=[],g=k=0,m=e.length;m>k;g=++k)i=e[g],h=c[g],b(h)&&b(i)||a(h)&&a(i)?c[g]=d(h,i):f.push(b(i)?d({},i):a(i)?d([],i):i);for(l=0,n=f.length;n>l;l++)j=f[l],c.push(j);return c},f=function(a,e){var f,g,h;for(f in e)h=e[f],e.hasOwnProperty(f)&&"__proto__"!==f&&(c(h)?a.hasOwnProperty(f)||(a[f]=h):a.hasOwnProperty(f)?a[f]=d(a[f],h):(g=b(h)?{}:[],a[f]=d(g,h)));return a},function(){var a,b,c,e,f;for(a=arguments[0],c=2<=arguments.length?h.call(arguments,1):[],e=0,f=c.length;f>e;e++)b=c[e],a=d(a,b);return a}}(this);Kerning.defaults={removeTags:!1,removeAnchorTags:!1,data:{kerning:{"、":[0,-.4],"。":[0,-.4],"(":[-.4,0],")":[0,-.4],"〔":[-.4,0],"〕":[0,-.4],"[":[-.4,0],"]":[0,-.4],"{":[-.4,0],"}":[0,-.4],"〈":[-.4,0],"〉":[0,-.4],"《":[-.4,0],"》":[0,-.4],"「":[-.4,0],"」":[0,-.4],"『":[-.4,0],"』":[0,-.4],"【":[-.4,0],"】":[0,-.4],"・":[-.22,-.22],":":[-.22,-.22],";":[-.22,-.22],"|":[-.22,-.22]}}},Kerning.cache={},Kerning.storage=global.hasOwnProperty("sessionStorage")?sessionStorage:!1,Kerning.storageKey="kerning-ja-%s",Kerning.getJSON=function(a,b,c){if(!c&&Kerning.loadSessionStorage(a),!c&&Kerning.cache.hasOwnProperty(a)&&"object"==typeof Kerning.cache[a])return void("function"==typeof b&&b(Kerning.cache[a]));var d=new XMLHttpRequest;d.onreadystatechange=function(){if(4==d.readyState){if(200!=d.status&&-1!=global.location.href.indexOf("http"))throw new Error("An error has occured making the request.");Kerning.cache[a]=Kerning.parseJSON(d.responseText),"function"==typeof b&&b(Kerning.cache[a])}},d.open("GET",a,!0),d.send(null)},Kerning.parseJSON=function(text){var O_o,o_O,obj;obj=null;try{return obj=JSON.parse(text)}catch(_error){O_o=_error,console.log("kerning-ja.js : [WARN] As a result of JSON.parse, a trivial problem has occurred")}try{obj=eval("("+text+")")}catch(_error){return o_O=_error,console.error("kerning-ja.js : [ERROR] JSON.parse failed"),null}return obj},Kerning.loadSessionStorage=function(a){if(Kerning.storage&&(!Kerning.cache.hasOwnProperty(a)||"object"!=typeof Kerning.cache[a])){var b=Kerning.storage.getItem(Kerning.storageKey.replace("%s",encodeURIComponent(a)));b&&"string"==typeof b&&(Kerning.cache[a]=JSON.parse(b))}},Kerning.saveSessionStorage=function(a,b){Kerning.storage&&Kerning.storage.setItem(Kerning.storageKey.replace("%s",encodeURIComponent(a)),JSON.stringify(b))},Kerning.kerning=function(a,b){var c,d,e,f,g,h,i,j;return h=this,c=h,j=h.innerHTML,h.kerningBefore=h.kerningBefore||j,d="",i=f=null,e=function(){return h.innerHTML=h.kerningBefore,h},g=function(a){function c(a){for(var b=[],d=a.childNodes,e=0,f=d.length;f>e;e++){var g=d[e];"#text"===g.nodeName?b.push(g):b=b.concat(c(g))}return b}function d(a,b){var c=a.parentNode,d=document.createElement("div");d.innerHTML=b,c.insertBefore(d,a.nextSibling),c.removeChild(a),d.outerHTML=d.innerHTML}function g(a){var b,c,d,e,g,h="";for(b=0,c=a.length;c>b;b++)d=a[b],e=0,g=0,f[d]?(e=f[d][0],g=f[d][1],h+=0!=e||0!=g?'<span data-kerned style="display:inline-block;margin-left:'+e+"em;margin-right:"+g+'em;">'+d+"</span>":d):h+=d;return h}function j(a){return a.replace(/<(".*?"|'.*?'|[^'"])*?>/g,function(a){return a.match(/^<\/?a[\s>]{1}/i)?a:""})}var k,l;h.querySelectorAll("[data-kerned]").length&&e(),i=b?mergeRecursive({},Kerning.defaults,a):merge(Kerning.defaults,a),f=i.data.kerning,i.removeAnchorTags?h.innerHTML=j(h.innerHTML):i.removeTags&&(h.innerHTML=h.textContent);for(var m=c(h),k=0,l=m.length;l>k;k++){var n=m[k];d(n,g(n.nodeValue))}return h},"string"==typeof a?"destroy"===a?(e(),h):-1!=a.indexOf(".json")?Kerning.getJSON(a,function(a){return g({data:a})}):(console.error("kerning-ja.js : [ERROR] Invalid configure"),h):g(a)},Kerning.attach=function(a,b){a=a||"[data-kerning]",global.addEventListener("DOMContentLoaded",function(){for(var c="object"==typeof a?a:d.querySelectorAll(a),e=0,f=c.length;f>e;e++){var g=c[e],h=null,i=g.dataset.kerning;i?(h=0<=i.indexOf("{")?Kerning.parseJSON(i):i,Kerning(g,h,g.dataset["kerning-extend"])):b?Kerning(g,b):Kerning(g)}},!1)},global.Kerning=Kerning}(this,document);