if (typeof(calUtil) == 'undefined') {
    calUtil = {};
}
if (typeof(calUtil.String) == 'undefined') {
    calUtil.String = {};
}

calUtil.String.repairString = function(str) {
    var len = str.length;
    var rlen = 0;
    var s = "";
    for (var i=0 ; i  < len; i++) {
        var ch = str.charCodeAt(i);
        if (ch == 0x301c) s += String.fromCharCode(0xff5e);
        else if(ch == 0x2212) s += String.fromCharCode(0xff0d);
        else if(ch == 0x2013) s += String.fromCharCode(0x2d);
        else if(ch == 0x2014) s += String.fromCharCode(0x2015);
        else if(ch == 0x2016) s += String.fromCharCode(0x2225);
        else if(ch == 0x2016) s += String.fromCharCode(0x2225);
        else s += String.fromCharCode(ch);
    }
    return s;
}

calUtil.String.strLength = function (str) {
    var len = str.length;
    var rlen = 0;
    for (var i=0 ; i  < len; i++) {
        var ch = str.charCodeAt(i);
        if (ch < 255) {
            ++rlen;
        } else {
            rlen += 2;
        }
    }
    return rlen;
}

calUtil.String.EUC_89_92 = '4f00,4f03,4f39,4f56,4f92,4f8a,4f9a,4f94,4fcd,5040,5022,4fff,501e,5046,5070,5042,5094,50f4,50d8,514a,5164,519d,51be,51ec,5215,529c,52a6,52c0,52db,5300,5307,5324,5372,5393,53b2,53dd,fa0e,549c,548a,54a9,54ff,5586,5759,5765,57ac,57c8,57c7,fa0f,fa10,589e,58b2,590b,5953,595b,595d,5963,59a4,59ba,5b56,5bc0,752f,5bd8,5bec,5c1e,5ca6,5cba,5cf5,5d27,5d53,fa11,5d42,5d6d,5db8,5db9,5dd0,5f21,5f34,5f67,5fb7,5fde,605d,6085,608a,60de,60d5,6120,60f2,6111,6137,6130,6198,6213,62a6,63f5,6460,649d,64ce,654e,6600,6615,663b,6609,662e,661e,6624,6665,6657,6659,fa12,6673,6699,66a0,66b2,66bf,66fa,670e,f929,6766,67bb,6852,67c0,6801,6844,68cf,fa13,6968,fa14,6998,69e2,6a30,6a6b,6a46,6a73,6a7e,6ae2,6ae4,6bd6,6c3f,6c5c,6c86,6c6f,6cda,6d04,6d87,6d6f,6d96,6dac,6dcf,6df8,6df2,6dfc,6e39,6e5c,6e27,6e3c,6ebf,6f88,6fb5,6ff5,7005,7007,7028,7085,70ab,710f,7104,715c,7146,7147,fa15,71c1,71fe,72b1,72be,7324,fa16,7377,73bd,73c9,73d6,73e3,73d2,7407,73f5,7426,742a,7429,742e,7462,7489,749f,7501,756f,7682,769c,769e,769b,76a6,fa17,7746,52af,7821,784e,7864,787a,7930,fa18,fa19,fa1a,7994,fa1b,799b,7ad1,7ae7,fa1c,7aeb,7b9e,fa1d,7d48,7d5c,7db7,7da0,7dd6,7e52,7f47,7fa1,fa1e,8301,8362,837f,83c7,83f6,8448,84b4,8553,8559,856b,fa1f,85b0,fa20,fa21,8807,88f5,8a12,8a37,8a79,8aa7,8abe,8adf,fa22,8af6,8b53,8b7f,8cf0,8cf4,8d12,8d76,fa23,8ecf,fa24,fa25,9067,90de,fa26,9115,9127,91da,91d7,91de,91ed,91ee,91e4,91e5,9206,9210,920a,923a,9240,923c,924e,9259,9251,9239,9267,92a7,9277,9278,92e7,92d7,92d9,92d0,fa27,92d5,92e0,92d3,9325,9321,92fb,fa28,931e,92ff,931d,9302,9370,9357,93a4,93c6,93de,93f8,9431,9445,9448,9592,f9dc,fa29,969d,96af,9733,973b,9743,974d,974f,9751,9755,9857,9865,fa2a,fa2b,9927,fa2c,999e,9a4e,9ad9,9adc,9b75,9b72,9b8f,9bb1,9bbb,9c00,9d70,9d6b,fa2d,9e19,9ed1,ffe4,ff07,ff02';

