<?php
// force UTF-8 Ø

zp_register_filter('themeSwitcher_head', 'switcher_head');
zp_register_filter('themeSwitcher_Controllink', 'switcher_controllink');
zp_register_filter('theme_head', 'EF_head', 0);
zp_register_filter('load_theme_script', 'fourOhFour');

define('ALBUM_THMB_WIDTH', 170);
define('ALBUM_THUMB_HEIGHT', 80);

$cwd = getcwd();
chdir(dirname(__FILE__));
$persona = safe_glob('*', GLOB_ONLYDIR);
chdir($cwd);
$personalities = array();
foreach ($persona as $personality) {
	if (file_exists(SERVERPATH . '/' . THEMEFOLDER . '/effervescence_plus/' . $personality . '/functions.php'))
		$personalities[ucfirst(str_replace('_', ' ', $personality))] = $personality;
}

$personality = strtolower(getOption('effervescence_personality'));
if (!in_array($personality, $personalities)) {
	$persona = $personalities;
	$personality = array_shift($persona);
}

chdir(SERVERPATH . "/themes/" . basename(dirname(__FILE__)) . "/styles");
$filelist = safe_glob('*.txt');
$themecolors = array();
foreach ($filelist as $file) {
	$themecolors[basename($file)] = stripSuffix(filesystemToInternal($file));
}
chdir($cwd);

if (!OFFSET_PATH) {
	if (extensionEnabled('themeSwitcher')) {
		$themeColor = getOption('themeSwitcher_effervescence_color');
		if (isset($_GET['themeColor'])) {
			$new = $_GET['themeColor'];
			if (in_array($new, $themecolors)) {
				setOption('themeSwitcher_effervescence_color', $new);
				$themeColor = $new;
			}
		}
		if (!$themeColor) {
			$themeColor = getThemeOption('Theme_colors');
		}

		$personality = getOption('themeSwitcher_effervescence_personality');
		if (isset($_GET['themePersonality'])) {
			$new = $_GET['themePersonality'];
			if (in_array($new, $personalities)) {
				setOption('themeSwitcher_effervescence_personality', $new);
				$personality = $new;
			}
		}
		if ($personality) {
			setOption('effervescence_personality', $personality, false);
		} else {
			$personality = strtolower(getOption('effervescence_personality'));
		}
	}

	if (($_ef_menu = getOption('effervescence_menu')) == 'effervescence' || $_ef_menu == 'zenpage') {
		enableExtension('print_album_menu', 1 | THEME_PLUGIN, false);
	}
	require_once(SERVERPATH . '/' . THEMEFOLDER . '/effervescence_plus/' . $personality . '/functions.php');
	$_oneImagePage = $handler->onePage();
	$_zp_page_check = 'my_checkPageValidity';
}

function EF_head($ignore) {
	global $themeColor;
	if (!$themeColor) {
		$themeColor = getThemeOption('Theme_colors');
	}
	if (!file_exists(SERVERPATH . '/' . DATA_FOLDER . '/effervescence_plus/styles/' . $themeColor . '.css') || filemtime(SERVERPATH . '/' . DATA_FOLDER . '/effervescence_plus/styles/' . $themeColor . '.css') < filemtime(SERVERPATH . '/' . THEMEFOLDER . '/effervescence_plus/styles/' . $themeColor . '.txt')) {
		eval(file_get_contents(SERVERPATH . '/' . THEMEFOLDER . '/effervescence_plus/styles/' . $themeColor . '.txt'));
		$css = file_get_contents(SERVERPATH . '/' . THEMEFOLDER . '/effervescence_plus/base.css');
		$css = strtr($css, $tr);
		$css = preg_replace('|\.\./images/|', WEBPATH . '/' . THEMEFOLDER . '/effervescence_plus/images/', $css);
		mkdir_recursive(SERVERPATH . '/' . DATA_FOLDER . '/effervescence_plus/styles/', FOLDER_MOD);
		file_put_contents(SERVERPATH . '/' . DATA_FOLDER . '/effervescence_plus/styles/' . $themeColor . '.css', $css);
	}
	?>
	<link rel="stylesheet" href="<?php echo WEBPATH . '/' . DATA_FOLDER; ?>/effervescence_plus/styles/<?php echo $themeColor; ?>.css" type="text/css" />
	<link rel="stylesheet" href="<?php echo WEBPATH . '/' . THEMEFOLDER; ?>/effervescence_plus/common.css" type="text/css" />
	<script type="text/javascript">
		// <!-- <![CDATA[
		function blurAnchors() {
			if (document.getElementsByTagName) {
				var a = document.getElementsByTagName("a");
				for (var i = 0; i < a.length; i++) {
					a[i].onfocus = function() {
						this.blur()
					};
				}
			}
		}
		// ]]> -->
	</script>
	<?php
	return $ignore;
}

