<?php

/** KumbiaForms - PHP Rapid Development Framework *****************************
*	
* Copyright (C) 2005-2007 Andrés Felipe Gutiérrez (andresfelipe at vagoogle.net)
* 	
* This framework is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* 
* This framework is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
* 
* You should have received a copy of the GNU Lesser General Public
* License along with this framework; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
* 
* Este framework es software libre; puedes redistribuirlo y/o modificarlo
* bajo los terminos de la licencia pública general GNU tal y como fue publicada
* por la Fundación del Software Libre; desde la versión 2.1 o cualquier
* versión superior.
* 
* Este framework es distribuido con la esperanza de ser util pero SIN NINGUN 
* TIPO DE GARANTIA; dejando atrás su LADO MERCANTIL o PARA FAVORECER ALGUN
* FIN EN PARTICULAR. Lee la licencia publica general para más detalles.
* 
* Debes recibir una copia de la Licencia Pública General GNU junto con este
* framework, si no es asi, escribe a Fundación del Software Libre Inc.,
* 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
****************************************************************************
* Some PHP Utility Functions
****************************************************************************/

/**
 * Merge Two Arrays Overwriting Values $a1
 * from $a2
 *
 * @param array $a1
 * @param array $a2
 * @return array
 */
function array_merge_overwrite($a1, $a2){	
	foreach($a2 as $key2 => $value2){
	  	if(!is_array($value2)){
		    $a1[$key2] = $value2;
		} else {
		  if(!is_array($a1[$key2]))
			  	$a1[$key2] = $value2;
		  else $a1[$key2] = array_merge_overwrite($a1[$key2], $a2[$key2]);
		}
	}
	return $a1;  
}

/**
 * Inserts a element into a defined position
 * in a array
 *
 * @param array $form
 * @param mixed $index
 * @param mixed $value
 * @param mixed $key
 */
function array_insert(&$form, $index, $value, $key=null){  	
	$ret = array();
	$n = 0;	
	$i = false;
	foreach($form as $keys => $val){
		if($n!=$index){
			$ret[$keys] = $val;			   				   	
		} else {
		  	if(!$key){
				$ret[$index] = $value;
				$i = true;
			} else {
				$ret[$key] = $value;
				$i = true;
			}
			$ret[$keys] = $val;
		}
		$n++;		
	}
	if(!$i){
		if(!$key){
			$ret[$index] = $value;
			$i = true;
		} else {
			$ret[$key] = $value;
			$i = true;
		}
	}
	$form = $ret;	
}

/**
 * Las siguientes funciones son utilizadas para la generación 
 * de versiónes escritas de numeros
 *
 * @param numeric $a
 * @return string
 */
function value_num($a){	
  if($a<=21){
	switch ($a){
	  	case 1: return 'UNO';
	  	case 2: return 'DOS';
	  	case 3: return 'TRES';
	  	case 4: return 'CUATRO';
	  	case 5: return 'CINCO';
	  	case 6: return 'SEIS';
	  	case 7: return 'SIETE';
	  	case 8: return 'OCHO';
	  	case 9: return 'NUEVE';
	  	case 10: return 'DIEZ';
	  	case 11: return 'ONCE';
	  	case 12: return 'DOCE';
	  	case 13: return 'TRECE';
	  	case 14: return 'CATORCE';
	  	case 15: return 'QUINCE';
	  	case 16: return 'DIECISEIS';
	  	case 17: return 'DIECISIETE';
	  	case 18: return 'DIECIOCHO';
	  	case 19: return 'DIECINUEVE';
	  	case 20: return 'VEINTE';
	  	case 21: return 'VEINTIUN';	  	
	} 
  } else {
    if($a<=99){    	
	    if($a>=22&&$a<=29)
	  		return "VENTI".value_num($a % 10);
	  	if($a==30) return  "TREINTA";
	  	if($a>=31&&$a<=39)
	  		return "TREINTA Y ".value_num($a % 10);
	  	if($a==40) $b = "CUARENTA";  		
	  	if($a>=41&&$a<=49)
	  		return "CUARENTA Y ".value_num($a % 10);
	  	if($a==50) return "CINCUENTA";  		
	  	if($a>=51&&$a<=59)
	  		return "CINCUENTA Y ".value_num($a % 10);  		
	  	if($a==60) return "SESENTA";  		
	  	if($a>=61&&$a<=69)
	  		return "SESENTA Y ".value_num($a % 10);  		
	  	if($a==70) return "SETENTA";  		
	  	if($a>=71&&$a<=79)
	  		return "SETENTA Y ".value_num($a % 10);
	  	if($a==80) return "OCHENTA";  		
	  	if($a>=81&&$a<=89)
  			return "OCHENTA Y ".value_num($a % 10);
	  	if($a==90) return "NOVENTA";  		
	  	if($a>=91&&$a<=99)
  			return "NOVENTA Y ".value_num($a % 10);  		  		  		  				
	} else {		
	  	if($a==100) return "CIEN";
	  	if($a>=101&&$a<=199)
	  		return "CIENTO ".value_num($a % 100);	  		
	  	if($a>=200&&$a<=299)
	  		return "DOSCIENTOS ".value_num($a % 100);	  			  	
	  	if($a>=300&&$a<=399)
	  		return "TRECIENTOS ".value_num($a % 100);	  		
	  	if($a>=400&&$a<=499)
	  		return "CUATROCIENTOS ".value_num($a % 100);	  		
	  	if($a>=500&&$a<=599)
	  		return "QUINIENTOS ".value_num($a % 100);	  		
	  	if($a>=600&&$a<=699)
	  		return "SEICIENTOS ".value_num($a % 100);	  		
	  	if($a>=700&&$a<=799)
	  		return "SETECIENTOS ".value_num($a % 100);	  		
	  	if($a>=800&&$a<=899)
	  		return "OCHOCIENTOS ".value_num($a % 100);	  		
	  	if($a>=901&&$a<=999)
	  		return "NOVECIENTOS ".value_num($a % 100);	  		
	}
  }
}

function millones($a){
  	$a = $a / 1000000;
  	if($a==1)
		return "UN MILLON ";      
	else
		return value_num($a)." MILLONES ";  	  	
}

function miles($a){
  	$a = $a / 1000;
  	if($a==1)
		return "MIL";      
	else
		return value_num($a)."MIL ";  	  	
}

function numlet($a, $p, $c){
  	$val = "";
  	$v = $a;
  	$a = (int) $a;
  	$d = round($v - $a, 2);  	
	if($a>=1000000){	  	  		
	  	$val = millones($a - ($a % 1000000));	  	  
	  	$a = $a % 1000000;	  		  	
	}
	if($a>=1000){	  	
	  	$val.= miles($a - ($a % 1000));	  	  
	  	$a = $a % 1000;	  		  	
	}	
	$val.= value_num($a)." $p ";	
	if($d){
		$d*=100;
		$val.=" CON ".value_num($d)." $c ";  
	}
	return $val;	  
}

function money_letter($valor, $moneda, $centavos){	
	return numlet($valor, $moneda, $centavos);
}


function to_human($num){
	if($num<1024){
		return $num." bytes";
	} else {
		if($num<1024*1024){
			return round($num/1024, 2)." kb";
		} else {
			return round($num/1024/1024, 2)." mb";	
		}
	}
}
?>