<?php

include_once("config.php");
include_once($UTIL_DIR . "/ping.php");


function rescale($image) {

	$maxwidth = 300;
	$maxheight = 240;

	$width = imagesx($image);
	$height = imagesy($image);

	$scale = 1;
	if($width > $maxwidth) $scale = $width / $maxwidth;
	if($height / $scale > $maxheight) $scale = $height / $maxheight;

	$image_p = imagecreatetruecolor($width / $scale, $height / $scale);
	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width / $scale, $height / $scale, $width, $height);

	return $image_p;
}

function errorImage($filename)
{
	/*
	 header('Content-Description: File Transfer');
	 header('Content-Type: image/jpeg');
	 header('Content-Length: ' . filesize($fullfilename));
	 header('Content-Disposition: inline; filename=' . basename($filename));
	 readfile($fullfilename); 
	*/
	echo "Error fetching image: " . $filename;
	die(404);
}

function getCachedImage($filename)
{
	global $IMAGECACHE;
	$fullfilename = $IMAGECACHE . "/" . urlencode($filename);

	if(!file_exists($fullfilename)) {

		$url = parse_url($filename);
		$filetype = strrchr($url["path"], '.');
		
		if( true || ping($url["hostname"], 1000) != -1) {
			
			error_reporting(E_ERROR | E_PARSE); 

			switch(tolower($filetype)) {
			case ".jpeg":
			case ".jpg":
				$image = imagecreatefromjpeg(urldecode($filename));
				if(!$image) errorImage($filename);
				$image = rescale($image);
				imagejpeg($image, $fullfilename, 90);
				break;

			case ".gif":
				$image = imagecreatefromgif(urldecode($filename));
				if(!$image) errorImage($filename);
				$image = rescale($image);
				imagegif($image, $fullfilename);
				break;

			case ".png":
				$image = imagecreatefrompng(urldecode($filename));
				if(!$image) errorImage($filename);
				$image = rescale($image);
				imagepng($image, $fullfilename);
				break;

			default:
				if(!$image) errorImage("Unknown image type " . $filetype);
				break;
			}
			
			error_reporting(E_ALL ^ E_NOTICE);

		}
	}

	header('Content-Description: File Transfer');
	header('Content-Type: image/jpeg');
	header('Content-Length: ' . filesize($fullfilename));
	header('Content-Disposition: inline; filename=' . basename($filename));
	readfile($fullfilename); 
}

?>