<?php
/*
                                  ____   _____
                                 / __ \ / ____|
                  ___ _   _  ___| |  | | (___
                 / _ \ | | |/ _ \ |  | |\___ \
                |  __/ |_| |  __/ |__| |____) |
                 \___|\__, |\___|\____/|_____/
                       __/ |
                      |___/              1.8

                     Web Operating System
                           eyeOS.org

             eyeOS Engineering Team - www.eyeos.org/team

     eyeOS is released under the GNU Affero General Public License Version 3 (AGPL3)
            provided with this release in license.txt
             or via web at gnu.org/licenses/agpl-3.0.txt

        Copyright 2005-2009 eyeOS Team (team@eyeos.org)
*/

/*
*This define is so useful to check if the client has accesed
*eyeOS from the right way (this file).
*/
define('EYE_INDEX',1);

/*
*Includes needed before do anything, in theory only settings.php
*should be here
*/
require_once('settings.php');

/*
*Chaning the current work directory to EYE_ROOT
*/
changeCWD();

/*
*Loading utf8 support for php, this library must be
*Loaded manually because kernel also needs utf8
*/
loadStringLibrary();

//Including kernel file, this file also "execs" some initialitation stuff
include_once(EYE_ROOT.'/'.SYSTEM_DIR.'/'.KERNEL_DIR.'/kernel'.EYE_CODE_EXTENSION);

/*
*Setting the php debug (error_reporting) depending the eyeOS config
*stored in system/conf/system.xml
*/
setPhpInitDebug();

/*
*Changing some php init parameters, the chagnes are not always
*the same, may change depending of eyeOS configuration.
*/
setPhpInitValues();

//Calling to some libraries functiosn needed by index.php
libraryLoading();

//Calling some service functions needed by index.php
serviceLoading();

/*
*Checking what kind of client is accesing to choose
*the right kernel
*/
$index = indexRequested();
if($index !== false){
	loadIndex($index);
}elseif(clientMobile()){
	if (mobileWithWebkit()) {
		loadIndex('iphone');
	} else {
		loadIndex('mobile');
	}
}else{
	loadIndex('browser');
}


function loadIndex($index){
	//If some index has been loaded, return false because indexes can't be mixed
	if(defined('INDEX_TYPE')){
		define('INDEX_BASE','./../');
		return false;
	}
	define('INDEX_BASE','./');
	//Include the file with the __FILE__ secure
	$myPath = dirname(realpath(__FILE__)).'/';
	$rPath = realpath($myPath.'/'.$index.'/index.php');
 	if(is_readable($rPath)){
 		require_once($rPath);
		return true;
 	}
	return false;
}
function indexRequested(){
	if(isset($_REQUEST['index']) && !empty($_REQUEST['index'])){
		return utf8_basename($_REQUEST['index']);
	}
	return false;
}

/*
*Check if the client is a cell phone without special support (like iphone).
*/
function clientMobile(){
	if(CHECK_MOBILE == 1) {
		$mobileClients = array(
			"midp",
			"240x320",
			"blackberry",
			"netfront",
			"nokia",
			"panasonic",
			"portalmmm",
			"sharp",
			"sie-",
			"sonyericsson",
			"symbian",
			"windows ce",
			"benq",
			"mda",
			"mot-",
			"opera mini",
			"philips",
			"pocket pc",
			"sagem",
			"samsung",
			"sda",
			"sgh-",
			"vodafone",
			"xda",
			"iphone"
		);
		$userAgent = utf8_strtolower($_SERVER['HTTP_USER_AGENT']);
		foreach($mobileClients as $mobileClient) {
			if (strstr($userAgent, $mobileClient)) {
				return $mobileClient;
			}
		}
		return false;
	}
}

function mobileWithWebkit() {
	$userAgent = utf8_strtolower($_SERVER['HTTP_USER_AGENT']);
	if (strstr($userAgent, 'webkit')) {
		return true;
	} else {
		return false;
	}
}

/*
*Load the utf8 support loading eyeString and making a fake
*load because kernel needs it (utf8 support).
*/
function loadStringLibrary(){
	include_once(EYE_ROOT.'/'.SYSTEM_DIR.'/'.LIB_DIR.'/eyeString/main'.EYE_CODE_EXTENSION);
	call_user_func('lib_eyeString_start');
	//setting library loaded
	define('LIB_EYESTRING_LOADED',1);
}

/*
*Set the eyeOS debuggin, at the moment only changes
*the error_reporting, but may change more things in the future.
*/
function setPhpInitDebug(){
	//Hiding warnings and notices if Debug Mode is Off
	if(EYEOS_DEBUG_MODE == 0) {
		error_reporting(0);
	} elseif(EYEOS_DEBUG_MODE == 2) {
		error_reporting(E_ALL);
	} elseif(EYEOS_DEBUG_MODE == 3) {
		error_reporting(E_ALL ^ E_NOTICE);
	}else {
		error_reporting(E_ERROR); //TODO: SUPPORT E_ALL
	}
}

/*
*Load the basics libraries needed by the kernel/core
*/
function libraryLoading(){
	//Loading the Error Codes
	reqLib('errorCodes','loadCodes');
	//load pear library class
	reqLib('eyePear','loadPear');
}

/*
*Load the basic services needed by the kernel/core
*/
function serviceLoading(){
	//Loading the Security Service (sec) if eyeOS Security is turned on (by default is On)
	if(EYEOS_SECURITY == 1) {
		service('sec','start');
	}
	//Setting the Running Log check var to 0
	global $LOG_RUNNING;
	$LOG_RUNNING = 0;
}

/*
*Set some php init values depending of eyeOS configs
*/
function setPhpInitValues(){
	//if allow_big_streams php will not have max_execution_time
	if(ALLOW_BIG_STREAMS == 1) {
		@set_time_limit(0);
	}
	//set the default charset
	ini_set('default_charset', DEFAULT_CHARSET);
}

/*
*Changes the current work directory to EYE_ROOT
*/
function changeCWD(){
	//since index.php is always below eyeROOT, we can do this instead to be inclusable from third party code
	$basedir = dirname(__FILE__).'/';
	//change directory to EYE_ROOT
	chdir($basedir.REAL_EYE_ROOT);
	//Loaded before kernel for kernel utf8 compatibility
}
?>