<?php 
/**
 * The CharsetHandler class converts between various charsets
 * 
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 * @copyright (c) 2003 amfphp.org
 * @package flashservices
 * @subpackage io
 * @version $Id$
 */
 
class CharsetHandler
{
	function CharsetHandler($mode)
	{
		$this->_method = CharsetHandler::getMethod();
		$this->_phpCharset = CharsetHandler::getPhpCharset();
		$this->_sqlCharset = CharsetHandler::getSqlCharset();
		$this->_mode = $mode;
		
		$newset = "";
		if($this->_mode == "flashtophp")
		{
			$this->_fromCharset = "utf-8";
			$this->_toCharset = $this->_phpCharset;
			$newset = $this->_phpCharset;
		}
		else if($this->_mode == "phptoflash")
		{
			$this->_fromCharset = $this->_phpCharset;
			$this->_toCharset = "utf-8";
			$newset = $this->_phpCharset;
		}
		else if($this->_mode == "sqltophp")
		{
			$this->_fromCharset = $this->_sqlCharset;
			$this->_toCharset = $this->_phpCharset;
			$newset = $this->_sqlCharset;
		}
		else if($this->_mode == "sqltoflash")
		{
			$this->_fromCharset = $this->_sqlCharset;
			$this->_toCharset = "utf-8";
			$newset = $this->_sqlCharset;
		}
		
		//Don't try to reencode charsets for nothing
		if($this->_fromCharset == $this->_toCharset)
		{
			$this->_method = "none";
		}
	}
	
	function transliterate($string)
	{
		switch($this->_method)
		{
			case "none" :
				return $string;
				break;
			case "iconv":
				return iconv($this->_fromCharset,$this->_toCharset, $string);
				break;
			case "utf8_decode":
				return ($this->_mode == "flashtophp" ? utf8_decode($string) : utf8_encode($string));
				break;
			case "mbstring":
				return mb_convert_encoding($string, $this->_toCharset, $this->_fromCharset);
				break;
			case "recode":
				return recode_string($this->_fromCharset . ".." . $this->_toCharset, $string);
				break;
			default:
				return $string;
				break;
		}
	}
	
	/**
	 * Sets the charset handling method
	 *
	 * @param string $location One of "none", "iconv", "mbstring", "recode"
	 */
	function getMethod($val=NULL)
	{
		static $method = 0;
		if($val != NULL)
		{
			if($val == 'utf8_encode')
			{
				$val = 'utf8_decode';
			}
			$method = $val;
		}
		return $method;
	}
	
	function setMethod($val=0){
		return CharsetHandler::getMethod($val);
	}

	function getPhpCharset($val=NULL)
	{
		static $phpCharset = 0;
		if($val != NULL)
		{
			$phpCharset = strtolower($val);
		}
		return $phpCharset;
	}
	
	function setPhpCharset($val=0){
		return CharsetHandler::getPhpCharset($val);
	}
	
	function getSqlCharset($val=NULL)
	{
		static $sqlCharset = 0;
		if($val != NULL)
		{
			$sqlCharset = strtolower($val);
		}
		return $sqlCharset;
	}
	
	function setSqlCharset($val=0){
		return CharsetHandler::getSqlCharset($val);
	}
}
?>