<?php
/**
 * Class Autoloader
 * Loads a class on call
 */
class Autoloader
{

    /**
     * All directorys to search for classes
     * You can add directorys if you want
     * @var static $directorys
     *
     **/
    private static $directorys = array('classes', 'controller', 'model', 'views');

    /**
     * Load's the autoloader
	 * 
     * @return void
     */
	public function __construct()
	{
		if ( !spl_autoload_register( array( $this, 'load_class' ) ) )
		{
			die('A fatal error has occurred.');
		}

	} # function __construct()

    /**
     * register the autoloader
     *
     * @return void
     */
	public static function register()
	{
		new Autoloader();

	} # function register()


    /**
     * Loads a class
     *
     * @param string $a_class_name    Klassen-Name
     * @return void
     *
     */
	public function load_class( $a_class_name )
	{
		foreach ( self::$directorys as $folder )
		{
			$file = __DIR__ . '/../' . $folder . '/' . $a_class_name . '.class.inc.php';

			if ( file_exists( $file ) )
			{
				require_once $file;
			}
			else
			{
				$file = __DIR__ . '/../' . $folder . '/' . mb_strtolower( $a_class_name ) . '.class.inc.php';
				if ( file_exists( $file ) )
                {
                   	require_once $file;
				}
				else
                {
                    $file = __DIR__ . '/../' . $folder . '/' . ucfirst( $a_class_name ) . '.class.inc.php';
                    if ( file_exists( $file ) )
                    {
                        require_once $file;
                    }
                }
			}
		}

	} # function load_class(...)
} # class