/**
* FOMA絵文字変換ベースクラス
* @author horikawa_t <horikawa.takahiro@gmail.com>
* @original_author   ryster <ryster@php-develop.org>
* @license  http://www.opensource.org/licenses/mit-license.php The MIT License
*/

var MPC_DC = function(){};
MPC_DC.prototype =
{
	/**
	* i-mode絵文字画像格納パス
	* @var string
	*/
	i_img_path : "img/i/",

	/**
	* 文字列からi-mode絵文字を検出し、指定されたフォーマットに変換
	* 基本・拡張・隠し絵文字一部対応
	* @return string
	*/
	convert : function(str)
	{
		//Firefoxから数値参照が直接渡ってこないので、とりあえずコメントアウト
		//var re1 = /\&\#x([a-f0-9]{4});/ig;
		//var re2 = /\&\#([0-9]{5});/ig;
		//var _this = this;
		//Unicodeの16進数値文字参照をimgタグ形式に変換
		//str  = str.replace(re1, function(whole, s1){ var udec = parseInt(s1,16); return _this.isPictogramDec(udec) ? _this.i_options_encode(udec) : s1 ; });
		//SJISの10進数値文字参照をimgタグ形式に変換
		//str  = str.replace(re2, function(whole, s1){ var udec = sdec2udec(s1); return _this.isPictogramDec(udec) ? _this.i_options_encode(udec) : s1 ; });
		
		//バイナリをimgタグ形式に変換
		var hexstrings = unpack(str);
		var r = "";
		var change = false;
		for(var i=0; i<hexstrings.length; i++) {
			var hex = hexstrings[i];
			// 絵文字変換処理
			if (this.isPictogram(hex)) {
				var dec = parseInt(hex, 16);
				r += this.i_options_encode(dec);
				change++;
			} else {
				r += String.fromCharCode(parseInt(hex,16));
			}
		}
		return change ? r : false;
	},

	/**
	* 与えられたUnicode16進数文字列がi-mode絵文字かどうか、チェック
	*/
	isPictogram : function(ch)
	{
		ch = parseInt(ch, 16);
		return this.isPictogramDec(ch);
	},
	
	/**
	* 与えられたUnicode10進数がi-mode絵文字かどうか、チェック
	*/
	isPictogramDec : function(ch)
	{
		var result;
		if(ch >= 256){
			//dump("isPictogram("+ch+")");
			var char1 = parseInt(ch/256);
			var char2 = ch%256;
			if ((char1 == 0xE6) && (char2 >= 0x3E) || (char1 == 0xE7) && (char2 <= 0x57)) {
				result = true;
			} else {
				result = false;
			}
			//dump("=>"+result+"\n");
		}else{
			result = false;
		}
		return result;
	},

	/**
	* 絵文字画像格納ディレクトリの一括設定
	* 
	* @param string path
	*/
	setImagePath : function(path)
	{
		path.replace(RegExp('/*$'),'');
		this.i_img_path = path+'/i/';
	},

	/**
	* i-mode絵文字（10進数）をimgタグ形式へ変換
	* @param  integer dec
	* @return string
	*/
	i_options_encode : function(dec)
	{
		var buf = '<img src="'+this.i_img_path.replace(/[/]*$/g, "")+'/'+dec+'.gif" alt="" border="0" width="12" height="12" />';
		return buf;
	}
};

function unpack(str){
	var last = str.length;
	var ret = Array(last);
	for (var i = 0; i < last; i++) {
		ret[i] = str.charCodeAt(i).toString(16);
	}
	return ret;
}

//Firefoxから数値参照が直接渡ってこないので、とりあえずコメントアウト
/*
function sdec2udec(i){
	i=parseInt(i);
	var hex;
	var a = "0"+i.toString(16);
	if(i>=256){
		var char1 = a.slice(-4,-2);
		var char2 = a.slice(-2);
		hex = "%"+char1+"%"+char2;
	}else{
		var char1 = a.slice(-2);
		hex = "%"+char1;
	}
	var unicode = EscapeUnicode(UnescapeSJIS(hex));
	if(unicode.match(/^\%u[0-9A-F]{4}$/) || unicode.match(/^\%[0-9A-F]{2}$/)){
		dump("return"+parseInt(unicode.substring(2,6),16)+"\n");
		return parseInt(unicode.substring(2,6),16);
	}else{
		return undefined;
	}
}
*/

