/**
	 * Expire a sitepage-variation
	 * @param integer ID of the sitepage to expire
	 * @param integer ID of the level that will be expired
	 * @param integer ID of the variation to expire
	 */
	function expireSitepage($spid, $level, $variation) {
		global $db, $c;

		$spidTrans = translateState($spid, $level, $false);
		// update sitepage_names.
		$sql = "UPDATE sitepage_names SET DELETED=1 WHERE SPID = $spidTrans AND VARIATION_ID = $variation";
		$query = new query($db, $sql);
		// get CLID
		$sql = " SELECT cv.CLID FROM cluster_variations cv, sitepage sp WHERE sp.CLNID = cv.CLNID AND sp.SPID = $spidTrans  AND cv.VARIATION_ID = $variation";
		$query = new query($db, $sql);
		$query->getrow();
		$clid = $query->field("CLID");
		$sql = "UPDATE state_translation SET EXPIRED=1 WHERE OUT_ID = $clid";
		$query = new query($db, $sql);
		// count rest of variations of spid.
		$sql = "SELECT COUNT(VARIATION_ID) AS ANZ FROM sitepage_names WHERE SPID = $spidTrans AND DELETED = 0";
		$query = new query($db, $sql);
		$query->getrow();
		$amount = $query->field("ANZ");

		// if last variation was expired, expire also menu and sitepage.
		if ($amount == 0) {
			$sql = "UPDATE state_translation SET EXPIRED=1 WHERE IN_ID = $spid";

			$query = new query($db, $sql);
			$sql = "SELECT MENU_ID FROM sitepage WHERE SPID = $spid";
			$query = new query($db, $sql);
			$query->getrow();
			$menu = $query->field("MENU_ID");
			$sql = "UPDATE state_translation SET EXPIRED = 1 WHERE IN_ID = $menu";
			$query = new query($db, $sql);
			$query->free();
		}

		flushSitePage($spidTrans, $variation);

		// clear direct path
		$sql = "SELECT DIRECT_URL FROM sitepage_names WHERE SPID = $spid AND VARIATION_ID = $variation";
		$query = new query($db, $sql);
		$query->getrow();
		$short = $query->field("DIRECT_URL");
		$query->free();

		if ($short != "")
			clearShortURL ($short);
		
		if (!$c["classicurls"])
		  clearURLPage($spidTrans, $variation);
			
		global $JPCACHE_ON;
		//cc on launch
		
		$menu = getDBCell("sitepage", "MENU_ID", "SPID = $spid");
		$cconlaunch = getDBCell("sitemap", "CC_ON_LAUNCH", "MENU_ID = " . $menu);
		$ccarray = explode(",", $cconlaunch);
		$mparray = createDBCArray("sitepage", "SPID", "MENU_ID = " . $menu);

		for ($i = 0; $i < count($ccarray); $i++) {
			$spidTrans = translateState($ccarray[$i], $level, false);

			if ($spidTrans != ""  && isCached($ccarray[$i], $variation)) {	
				renderSitePage($spidTrans, $variation);
				if ($JPCACHE_ON) {
					@unlink($c["dyncachepath"]."dyncache-".jpcacheFilename($spidTrans, $variation));
				}
			}
		}

		for ($i = 0; $i < count($mparray); $i++) {
			$spidTrans = translateState($mparray[$i], $level, false);

			if ($spidTrans != ""  && isCached($mparray[$i], $variation)) {	
				// old html caching
				// renderSitePage($spidTrans, $variation);
				if ($JPCACHE_ON  && !$c["renderstatichtml"]) {					
					@unlink($c["dyncachepath"]."dyncache-".jpcacheFilename($spidTrans, $variation));					
				} else {
				  @unlink($c["cachepath"]."static/dyncache-".jpcacheFilename($spidTrans, $variation));									  
				}

			}
		}

	}
	/**
	 * rebuilds the complete cache of the whole website.
	 *
	 */
	function rebuildCache() {
		global $c, $db;
		if ($c["renderstatichtml"]) {
			$maxtime = ini_get("max_execution_time");
			ini_set("max_execution_time", $c["timeout"]);
			$sp_sql = "SELECT SPID FROM sitepage WHERE DELETED=0 AND VERSION=10";
			$sp_query = new query($db, $sp_sql);
			$clist_id = 0;
			while ($sp_query->getrow()) {
				$my_spid = $sp_query->field("SPID");

				$sv_sql = "SELECT VARIATION_ID FROM variations";
				$sv_query = new query($db, $sv_sql);
				while ($sv_query->getrow()) {
					$my_variation = $sv_query->field("VARIATION_ID");
					if (isCached($my_spid, $my_variation)) {
						if (SPVarExists($my_spid, $my_variation)) {							
							renderSitePage($my_spid, $my_variation);
						}
					}
				}
			}

			ini_set("max_execution_time", $maxtime);
		}
	}