calUtil.String.checkDependChar = function (str) {
    if (str == "") {
        return false;
    }
    var len = str.length;
    var dep = {"std": new Array(), "kana":new Array()};
    for (var i=0 ; i  < len; i++) {
        var ch = str.charCodeAt(i);
        if (ch < 255) {
            if (ch >= 160 && ch <= 207) {
                dep['std'][ch] = String.fromCharCode(ch);
                continue;
            }
            continue;
        } else {
            var cx = ch.toString(16);
            cx = cx.length == 3 ? "0"+cx : cx;
            if ((ch >= 0x2150 && ch <= 0x218F) ||
                (ch >= 0x2194 && ch <= 0x219F) ||
                (ch >= 0x2460 && ch <= 0x24EF) ||
                (ch >= 0x2600 && ch <= 0x2604) ||
                (ch >= 0x2607 && ch <= 0x2660) ||
                (ch >= 0x3220 && ch <= 0x324F) ||
                (ch >= 0x3280 && ch <= 0x33FF) ||
                (ch >= 0x2460 && ch <= 0x24EF)) {
                dep['std'][ch] = String.fromCharCode(ch);
            } else if (ch >= 0xFF61 && ch <= 0xFF9F) {
                dep['kana'][ch] = String.fromCharCode(ch);
            } else if (ch == 0xFFFD) {
                dep['std'][ch] = String.fromCharCode(ch);
            } else if (calUtil.String.EUC_89_92.indexOf(cx) != -1) {
                dep['std'][ch] = String.fromCharCode(ch);
            } else if (ch == 0xFFE0 || ch == 0xFFE1) {
                dep['std'][ch] = String.fromCharCode(ch);
            }
        }
    }

    var r = {};
    for (var l in dep) {
        if (dep[l].length == 0) continue;
        else r[l] = new Array();
        for (var i in dep[l]) {
            r[l][r[l].length] = dep[l][i];
        }
    }
    return r;
}

if("aa".replace(/\w/g,function(){return arguments[1]+" "})!=="0 1 "){
String.prototype.replace=function(replace){return function(reg,func){
	String.prototype.__replace__=replace;
	if(func.constructor!==Function)
		var r=this.__replace__(reg,func);
	else {
		function getMatches(reg,pos,a) {
			function io() {
				var a=reg.indexOf("(",pos),b=a;
				while(a>0&&reg.charAt(--a)==="\\"){};
				pos=b!==-1?b+1:b;
				return (b-a)%2===1?1:0;
			};
			do{a+=io()}while(pos!==-1);
			return a;
		};
		var p=-1,i=getMatches(""+reg,0,0),r="",args=[],matches=this.match(reg);
		while(i)args[--i]='"$'+(i+1)+'"';
		if(!args.length)r="matches[i],(p=this.indexOf(matches[i++],p+1)),this";
		else		r="matches[i],"+args.join(",")+",(p=this.indexOf(matches[i++],p+1)),this";
		r=eval('["'+this.__replace__(/(\\|"|')/g,'\\$1').__replace__(reg,'",func('+r+'),"').__replace__(/\r/g,'\\r').__replace__(/\n/g,'\\n')+'"].join("")');
	};
	delete String.prototype.__replace__;
	return r;
}}(String.prototype.replace)};
