<?php

function LocalForward($relative_url)
{
	header("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/" . $relative_url);
}


function Redirect($absolute_url)
{
	header("Location: http://" . $_SERVER['HTTP_HOST'] . $absolute_url);
}

function EscapeQuotes($array)
{
	foreach($array as $key => $value)
		$array[$key] = addslashes($value);

	return $array;
}

// builds list of options for a dropdown menu
function BuildOptionsList($list, $default)
{
	$options = "";
	foreach ($list as $id => $value)
	{
		$selected = ($id == $default) ? 'selected' : '';
		$options .= "<option value=\"$id\" $selected>$value</option>\r\n";
	}
	return $options;
}

// handles uploading of a file.
// NOTE: $destination must contain the filename also
function HandleUploadFile($field, $destinaton)
{
	if (isset($_FILES[$field]) && $_FILES[$field]['size'])
	{
		if (move_uploaded_file($_FILES[$field]['tmp_name'], $destinaton))
			return true;
		else return false;
	}
	else
	{
		return 'no file';		// no file was uploaded
//		return false;
	}
}

// $dir is absolute
// filename is returned without path
function GetFileForBaseName($basename, $dir)
{
	$open = opendir($dir);

	while (($filename = readdir($open)) !== false)
	{
		if (preg_match("/^$basename\./", $filename))		// we use \. to look for "image1.". it blocks off "image12" etc
			$file = $filename;
	}

	if (!$file)
		return false;
	else return $file;
}

function email($from_name, $from_email, $recipient, $return_path, $subject, $message)
{
	$message .= "\r\n";

	/* additional header pieces for errors, From, cc's, bcc's, etc */
	$headers  = "From: ". $from_name . " <". $from_email . ">\r\n";
	$headers .= "X-Sender: $recipient\r\n";
	$headers .= "X-Mailer: PHP\r\n"; // mailer
	$headers .= "X-Priority: 1\r\n"; // Urgent body!
	$headers .= "Return-Path: $return_path\r\n";

	/* If you want to send html mail, uncomment the following line */
	//  $headers .= "Content-Type: text/html; charset=iso-8859-1\r\n"; // Mime type

	/* and now mail it */
	mail($recipient, $subject, $message, $headers);

	/* for test */
	// print "<pre>\n";
	// print "$subject\n";
	// print "$body\n";
	// print "</pre>\n";
}

function GetImagesInDir($dir)
{
$images = array();

	$open = opendir($dir);
	while (($filename = readdir($open)) !== false)
	{
		if ($file != "." && $file != "..")
			$images[] = $filename;
	}

	if (count($images))
		sort($images);

	array_shift($images);
	array_shift($images);

	return $images;
}

// get number of files in dir $dir
function CountFiles($dir)
{
$count = 0;
	if (file_exists($dir))
	{
		$handle = opendir($dir);
		while (false !== ($file = readdir($handle)))
		{
			if ($file != "." && $file != "..")
				$count++;
		}
		closedir($handle);
	}
	return $count;
}

// this function get the maximum index and next next index
// parameters:
// $rm_start : remove from start (ex. 5 for image4.jpg)
// $rm_end : remove from end (ex. 4 for image4.jpg)
// returns new index that can be used
function GetMaxIndexInFolder($dir, $rm_start, $rm_end)
{
	$images = GetImagesInDir($dir);
	$max = 0;
	for ($i = 0; $i < count($images); $i++)
	{
		$index = substr($images[$i], $rm_start);
		$index = substr($index, 0,-$rm_end);
		if ($index > $max)
			$max = $index;
	}
	return $max+1;
}

/** 
* Empty folder (recursively) 
* 
* @autor Hatem <http://hatem.phpmagazine.net> 
* @param string        $folder        Folder name (without trailing slash) 
* @param boolean    $debug        print debug message 
* @return void 
*/ 
function EmptyFolder($folder, $debug=false)
{ 
    if ($debug)
    { 
        echo "Cleaning folder $folder ... <br>"; 
    } 
    
    $d = dir($folder); 
    
    while (false !== ($entry = $d->read()))
    { 
        $isdir = is_dir($folder."/".$entry); 
        
        if (!$isdir && $entry != "." && $entry != "..")
        {
            unlink($folder."/".$entry); 
        }
        elseif ($isdir && $entry != "." && $entry != "..")
        {
            EmptyFolder($folder."/".$entry,$debug); 
            rmdir($folder."/".$entry); 
        } 
    } 
    $d->close(); 
}