function switcher_head($ignore) {
	?>
	<script type="text/javascript">
		// <!-- <![CDATA[
		function switchColors() {
			personality = $('#themeColor').val();
			window.location = '?themeColor=' + personality;
		}
		function switchPersonality() {
			personality = $('#themePersonality').val();
			window.location = '?themePersonality=' + personality;
		}
		// ]]> -->
	</script>
	<?php
	return $ignore;
}

function switcher_controllink($ignore) {
	global $personalities, $themecolors, $_zp_gallery_page;
	$color = getOption('themeSwitcher_effervescence_color');
	if (!$color) {
		list($personality, $color) = getPersonality();
	}
	?>
	<span id="themeSwitcher_effervescence">
		<span title="<?php echo gettext("Effervescence color scheme."); ?>">
			<?php echo gettext('Theme Color'); ?>
			<select name="themeColor" id="themeColor" onchange="switchColors();">
				<?php generateListFromArray(array($color), $themecolors, false, false); ?>
			</select>
		</span>
		<?php
		$personality = getOption('themeSwitcher_effervescence_personality');
		if (!$personality) {
			$personality = getOption('effervescence_personality');
		}
		?>
		<span title="<?php echo gettext("Effervescence image display handling."); ?>">
			<?php echo gettext('Personality'); ?>
			<select name="themePersonality" id="themePersonality" onchange="switchPersonality();">
				<?php generateListFromArray(array($personality), $personalities, false, true); ?>
			</select>
		</span>
	</span>
	<?php
	return $ignore;
}

/* SQL Counting Functions */

function get_subalbum_count() {
	$where = "WHERE parentid IS NOT NULL";
	if (!zp_loggedin()) {
		$where .= " AND `show` = 1";
	} /* exclude the un-published albums */
	return db_count('albums', $where);
}

function show_sub_count_index() {
	echo getNumAlbums();
}

function printHeadingImage($randomImage) {
	global $_zp_themeroot, $_zp_current_album;
	if ($_zp_current_album) {
		$id = $_zp_current_album->getId();
	} else {
		$id = 0;
	}
	echo '<div id="randomhead">';
	if (is_null($randomImage)) {
		echo '<img src="' . $_zp_themeroot . '/images/zen-logo.jpg" alt="' . gettext('There were no images from which to select the random heading.') . '" />';
	} else {
		$randomAlbum = $randomImage->getAlbum();
		$randomAlt1 = $randomAlbum->getTitle();
		if ($randomAlbum->getID() <> $id) {
			$randomAlbum = $randomAlbum->getParent();
			while (!is_null($randomAlbum) && ($randomAlbum->getID() <> $id)) {
				$randomAlt1 = $randomAlbum->getTitle() . ":\n" . $randomAlt1;
				$randomAlbum = $randomAlbum->getParent();
			}
		}
		$randomImageURL = html_encode($randomImage->getLink());
		if (getOption('allow_upscale')) {
			$wide = 620;
			$high = 180;
		} else {
			$wide = min(620, $randomImage->getWidth());
			$high = min(180, $randomImage->getHeight());
		}
		echo "<a href='" . $randomImageURL . "' title='" . gettext('Random picture...') . "'>";
		$html = "<img src='" . html_encode(pathurlencode($randomImage->getCustomImage(NULL, $wide, $high, $wide, $high, NULL, NULL, !getOption('Watermark_head_image')))) .
						"' width='$wide' height='$high' alt=" . '"' .
						html_encode($randomAlt1) .
						":\n" . html_encode($randomImage->getTitle()) .
						'" />';
		$html = zp_apply_filter('custom_image_html', $html, false);
		echo $html;
		echo '</a>';
	}
	echo '</div>';
}

/* Custom caption functions */

function getCustomAlbumDesc() {
	if (!in_context(ZP_ALBUM))
		return false;
	global $_zp_current_album;
	$desc = $_zp_current_album->getDesc();
	if (strlen($desc) == 0) {
		$desc = $_zp_current_album->getTitle();
	} else {
		$desc = $_zp_current_album->getTitle() . "\n" . $desc;
	}
	return $desc;
}

function getImage_AlbumCount() {
	$c = getNumAlbums();
	if ($c > 0) {
		$result = "\n " . sprintf(ngettext("%u album", "%u albums", $c), $c);
	} else {
		$result = '';
	}
	$c = getNumImages();
	if ($c > 0) {
		$result .= "\n " . sprintf(ngettext("%u image", "%u images", $c), $c);
	}
	return $result;
}

