<?php

  $HoyFecha     = date('Y-m-d');
  $HoyFechaHora = date('Y-m-d H:i:s');

  //Colores
  $ColorsOpc[] = '#4385f5';
  $ColorsOpc[] = '#0e47a1';
  $ColorsOpc[] = '#aa66cd';
  $ColorsOpc[] = '#9a33cc';
  $ColorsOpc[] = '#2abbac';
  $ColorsOpc[] = '#00695b';
  $ColorsOpc[] = '#ffbb34';
  $ColorsOpc[] = '#ff8800';
  $ColorsOpc[] = '#e83e8c';
  $ColorsOpc[] = '#a52834';
  $ColorsOpc[] = '#28a745';
  $ColorsOpc[] = '#bf9105';
  $ColorsOpc[] = '#1a043d';
  $ColorsOpc[] = '#003e80';
  $ColorsOpc[] = '#0a2a11';
  //End Colores

  //Compara Horas entere Horas
  function ComparaHoras($HoraComp,$HoraIniA,$HoraFinA) {
    $HoraComparar = strtotime($HoraComp);
    $HoraInicioA = strtotime($HoraIniA);
    $HoraFinalA = strtotime($HoraFinA);
    if(
        (
          $HoraInicioA < $HoraFinalA && $HoraComparar >= $HoraInicioA && $HoraComparar <= $HoraFinalA
        )||(
          $HoraInicioA > $HoraFinalA && ( $HoraComparar >= $HoraInicioA || $HoraComparar <= $HoraFinalA )
        )
    ){
      $Coin = 1;
      return $Coin;
    }
  }
  //Compara Horas entere Horas

  //Segundos a Horas y Minutos
  function conversorSegundosHoras($tiempo_en_segundos) {
    $horas = floor($tiempo_en_segundos / 3600);
    $minutos = floor(($tiempo_en_segundos - ($horas * 3600)) / 60);
    $segundos = $tiempo_en_segundos - ($horas * 3600) - ($minutos * 60);

    return $horas . ':' . $minutos . ":" . $segundos;
  }
  //End Segundos a Horas y Minutos

  //Arreglo de Dias desde una FechaInicio hasta $FechaFinal
  function getDatesFromRange($start, $end, $format = 'Y-m-d') {

    // Declare an empty array
    $array = array();

    // Variable that store the date interval
    // of period 1 day
    $interval = new DateInterval('P1D');

    $realEnd = new DateTime($end);
    $realEnd->add($interval);

    $period = new DatePeriod(new DateTime($start), $interval, $realEnd);

    // Use loop to store date into array
    foreach($period as $date) {
        $array[] = $date->format($format);
    }

    // Return the array elements
    return $array;
  }
  //End Arreglo de Dias desde una FechaInicio hasta $FechaFinal

  //Minutos entre Horas
  function calcular_tiempo_trasnc($hora1,$hora2){
    $separar[1]=explode(':',$hora1);
    $separar[2]=explode(':',$hora2);

    $total_minutos_trasncurridos[1] = ($separar[1][0]*60)+$separar[1][1];
    $total_minutos_trasncurridos[2] = ($separar[2][0]*60)+$separar[2][1];
    $total_minutos_trasncurridos = $total_minutos_trasncurridos[1]-$total_minutos_trasncurridos[2];
    return($total_minutos_trasncurridos);
    //return($total_minutos_trasncurridos.' Minutos');
    /*if($total_minutos_trasncurridos<=59) return($total_minutos_trasncurridos.' Minutos');
    elseif($total_minutos_trasncurridos>59){
      $HORA_TRANSCURRIDA = round($total_minutos_trasncurridos/60);
      if($HORA_TRANSCURRIDA<=9) $HORA_TRANSCURRIDA='0'.$HORA_TRANSCURRIDA;
      $MINUITOS_TRANSCURRIDOS = $total_minutos_trasncurridos%60;
      if($MINUITOS_TRANSCURRIDOS<=9) $MINUITOS_TRANSCURRIDOS='0'.$MINUITOS_TRANSCURRIDOS;
      return ($HORA_TRANSCURRIDA.':'.$MINUITOS_TRANSCURRIDOS.' Horas');
    }*/
  }
  //End Minutos entre Horas

  //Truncar Decimales
  function Truncar($Numero,$Decimales)
  {
    $Exponente = pow(10, $Decimales);
    $New       = floor($Numero*$Exponente);
    return $New/$Exponente;
  }
  //End Truncar Decimales

  function corta_texto($texto, $num) {
   $txt = (strlen($texto) > $num) ? substr($texto,0,$num)."..." : $texto;
   return $txt;
  }

  function word_limiter($string, $word_limit) {
      $words = explode(" ",$string);
      return implode(" ",array_splice($words,0,$word_limit));
    }

  //2 Decimales sin redondear
  function dec_sin($num){
    $num = number_format(floor($num*100)/100,2, '.', '');
    return $num;
  }

  //Quitar Espacios
  function limpia_espacios($cadena){
      $cadena = str_replace(' ', '', $cadena);
      return $cadena;
  }

  //Quitar Acentos
  function limpia_acentos($cadena){
      $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
  ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';
      $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuy
  bsaaaaaaaceeeeiiiidnoooooouuuyybyRr';
      $cadena = utf8_decode($cadena);
      $cadena = strtr($cadena, utf8_decode($originales), $modificadas);
      $cadena = strtolower($cadena);
      return utf8_encode($cadena);
  }

  //Filtro SQL
  function filtro($cadena){
  /*
  	Filtra los datos para evitar Inyecciones Sql
  */
  	return addslashes(mysql_real_escape_string(trim($cadena)));
  }

  //Meses
  $months = array(1 => "Enero",
                  2 => "Febrero",
                  3 => "Marzo",
                  4 => "Abril",
                  5 => "Mayo",
                  6 => "Junio",
                  7 => "Julio",
                  8 => "Agosto",
                  9 => "Septiembre",
                  10=> "Octubre",
                  11=> "Noviembre",
                  12=> "Diciembre");

  $monthsshort = array(1 => "Ene",
                  2 => "Feb",
                  3 => "Mar",
                  4 => "Abr",
                  5 => "May",
                  6 => "Jun",
                  7 => "Jul",
                  8 => "Ago",
                  9 => "Sep",
                  10=> "Oct",
                  11=> "Nov",
                  12=> "Dic");

  $MonthText = array(	'Ene' => '01',
                  	'Feb' => '02',
                 		'Mar' => '03',
                		'Abr' => '04',
                	 	'May' => '05',
                  	'Jun' => '06',
                 		'Jul' => '07',
                 	 	'Ago' => '08',
              	    'Sep' => '09',
                 	 	'Oct' => '10',
                 	 	'Nov' => '11',
                	  'Dic' => '12');

  //Cambio de Formato de Fecha
  function CambioFecha($Fecha)
  {
  	$MonthText = array(	'Ene' => '01',
                  	'Feb' => '02',
                 		'Mar' => '03',
                		'Abr' => '04',
                	 	'May' => '05',
                  	'Jun' => '06',
                 		'Jul' => '07',
                 	 	'Ago' => '08',
              	    'Sep' => '09',
                 	 	'Oct' => '10',
                 	 	'Nov' => '11',
                	  'Dic' => '12');
    $Dia	 	  = substr($Fecha, 0, -14);
  	$MesText 	= substr($Fecha, 5, -8);
  	$Ano 		  = substr($Fecha, 12);
  	$Mes 		  = $MonthText[$MesText];
  	$Fecha 		= $Ano.'-'.$Mes.'-'.$Dia;
  	return $Fecha;
  }

  //Cambio de Formato de Fecha Completa
  function CambioFechaCompleta($Fecha)
  {
  	$MonthText = array(	'Enero' => '01',
                  	'Febrero' => '02',
                 		'Marzo' => '03',
                		'Abril' => '04',
                	 	'Mayo' => '05',
                  	'Junio' => '06',
                 		'Julio' => '07',
                 	 	'Agosto' => '08',
              	    'Septiembre' => '09',
                 	 	'Octubre' => '10',
                 	 	'Noviembre' => '11',
                	  'Diciembre' => '12');
    $FechaChange = explode(" / ", $Fecha);
    $Dia	 	  = $FechaChange[0];
  	$MesText  = $FechaChange[1];
  	$Ano 		  = $FechaChange[2];
  	$Mes 		  = $MonthText[$MesText];
  	$Fecha 		= $Ano.'-'.$Mes.'-'.$Dia;
  	return $Fecha;
  }

  //Cambio de Formato de Fecha Completa Inversa
  function CambioFechaInversa($Fecha)
  {
  	$MonthText = array(	'01' => 'Enero',
                  	'02' => 'Febrero',
                 		'03' => 'Marzo',
                		'04' => 'Abril',
                	 	'05' => 'Mayo',
                  	'06' => 'Junio',
                 		'07' => 'Julio',
                 	 	'08' => 'Agosto',
              	    '09' => 'Septiembre',
                 	 	'10' => 'Octubre',
                 	 	'11' => 'Noviembre',
                	  '12' => 'Diciembre');
    $FechaChange = explode("-", $Fecha);
    $Dia	 	  = $FechaChange[2];
  	$MesText  = $FechaChange[1];
  	$Ano 		  = $FechaChange[0];
  	$Mes 		  = $MonthText[$MesText];
  	$Fecha 		= $Dia.' / '.$Mes.' / '.$Ano;
  	return $Fecha;
  }

  //Tamño de Imagen
  function getHeight($image) {
  	$size = getimagesize($image);
  	$height = $size[1];
  	return $height;
  }
  function getWidth($image) {
  	$size = getimagesize($image);
  	$width = $size[0];
  	return $width;
  }

  function ae_detect_ie()
  {
      if (isset($_SERVER['HTTP_USER_AGENT']) &&
      (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false))
          return true;
      else
          return false;
  }

  function randomKey($length) {
      $pool = array_merge(range(0,9), range('a', 'z'),range('A', 'Z'));

      for($i=0; $i < $length; $i++) {
          $key .= $pool[mt_rand(0, count($pool) - 1)];
      }
      return $key;
  }

  function randomCode($length) {
      $pool = array_merge(range(0,9));

      for($i=0; $i < $length; $i++) {
          $key .= $pool[mt_rand(0, count($pool) - 1)];
      }
      return $key;
  }

  function randomKeyA($length) {
      $pool = array_merge(range(0,9), range('A', 'Z'));

      for($i=0; $i < $length; $i++) {
          $key .= $pool[mt_rand(0, count($pool) - 1)];
      }
      return $key;
  }

  function getAge($date) {
      return intval(date('Y', time() - strtotime($date))) - 1970;
  }

  //Password Random
  function randomPassword() {
      $alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
      $pass = array(); //remember to declare $pass as an array
      $alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
      for ($i = 0; $i < 8; $i++) {
          $n = rand(0, $alphaLength);
          $pass[] = $alphabet[$n];
      }
      return implode($pass); //turn the array into a string
  }

  //Minutos entre dos fechas
  function minutos_transcurridos($fecha_i,$fecha_f){
  	$minutos = (strtotime($fecha_i)-strtotime($fecha_f))/60;
  	$minutos = abs($minutos); $minutos = floor($minutos);
  	return $minutos;
  }

  //Creación de Zips
  function create_zip($files = array(), $destination = '', $overwrite = false) {
    //if the zip file already exists and overwrite is false, return false
    if(file_exists($destination) && !$overwrite) { return false; }
    //vars
    $valid_files = array();
    //if files were passed in...
    if(is_array($files)) {
      //cycle through each file
      foreach($files as $file) {
        //make sure the file exists
        if(file_exists($file)) {
          $valid_files[] = $file;
        }
      }
    }
    //if we have good files...
    if(count($valid_files)) {
      //create the archive
      $zip = new ZipArchive();
      if($zip->open($destination, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
        return false;
      }
      //add the files
      foreach($valid_files as $file) {
        $zip->addFile($file, $file);
      }
      //debug
      //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;
      //echo "Ok";
      $SaveZip = 'Ok';

      //close the zip -- done!
      $zip->close();

      //check to make sure the file exists
      return file_exists($destination);
    }
    else
    {
      return false;
    }
  }

  //Clase que implementa un coversor de números a letras
  class NumeroALetras
  {
      private static $UNIDADES = [
          '',
          'UN ',
          'DOS ',
          'TRES ',
          'CUATRO ',
          'CINCO ',
          'SEIS ',
          'SIETE ',
          'OCHO ',
          'NUEVE ',
          'DIEZ ',
          'ONCE ',
          'DOCE ',
          'TRECE ',
          'CATORCE ',
          'QUINCE ',
          'DIECISEIS ',
          'DIECISIETE ',
          'DIECIOCHO ',
          'DIECINUEVE ',
          'VEINTE '
      ];
      private static $DECENAS = [
          'VENTI',
          'TREINTA ',
          'CUARENTA ',
          'CINCUENTA ',
          'SESENTA ',
          'SETENTA ',
          'OCHENTA ',
          'NOVENTA ',
          'CIEN '
      ];
      private static $CENTENAS = [
          'CIENTO ',
          'DOSCIENTOS ',
          'TRESCIENTOS ',
          'CUATROCIENTOS ',
          'QUINIENTOS ',
          'SEISCIENTOS ',
          'SETECIENTOS ',
          'OCHOCIENTOS ',
          'NOVECIENTOS '
      ];
      public static function convertir($number, $moneda = '', $centimos = '', $forzarCentimos = false)
      {
          $converted = '';
          $decimales = '';
          if (($number < 0) || ($number > 999999999)) {
              return 'No es posible convertir el numero a letras';
          }
          $div_decimales = explode('.',$number);
          if(count($div_decimales) > 1){
              $number = $div_decimales[0];
              $decNumberStr = (string) $div_decimales[1];
              if(strlen($decNumberStr) == 2){
                  $decNumberStrFill = str_pad($decNumberStr, 9, '0', STR_PAD_LEFT);
                  $decCientos = substr($decNumberStrFill, 6);
                  $decimales = self::convertGroup($decCientos);
              }
          }
          else if (count($div_decimales) == 1 && $forzarCentimos){
              $decimales = 'CERO ';
          }
          $numberStr = (string) $number;
          $numberStrFill = str_pad($numberStr, 9, '0', STR_PAD_LEFT);
          $millones = substr($numberStrFill, 0, 3);
          $miles = substr($numberStrFill, 3, 3);
          $cientos = substr($numberStrFill, 6);
          if (intval($millones) > 0) {
              if ($millones == '001') {
                  $converted .= 'UN MILLON ';
              } else if (intval($millones) > 0) {
                  $converted .= sprintf('%sMILLONES ', self::convertGroup($millones));
              }
          }
          if (intval($miles) > 0) {
              if ($miles == '001') {
                  $converted .= 'MIL ';
              } else if (intval($miles) > 0) {
                  $converted .= sprintf('%sMIL ', self::convertGroup($miles));
              }
          }
          if (intval($cientos) > 0) {
              if ($cientos == '001') {
                  $converted .= 'UN ';
              } else if (intval($cientos) > 0) {
                  $converted .= sprintf('%s ', self::convertGroup($cientos));
              }
          }
          if(empty($decimales)){
              $valor_convertido = $converted . strtoupper($moneda);
          } else {
              $valor_convertido = $converted . strtoupper($moneda) . ' CON ' . $decimales . ' ' . strtoupper($centimos);
          }
          return $valor_convertido;
      }
      private static function convertGroup($n)
      {
          $output = '';
          if ($n == '100') {
              $output = "CIEN ";
          } else if ($n[0] !== '0') {
              $output = self::$CENTENAS[$n[0] - 1];
          }
          $k = intval(substr($n,1));
          if ($k <= 20) {
              $output .= self::$UNIDADES[$k];
          } else {
              if(($k > 30) && ($n[2] !== '0')) {
                  $output .= sprintf('%sY %s', self::$DECENAS[intval($n[1]) - 2], self::$UNIDADES[intval($n[2])]);
              } else {
                  $output .= sprintf('%s%s', self::$DECENAS[intval($n[1]) - 2], self::$UNIDADES[intval($n[2])]);
              }
          }
          return $output;
      }
  }
?>
