/**
 * String.prototype.full2half
 */
String.prototype.full2half = function() {
	var str = '';
	var full = ['。', '、', '「', '」', '・', 'ー', '　',
		'ァ', 'ア', 'ィ', 'イ', 'ゥ', 'ウ', 'ェ', 'エ', 'ォ', 'オ', 
		'カ', 'ガ', 'キ', 'ギ', 'ク', 'グ', 'ケ', 'ゲ', 'コ', 'ゴ', 
		'サ', 'ザ', 'シ', 'ジ', 'ス', 'ズ', 'セ', 'ゼ', 'ソ', 'ゾ', 
		'タ', 'ダ', 'チ', 'ヂ', 'ッ', 'ツ', 'ヅ', 'テ', 'デ', 'ト', 'ド', 
		'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 
		'ハ', 'バ', 'パ', 'ヒ', 'ビ', 'ピ', 'フ', 'ブ', 'プ', 'ヘ', 'ベ', 'ペ', 'ホ', 'ボ', 'ポ', 
		'マ', 'ミ', 'ム', 'メ', 'モ', 
		'ャ', 'ヤ', 'ュ', 'ユ', 'ョ', 'ヨ', 
		'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ヲ', 'ン', 'ヴ'
	];
	var half = ['｡', '､', '｢', '｣', '･', 'ｰ', ' ',
		'ｧ', 'ｱ', 'ｨ', 'ｲ', 'ｩ', 'ｳ', 'ｪ', 'ｴ', 'ｫ', 'ｵ', 
		'ｶ', 'ｶﾞ', 'ｷ', 'ｷﾞ', 'ｸ', 'ｸﾞ', 'ｹ', 'ｹﾞ', 'ｺ', 'ｺﾞ', 
		'ｻ', 'ｻﾞ', 'ｼ', 'ｼﾞ', 'ｽ', 'ｽﾞ', 'ｾ', 'ｾﾞ', 'ｿ', 'ｿﾞ', 
		'ﾀ', 'ﾀﾞ', 'ﾁ', 'ﾁﾞ', 'ｯ', 'ﾂ', 'ﾂﾞ', 'ﾃ', 'ﾃﾞ', 'ﾄ', 'ﾄﾞ',
		 'ﾅ', 'ﾆ', 'ﾇ', 'ﾈ', 'ﾉ', 
		 'ﾊ', 'ﾊﾞ', 'ﾊﾟ', 'ﾋ', 'ﾋﾞ', 'ﾋﾟ', 'ﾌ', 'ﾌﾞ', 'ﾌﾟ', 'ﾍ', 'ﾍﾞ', 'ﾍﾟ', 'ﾎ', 'ﾎﾞ', 'ﾎﾟ', 
		 'ﾏ', 'ﾐ', 'ﾑ', 'ﾒ', 'ﾓ', 
		 'ｬ', 'ﾔ', 'ｭ', 'ﾕ', 'ｮ', 'ﾖ', 
		 'ﾗ', 'ﾘ', 'ﾙ', 'ﾚ', 'ﾛ', 'ﾜ', 'ｦ', 'ﾝ', 'ｳﾞ'
	];
	var reg = new RegExp('[' + full.join('') +']', 'g');
	var mapping = [];
	for (var i = 0, l = full.length; i < l; i++) {
		mapping[full[i]] = half[i];
	}
	for ( var i=0, len=this.length; i<len; i++ ) {
		if ( this.charCodeAt(i) >= 0xff01 && this.charCodeAt(i) <= 0xff5e ) {
			str += String.fromCharCode(0x0021+(this.charCodeAt(i)-0xff01));
		} else {
			str += this.charAt(i);
		}
	}
	return str.replace(reg, function(idx){
		return mapping[idx];
	});
};