function printNofM($what, $first, $last, $total) {
	if (!is_null($first)) {
		echo "<p align=\"center\">";
		if ($first == $last) {
			if ($what == 'Album') {
				printf(gettext('Album %1$u of %2$u'), $first, $total);
			} else {
				printf(gettext('Photo %1$u of %2$u'), $first, $total);
			}
		} else {
			if ($what == 'Album') {
				printf(gettext('Albums %1$u-%2$u of %3$u'), $first, $last, $total);
			} else {
				printf(gettext('Photos %1$u-%2$u of %3$u'), $first, $last, $total);
			}
		}
		echo "</p>";
	}
}

function getPersonality() {
	global $themeColor, $themecolors;
	if (!$themeColor) {
		$themeColor = getOption('Theme_colors');
	}
	if (!in_array($themeColor, $themecolors)) {
		$themeColor = 'kish-my father';
	}
	$personality = getOption('effervescence_personality');
	return array($personality, $themeColor);
}

function printThemeInfo() {
	list($personality, $themeColor) = getPersonality();
	if ($themeColor == 'effervescence') {
		$themeColor = '';
	}
	if ($personality == 'Image page') {
		$personality = '';
	} else if (($personality == 'Simpleviewer' && !class_exists('simpleviewer')) ||
					($personality == 'Colorbox' && !zp_has_filter('admin_head', 'colorbox::css'))) {
		$personality = "<strike>$personality</strike>";
	}
	$personality = str_replace('_', ' ', $personality);
	if (empty($themeColor) && empty($personality)) {
		echo '<p><small>Effervescence</small></p>';
	} else if (empty($themeColor)) {
		echo '<p><small>' . sprintf(gettext('Effervescence %s'), $personality) . '</small></p>';
	} else if (empty($personality)) {
		echo '<p><small>' . sprintf(gettext('Effervescence %s'), $themeColor) . '</small></p>';
	} else {
		echo '<p><small>' . sprintf(gettext('Effervescence %1$s %2$s'), $themeColor, $personality) . '</small></p>';
	}
}

function printLinkWithQuery($url, $query, $text) {
	$url = rtrim($url, '/') . (MOD_REWRITE ? "?" : "&amp;");
	echo "<a href=\"$url$query\">$text</a>";
}

function printLogo() {
	global $_zp_themeroot;
	if ($img = getOption('Graphic_logo')) {
		$fullimg = '/' . UPLOAD_FOLDER . '/images/' . $img . '.png';
		if (file_exists(SERVERPATH . $fullimg)) {
			echo '<img src="' . html_encode(pathurlencode(WEBPATH . $fullimg)) . '" alt="Logo"/>';
		} else {
			echo '<img src="' . $_zp_themeroot . '/images/effervescence.png" alt="Logo"/>';
		}
	} else {
		$name = get_language_string(getOption('Theme_logo'));
		if (empty($name)) {
			$name = sanitize($_SERVER['HTTP_HOST']);
		}
		echo "<h1><a>$name</a></h1>";
	}
}

function annotateAlbum() {
	global $_zp_current_album;
	$tagit = '';
	$pwd = $_zp_current_album->getPassword();
	if (zp_loggedin() && !empty($pwd)) {
		$tagit = "\n" . gettext('The album is password protected.');
	}
	if (!$_zp_current_album->getShow()) {
		$tagit .= "\n" . gettext('The album is not published.');
	}
	return sprintf(gettext('View the Album: %s'), getBareAlbumTitle()) . getImage_AlbumCount() . $tagit;
}

function annotateImage() {
	global $_zp_current_image;
	if (is_object($_zp_current_image)) {
		if (!$_zp_current_image->getShow()) {
			$tagit = "\n" . gettext('The image is marked not visible.');
		} else {
			$tagit = '';
		}
		return sprintf(gettext('View the image: %s'), GetBareImageTitle()) . $tagit;
	}
}

