<?php
	/**************************************************************************\
	* eGroupWare                                                               *
	* http://www.egroupware.org                                                *
	* --------------------------------------------                             *
	*  This program is free software; you can redistribute it and/or modify it *
	*  under the terms of the GNU General Public License as published by the   *
	*  Free Software Foundation; either version 2 of the License, or (at your  *
	*  option) any later version.                                              *
	\**************************************************************************/

	/* $Id$ */

	if(!file_exists('header.inc.php'))
	{
		Header('Location: setup/index.php');
		exit;
	}

	$GLOBALS['sessionid'] = isset($_GET['sessionid']) ? $_GET['sessionid'] : @$_COOKIE['sessionid'];
	if(!$GLOBALS['sessionid'])
	{
		Header('Location: login.php'.
			(isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ?
			'?phpgw_forward='.urlencode('/index.php?'.$_SERVER['QUERY_STRING']):''));
		exit;
	}

	if(isset($_GET['hasupdates']) && $_GET['hasupdates'] == 'yes')
	{
		$hasupdates = True;
	}

	/*
		This is the menuaction driver for the multi-layered design
	*/
	if(isset($_GET['menuaction']) && preg_match('/^[A-Za-z0-9_]+\.[A-Za-z0-9_]+\.[A-Za-z0-9_]+$/',$_GET['menuaction']))
	{
		list($app,$class,$method) = explode('.',$_GET['menuaction']);
		if(! $app || ! $class || ! $method)
		{
			$invalid_data = True;
		}
	}
	else
	{
		$app = 'home';
		$invalid_data = True;
	}

	if($app == 'phpgwapi')
	{
		$app = 'home';
		$api_requested = True;
	}

	$GLOBALS['egw_info'] = array(
		'flags' => array(
			'noheader'   => True,
			'nonavbar'   => True,
			'enable_network_class'    => True,
			'enable_contacts_class'   => True,
			'enable_nextmatchs_class' => True,
			'currentapp' => $app
		)
	);
	include('./header.inc.php');

	// 	Check if we are using windows or normal webpage
	$windowed = false;
	$tpl_info = EGW_SERVER_ROOT . '/phpgwapi/templates/' . basename($GLOBALS['egw_info']['user']['preferences']['common']['template_set']) . '/setup/setup.inc.php';

	if(@file_exists($tpl_info))
	{
	   include_once($tpl_info);
//	   if(isset($template_info))
//	   {
		  if($GLOBALS['egw_info']['template'][$GLOBALS['egw_info']['user']['preferences']['common']['template_set']]['windowed'])
		  {
			 $windowed = true;
		  }
//	   }
	}

	if($app == 'home' && !$api_requested && !$windowed)
	{
		if ($GLOBALS['egw_info']['server']['force_default_app'] && $GLOBALS['egw_info']['server']['force_default_app'] != 'user_choice')
		{
			$GLOBALS['egw_info']['user']['preferences']['common']['default_app'] = $GLOBALS['egw_info']['server']['force_default_app'];
		}
		if($GLOBALS['egw_info']['user']['preferences']['common']['default_app'] && !$hasupdates)
		{
		   /** Test if our default app is available else open about.php */
		   if(is_file('./'.$GLOBALS['egw_info']['user']['preferences']['common']['default_app'].'/index.php'))
		   {
			  $GLOBALS['egw']->redirect_link('/'.$GLOBALS['egw_info']['user']['preferences']['common']['default_app'].'/index.php');
		   }
		   else
		   {
			  $GLOBALS['egw']->redirect_link('/about.php');
		   }
		}
		else
		{
		   $GLOBALS['egw']->redirect_link('/home/index.php');
		}
	 }

	if($windowed && $_GET['cd'] == 'yes')
	{
		$GLOBALS['egw_info']['flags'] = array(
			'noheader'   => False,
			'nonavbar'   => False,
			'enable_network_class'    => True,
			'enable_contacts_class'   => True,
			'enable_nextmatchs_class' => True,
			'currentapp' => 'eGroupWare'
		);
		$GLOBALS['egw']->common->egw_header();
		$GLOBALS['egw']->common->egw_footer();

	}
	else
	{
		if($api_requested)
		{
			$app = 'phpgwapi';
		}

		$GLOBALS[$class] = CreateObject($app.'.'.$class);	// dont use =& with $GLOBALS, it does NOT behave as expected
		if((is_array($GLOBALS[$class]->public_functions) && $GLOBALS[$class]->public_functions[$method]) && !$invalid_data)
		{
			execmethod($_GET['menuaction']);
			unset($app);
			unset($class);
			unset($method);
			unset($invalid_data);
			unset($api_requested);
		}
		else
		{
			if(!$app || !$class || !$method || $invalid_data)
			{
				if(@is_object($GLOBALS['egw']->log))
				{
					$GLOBALS['egw']->log->message(array(
						'text' => 'W-BadmenuactionVariable, menuaction missing or corrupt: %1',
						'p1'   => $menuaction,
						'line' => __LINE__,
						'file' => __FILE__
					));
				}
			}

			if(!is_array($GLOBALS[$class]->public_functions) || !$GLOBALS[$class]->public_functions[$method] && $method)
			{
				if(@is_object($GLOBALS['egw']->log))
				{
					$GLOBALS['egw']->log->message(array(
						'text' => 'W-BadmenuactionVariable, attempted to access private method: %1',
						'p1'   => $method,
						'line' => __LINE__,
						'file' => __FILE__
					));
				}
			}
			if(@is_object($GLOBALS['egw']->log))
			{
				$GLOBALS['egw']->log->commit();
			}

			$GLOBALS['egw']->redirect_link('/home/index.php');
		}

		if(!isset($GLOBALS['egw_info']['nofooter']))
		{
			$GLOBALS['egw']->common->egw_footer();
		}
	}
?>