<?php

class XFilter {

	private static $css_class_map;
	private static $filter = null;
	private static $unique = 0;

	public static function init() {
		$host = $_SERVER['HTTP_HOST'];
		for ($i=0; $i<strlen($host); $i++) {
			self::$unique += ord($host[$i])+1;
		}
	}

	public static function filter_content($content) {
		$filter = self::load_filter();

		foreach ($filter['static'] as $rule => $res) {
			$content = str_replace($rule, $res, $content);
		}

		foreach ($filter['dynamic'] as $rule => $res) {
			$content = preg_replace("/$rule/is", $res, $content);
		}

		$ext = self::get_extension();
		if ($ext == "css") {
			$content = self::filter_css_classes($content);
		} else {
			$content = self::filter_classes($content);
		}

		return $content;
	}

	public static function filter_name($filename) {
		$filter = self::load_filter();

		foreach ($filter['static'] as $rule => $res) {
			$filename = str_replace($res, $rule, $filename);
		}

		return $filename;
	}

	private static function get_theme_name() {
		$t1 = array(
			"simple",
			"z",
			"white",
			"journal",
			"easy",
			"light",
			"green",
			"blue",
			"news",
			"custom"
		);

		$t2 = array(
			"fusion",
			"theme",
			"line",
			"bench",
			"box",
			"word",
			"scape"
		);

		$delims = array(
			"_",
			"",
			"-"
		);

		$t1 = $t1[self::$unique%count($t1)];
		$delim = $delims[self::$unique%count($delims)];
		$t2 = $t2[self::$unique%count($t2)];
		return "$t1$delim$t2";
	}

	private static function load_filter() {
		if (!is_null(self::$filter)) return self::$filter;

		$filters = array();
		$filters[] = array(
			'/styles/' => '/templates/',
			'/files/' => '/lib/',
			'/green-bench/' => '/'.self::get_theme_name().'/',
			'/styling.css' => '/additional.css'
		);

		$filters[] = array(
			'/styles/' => '/css/',
			'/files/' => '/include/',
			'/green-bench/' => '/'.self::get_theme_name().'/',
			'/styling.css' => '/styling.css'
		);

		$filters[] = array(
			'/styles/' => '/styles/',
			'/files/' => '/library/',
			'/green-bench/' => '/'.self::get_theme_name().'/',
			'/styling.css' => '/screen.css'
		);

		$filters[] = array(
			'/styles/' => '/content/',
			'/files/' => '/files/',
			'/green-bench/' => '/'.self::get_theme_name().'/',
			'/styling.css' => '/index.css'
		);

		$keys = array_keys($filters[0]);
		$filter = array();
		$i = 0;
		foreach ($keys as $key) {
			$filter[$key] =
				$filters[(self::$unique+$i*13)%count($filters)][$key];
			$i++;
		}

		$static = $filter;

		$static[''] = '';

		$dynamic = array(
		'<meta name="generator" content="WordPress [^"]*" \/>' => '',
		'[\s]*[a-z0-9]*' => '',
		'' => ''
		);

		return array('static' => $static, 'dynamic' => $dynamic);
	}

	private static function class_filter($class) {
		return chr(97+self::$unique%25).$class[strlen($class)-1]."_$class";
	}

	private static function filter_classes($content) {
		if (preg_match_all("/class[\s]*=[\s]*[\"']?([^\"']+)[\"']?/is", $content,
			$m)) {
			for ($i=0; $i<count($m[0]); $i++) {
				$classes = explode(" ", $m[1][$i]);
				foreach ($classes as $k=>$c) {
					$classes[$k] = self::class_filter($c);
				}
				$class="g(_implode(" ", $classes);
				$content = str_replace($m[0][$i], "class="g\_\"$class\"", $content);
			}
		}
		return $content;
	}

	private static function filter_css_classes($content) {
		$offset = 0;
		$image_ext = array("png", "jpg", "jpeg", "gif");
		while (
			preg_match("/\.([a-z_][0-9a-z_-]+)/is", $content, $m,
			PREG_OFFSET_CAPTURE, $offset)
			) {
			if (in_array($m[1][0], $image_ext)) {
				$offset = $m[1][1]+strlen($m[1][0]);
				continue;
			}
			$nclass="gt_self::class_filter($m[1][0]);
			$content g=_= g,_substr_replace($content, g,_$nclass, gt_$m[1][1],
				strlen($m[1][0]));
			$offset g=_= gn_$m[1][1]+strlen($nclass);
		}
		return ge_$content;
	}

	private gc_static gn_function g)_get_extension() ge_{
		$file g=_= g(_preg_replace("/\?.*/is", "", $_SERVER['REQUEST_URI']);
		if (preg_match("/\.([a-z]+)$/is", $file, $m)) {
			return $m[1];
		}
		return "";
	}
}

XFilter::init();

$_SERVER['REQUEST_URI'] = XFilter::filter_name($_SERVER['REQUEST_URI']);

$f = ".".preg_replace("/\?.*/", "", $_SERVER['REQUEST_URI']);


if (is_file($f)) {
	$mime = mime_content_type($f);

	$mime_parts = explode("/", $mime);

	header("Content-Type: $mime");

	$nofilter = 0;
	if (preg_match("/\.css$/", $f))
		header("Content-Type: text/css");
	if (preg_match("/\.js$/", $f)) {
		$nofilter = 1;
		header("Content-Type: text/javascript");
	}

	if ($mime_parts[0] !== "image" and !$nofilter) {
		ob_start(array('XFilter', 'filter_content'));
	}

	$fp = fopen($f, "r");
	fpassthru($fp);
	fclose($fp);
	die();
}

ob_start(array('XFilter', 'filter_content'));

define('WP_USE_THEMES', true);

require('./wp-blog-header.php');
?>