function printFooter($admin = true) {
	global $_zp_themeroot, $_zp_gallery, $_zp_gallery_page, $_zp_current_zenpage_news, $_zp_current_zenpage_page;
	$h = NULL;
	?>
	<!-- Footer -->
	<div class="footlinks">
		<?php
		$h = @call_user_func('getHitcounter');
		if (!is_null($h)) {
			?>
			<p>
				<?php printf(ngettext('%1$u hit on this %2$s', '%1$u hits on this %2$s', $h), $h, gettext('page')); ?>
			</p>
			<?php
		}
		if ($_zp_gallery_page == 'gallery.php') {
			?>
			<p>
				<small>
					<?php
					$albumNumber = getNumAlbums();
					echo sprintf(ngettext("%u Album", "%u Albums", $albumNumber), $albumNumber);
					?> &middot;
					<?php
					$c = get_subalbum_count();
					echo sprintf(ngettext("%u Subalbum", "%u Subalbums", $c), $c);
					?> &middot;
					<?php
					$photosNumber = db_count('images');
					echo sprintf(ngettext("%u Image", "%u Images", $photosNumber), $photosNumber);
					?>
					<?php if (function_exists('printCommentForm')) { ?>
						&middot;
						<?php
						$commentsNumber = db_count('comments', " WHERE inmoderation = 0");
						echo sprintf(ngettext("%u Comment", "%u Comments", $commentsNumber), $commentsNumber);
					}
					?>
				</small>
			</p>
			<?php
		}
		?>

		<?php printThemeInfo(); ?>
		<?php printZenphotoLink(); ?>
		<br />
		<?php
		if (function_exists('printFavoritesURL') && $_zp_gallery_page != 'password.php' && $_zp_gallery_page != 'favorites.php') {
			printFavoritesURL(NULL, '', ' | ', '<br />');
		}
		?>
		<?php
		if ($_zp_gallery_page == 'gallery.php') {
			if (class_exists('RSS'))
				printRSSLink('Gallery', '', 'Gallery RSS', '');
			echo '<br />';
		}
		?>
		<?php
		@call_user_func('printUserLogin_out', '', '<br />');
		?>
		<?php
		if ($_zp_gallery_page != 'contact.php' && extensionEnabled('contact_form') && ($_zp_gallery_page != 'password.php' || $_zp_gallery->isUnprotectedPage('contact'))) {
			printCustomPageURL(gettext('Contact us'), 'contact', '', '');
			echo '<br />';
		}
		?>
		<?php
		if ($_zp_gallery_page != 'register.php' && function_exists('printRegisterURL') && !zp_loggedin() && ($_zp_gallery_page != 'password.php' || $_zp_gallery->isUnprotectedPage('register'))) {
			printRegisterURL(gettext('Register for this site'), '');
			echo '<br />';
		}
		?>
		<?php @call_user_func('mobileTheme::controlLink'); ?>
	<?php @call_user_func('printLanguageSelector'); ?>
		<br class="clearall" />
	</div>
	<!-- Administration Toolbox -->
	<?php
}

function commonNewsLoop($paged) {
	$newstypes = array('album' => gettext('album'), 'image' => gettext('image'), 'video' => gettext('video'), 'news' => gettext('news'));
	while (next_news()) {
		$newstypedisplay = gettext('news');
		if (stickyNews()) {
			$newstypedisplay .= ' <small><em>' . gettext('sticky') . '</em></small>';
		}
		?>
		<div class="newsarticle<?php if (stickyNews()) echo ' sticky'; ?>">
			<h3><?php printNewsURL(); ?><?php echo " <span class='newstype'>[" . $newstypedisplay . "]</span>"; ?></h3>
			<div class="newsarticlecredit">
				<span class="newsarticlecredit-left">
					<?php
					$count = @call_user_func('getCommentCount');
					$cat = getNewsCategories();
					printNewsDate();
					if ($count > 0) {
						echo ' | ';
						printf(gettext("Comments: %d"), $count);
					}
					?>
				</span>
				<?php
				if (!empty($cat)) {
					echo ' | ';
					printNewsCategories(", ", gettext("Categories: "), "newscategories");
				}
				?>
			</div> <!-- newsarticlecredit -->
			<?php printCodeblock(1); ?>
			<?php printNewsContent(); ?>
		<?php printCodeblock(2); ?>
			<br class="clearall" />
		</div>
		<?php
	}
	if ($paged) {
		printNewsPageListWithNav(gettext('next »'), gettext('« prev'), true, 'pagelist', true);
	}
}

function exerpt($content, $length) {
	return shortenContent(getBare($content), $length, getOption("zenpage_textshorten_indicator"));
}

function commonComment() {
	if (function_exists('printCommentForm')) {
		?>
		<div id="commentbox">
			<?php
			if (getCommentErrors() || getCommentCount() == 0) {
				$style = NULL;
				$head = '';
			} else {
//TODO: if the following line is used as intended the comment textarea is hidden to start with and when shown is not full width.
//				$style = ' class="comment" style="display:none;"';
				$style = ' class="commentx" style="display:block;"';
				$head = "<div$style><h3>" . gettext('Add a comment') . '</h3></div>';
			}
			printCommentForm(true, $head, true, $style);
			?>
		</div><!-- id="commentbox" -->
		<?php
	}
}

function my_checkPageValidity($request, $gallery_page, $page) {
	switch ($gallery_page) {
		case 'gallery.php':
			$gallery_page = 'index.php'; //	same as an album gallery index
			break;
		case 'index.php':
			if (!extensionEnabled('zenpage') || getOption('custom_index_page') == 'gallery') { // only one index page if zenpage plugin is enabled or custom index page is set
				break;
			}
		default:
			if ($page != 1) {
				return false;
			}
		case 'news.php':
		case 'album.php':
		case 'search.php':
			break;
	}
	return checkPageValidity($request, $gallery_page, $page);
}
?>