<?php

	function isNGGalleryActive() {
		if (!function_exists('is_plugin_active')) {
			require_once(sitePath() . '/wp-admin/includes/plugin.php');
		}		
		return is_plugin_active("nextgen-gallery/nggallery.php");
	}
	
	function getNGGalleryImages($ngGalleries, $ngImages, $dt, $lat, $lon, $dtoffset, &$error)
	{

		$result = array();
		$galids = explode(',', $ngGalleries);
		$imgids = explode(',', $ngImages);
		
		if (!isNGGalleryActive())
			return '';
		try {

			$pictures = array();
			foreach ($galids as $g) {						
				$pictures = array_merge($pictures, nggdb::get_gallery($g));
			}
			foreach ($imgids as $i) {
				array_push($pictures, nggdb::find_image($i));
			}

			foreach ($pictures as $p) {
				$item = array();
				$item["data"] = $p->thumbHTML;
				if (is_callable('exif_read_data'))
				{
					$exif = @exif_read_data($p->imagePath);	
					if ($exif !== false)
					{
						$item["lon"] = getExifGps($exif["GPSLongitude"], $exif['GPSLongitudeRef']);
						$item["lat"] = getExifGps($exif["GPSLatitude"], $exif['GPSLatitudeRef']);
						if (($item["lat"] != 0) || ($item["lon"] != 0)) 
						{
							$result[] = $item;
						}
						else if (isset($p->imagedate))
						{
							$_dt = strtotime($p->imagedate) + $dtoffset;
							$_item = findItemCoordinate($_dt, $dt, $lat, $lon);
							if ($_item != null)
							{
								$item["lat"] = $_item["lat"];
								$item["lon"] = $_item["lon"];
								$result[] = $item;
							}
						}
					}
				}
				else
				{
					$error .= "Sorry, <a href='http://php.net/manual/en/function.exif-read-data.php' target='_blank' >exif_read_data</a> function not found! check your hosting..<br />";
				}
			}			
			
		} catch (Exception $e) {
			$error .= 'Error When Retrieving NextGen Gallery galleries/images: $e <br />';
		}

		return $result;
	}
	
	function findItemCoordinate($imgdt, $dt, $lat, $lon)
	{
		foreach(array_keys($dt) as $i) 
		{
			if ($i!=0 && $imgdt >= $dt[$i-1] && $imgdt <= $dt[$i])
			{
				if ($lat[$i] != 0 && $lon[$i] != 0)
					return array( "lat" => $lat[$i], "lon" => $lon[$i] );
			}
		}
		return null;
	}
	
	function getExifGps($exifCoord, $hemi) 
	{
		$degrees = count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0;
		$minutes = count($exifCoord) > 1 ? gps2Num($exifCoord[1]) : 0;
		$seconds = count($exifCoord) > 2 ? gps2Num($exifCoord[2]) : 0;
		$flip = ($hemi == 'W' or $hemi == 'S') ? -1 : 1;
		return $flip * ($degrees + $minutes / 60 + $seconds / 3600);
	}

	function gps2Num($coordPart) 
	{
		$parts = explode('/', $coordPart);
		if (count($parts) <= 0)
			return 0;
		if (count($parts) == 1)
			return $parts[0];		
		$lat = floatval($parts[0]);
		$lon = floatval($parts[1]);
		if ($lon == 0)
			return $lat;
		return $lat / $lon;
	}

?>