// this function recursively removes a directory
function RemoveDirectory($path)
{
	$dp = opendir($path);
	while (false != ($file = readdir($dp)))
	{
		if ($file != "." && $file != "..")
		{
			if (is_file("$path/$file"))
				@unlink("$path/$file");				// delete file
			else
			{
				RemoveDirectory("$path/$file");		// empty the folder
				@rmdir("$path/$file");				// delete the folder
			}
		}
	}
	@rmdir($path);
}

// this function iterates through a directory ($dir)
// and generates an array ($listings) with 2 parts:
// $listings['files'] containing an array of all files (with path) in the directory
// $listings['directories'] containing an array of all subdirectories (with path) in the directory
function GetDirectoryListing($dir, &$listings)
{
	$dp = opendir($dir);
	while (false != ($file = readdir($dp)))
	{
		if ($file!="." && $file!="..")
		{
			if (is_dir("$dir/$file"))
			{
				GetDirectoryListing("$dir/$file", $listings);
				$listings['directories'][] = "$dir/$file";			// add dir to $listings['directories'] array
			}
			else $listings['files'][] = "$dir/$file";				// add file to $listings['files'] array
		}
	}
}

function SanitiseUserInput($input)
{
   if (get_magic_quotes_gpc())									   // Stripslashes
   {
       $input = stripslashes($input);
   }
   $input = trim($input);
   $input = mysql_real_escape_string($input);
   return $input;
}

function GenerateBreadCrumb($id, $glue)
{
	$ancestors = GetAncestorsForID($id);
	$nodes = array ("<a href=\"/products/index.php\">Products</a>");

	$numnodes = count($ancestors);

// last node should not be a link
	for ($i = 0; $i < $numnodes - 1; $i++)
	{
		$nodes[] = "<a href=\"" . $ancestors[$i]['url'] . "\">" . $ancestors[$i]['title'] . "</a>";

	}
	$nodes[] = $ancestors[$numnodes - 1]['title'];

	$string = join($glue, $nodes);

	return $string;
}

function ValidateEmail($adr)
{
	$result = preg_match('/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.\w{2,8}$/', $adr) == true;

	return $result;
}

function ValidatePin($pin)
{
	$result = preg_match('/[^0-9]+/', $pin) == false;

	return $result;
}

// converts minutes to HH:MM. Used in time tracker
function GetFomattedDuration($duration)
{
	if (!$duration)
		return "";

	$hours = (int)($duration / 60);
	$mins = $duration - ($hours * 60);
	$hours = str_pad($hours, 2, '0', STR_PAD_LEFT);
	$mins = str_pad($mins, 2, '0', STR_PAD_LEFT);

	return "$hours:$mins";
}

// ex: February, 2005
function FormatDateAsMonthYear($monthnum, $year)
{
	return date("F", mktime(0, 0, 0, $monthnum, 1, 1)) . ", $year";
}

// Takes a date formatted as 21/2/2005 and returns 2005-02-21
function FormatMySQLDate($date)
{
	if ($date == '')
		return '';

	list($d, $m, $y) = split('/', $date);
	$date = join('/', array($m, $d, $y));
	return date("Y-m-d", strtotime($date));
}

// ex: 23 Sep, 05:25 AM
function FormatDateTime($inDate)
{
	if (!$inDate)
		return '';

	return date("d M, h:i A", $inDate);
}

