<?php
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
/**
* @version $Id: class_currency_display.php,v 1.2 2005/01/27 19:33:39 soeren_nb Exp $
* @package mambo-phpShop
* 
* Adaption for Mambo:
* 	@copyright (C) 2004-2005 Soeren Eberhardt
*
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* mambo-phpShop is Free Software.
* mambo-phpShop comes with absolute no warranty.
*
* www.mambo-phpshop.net
*/
if(!defined("_CLASS_CURRENCY_DISPLAY_LOADED")) {
	define("_CLASS_CURRENCY_DISPLAY_LOADED", true);

	// ============================================================
	// ================ CURRENCY DISPLAY ==========================
	// ============================================================
	// == version : 1.1	    (class_currency_display.php)
	// ============================================================
	// ==== Description
	// == Currency display class : format money values for display
	// ==== Relationships :
	// == None, but may be ideally used with CurrencyConvert class
	// ============================================================
	// ==== History :
	// == 16/11/2000 : S. Mouton	First Version
	// == 29/11/2000 : S. Mouton	Added euro conversion euro
	// == 27/02/2001 : S. Mouton	Full re organisation : separate between DB and non DB version
	// == 14/03/2001 : S. Mouton    Minor bug in negative displays corrected
	// ============================================================

	class CurrencyDisplay {
		var $id      		= "euro";		// string ID related with the currency (ex : language)
		var $symbol    		= "&euro;";	// Printable symbol
		var $nbDecimal 		= 2;	// Number of decimals past colon (or other)
		var $decimal   		= ",";	// Decimal symbol ('.', ',', ...)
		var $thousands 		= " "; 	// Thousands separator ('', ' ', ',')
		var $positivePos	= 1;	// Currency symbol position with Positive values :
									// 0 = '00Symb'
									// 1 = '00 Symb'
									// 2 = 'Symb00'
									// 3 = 'Symb 00'
		var $negativePos	= 8;	// Currency symbol position with Negative values :
									// 0 = '(Symb00)'
									// 1 = '-Symb00'
									// 2 = 'Symb-00'
									// 3 = 'Symb00-'
									// 4 = '(00Symb)'
									// 5 = '-00Symb'
									// 6 = '00-Symb'
									// 7 = '00Symb-'
									// 8 = '-00 Symb'
									// 9 = '-Symb 00'
									// 10 = '00 Symb-'
									// 11 = 'Symb 00-'
									// 12 = 'Symb -00'
									// 13 = '00- Symb'
									// 14 = '(Symb 00)'
									// 15 = '(00 Symb)'
	// ================		 
	function CurrencyDisplay(	$id			="euro",
								$symbol		="&euro;",
								$nbDecimal	= 2,
								$decimal   	= ",",
								$thousands 	= " ",
								$positivePos= 1,
								$negativePos= 8){
		$this->id		 = $id;
		$this->symbol    = $symbol;
		$this->nbDecimal = $nbDecimal;
		$this->decimal   = $decimal;
		$this->thousands = $thousands;
		$this->positivePos = $positivePos;
		$this->negativePos = $negativePos;
	}

	// ================
	function getSymbol(){
		return($this->symbol);
	}

	// ================
	function getId(){
		return($this->id);
	}
	// ================
	function getValue($nb){
		$res = "";		
		// Warning ! number_format function performs implicit rounding
		// Rounding is not handled in this DISPLAY class
		// that's why you have to use the right decimal value.
		// Workaround :number_format accepts either 1, 2 or 4 parameters.
		// this cause problem when no thousands separator is given : in this
		// case, an unwanted ',' is displayed.
		// That's why we have to do the work ourserlve.
		// Note : when no decimal il given (i.e. 3 parameters), everything works fine
		if ($this->thousands != ''){
			$res=number_format($nb,$this->nbDecimal,$this->decimal,$this->thousands);
		} else {
			// If decimal is equal to defaut thousand separator, apply a trick
			if ($this->decimal==','){
				$res=number_format($nb,$this->nbDecimal,$this->decimal,'|');
				$res=str_replace('|','',$res);			
			} else {
				// Else a simple substitution is enough
				$res=number_format($nb,$this->nbDecimal,$this->decimal,$this->thousands);
				$res=str_replace(',','',$res);
			}
		}
		return($res);
	}

	// ================
	function getFullValue($nb){
		$res = "";
		// Currency symbol position
		if ($nb == abs($nb)){
			$res=$this->getValue($nb);
			// Positive number
			switch ($this->positivePos){
			case 0:
				// 0 = '00Symb'
				$res=$res.$this->symbol;
			break;
			case 2:
				// 2 = 'Symb00'
				$res=$this->symbol.$res;
			break;
			case 3:
				// 3 = 'Symb 00'
				$res=$this->symbol.' '.$res;
			break;
			case 1:
			default :
				// 1 = '00 Symb'
				$res=$res.' '.$this->symbol;
			break;
			}
		} else {
			// Negative number
			$res=$this->getValue(abs($nb));
			switch ($this->negativePos){
			case 0:
				// 0 = '(Symb00)'
				$res='('.$this->symbol.$res.')';
			break;
			case 1:
				// 1 = '-Symb00'
				$res='-'.$this->symbol.$res;
			break;
			case 2:
				// 2 = 'Symb-00'
				$res=$this->symbol.'-'.$res;
			break;
			case 3:
				// 3 = 'Symb00-'
				$res=$this->symbol.$res.'-';
			break;
			case 4:
				// 4 = '(00Symb)'
				$res='('.$res.$this->symbol.')';
			break;
			case 5:
				// 5 = '-00Symb'
				$res='-'.$res.$this->symbol;
			break;
			case 6:
				// 6 = '00-Symb'
				$res=$res.'-'.$this->symbol;
			break;
			case 7:
				// 7 = '00Symb-'
				$res=$res.$this->symbol.'-';
			break;
			case 9:
				// 9 = '-Symb 00'
				$res='-'.$this->symbol.' '.$res;
			break;
			case 10:
				// 10 = '00 Symb-'
				$res=$res.' '.$this->symbol.'-';
			break;
			case 11:
				// 11 = 'Symb 00-'
				$res=$this->symbol.' '.$res.'-';
			break;
			case 12:
				// 12 = 'Symb -00'
				$res=$this->symbol.' -'.$res;
			break;
			case 13:
				// 13 = '00- Symb'
				$res=$res.'- '.$this->symbol;
			break;
			case 14:
				// 14 = '(Symb 00)'
				$res='('.$this->symbol.' '.$res.')';
			break;
			case 15:
				// 15 = '(00 Symb)'
				$res='('.$res.' '.$this->symbol.')';
			break;
			case 8:
			default :
				// 8 = '-00 Symb'
				$res='-'.$res.' '.$this->symbol;
			break;
			}
		}
		return($res);
	}
	// ================ /CURRENCY DISPLAY =========================
	// ============================================================
	} // end class
}
?>
