<?php
/**
 * This file belongs to the YIT Framework.
 *
 * This source file is subject to the GNU GENERAL PUBLIC LICENSE (GPL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.gnu.org/licenses/gpl-3.0.txt
 */

if (!defined('YIT')) exit('Direct access forbidden.');

/**
 * Perform Handles colors
 *
 * @class YIT_Colors
 * @package	Yithemes
 * @since 1.0.0
 * @author Andrea Grillo <andrea.grillo@yithemes.com>
 *
 */

class YIT_Colors extends YIT_Object {
    
    /**
     * Return a color darker then $color.
     * 
     * @param   string  $color
     * @param   int     $factor
     * @return  string
     * @since   1.0
     * @author Andrea Grillo <andrea.grillo@yithemes.com>
     */
    public function hex_darker( $color, $factor = 30 ) {
        $color = str_replace( '#', '', $color );
	
    	$base['R'] = hexdec( substr( $color, 0, 2 ) );
    	$base['G'] = hexdec( substr( $color, 2, 2 ) );
    	$base['B'] = hexdec( substr( $color, 4, 2 ) );
    	
    	$color = '#';
    	
    	foreach ( $base as $k => $v ) {
            $amount = $v / 100;
            $amount = round( $amount * $factor );
            $new_decimal = $v - $amount;
    
            $new_hex_component = dechex( $new_decimal );
            
            if( strlen( $new_hex_component ) < 2 )
            	$new_hex_component = "0".$new_hex_component;
            
            $color .= $new_hex_component;
    	}
    	        
    	return $color;
    }
    
    /**
     * Return a color lighter then $color.
     * 
     * @param   string  $color
     * @param   int     $factor
     * @return  string
     * @since   1.0
     * @author Andrea Grillo <andrea.grillo@yithemes.com>
     */
    public function hex_lighter( $color, $factor = 30 ) {
    	$color = str_replace( '#', '', $color );
    	
    	$base['R'] = hexdec( $color{0} . $color{1} );
    	$base['G'] = hexdec( $color{2} . $color{3} );
    	$base['B'] = hexdec( $color{4} . $color{5} );
    	
    	$color = '#';
         
        foreach ( $base as $k => $v ) {
            $amount = 255 - $v; 
            $amount = $amount / 100; 
            $amount = round( $amount * $factor ); 
            $new_decimal = $v + $amount; 
         
            $new_hex_component = dechex( $new_decimal );
             
            if( strlen( $new_hex_component ) < 2 )
            	$new_hex_component = "0".$new_hex_component;
             
            $color .= $new_hex_component; 
       	}
             
       	return $color;
     }
     
     /**
      * Detect if we must use a color darker or lighter then the background.
      * 
      * @param   string  $color
      * @param   string  $dark
      * @param   string  $light
      * @return  string
      * @since   1.0
      * @author Andrea Grillo <andrea.grillo@yithemes.com>
      */
     public function light_or_dark( $color, $dark = '#000000', $light = '#FFFFFF' ) {
        $hex = str_replace( '#', '', $color );

    	$c_r = hexdec( substr( $hex, 0, 2 ) );
    	$c_g = hexdec( substr( $hex, 2, 2 ) );
    	$c_b = hexdec( substr( $hex, 4, 2 ) );
    	$brightness = ( ( $c_r * 299 ) + ( $c_g * 587 ) + ( $c_b * 114 ) ) / 1000;
    	
    	return ( $brightness > 155 ) ? $dark : $light;
     }

    /**
     * Detect if we must use a color darker or lighter then the background.
     *
     * @param $hex
     *
     * @internal param string $color
     * @return  string
     * @since    1.0
     * @author   Andrea Grillo <andrea.grillo@yithemes.com>
     */
     public function hex2rgb($hex) {
        $hex = str_replace("#", "", $hex);
        
        if(strlen($hex) == 3) {
            $r = hexdec(substr($hex,0,1).substr($hex,0,1));
            $g = hexdec(substr($hex,1,1).substr($hex,1,1));
            $b = hexdec(substr($hex,2,1).substr($hex,2,1));
        } else {
            $r = hexdec(substr($hex,0,2));
            $g = hexdec(substr($hex,2,2));
            $b = hexdec(substr($hex,4,2));
        }
        $rgb = array($r, $g, $b);
        //return implode(",", $rgb); // returns the rgb values separated by commas

        return $rgb; // returns an array with the rgb values
    }
}           
    
if ( ! function_exists( 'yit_light_or_dark' ) ) {
    /**
     * Detect if we must use a color darker or lighter then the background.
     * 
     * @param   string  $color
     * @param   string  $dark
     * @param   string  $light
     * @return  string
     * @since   1.0
     * @author Andrea Grillo <andrea.grillo@yithemes.com>
     */
    function yit_light_or_dark( $color, $dark = '#000000', $light = '#FFFFFF' ) {
        return yit_get_model('colors')->light_or_dark( $color, $dark, $light );
    }
}

?>