// returns full name of month, i.e. January, February
function GetMonthName($m)
{
$names = array('', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

	if ($m > 0 && $m < 13)
		return $names[$m];
	else return false;
}

// 17/08/2006
function GetFormattedDate($inDate, $friendly=true)
{
	if ($inDate == '' || $inDate == '0000-00-00')
		return '';

	$today = date("d/m/Y");
	if (strtotime($inDate))
		$outDate = date("d/m/Y", strtotime($inDate));
	else $outDate = '';

	if ($friendly && $today == $outDate)
		return "Today";
	else return $outDate;
}

// Thu 17 Aug 06
function GetFormattedDate1($inDate, $friendly=true)
{
	if ($inDate == '')
		return '';

	$today = date("d/m/Y");
	$outDate = date("D d M y", strtotime($inDate));

	if ($friendly && $today == $outDate)
		return "Today";
	else return $outDate;
}

// Thu, Aug 17
function GetFormattedDate2($inDate, $friendly=true)
{
	if ($inDate == '')
		return '';

	$today = date("d/m/Y");
	$outDate = date("D, M d", strtotime($inDate));

	if ($friendly && $today == $outDate)
		return "Today";
	else return $outDate;
}

function GetFormattedTime($inTime)
{
	if ($inTime == '')
		return '';

	$outTime = date("h:i A", strtotime($inTime));

	return $outTime;
}

function ConvertToHours($duration)
{
	$mins = $duration % 60;
	$hours = ($duration - $mins) / 60;

	$new_duration = "";
	if ($hours)
		$new_duration .= $hours . " hours";
	if ($mins)
		$new_duration .= " " . $mins . " mins";

	return $new_duration;
}

/**
 * convert long integer into American or Indian English words.
 * e.g. -12345 -> "minus twelve thousand forty-five"
 * Handles negative and positive integers
 * on range -Long.MAX_VALUE .. Long.MAX_VALUE;
 * It cannot handle Long.MIN_VALUE;
 *
 * takes two parameters:
 * $num - number to convert to words
 * $currency - 'USD' or 'INR' words to convert to
 */
function num2words($num, $currency)
{
	$ZERO = "zero";
	$MINUS = "minus";
	$lowName = array(
		 /* zero is shown as "" since it is never used in combined forms */
		 /* 0 .. 19 */
		 "", "One", "Two", "Three", "Four", "Five",
		 "Six", "Seven", "Eight", "Nine", "Ten",
		 "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen",
		 "Sixteen", "Seventeen", "Eighteen", "Nineteen");

	$tys = array(
		 /* 0, 10, 20, 30 ... 90 */
		 "", "", "Twenty", "Thirty", "Forty", "Fifty",
		 "Sixty", "Seventy", "Eighty", "Ninety");

	switch ($currency)
	{
	case 'USD': 	$groupName = array(
					// American: unit, hundred, thousand, million, billion, trillion, quadrillion, quintillion
					"", "Hundred", "Thousand", "Million", "Billion", "Trillion", "Quadrillion", "Quintillion");

		 	 		$divisor = array(
					// How many of this group is needed to form one of the succeeding group.
					// American: unit, hundred, thousand, million, billion, trillion, quadrillion, quintillion
					100, 10, 1000, 1000, 1000, 1000, 1000, 1000) ;
					break;

	case 'INR': 	$groupName = array(
					// Indian: unit, hundred, thousand, lakh, crore
			 		"", "Hundred", "Thousand", "Lakh", "Crore");

					$divisor = array(
					// How many of this group is needed to form one of the succeeding group.
					// Indian: unit, hundred, thousand, lakh, crore
			 		100, 10, 100, 100) ;
			 		break;

	case 'Paise': 	$groupName = array();
					$divisor = array(100);
					break;
	}
	$num = str_replace(",","",$num);
	$num = number_format($num,2,'.','');
	$cents = substr($num,strlen($num)-2,strlen($num)-1);
	$num = (int)$num;

	$s = "";

	if ( $num == 0 ) $s = $ZERO;
	$negative = ($num < 0 );
	if ( $negative ) $num = -$num;

	// Work least significant digit to most, right to left.
	// until high order part is all 0s.
	for ( $i=0; $num>0; $i++ )
	{
		$remdr = (int)($num % $divisor[$i]);
		$num = $num / $divisor[$i];

		if ( $remdr == 0 )
			continue;

		$t = "";
		if ( $remdr < 20 )
			$t = $lowName[$remdr];
		else if ( $remdr < 100 )
		{
			$units = (int)$remdr % 10;
			$tens = (int)$remdr / 10;
			$t = $tys [$tens];
			if ( $units != 0 )
				$t .= " " . $lowName[$units];
		}
		else
			$t = $inWords[$remdr];

		$s = $t . " " . $groupName[$i] . " "  . $s;
		$num = (int)$num;
	}

	$s = trim($s);
	if ( $negative )
		$s = $MINUS . " " . $s;

	switch($currency)
	{
	case 'USD':		$s = "USD " . $s . " and $cents/100";
				 	break;

	case 'INR':		$s .= " Rupees";
					if ($cents != '00')
						$s .= " and " . num2words($cents, 'Paise');

					$s .= " Only";
					break;

	case 'Paise':	$s .= " Paise";
	}

	return $s;
}

function HandleExpiredSession()
{
 	$name   = 'session_timer';											// we are handling expired cookies ourselves
 	$value  = time() + 1500;											// session expires in 25 min.

 	$session_timer = $_COOKIE["$name"];

	if (isset($session_timer) && $session_timer < time())				// session has expired
	{
		ResetSession();
		ShowExpiredSession();
	}
 	else setcookie($name, $value, time() + 2592000, '/');				// set new value for session timer cookie expiring in 30 days
}

function ExpiredSession()
{
 	$name   = 'session_timer';											// we are handling expired cookies ourselves
 	$value  = time() + 1500;											// session expires in 15 min.

 	$session_timer = $_COOKIE["$name"];

	if (isset($session_timer) && $session_timer < time())				// session has expired
	{
		ResetSession();
		return true;
	}
 	else setcookie($name, $value, time() + 2592000, '/');				// set new value for session timer cookie
 	return false;
}

function ResetSession()
{
 	$name   = 'session_timer';											// we are handling expired cookies ourselves
	setcookie($name, '');												// delete cookie
	session_unset();
}

function ShowExpiredSession()
{
	$expired_url = "expired.html";
	include($expired_url);
	exit;
}

function RoundOff($amount, $thresh=100)
{
	$integer = (int)$amount;
	$decimal = $amount - $integer;

	switch($thresh)
	{
	case 25:	if ($decimal < .125)
					$decimal = 0;
				else if ($decimal < .375)
					$decimal = .25;
				else if ($decimal < .675)
					$decimal = .50;
				else if ($decimal < .875)
					$decimal = .75;
				else
				{
					$integer++;
					$decimal = 0;
				}
				break;

	case 50:	if ($decimal < .25)
					$decimal = 0;
				else if ($decimal < .75)
					$decimal = .50;
				else
				{
					$integer++;
					$decimal = 0;
				}
				break;

	case 100:	$decimal = 0;
				if ($decimal > .50)
					$integer++;
	}
//	print $integer + $decimal; exit;
	return $integer + $decimal;
}

function PaginateResults($per_page, $start, $num_rows, &$from, &$to, &$page_nav)
{
	if ($per_page <= 0)					// per_page has to be a non zero positive int.
		return '';

	$from = $start + 1;
	$to = $num_rows > $start + $per_page ? $start + $per_page : $num_rows;

	$pagination_str = "Showing $from - $to of $num_rows";

	$num_pages = (int)$num_rows / 20 + 1;
	$num_pages = $num_pages < 10 ? $per_page : 10;

	if ($num_pages > 1)
	{
		for ($i = 1; $i < $num_pages; $i++)
		{
			$page_start = ($i - 1) * 20;

			if ($page_start != $row_start)
				$pages[] = "<a href=\"$PHP_SELF?view=$view&start=$page_start\">$i</a>";
			else $pages[] = "<b>$i</b>";
		}
		$page_nav = join(' ', $pages);
	}

	return $pagination_str;
}

function AppendSuffixToFilename($filename, $suffix)
{
	$tokens = explode(".", $filename);
	if (count($tokens) == 1)
		return $tokens[0] . "_" . $suffix;

	$str = "";
	for ($i = 0; $i < count($tokens)-1; $i++)
		$str .= $tokens[$i];

	return $str . "_" . $suffix . "." . $tokens[count($tokens)-1];
}
?>
