';
	usort($timezone_identifiers, 'timezone_cmp');
	$continent = '';
	foreach($timezone_identifiers as $value) {
		$ex = explode("/", $value);
		if(count($ex) > 1) {
			if($ex[0] != $continent) {
				if($continent != '')
					$o .= '';
				$continent = $ex[0];
				$o .= '';
				$continent = 'Miscellaneous';
				$o .= '';
	return $o;
}}
if(! function_exists('datetime_convert')) {
function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d H:i:s") {
	// Slight hackish adjustment so that 'zero' datetime actually returns what is intended
        // otherwise we end up with -0001-11-30 ...
	// add 32 days so that we at least get year 00, and then hack around the fact that 
        // months and days always start with 1. 
	if(substr($s,0,10) == '0000-00-00') {
		$d = new DateTime($s . ' + 32 days', new DateTimeZone('UTC'));
		return str_replace('1','0',$d->format($fmt));
	}
	$d = new DateTime($s, new DateTimeZone($from));
	$d->setTimeZone(new DateTimeZone($to));
	return($d->format($fmt));
}}
function dob($dob) {
	list($year,$month,$day) = sscanf($dob,'%4d-%2d-%2d');
	$y = datetime_convert('UTC',date_default_timezone_get(),'now','Y');
	$o = datesel('',1920,$y,true,$year,$month,$day);
	return $o;
}
if(! function_exists('datesel')) {
function datesel($pre,$ymin,$ymax,$allow_blank,$y,$m,$d) {
	$o = '';
	$o .= "  ";
	return $o;
}}
if(! function_exists('relative_date')) {
function relative_date($posted_date) {
	$localtime = datetime_convert('UTC',date_default_timezone_get(),$posted_date); 
	$abs = strtotime($localtime);
	$etime = time() - $abs;
    
	if ($etime < 1) {
		return t('less than a second ago');
	}
    
	$a = array( 12 * 30 * 24 * 60 * 60  =>  array( t('year'),   t('years')),
		    30 * 24 * 60 * 60       =>  array( t('month'),  t('months')),
		    7  * 24 * 60 * 60       =>  array( t('week'),   t('weeks')),
		    24 * 60 * 60            =>  array( t('day'),    t('days')),
		    60 * 60                 =>  array( t('hour'),   t('hours')),
		    60                      =>  array( t('minute'), t('minutes')),
		    1                       =>  array( t('second'), t('seconds'))
	);
    
	foreach ($a as $secs => $str) {
	$d = $etime / $secs;
	if ($d >= 1) {
		$r = round($d);
		return $r . ' ' . (($r == 1) ? $str[0] : $str[1]) . t(' ago');
        }
    }
}}
function age($dob,$owner_tz = '',$viewer_tz = '') {
	if(! intval($dob))
		return 0;
	if(! $owner_tz)
		$owner_tz = date_default_timezone_get();
	if(! $viewer_tz)
		$viewer_tz = date_default_timezone_get();
	$birthdate = datetime_convert('UTC',$owner_tz,$dob . ' 00:00:00+00:00','Y-m-d');
	list($year,$month,$day) = explode("-",$birthdate);
	$year_diff  = datetime_convert('UTC',$viewer_tz,'now','Y') - $year;
	$curr_month = datetime_convert('UTC',$viewer_tz,'now','m');
	$curr_day   = datetime_convert('UTC',$viewer_tz,'now','d');
	if(($curr_month < $month) || (($curr_month == $month) && ($curr_day < $day)))
		$year_diff--;
	return $year_diff;
}