<?php
/*
  $Ctt$
cgf_draw_pull_down_menu
  Clinical Trac, Proprietary Tracking Solutions
  http://www.clinicaltrac.com

  Copyright (c) 2016 Clinical Trac

  Released under a Proprietary License Agreement
*/

////
// Get the installed version number
  function cgf_get_version() {
    static $v;

    if (!isset($v)) {
      $v = trim(implode('', file(DIR_WS_INCLUDES . 'version.php')));
    }

    return $v;
  }

////
// Redirect to another page or site
  function cgf_redirect($url) {
    global $logger;

    if ( (strstr($url, "\n") != false) || (strstr($url, "\r") != false) ) {
      cgf_redirect(cgf_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));
    }

    if ( strpos($url, '&amp;') !== false ) {
      $url = str_replace('&amp;', '&', $url);
    }

    if ( strpos($url, '%3F') !== false ) {
	  $url = str_replace('%3F', '&', $url);
      $url = utf8_decode(urldecode($url));
    }
    header('Location: ' . $url);
    if (STORE_PAGE_PARSE_TIME == 'true') {
      if (!is_object($logger)) $logger = new logger;
      $logger->timer_stop();
    }

    exit;
  }
//tejas 31 july 2017 monday
function get_selected_rotation()
	{
		$rotaion_id = (isset($_GET['rotation']))?$_GET['rotation']:$_SESSION['activeRotation'];
		
		if(isset($_GET['rotation']))
			$_SESSION['activeRotation']= $rotaion_id;
		return $rotaion_id;

	}
//tejas 4 aug 2017 monday
function get_selected_rotation_name()
		{
			$rotaion_id = (isset($_GET['rotation']))?$_GET['rotation']:$_SESSION['activeRotation'];
			
			$rotation_name_query = 'select rotation_name from rotations where rotation_id = ' .(int)$rotaion_id;
				$rotation_name = cgf_db_query($rotation_name_query);
//echo "select rotation_name from rotations where rotation_id = " .$rotaion_id . ' ';
			if(isset($_GET['rotation']))
			$_SESSION['activeRotation']= $rotaion_id;
      			$array_rotation_name = cgf_db_fetch_array($rotation_name);
		if(count($array_rotation_name))
		return $array_rotation_name['rotation_name'];
		else
		return '';
			
		}
////
// Parse the data used in the html tags to ensure the tags will not break
  function cgf_parse_input_field_data($data, $parse) {
    return strtr(trim($data), $parse);
  }

  function cgf_output_string($string, $translate = false, $protected = false) {
    if ($protected == true) {
      return htmlspecialchars($string);
    } else {
      if ($translate == false) {
        return cgf_parse_input_field_data($string, array('"' => '&quot;'));
      } else {
        return cgf_parse_input_field_data($string, $translate);
      }
    }
  }

  function cgf_output_string_protected($string) {
    return cgf_output_string($string, false, true);
  }

  function cgf_sanitize_string($string) {
    $patterns = array ('/ +/','/[<>]/');
    $replace = array (' ', '_');
    return preg_replace($patterns, $replace, trim($string));
  }

	function validateDate($date, $format = 'Y-m-d H:i:s')
	{
		$d = DateTime::createFromFormat($format, $date);
		return $d && $d->format($format) == $date;
	}

	function cgf_date_raw($date, $reverse = false) {
	  if ($reverse) {
		return substr($date, 3, 2) . substr($date, 0, 2) . substr($date, 6, 4);
	  } else {
		return substr($date, 6, 4) . substr($date, 0, 2) . substr($date, 3, 2);
	  }
	}
	
	function cgf_datetime_raw($date, $reverse = false) {
		$yy = substr($date, 6, 4);
		$mm = substr($date, 0, 2);
		$dd = substr($date, 3, 2);
		$hh = substr($date, 11, 2);
		$mi = substr($date, 14, 2);
		$ss = substr($date, 17, 2);
		$ss = empty($ss) ? '00':$ss;
		return  $yy.'-'.$mm.'-'.$dd.' '.$hh.':'.$mi.':'.$ss;
	}

	
	function is_datetime($date) {
	  if (preg_match("/[0-9]{4}\-[0-9]{2}\-[0-9]{2} [0-9]{2}\:[0-9]{2}\:[0-9]{2}/", $date)) {
		return true;
	  } else {	  
		return false;
	  }
	}	
	function is_date($date) {
	  if (preg_match("/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/", $date) && strlen(trim($date)) <= 10) {
		return true;
	  } elseif (preg_match("/[0-9]{4}\-[0-9]{2}\-[0-9]{2}/", $date) && strlen(trim($date)) <= 10) {
		return true;
	  } else {	  
		return false;
	  }
	}
	function is_mask($data) {
	  if (preg_match("/^[\#]{3}-[\#]{2}-[\d]{4}$/", $data)) {
		return true;
	  } else {
		return false;
	  }
	}
	function cgf_format_phone($phone) {
	  $numbers = preg_replace("/[^\d]/", "", $phone);
	  return preg_replace("/^1?(\d{3})(\d{3})(\d{4})$/", "$1-$2-$3", $numbers);
	}

  function cgf_student_name($id) {
    $student = cgf_db_query("select student_firstname, student_lastname from " . TABLE_STUDENTS . " where student_id = '" . (int)$student_id . "'");
    $student_values = cgf_db_fetch_array($student);

    return $student_values['student_firstname'] . ' ' . $student_values['student_lastname'];
  }

  function cgf_get_path($current_category_id = '') {
    global $cPath_array;

    if ($current_category_id == '') {
      $cPath_new = implode('_', $cPath_array);
    } else {
      if (sizeof($cPath_array) == 0) {
        $cPath_new = $current_category_id;
      } else {
        $cPath_new = '';
        $last_category_query = cgf_db_query("select parent_id from " . TABLE_ADDRESS_GROUP . " where categories_id = '" . (int)$cPath_array[(sizeof($cPath_array)-1)] . "'");
        $last_category = cgf_db_fetch_array($last_category_query);

        $current_category_query = cgf_db_query("select parent_id from " . TABLE_ADDRESS_GROUP . " where categories_id = '" . (int)$current_category_id . "'");
        $current_category = cgf_db_fetch_array($current_category_query);

        if ($last_category['parent_id'] == $current_category['parent_id']) {
          for ($i = 0, $n = sizeof($cPath_array) - 1; $i < $n; $i++) {
            $cPath_new .= '_' . $cPath_array[$i];
          }
        } else {
          for ($i = 0, $n = sizeof($cPath_array); $i < $n; $i++) {
            $cPath_new .= '_' . $cPath_array[$i];
          }
        }

        $cPath_new .= '_' . $current_category_id;

        if (substr($cPath_new, 0, 1) == '_') {
          $cPath_new = substr($cPath_new, 1);
        }
      }
    }

    return 'cPath=' . $cPath_new;
  }

  function cgf_get_apath($current_category_id = '') {
    global $aPath_array;

    if ($current_category_id == '') {
      $aPath_new = implode('_', $aPath_array);
    } else {
      if (sizeof($aPath_array) == 0) {
        $aPath_new = $current_category_id;
      } else {
        $aPath_new = '';
        $last_category_query = cgf_db_query("select address_parent_id from " . TABLE_ADDRESS_BOOK_GROUP . " where address_parent_id = '" . (int)$aPath_array[(sizeof($aPath_array)-1)] . "'");
        $last_category = cgf_db_fetch_array($last_category_query);

        $current_category_query = cgf_db_query("select address_parent_id from " . TABLE_ADDRESS_BOOK_GROUP . " where address_parent_id = '" . (int)$current_category_id . "'");
        $current_category = cgf_db_fetch_array($current_category_query);

        if ($last_category['address_parent_id'] == $current_category['address_parent_id']) {
          for ($i = 0, $n = sizeof($aPath_array) - 1; $i < $n; $i++) {
            $aPath_new .= '_' . $aPath_array[$i];
          }
        } else {
          for ($i = 0, $n = sizeof($aPath_array); $i < $n; $i++) {
            $aPath_new .= '_' . $aPath_array[$i];
          }
        }

        $aPath_new .= '_' . $current_category_id;

        if (substr($aPath_new, 0, 1) == '_') {
          $aPath_new = substr($aPath_new, 1);
        }
      }
    }

    return 'aPath=' . $aPath_new;
  }

  function cgf_get_directory_group($current_category_id = '') {
        $category_group_query = cgf_db_query("select group_id from " . TABLE_ADDRESS_GROUP . " where categories_id = '" . (int)$current_category_id . "'");
        $group_id = cgf_db_fetch_array($category_group_query);
		
		return $group_id['group_id'];
  }
  function cgf_get_all_get_params($exclude_array = '') {
    global $HTTP_GET_VARS;

    if ($exclude_array == '') $exclude_array = array();

    $get_url = '';

    reset($HTTP_GET_VARS);
    while (list($key, $value) = each($HTTP_GET_VARS)) {
      if (($key != cgf_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array))) $get_url .= $key . '=' . $value . '&';
    }

    return $get_url;
  }

  function cgf_date_long($raw_date) {
    if ( ($raw_date == '0000-00-00 00:00:00') || ($raw_date == '') ) return false;

    $year = (int)substr($raw_date, 0, 4);
    $month = (int)substr($raw_date, 5, 2);
    $day = (int)substr($raw_date, 8, 2);
    $hour = (int)substr($raw_date, 11, 2);
    $minute = (int)substr($raw_date, 14, 2);
    $second = (int)substr($raw_date, 17, 2);

    return strftime(DATE_FORMAT_LONG, mktime($hour, $minute, $second, $month, $day, $year));
  }

////
// Output a raw date string in the selected locale date format
// $raw_date needs to be in this format: YYYY-MM-DD HH:MM:SS
// NOTE: Includes a workaround for dates before 01/01/1970 that fail on windows servers
  function cgf_date_short($raw_date) {
    if ( ($raw_date == '0000-00-00 00:00:00') || ($raw_date == '0000-00-00') || ($raw_date == '') ) return '';

    $year = substr($raw_date, 0, 4);
    $month = (int)substr($raw_date, 5, 2);
    $day = (int)substr($raw_date, 8, 2);
    $hour = (int)substr($raw_date, 11, 2);
    $minute = (int)substr($raw_date, 14, 2);
    $second = (int)substr($raw_date, 17, 2);

    if (@date('Y', mktime($hour, $minute, $second, $month, $day, $year)) == $year) {
      return date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, $year));
    } else {
      return preg_replace('/2037$/', $year, date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, 2037)));
    }

  }

  function cgf_datetime_parse($raw_date, $type='') {
    if ( ($raw_date == '0000-00-00 00:00:00') || ($raw_date == '0000-00-00') || ($raw_date == '') ) return '';
	
    switch($type) {
		case 'year':  	$year = substr($raw_date, 0, 4); return $year; break;
		case 'month': 	$month = (int)substr($raw_date, 5, 2); return $month; break;
		case 'day':   	$day = (int)substr($raw_date, 8, 2); return $day; break;
		case 'hour':  	$hour = (int)substr($raw_date, 11, 2); return $hour; break;
		case 'minute':	$minute = (int)substr($raw_date, 14, 2); return $minute; break;
		case 'second':	$second = (int)substr($raw_date, 17, 2); return $second; break;
	}
  }

  function cgf_datetime_short($raw_datetime) {
    if ( ($raw_datetime == '0000-00-00 00:00:00') || ($raw_datetime == '') ) return false;

    $year = (int)substr($raw_datetime, 0, 4);
    $month = (int)substr($raw_datetime, 5, 2);
    $day = (int)substr($raw_datetime, 8, 2);
    $hour = (int)substr($raw_datetime, 11, 2);
    $minute = (int)substr($raw_datetime, 14, 2);
    $second = (int)substr($raw_datetime, 17, 2);

    return strftime(DATE_TIME_FORMAT, mktime($hour, $minute, $second, $month, $day, $year));
  }

function cgf_time_difference($time1, $time2) {
	$start = strtotime($time1);
	$end   = strtotime($time2);
	$diff  = $end - $start;
	$diff = floor(($diff/3600) * 100) / 100;
	
	if($diff){
		return $diff;
	}else{
		return 'Error!';
	}
}

  function cgf_get_category_tree($parent_id = '0', $spacing = '', $exclude = '', $category_tree_array = '', $include_itself = false) {
    global $languages_id;

    if (!is_array($category_tree_array)) $category_tree_array = array();
    if ( (sizeof($category_tree_array) < 1) && ($exclude != '0') ) $category_tree_array[] = array('id' => '0', 'text' => TEXT_TOP);

    if ($include_itself) {
      $category_query = cgf_db_query("select cd.categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " cd where cd.language_id = '" . (int)$languages_id . "' and cd.categories_id = '" . (int)$parent_id . "'");
      $category = cgf_db_fetch_array($category_query);
      $category_tree_array[] = array('id' => $parent_id, 'text' => $category['categories_name']);
    }

    $categories_query = cgf_db_query("select c.categories_id, cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and c.parent_id = '" . (int)$parent_id . "' order by c.sort_order, cd.categories_name");
    while ($categories = cgf_db_fetch_array($categories_query)) {
      if ($exclude != $categories['categories_id']) $category_tree_array[] = array('id' => $categories['categories_id'], 'text' => $spacing . $categories['categories_name']);
      $category_tree_array = cgf_get_category_tree($categories['categories_id'], $spacing . '&nbsp;&nbsp;&nbsp;', $exclude, $category_tree_array);
    }

    return $category_tree_array;
  }

  function cgf_draw_products_pull_down($name, $parameters = '', $exclude = '') {
    global $currencies, $languages_id;

    if ($exclude == '') {
      $exclude = array();
    }

    $select_string = '<select name="' . $name . '"';

    if ($parameters) {
      $select_string .= ' ' . $parameters;
    }

    $select_string .= '>';

    $products_query = cgf_db_query("select p.products_id, pd.products_name, p.products_price from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' order by products_name");
    while ($products = cgf_db_fetch_array($products_query)) {
      if (!in_array($products['products_id'], $exclude)) {
        $select_string .= '<option value="' . $products['products_id'] . '">' . $products['products_name'] . ' (' . $currencies->format($products['products_price']) . ')</option>';
      }
    }

    $select_string .= '</select>';

    return $select_string;
  }

  function cgf_format_system_info_array($array) {

    $output = '';
    foreach ($array as $section => $child) {
      $output .= '[' . $section . ']' . "\n";
      foreach ($child as $variable => $value) {
        if (is_array($value)) {
          $output .= $variable . ' = ' . implode(',', $value) ."\n";
        } else {
          $output .= $variable . ' = ' . $value . "\n";
        }
      }

    $output .= "\n";
    }
    return $output;

  }



  function cgf_options_name($options_id) {
    global $languages_id;

    $options = cgf_db_query("select products_options_name from " . TABLE_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$options_id . "' and language_id = '" . (int)$languages_id . "'");
    $options_values = cgf_db_fetch_array($options);

    return $options_values['products_options_name'];
  }

  function cgf_values_name($values_id) {
    global $languages_id;

    $values = cgf_db_query("select products_options_values_name from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$values_id . "' and language_id = '" . (int)$languages_id . "'");
    $values_values = cgf_db_fetch_array($values);

    return $values_values['products_options_values_name'];
  }

  function cgf_info_image($image, $alt, $width = '', $height = '') {
    if (cgf_not_null($image) && (file_exists(DIR_FS_CATALOG_IMAGES . $image)) ) {
      $image = cgf_image(DIR_FS_CATALOG_IMAGES . $image, $alt, $width, $height);
    } else {
      $image = TEXT_IMAGE_NONEXISTENT;
    }

    return $image;
  }

  function cgf_info_image_staff($image, $alt, $width = '', $height = '') {
    if (cgf_not_null($image) && (file_exists(DIR_FS_STAFF_IMAGES . $image)) ) {
      $image = cgf_image(DIR_FS_STAFF_IMAGES . $image, $alt, $width, $height);
    } else {
      $image = TEXT_IMAGE_NONEXISTENT;
    }

    return $image;
  }

  function cgf_break_string($string, $len, $break_char = '-') {
    $l = 0;
    $output = '';
    for ($i=0, $n=strlen($string); $i<$n; $i++) {
      $char = substr($string, $i, 1);
      if ($char != ' ') {
        $l++;
      } else {
        $l = 0;
      }
      if ($l > $len) {
        $l = 1;
        $output .= $break_char;
      }
      $output .= $char;
    }

    return $output;
  }

  function cgf_get_country_name($country_id) {
    $country_query = cgf_db_query("select countries_name from " . TABLE_COUNTRIES . " where countries_id = '" . (int)$country_id . "'");

    if (!cgf_db_num_rows($country_query)) {
      return $country_id;
    } else {
      $country = cgf_db_fetch_array($country_query);
      return $country['countries_name'];
    }
  }

  function cgf_get_zone_name($country_id, $zone_id, $default_zone) {
    $zone_query = cgf_db_query("select zone_name from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country_id . "' and zone_id = '" . (int)$zone_id . "'");
    if (cgf_db_num_rows($zone_query)) {
      $zone = cgf_db_fetch_array($zone_query);
      return $zone['zone_name'];
    } else {
      return $default_zone;
    }
  }

  function cgf_not_null($value) {
    if (is_array($value)) {
      if (sizeof($value) > 0) {
        return true;
      } else {
        return false;
      }
    } else {
      if ( (is_string($value) || is_int($value)) && ($value != '') && ($value != 'NULL') && (strlen(trim($value)) > 0)) {
        return true;
      } else {
        return false;
      }
    }
  }

  function cgf_browser_detect($component) {
    global $HTTP_USER_AGENT;

    return stristr($HTTP_USER_AGENT, $component);
  }

  function cgf_tax_classes_pull_down($parameters, $selected = '') {
    $select_string = '<select ' . $parameters . '>';
    $classes_query = cgf_db_query("select tax_class_id, tax_class_title from " . TABLE_TAX_CLASS . " order by tax_class_title");
    while ($classes = cgf_db_fetch_array($classes_query)) {
      $select_string .= '<option value="' . $classes['tax_class_id'] . '"';
      if ($selected == $classes['tax_class_id']) $select_string .= ' SELECTED';
      $select_string .= '>' . $classes['tax_class_title'] . '</option>';
    }
    $select_string .= '</select>';

    return $select_string;
  }

  function cgf_geo_zones_pull_down($parameters, $selected = '') {
    $select_string = '<select ' . $parameters . '>';
    $zones_query = cgf_db_query("select geo_zone_id, geo_zone_name from " . TABLE_GEO_ZONES . " order by geo_zone_name");
    while ($zones = cgf_db_fetch_array($zones_query)) {
      $select_string .= '<option value="' . $zones['geo_zone_id'] . '"';
      if ($selected == $zones['geo_zone_id']) $select_string .= ' SELECTED';
      $select_string .= '>' . $zones['geo_zone_name'] . '</option>';
    }
    $select_string .= '</select>';

    return $select_string;
  }

  function cgf_get_geo_zone_name($geo_zone_id) {
    $zones_query = cgf_db_query("select geo_zone_name from " . TABLE_GEO_ZONES . " where geo_zone_id = '" . (int)$geo_zone_id . "'");

    if (!cgf_db_num_rows($zones_query)) {
      $geo_zone_name = $geo_zone_id;
    } else {
      $zones = cgf_db_fetch_array($zones_query);
      $geo_zone_name = $zones['geo_zone_name'];
    }

    return $geo_zone_name;
  }


////
// Get address book group id
  function cgf_get_address_group($name='') {
    $address_query = cgf_db_query("select categories_id, language_id, categories_name from " . TABLE_ADDRESS_CATEGORY . " where categories_name='".$name."'");
	$address_group = cgf_db_fetch_array($address_query);
    
	return $address_group['categories_id'];
  }

////
// Get list of address_format_id's
  function cgf_get_address_formats() {
    $address_format_query = cgf_db_query("select address_format_id from " . TABLE_ADDRESS_FORMAT . " order by address_format_id");
    $address_format_array = array();
    while ($address_format_values = cgf_db_fetch_array($address_format_query)) {
      $address_format_array[] = array('id' => $address_format_values['address_format_id'],
                                      'text' => $address_format_values['address_format_id']);
    }
    return $address_format_array;
  }

////
// Build address tree list of categories  
  function cgf_get_address_tree($parent_id = '0', $spacing = '', $exclude = '', $category_tree_array = '', $include_itself = false) {
    global $languages_id;

    if (!is_array($category_tree_array)) $category_tree_array = array();
    if ( (sizeof($category_tree_array) < 1) && ($exclude != '0') ) $category_tree_array[] = array('id' => '0', 'text' => TEXT_TOP);

    if ($include_itself) {
      $category_query = cgf_db_query("select address_category from " . TABLE_ADDRESS_BOOK_GROUP . " where language_id = '" . (int)$languages_id . "' and address_parent_id = '" . (int)$parent_id . "'");
      $category = cgf_db_fetch_array($category_query);
      $category_tree_array[] = array('id' => $parent_id, 'text' => $category['address_category']);
    }

    $categories_query = cgf_db_query("select g.address_group_id, g.address_category, g.address_parent_id from " . TABLE_ADDRESS_BOOK . " a, " . TABLE_ADDRESS_BOOK_GROUP . " g where a.address_group = g.address_group_id and g.language_id = '" . (int)$languages_id . "' and a.address_group = '" . (int)$parent_id . "' order by g.sort_order, g.address_category");
    while ($categories = cgf_db_fetch_array($categories_query)) {
      if ($exclude != $categories['address_group_id']) $category_tree_array[] = array('id' => $categories['address_group_id'], 'text' => $spacing . $categories['address_category']);
      $category_tree_array = cgf_get_category_tree($categories['address_group_id'], $spacing . '&nbsp;&nbsp;&nbsp;', $exclude, $category_tree_array);
    }

    return $category_tree_array;
  }
  
////
// Count how many address exist in a address book
// TABLES: address book, address_group
  function cgf_address_in_address_group_count($address_id) {
    $book_count = 0;

    $book_query = cgf_db_query("select count(*) as total from " . TABLE_ADDRESS_BOOK . " a, " . TABLE_ADDRESS_BOOK_GROUP . " g where a.address_group = g.address_group_id and g.address_group_id = '" . (int)$address_id . "'");

    $book = cgf_db_fetch_array($book_query);

    $book_count += $book['total'];

    $childs_query = cgf_db_query("select address_group_id from " . TABLE_ADDRESS_BOOK_GROUP . " where address_parent_id = '" . (int)$address_id . "'");
    if (cgf_db_num_rows($childs_query)) {
      while ($childs = cgf_db_fetch_array($childs_query)) {
        $book_count += cgf_address_in_address_group_count($childs['address_group_id']);
      }
    }

    return $book_count;
  }

////
// Count how many subcategories exist in a address book group
// TABLES: address_book_group
  function cgf_childs_in_address_count($address_id) {
    $address_count = 0;

    $address_query = cgf_db_query("select address_group_id from " . TABLE_ADDRESS_BOOK_GROUP . " where address_parent_id = '" . (int)$address_id . "'");
    while ($address = cgf_db_fetch_array($address_query)) {
      $address_count++;
      $address_count += cgf_childs_in_address_count($address['address_group_id']);
    }

    return $address_count;
  }

////
// Returns the address_format_id for the given country
// TABLES: countries;
  function cgf_get_address_format_id($country_id) {
    $address_format_query = cgf_db_query("select address_format_id as format_id from " . TABLE_COUNTRIES . " where countries_id = '" . (int)$country_id . "'");
    if (cgf_db_num_rows($address_format_query)) {
      $address_format = cgf_db_fetch_array($address_format_query);
      return $address_format['format_id'];
    } else {
      return '1';
    }
  }


////
// Return a formatted address
// TABLES: student, address_book
  function cgf_address_label($student_id, $address_id = 1, $html = false, $boln = '', $eoln = "\n") {
    if (is_array($address_id) && !empty($address_id)) {
      return cgf_address_format($address_id['address_format_id'], $address_id, $html, $boln, $eoln);
    }

    $address_query = cgf_db_query("select entry_firstname as firstname, entry_lastname as lastname, entry_company as company, entry_street_address as street_address, entry_suburb as suburb, entry_city as city, entry_postcode as postcode, entry_state as state, entry_zone_id as zone_id, entry_country_id as country_id from " . TABLE_ADDRESS_BOOK . " where student_id = '" . (int)$student_id . "' and address_book_id = '" . (int)$address_id . "'");
    $address = cgf_db_fetch_array($address_query);

    $format_id = cgf_get_address_format_id($address['country_id']);

    return cgf_address_format($format_id, $address, $html, $boln, $eoln);
  }

  function cgf_address_format($address_format_id, $address, $html, $boln, $eoln) {
    $address_format_query = cgf_db_query("select address_format as format from " . TABLE_ADDRESS_FORMAT . " where address_format_id = '" . (int)$address_format_id . "'");
    $address_format = cgf_db_fetch_array($address_format_query);

    $company = cgf_output_string_protected($address['company']);
    if (isset($address['firstname']) && cgf_not_null($address['firstname'])) {
      $firstname = cgf_output_string_protected($address['firstname']);
      $lastname = cgf_output_string_protected($address['lastname']);
    } elseif (isset($address['name']) && cgf_not_null($address['name'])) {
      $firstname = cgf_output_string_protected($address['name']);
      $lastname = '';
    } else {
      $firstname = '';
      $lastname = '';
    }
    $street = cgf_output_string_protected($address['street_address']);
    $suburb = cgf_output_string_protected($address['suburb']);
    $city = cgf_output_string_protected($address['city']);
    $state = cgf_output_string_protected($address['state']);
    if (isset($address['country_id']) && cgf_not_null($address['country_id'])) {
      $country = cgf_get_country_name($address['country_id']);

      if (isset($address['zone_id']) && cgf_not_null($address['zone_id'])) {
        $state = cgf_get_zone_code($address['country_id'], $address['zone_id'], $state);
      }
    } elseif (isset($address['country']) && cgf_not_null($address['country'])) {
      $country = cgf_output_string_protected($address['country']);
    } else {
      $country = '';
    }
    $postcode = cgf_output_string_protected($address['postcode']);
    $zip = $postcode;

    if ($html) {
// HTML Mode
      $HR = '<hr />';
      $hr = '<hr />';
      if ( ($boln == '') && ($eoln == "\n") ) { // Values not specified, use rational defaults
        $CR = '<br />';
        $cr = '<br />';
        $eoln = $cr;
      } else { // Use values supplied
        $CR = $eoln . $boln;
        $cr = $CR;
      }
    } else {
// Text Mode
      $CR = $eoln;
      $cr = $CR;
      $HR = '----------------------------------------';
      $hr = '----------------------------------------';
    }

    $statecomma = '';
    $streets = $street;
    if ($suburb != '') $streets = $street . $cr . $suburb;
    if ($country == '') $country = cgf_output_string_protected($address['country']);
    if ($state != '') $statecomma = $state . ', ';

    $fmt = $address_format['format'];
    eval("\$address = \"$fmt\";");

    if ( (ACCOUNT_COMPANY == 'true') && (cgf_not_null($company)) ) {
      $address = $company . $cr . $address;
    }

    return $address;
  }

  ////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // Function    : cgf_get_zone_code
  //
  // Arguments   : country           country code string
  //               zone              state/province zone_id
  //               def_state         default string if zone==0
  //
  // Return      : state_prov_code   state/province code
  //
  // Description : Function to retrieve the state/province code (as in FL for Florida etc)
  //
  ////////////////////////////////////////////////////////////////////////////////////////////////
  function cgf_get_zone_code($country, $zone, $def_state) {

    $state_prov_query = cgf_db_query("select zone_code from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country . "' and zone_id = '" . (int)$zone . "'");

    if (!cgf_db_num_rows($state_prov_query)) {
      $state_prov_code = $def_state;
    }
    else {
      $state_prov_values = cgf_db_fetch_array($state_prov_query);
      $state_prov_code = $state_prov_values['zone_code'];
    }
    
    return $state_prov_code;
  }

  function cgf_get_uprid($prid, $params) {
    $uprid = $prid;
    if ( (is_array($params)) && (!strstr($prid, '{')) ) {
      while (list($option, $value) = each($params)) {
        $uprid = $uprid . '{' . $option . '}' . $value;
      }
    }

    return $uprid;
  }

  function cgf_get_prid($uprid) {
    $pieces = explode('{', $uprid);

    return $pieces[0];
  }

  function cgf_get_languages() {
    $languages_query = cgf_db_query("select languages_id, name, code, image, directory from " . TABLE_LANGUAGES . " order by sort_order");
    while ($languages = cgf_db_fetch_array($languages_query)) {
      $languages_array[] = array('id' => $languages['languages_id'],
                                 'name' => $languages['name'],
                                 'code' => $languages['code'],
                                 'image' => $languages['image'],
                                 'directory' => $languages['directory']);
    }

    return $languages_array;
  }

  function cgf_get_address_category_name($category_id, $language_id, $type = 'name') {
    if ($type == 'name') {
		$category_query = cgf_db_query("select categories_name from " . TABLE_ADDRESS_CATEGORY . " where categories_id = '" . (int)$category_id . "' and language_id = '" . (int)$language_id . "'");
		$category = cgf_db_fetch_array($category_query);
		$cat = $category['categories_name'];
	}
    if ($type == 'title') {
		$category_query = cgf_db_query("select categories_title from " . TABLE_ADDRESS_GROUP . " where categories_id = '" . (int)$category_id . "'");
		$category = cgf_db_fetch_array($category_query);
		$cat = $category['categories_title'];
	}
	
    return $cat;
  }

  function cgf_get_category_name($category_id, $language_id) {
    $category_query = cgf_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$category_id . "' and language_id = '" . (int)$language_id . "'");
    $category = cgf_db_fetch_array($category_query);

    return $category['categories_name'];
  }

  function cgf_get_orders_status_name($orders_status_id, $language_id = '') {
    global $languages_id;

    if (!$language_id) $language_id = $languages_id;
    $orders_status_query = cgf_db_query("select orders_status_name from " . TABLE_ORDERS_STATUS . " where orders_status_id = '" . (int)$orders_status_id . "' and language_id = '" . (int)$language_id . "'");
    $orders_status = cgf_db_fetch_array($orders_status_query);

    return $orders_status['orders_status_name'];
  }

  function cgf_get_orders_status() {
    global $languages_id;

    $orders_status_array = array();
    $orders_status_query = cgf_db_query("select orders_status_id, orders_status_name from " . TABLE_ORDERS_STATUS . " where language_id = '" . (int)$languages_id . "' order by orders_status_id");
    while ($orders_status = cgf_db_fetch_array($orders_status_query)) {
      $orders_status_array[] = array('id' => $orders_status['orders_status_id'],
                                     'text' => $orders_status['orders_status_name']);
    }

    return $orders_status_array;
  }

  function cgf_get_products_name($product_id, $language_id = 0) {
    global $languages_id;

    if ($language_id == 0) $language_id = $languages_id;
    $product_query = cgf_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");
    $product = cgf_db_fetch_array($product_query);

    return $product['products_name'];
  }

  function cgf_get_products_description($product_id, $language_id) {
    $product_query = cgf_db_query("select products_description from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");
    $product = cgf_db_fetch_array($product_query);

    return $product['products_description'];
  }

  function cgf_get_products_url($product_id, $language_id) {
    $product_query = cgf_db_query("select products_url from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");
    $product = cgf_db_fetch_array($product_query);

    return $product['products_url'];
  }

////
// Return the manufacturers URL in the needed language
// TABLES: manufacturers_info
  function cgf_get_manufacturer_url($manufacturer_id, $language_id) {
    $manufacturer_query = cgf_db_query("select manufacturers_url from " . TABLE_MANUFACTURERS_INFO . " where manufacturers_id = '" . (int)$manufacturer_id . "' and languages_id = '" . (int)$language_id . "'");
    $manufacturer = cgf_db_fetch_array($manufacturer_query);

    return $manufacturer['manufacturers_url'];
  }

////
// Wrapper for class_exists() function
// This function is not available in all PHP versions so we test it before using it.
  function cgf_class_exists($class_name) {
    if (function_exists('class_exists')) {
      return class_exists($class_name);
    } else {
      return true;
    }
  }



////
// Count how many products exist in a category
// TABLES: products, products_to_categories, categories
  function cgf_products_in_category_count($categories_id, $include_deactivated = false) {
    $products_count = 0;

    if ($include_deactivated) {
      $products_query = cgf_db_query("select count(*) as total from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_id = p2c.products_id and p2c.categories_id = '" . (int)$categories_id . "'");
    } else {
      $products_query = cgf_db_query("select count(*) as total from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_id = p2c.products_id and p.products_status = '1' and p2c.categories_id = '" . (int)$categories_id . "'");
    }

    $products = cgf_db_fetch_array($products_query);

    $products_count += $products['total'];

    $childs_query = cgf_db_query("select categories_id from " . TABLE_CATEGORIES . " where parent_id = '" . (int)$categories_id . "'");
    if (cgf_db_num_rows($childs_query)) {
      while ($childs = cgf_db_fetch_array($childs_query)) {
        $products_count += cgf_products_in_category_count($childs['categories_id'], $include_deactivated);
      }
    }

    return $products_count;
  }


////
// Count how many subcategories exist in a category
// TABLES: document categories
  function cgf_childs_in_directory_count($categories_id) {
    $categories_count = 0;

    $categories_query = cgf_db_query("select categories_id from " . TABLE_ADDRESS_GROUP . " where parent_id = '" . (int)$categories_id . "'");
    while ($categories = cgf_db_fetch_array($categories_query)) {
      $categories_count++;
      $categories_count += cgf_childs_in_directory_count($categories['categories_id']);
    }

    return $categories_count;
  }

////
// Returns an array with countries
// TABLES: countries
  function cgf_get_countries($default = '') {
    $countries_array = array();
    if ($default) {
      $countries_array[] = array('id' => '',
                                 'text' => $default);
    }
    $countries_query = cgf_db_query("select countries_id, countries_name from " . TABLE_COUNTRIES . " order by countries_name");
    while ($countries = cgf_db_fetch_array($countries_query)) {
      $countries_array[] = array('id' => $countries['countries_id'],
                                 'text' => $countries['countries_name']);
    }

    return $countries_array;
  }

////
// return an array with country zones
  function cgf_get_country_zones($country_id) {
    $zones_array = array();
    $zones_query = cgf_db_query("select zone_id, zone_name from " . TABLE_ZONES . " where zone_country_id = '" . (int)$country_id . "' order by zone_name");
    while ($zones = cgf_db_fetch_array($zones_query)) {
      $zones_array[] = array('id' => $zones['zone_id'],
                             'text' => $zones['zone_name']);
    }

    return $zones_array;
  }

  function cgf_prepare_country_zones_pull_down($country_id = '') {
// preset the width of the drop-down for Netscape
    $pre = '';
    if ( (!cgf_browser_detect('MSIE')) && (cgf_browser_detect('Mozilla/4')) ) {
      for ($i=0; $i<45; $i++) $pre .= '&nbsp;';
    }

    $zones = cgf_get_country_zones($country_id);

    if (sizeof($zones) > 0) {
      $zones_select = array(array('id' => '', 'text' => PLEASE_SELECT));
      $zones = array_merge($zones_select, $zones);
    } else {
      $zones = array(array('id' => '', 'text' => TYPE_BELOW));
// create dummy options for Netscape to preset the height of the drop-down
      if ( (!cgf_browser_detect('MSIE')) && (cgf_browser_detect('Mozilla/4')) ) {
        for ($i=0; $i<9; $i++) {
          $zones[] = array('id' => '', 'text' => $pre);
        }
      }
    }

    return $zones;
  }


////
// Alias function for Store configuration values in the Administration Tool
  function cgf_cfg_pull_down_country_list($country_id) {
    return cgf_draw_pull_down_menu('configuration_value', cgf_get_countries(), $country_id);
  }

  function cgf_cfg_pull_down_zone_list($zone_id) {
    return cgf_draw_pull_down_menu('configuration_value', cgf_get_country_zones(STORE_COUNTRY), $zone_id);
  }

  function cgf_cfg_pull_down_tax_classes($tax_class_id, $key = '') {
    $name = (($key) ? 'configuration[' . $key . ']' : 'configuration_value');

    $tax_class_array = array(array('id' => '0', 'text' => TEXT_NONE));
    $tax_class_query = cgf_db_query("select tax_class_id, tax_class_title from " . TABLE_TAX_CLASS . " order by tax_class_title");
    while ($tax_class = cgf_db_fetch_array($tax_class_query)) {
      $tax_class_array[] = array('id' => $tax_class['tax_class_id'],
                                 'text' => $tax_class['tax_class_title']);
    }

    return cgf_draw_pull_down_menu($name, $tax_class_array, $tax_class_id);
  }

////
// Function to read in text area in admin
 function cgf_cfg_textarea($text) {
    return cgf_draw_textarea_field('configuration_value', false, 35, 5, $text);
  }

  function cgf_cfg_get_zone_name($zone_id) {
    $zone_query = cgf_db_query("select zone_name from " . TABLE_ZONES . " where zone_id = '" . (int)$zone_id . "'");

    if (!cgf_db_num_rows($zone_query)) {
      return $zone_id;
    } else {
      $zone = cgf_db_fetch_array($zone_query);
      return $zone['zone_name'];
    }
  }

////
// Sets the status of a banner
  function cgf_set_banner_status($banners_id, $status) {
    if ($status == '1') {
      return cgf_db_query("update " . TABLE_BANNERS . " set status = '1', expires_impressions = NULL, expires_date = NULL, date_status_change = NULL where banners_id = '" . $banners_id . "'");
    } elseif ($status == '0') {
      return cgf_db_query("update " . TABLE_BANNERS . " set status = '0', date_status_change = now() where banners_id = '" . $banners_id . "'");
    } else {
      return -1;
    }
  }

////
// Sets the status of a product
  function cgf_set_product_status($products_id, $status) {
    if ($status == '1') {
      return cgf_db_query("update " . TABLE_PRODUCTS . " set products_status = '1', products_last_modified = now() where products_id = '" . (int)$products_id . "'");
    } elseif ($status == '0') {
      return cgf_db_query("update " . TABLE_PRODUCTS . " set products_status = '0', products_last_modified = now() where products_id = '" . (int)$products_id . "'");
    } else {
      return -1;
    }
  }

////
// Sets the status of a review
  function cgf_set_review_status($reviews_id, $status) {
    if ($status == '1') {
      return cgf_db_query("update " . TABLE_REVIEWS . " set reviews_status = '1', last_modified = now() where reviews_id = '" . (int)$reviews_id . "'");
    } elseif ($status == '0') {
      return cgf_db_query("update " . TABLE_REVIEWS . " set reviews_status = '0', last_modified = now() where reviews_id = '" . (int)$reviews_id . "'");
    } else {
      return -1;
    }
  }

////
// Sets the status of a product on special
  function cgf_set_specials_status($specials_id, $status) {
    if ($status == '1') {
      return cgf_db_query("update " . TABLE_SPECIALS . " set status = '1', expires_date = NULL, date_status_change = NULL where specials_id = '" . (int)$specials_id . "'");
    } elseif ($status == '0') {
      return cgf_db_query("update " . TABLE_SPECIALS . " set status = '0', date_status_change = now() where specials_id = '" . (int)$specials_id . "'");
    } else {
      return -1;
    }
  }

////
// Sets timeout for the current script.
// Cant be used in safe mode.
  function cgf_set_time_limit($limit) {
    if (!get_cfg_var('safe_mode')) {
      set_time_limit($limit);
    }
  }

////
// Alias function for Store configuration values in the Administration Tool
  function cgf_cfg_select_option($select_array, $key_value, $key = '') {
    $string = '';

    for ($i=0, $n=sizeof($select_array); $i<$n; $i++) {
      $name = ((cgf_not_null($key)) ? 'configuration[' . $key . ']' : 'configuration_value');

      $string .= '<br /><input type="radio" name="' . $name . '" value="' . $select_array[$i] . '"';

      if ($key_value == $select_array[$i]) $string .= ' checked="checked"';

      $string .= ' /> ' . $select_array[$i];
    }

    return $string;
  }

////
// Alias function for module configuration keys
  function cgf_mod_select_option($select_array, $key_name, $key_value) {
    reset($select_array);
    while (list($key, $value) = each($select_array)) {
      if (is_int($key)) $key = $value;
      $string .= '<br /><input type="radio" name="configuration[' . $key_name . ']" value="' . $key . '"';
      if ($key_value == $key) $string .= ' checked="checked"';
      $string .= ' /> ' . $value;
    }

    return $string;
  }

////
// Retreive server information
  function cgf_get_system_information() {
    global $HTTP_SERVER_VARS;

    $db_query = cgf_db_query("select now() as datetime");
    $db = cgf_db_fetch_array($db_query);

    @list($system, $host, $kernel) = preg_split('/[\s,]+/', @exec('uname -a'), 5);

    $data = array();

    $data['ClinicalTrac']  = array('version' => cgf_get_version());

    $data['system'] = array('date' => date('Y-m-d H:i:s O T'),
                            'os' => PHP_OS,
                            'kernel' => $kernel,
                            'uptime' => @exec('uptime'),
                            'http_server' => $HTTP_SERVER_VARS['SERVER_SOFTWARE']);

    $data['mysql']  = array('version' => (function_exists('mysql_get_server_info') ? mysql_get_server_info() : ''),
                            'date' => $db['datetime']);

    $data['php']    = array('version' => PHP_VERSION,
                            'zend' => zend_version(),
                            'sapi' => PHP_SAPI,
                            'int_size'	=> defined('PHP_INT_SIZE') ? PHP_INT_SIZE : '',
                            'safe_mode'	=> (int) @ini_get('safe_mode'),
                            'open_basedir' => (int) @ini_get('open_basedir'),
                            'memory_limit' => @ini_get('memory_limit'),
                            'error_reporting' => error_reporting(),
                            'display_errors' => (int)@ini_get('display_errors'),
                            'allow_url_fopen' => (int) @ini_get('allow_url_fopen'),
                            'allow_url_include' => (int) @ini_get('allow_url_include'),
                            'file_uploads' => (int) @ini_get('file_uploads'),
                            'upload_max_filesize' => @ini_get('upload_max_filesize'),
                            'post_max_size' => @ini_get('post_max_size'),
                            'disable_functions' => @ini_get('disable_functions'),
                            'disable_classes' => @ini_get('disable_classes'),
                            'enable_dl'	=> (int) @ini_get('enable_dl'),
                            'magic_quotes_gpc' => (int) @ini_get('magic_quotes_gpc'),
                            'register_globals' => (int) @ini_get('register_globals'),
                            'filter.default'   => @ini_get('filter.default'),
                            'zend.ze1_compatibility_mode' => (int) @ini_get('zend.ze1_compatibility_mode'),
                            'unicode.semantics' => (int) @ini_get('unicode.semantics'),
                            'zend_thread_safty'	=> (int) function_exists('zend_thread_id'),
                            'extensions' => get_loaded_extensions());

    return $data;
  }

  function cgf_generate_category_path($id, $from = 'category', $categories_array = '', $index = 0) {
    global $languages_id;

    if (!is_array($categories_array)) $categories_array = array();

    if ($from == 'product') {
      $categories_query = cgf_db_query("select categories_id from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$id . "'");
      while ($categories = cgf_db_fetch_array($categories_query)) {
        if ($categories['categories_id'] == '0') {
          $categories_array[$index][] = array('id' => '0', 'text' => TEXT_TOP);
        } else {
          $category_query = cgf_db_query("select cd.categories_name, c.parent_id from " . TABLE_ADDRESS_CATEGORY . " c, " . TABLE_ADDRESS_GROUP . " cd where c.categories_id = '" . (int)$categories['categories_id'] . "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "'");
          $category = cgf_db_fetch_array($category_query);
          $categories_array[$index][] = array('id' => $categories['categories_id'], 'text' => $category['categories_name']);
          if ( (cgf_not_null($category['parent_id'])) && ($category['parent_id'] != '0') ) $categories_array = cgf_generate_category_path($category['parent_id'], 'category', $categories_array, $index);
          $categories_array[$index] = array_reverse($categories_array[$index]);
        }
        $index++;
      }
    } elseif ($from == 'category') {
      $category_query = cgf_db_query("select c.categories_name, cd.parent_id from " . TABLE_ADDRESS_CATEGORY . " c, " . TABLE_ADDRESS_GROUP . " cd where c.categories_id = '" . (int)$id . "' and c.categories_id = cd.categories_id and c.language_id = '" . (int)$languages_id . "'");
      $category = cgf_db_fetch_array($category_query);
      $categories_array[$index][] = array('id' => $id, 'text' => $category['categories_name']);
      if ( (cgf_not_null($category['parent_id'])) && ($category['parent_id'] != '0') ) $categories_array = cgf_generate_category_path($category['parent_id'], 'category', $categories_array, $index);
    }

    return $categories_array;
  }

  function cgf_output_generated_category_path($id, $from = 'category') {
    $calculated_category_path_string = '';
    $calculated_category_path = cgf_generate_category_path($id, $from);
    for ($i=0, $n=sizeof($calculated_category_path); $i<$n; $i++) {
      for ($j=0, $k=sizeof($calculated_category_path[$i]); $j<$k; $j++) {
        $calculated_category_path_string .= $calculated_category_path[$i][$j]['text'] . '&nbsp;&gt;&nbsp;';
      }
      $calculated_category_path_string = substr($calculated_category_path_string, 0, -16) . '<br />';
    }
    $calculated_category_path_string = substr($calculated_category_path_string, 0, -6);

    if (strlen($calculated_category_path_string) < 1) $calculated_category_path_string = TEXT_TOP;

    return $calculated_category_path_string;
  }

  function cgf_get_generated_category_path_ids($id, $from = 'category') {
    $calculated_category_path_string = '';
    $calculated_category_path = cgf_generate_category_path($id, $from);
    for ($i=0, $n=sizeof($calculated_category_path); $i<$n; $i++) {
      for ($j=0, $k=sizeof($calculated_category_path[$i]); $j<$k; $j++) {
        $calculated_category_path_string .= $calculated_category_path[$i][$j]['id'] . '_';
      }
      $calculated_category_path_string = substr($calculated_category_path_string, 0, -1) . '<br />';
    }
    $calculated_category_path_string = substr($calculated_category_path_string, 0, -6);

    if (strlen($calculated_category_path_string) < 1) $calculated_category_path_string = TEXT_TOP;

    return $calculated_category_path_string;
  }

  function cgf_remove_category($category_id) {
    $category_image_query = cgf_db_query("select categories_image from " . TABLE_CATEGORIES . " where categories_id = '" . (int)$category_id . "'");
    $category_image = cgf_db_fetch_array($category_image_query);

    $duplicate_image_query = cgf_db_query("select count(*) as total from " . TABLE_CATEGORIES . " where categories_image = '" . cgf_db_input($category_image['categories_image']) . "'");
    $duplicate_image = cgf_db_fetch_array($duplicate_image_query);

    if ($duplicate_image['total'] < 2) {
      if (file_exists(DIR_FS_CATALOG_IMAGES . $category_image['categories_image'])) {
        @unlink(DIR_FS_CATALOG_IMAGES . $category_image['categories_image']);
      }
    }

    cgf_db_query("delete from " . TABLE_CATEGORIES . " where categories_id = '" . (int)$category_id . "'");
    cgf_db_query("delete from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$category_id . "'");
    cgf_db_query("delete from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" . (int)$category_id . "'");

    if (USE_CACHE == 'true') {
      cgf_reset_cache_block('categories');
      cgf_reset_cache_block('also_purchased');
    }
  }
  

  function cgf_reset_cache_block($cache_block) {
    global $cache_blocks;

    for ($i=0, $n=sizeof($cache_blocks); $i<$n; $i++) {
      if ($cache_blocks[$i]['code'] == $cache_block) {
        if ($cache_blocks[$i]['multiple']) {
          if ($dir = @opendir(DIR_FS_CACHE)) {
            while ($cache_file = readdir($dir)) {
              $cached_file = $cache_blocks[$i]['file'];
              $languages = cgf_get_languages();
              for ($j=0, $k=sizeof($languages); $j<$k; $j++) {
                $cached_file_unlink = preg_replace('/-language/', '-' . $languages[$j]['directory'], $cached_file);
                if (preg_match('/^' . $cached_file_unlink . '/', $cache_file)) {
                  @unlink(DIR_FS_CACHE . $cache_file);
                }
              }
            }
            closedir($dir);
          }
        } else {
          $cached_file = $cache_blocks[$i]['file'];
          $languages = cgf_get_languages();
          for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
            $cached_file = preg_replace('/-language/', '-' . $languages[$i]['directory'], $cached_file);
            @unlink(DIR_FS_CACHE . $cached_file);
          }
        }
        break;
      }
    }
  }

  function cgf_get_file_permissions($mode) {
// determine type
    if ( ($mode & 0xC000) == 0xC000) { // unix domain socket
      $type = 's';
    } elseif ( ($mode & 0x4000) == 0x4000) { // directory
      $type = 'd';
    } elseif ( ($mode & 0xA000) == 0xA000) { // symbolic link
      $type = 'l';
    } elseif ( ($mode & 0x8000) == 0x8000) { // regular file
      $type = '-';
    } elseif ( ($mode & 0x6000) == 0x6000) { //bBlock special file
      $type = 'b';
    } elseif ( ($mode & 0x2000) == 0x2000) { // character special file
      $type = 'c';
    } elseif ( ($mode & 0x1000) == 0x1000) { // named pipe
      $type = 'p';
    } else { // unknown
      $type = '?';
    }

// determine permissions
    $owner['read']    = ($mode & 00400) ? 'r' : '-';
    $owner['write']   = ($mode & 00200) ? 'w' : '-';
    $owner['execute'] = ($mode & 00100) ? 'x' : '-';
    $group['read']    = ($mode & 00040) ? 'r' : '-';
    $group['write']   = ($mode & 00020) ? 'w' : '-';
    $group['execute'] = ($mode & 00010) ? 'x' : '-';
    $world['read']    = ($mode & 00004) ? 'r' : '-';
    $world['write']   = ($mode & 00002) ? 'w' : '-';
    $world['execute'] = ($mode & 00001) ? 'x' : '-';

// adjust for SUID, SGID and sticky bit
    if ($mode & 0x800 ) $owner['execute'] = ($owner['execute'] == 'x') ? 's' : 'S';
    if ($mode & 0x400 ) $group['execute'] = ($group['execute'] == 'x') ? 's' : 'S';
    if ($mode & 0x200 ) $world['execute'] = ($world['execute'] == 'x') ? 't' : 'T';

    return $type .
           $owner['read'] . $owner['write'] . $owner['execute'] .
           $group['read'] . $group['write'] . $group['execute'] .
           $world['read'] . $world['write'] . $world['execute'];
  }

  function cgf_remove($source) {
    global $messageStack, $cgf_remove_error;

    if (isset($cgf_remove_error)) $cgf_remove_error = false;

    if (is_dir($source)) {
      $dir = dir($source);
      while ($file = $dir->read()) {
        if ( ($file != '.') && ($file != '..') ) {
          if (cgf_is_writable($source . '/' . $file)) {
            cgf_remove($source . '/' . $file);
          } else {
            $messageStack->add(sprintf(ERROR_FILE_NOT_REMOVEABLE, $source . '/' . $file), 'error');
            $cgf_remove_error = true;
          }
        }
      }
      $dir->close();

      if (cgf_is_writable($source)) {
        rmdir($source);
      } else {
        $messageStack->add(sprintf(ERROR_DIRECTORY_NOT_REMOVEABLE, $source), 'error');
        $cgf_remove_error = true;
      }
    } else {
      if (cgf_is_writable($source)) {
        unlink($source);
      } else {
        $messageStack->add(sprintf(ERROR_FILE_NOT_REMOVEABLE, $source), 'error');
        $cgf_remove_error = true;
      }
    }
  }

////
// Output the tax percentage with optional padded decimals
  function cgf_display_tax_value($value, $padding = TAX_DECIMAL_PLACES) {
    if (strpos($value, '.')) {
      $loop = true;
      while ($loop) {
        if (substr($value, -1) == '0') {
          $value = substr($value, 0, -1);
        } else {
          $loop = false;
          if (substr($value, -1) == '.') {
            $value = substr($value, 0, -1);
          }
        }
      }
    }

    if ($padding > 0) {
      if ($decimal_pos = strpos($value, '.')) {
        $decimals = strlen(substr($value, ($decimal_pos+1)));
        for ($i=$decimals; $i<$padding; $i++) {
          $value .= '0';
        }
      } else {
        $value .= '.';
        for ($i=0; $i<$padding; $i++) {
          $value .= '0';
        }
      }
    }

    return $value;
  }

  function cgf_mail($to_name, $to_email_address, $email_subject, $email_text, $from_email_name, $from_email_address) {
    if (SEND_EMAILS != 'true') return false;

    // Instantiate a new mail object
    $message = new email(array('X-Mailer:ClinicalTrac'));

    // Build the text version
    $text = strip_tags($email_text);
    if (EMAIL_USE_HTML == 'true') {
      $message->add_html($email_text, $text);
    } else {
      $message->add_text($text);
    }

    // Send message
    $message->build_message();
    $message->send($to_name, $to_email_address, $from_email_name, $from_email_address, $email_subject);
  }

  function cgf_get_tax_class_title($tax_class_id) {
    if ($tax_class_id == '0') {
      return TEXT_NONE;
    } else {
      $classes_query = cgf_db_query("select tax_class_title from " . TABLE_TAX_CLASS . " where tax_class_id = '" . (int)$tax_class_id . "'");
      $classes = cgf_db_fetch_array($classes_query);

      return $classes['tax_class_title'];
    }
  }

  function cgf_banner_image_extension() {
    if (function_exists('imagetypes')) {
      if (imagetypes() & IMG_PNG) {
        return 'png';
      } elseif (imagetypes() & IMG_JPG) {
        return 'jpg';
      } elseif (imagetypes() & IMG_GIF) {
        return 'gif';
      }
    } elseif (function_exists('imagecreatefrompng') && function_exists('imagepng')) {
      return 'png';
    } elseif (function_exists('imagecreatefromjpeg') && function_exists('imagejpeg')) {
      return 'jpg';
    } elseif (function_exists('imagecreatefromgif') && function_exists('imagegif')) {
      return 'gif';
    }

    return false;
  }

////
// Wrapper function for round() for php3 compatibility
  function cgf_round($value, $precision) {
    return round($value, $precision);
  }

////
// Add tax to a products price
  function cgf_add_tax($price, $tax, $override = false) {
    if ( ( (DISPLAY_PRICE_WITH_TAX == 'true') || ($override == true) ) && ($tax > 0) ) {
      return $price + cgf_calculate_tax($price, $tax);
    } else {
      return $price;
    }
  }

// Calculates Tax rounding the result
  function cgf_calculate_tax($price, $tax) {
    return $price * $tax / 100;
  }

////
// Returns the tax rate for a zone / class
// TABLES: tax_rates, zones_to_geo_zones
  function cgf_get_tax_rate($class_id, $country_id = -1, $zone_id = -1) {
    global $customer_zone_id, $customer_country_id;

    if ( ($country_id == -1) && ($zone_id == -1) ) {
      if (!cgf_session_is_registered('customer_id')) {
        $country_id = STORE_COUNTRY;
        $zone_id = STORE_ZONE;
      } else {
        $country_id = $customer_country_id;
        $zone_id = $customer_zone_id;
      }
    }

    $tax_query = cgf_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " tr left join " . TABLE_ZONES_TO_GEO_ZONES . " za ON tr.tax_zone_id = za.geo_zone_id left join " . TABLE_GEO_ZONES . " tz ON tz.geo_zone_id = tr.tax_zone_id WHERE (za.zone_country_id IS NULL OR za.zone_country_id = '0' OR za.zone_country_id = '" . (int)$country_id . "') AND (za.zone_id IS NULL OR za.zone_id = '0' OR za.zone_id = '" . (int)$zone_id . "') AND tr.tax_class_id = '" . (int)$class_id . "' GROUP BY tr.tax_priority");
    if (cgf_db_num_rows($tax_query)) {
      $tax_multiplier = 0;
      while ($tax = cgf_db_fetch_array($tax_query)) {
        $tax_multiplier += $tax['tax_rate'];
      }
      return $tax_multiplier;
    } else {
      return 0;
    }
  }

////
// Returns the tax rate for a tax class
// TABLES: tax_rates
  function cgf_get_tax_rate_value($class_id) {
    $tax_query = cgf_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " where tax_class_id = '" . (int)$class_id . "' group by tax_priority");
    if (cgf_db_num_rows($tax_query)) {
      $tax_multiplier = 0;
      while ($tax = cgf_db_fetch_array($tax_query)) {
        $tax_multiplier += $tax['tax_rate'];
      }
      return $tax_multiplier;
    } else {
      return 0;
    }
  }

  function cgf_call_function($function, $parameter, $object = '') {
    if ($object == '') {
      return call_user_func($function, $parameter);
    } else {
      return call_user_func(array($object, $function), $parameter);
    }
  }

  function cgf_get_zone_class_title($zone_class_id) {
    if ($zone_class_id == '0') {
      return TEXT_NONE;
    } else {
      $classes_query = cgf_db_query("select geo_zone_name from " . TABLE_GEO_ZONES . " where geo_zone_id = '" . (int)$zone_class_id . "'");
      $classes = cgf_db_fetch_array($classes_query);

      return $classes['geo_zone_name'];
    }
  }

  function cgf_cfg_pull_down_zone_classes($zone_class_id, $key = '') {
    $name = (($key) ? 'configuration[' . $key . ']' : 'configuration_value');

    $zone_class_array = array(array('id' => '0', 'text' => TEXT_NONE));
    $zone_class_query = cgf_db_query("select geo_zone_id, geo_zone_name from " . TABLE_GEO_ZONES . " order by geo_zone_name");
    while ($zone_class = cgf_db_fetch_array($zone_class_query)) {
      $zone_class_array[] = array('id' => $zone_class['geo_zone_id'],
                                  'text' => $zone_class['geo_zone_name']);
    }

    return cgf_draw_pull_down_menu($name, $zone_class_array, $zone_class_id);
  }

  function cgf_cfg_pull_down_order_statuses($order_status_id, $key = '') {
    global $languages_id;

    $name = (($key) ? 'configuration[' . $key . ']' : 'configuration_value');

    $statuses_array = array(array('id' => '0', 'text' => TEXT_DEFAULT));
    $statuses_query = cgf_db_query("select orders_status_id, orders_status_name from " . TABLE_ORDERS_STATUS . " where language_id = '" . (int)$languages_id . "' order by orders_status_name");
    while ($statuses = cgf_db_fetch_array($statuses_query)) {
      $statuses_array[] = array('id' => $statuses['orders_status_id'],
                                'text' => $statuses['orders_status_name']);
    }

    return cgf_draw_pull_down_menu($name, $statuses_array, $order_status_id);
  }

  function cgf_get_order_status_name($order_status_id, $language_id = '') {
    global $languages_id;

    if ($order_status_id < 1) return TEXT_DEFAULT;

    if (!is_numeric($language_id)) $language_id = $languages_id;

    $status_query = cgf_db_query("select orders_status_name from " . TABLE_ORDERS_STATUS . " where orders_status_id = '" . (int)$order_status_id . "' and language_id = '" . (int)$language_id . "'");
    $status = cgf_db_fetch_array($status_query);

    return $status['orders_status_name'];
  }

function cgf_group_code($len) 
{
 	$acn='';
	$strength = 3;
	$alpha_sets = array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z');
	$char_sets = array('48-57','65-90','97-122','35-38','61-64');
	for($i=0;$i<$len;$i++){ 
    	$random = rand(0,$strength-1); 
    	list($start,$end) = explode('-',$char_sets[$random]); 
    	$acn.= chr(rand($start,$end)); 
		$acn.= $alpha_sets[rand(0,25)];
  	} 
  
    $acn=substr($acn,2,$len);
    return $acn;
}

function cgf_pass_code($len) 
{
 	$acn='';
	$strength = 4;
	$upper_sets = array('A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
	$lower_sets = array('a','b','c','c','e','f','g','h','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
	$char_sets = array('48-57','65-90','97-122','35-38','61-64');
	$special_sets = array('@','#','-','$','%','^','&','+','=','!','?');
	for($i=0;$i<$len;$i++){ 
    	$random = rand(0,$strength-1); 
    	list($start,$end) = explode('-',$char_sets[$random]); 
    	$acn.= chr(rand($start,$end)); 
		$acn.= $upper_sets[rand(0,25)];
		$acn.= $special_sets[rand(0,12)];
		$acn.= $lower_sets[rand(0,25)];
  	} 
    
    $acn=substr($acn,5,$len);
	$acn=str_shuffle( $acn.'#9@' );
    return $acn;
}

function cgf_account_code($len) 
{
 	$ivn='';
	$strength = 1;
	$char_sets = array('48-57','65-90','97-122','35-38','61-64');
	for($i=0;$i<$len;$i++){ 
    	$random = rand(0,$strength-1); 
    	list($start,$end) = explode('-',$char_sets[$random]); 
    	$ivn.= chr(rand($start,$end)); 
  	} 
  
    $ivn=date("y").substr($ivn,4,8).date("md");
    return $ivn;
}

////
// Return a random value
  function cgf_rand($min = null, $max = null) {
    static $seeded;

    if (!isset($seeded)) {
      $seeded = true;

      if ( (PHP_VERSION < '4.2.0') ) {
        mt_srand((double)microtime()*1000000);
      }
    }

    if (isset($min) && isset($max)) {
      if ($min >= $max) {
        return $min;
      } else {
        return mt_rand($min, $max);
      }
    } else {
      return mt_rand();
    }
  }

// nl2br() prior PHP 4.2.0 did not convert linefeeds on all OSs (it only converted \n)
  function cgf_convert_linefeeds($from, $to, $string) {
    if ((PHP_VERSION < "4.0.5") && is_array($from)) {
      return preg_replace('/(' . implode('|', $from) . ')/', $to, $string);
    } else {
      return str_replace($from, $to, $string);
    }
  }

  function cgf_string_to_int($string) {
    return (int)$string;
  }

////
// Parse and secure the cPath parameter values
  function cgf_parse_category_path($cPath) {
// make sure the category IDs are integers
    $cPath_array = array_map('cgf_string_to_int', explode('_', $cPath));

// make sure no duplicate category IDs exist which could lock the server in a loop
    $tmp_array = array();
    $n = sizeof($cPath_array);
    for ($i=0; $i<$n; $i++) {
      if (!in_array($cPath_array[$i], $tmp_array)) {
        $tmp_array[] = $cPath_array[$i];
      }
    }

    return $tmp_array;
  }

  function cgf_validate_ip_address($ip_address) {
    if (function_exists('filter_var') && defined('FILTER_VALIDATE_IP')) {
      return filter_var($ip_address, FILTER_VALIDATE_IP, array('flags' => FILTER_FLAG_IPV4));
    }

    if (preg_match('/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/', $ip_address)) {
      $parts = explode('.', $ip_address);

      foreach ($parts as $ip_parts) {
        if ( (intval($ip_parts) > 255) || (intval($ip_parts) < 0) ) {
          return false; // number is not within 0-255
        }
      }

      return true;
    }

    return false;
  }

  function cgf_get_ip_address() {
    global $HTTP_SERVER_VARS;

    $ip_address = null;
    $ip_addresses = array();

    if (isset($HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR']) && !empty($HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'])) {
      foreach ( array_reverse(explode(',', $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'])) as $x_ip ) {
        $x_ip = trim($x_ip);

        if (cgf_validate_ip_address($x_ip)) {
          $ip_addresses[] = $x_ip;
        }
      }
    }

    if (isset($HTTP_SERVER_VARS['HTTP_CLIENT_IP']) && !empty($HTTP_SERVER_VARS['HTTP_CLIENT_IP'])) {
      $ip_addresses[] = $HTTP_SERVER_VARS['HTTP_CLIENT_IP'];
    }

    if (isset($HTTP_SERVER_VARS['HTTP_X_CLUSTER_CLIENT_IP']) && !empty($HTTP_SERVER_VARS['HTTP_X_CLUSTER_CLIENT_IP'])) {
      $ip_addresses[] = $HTTP_SERVER_VARS['HTTP_X_CLUSTER_CLIENT_IP'];
    }

    if (isset($HTTP_SERVER_VARS['HTTP_PROXY_USER']) && !empty($HTTP_SERVER_VARS['HTTP_PROXY_USER'])) {
      $ip_addresses[] = $HTTP_SERVER_VARS['HTTP_PROXY_USER'];
    }

    $ip_addresses[] = $HTTP_SERVER_VARS['REMOTE_ADDR'];

    foreach ( $ip_addresses as $ip ) {
      if (!empty($ip) && cgf_validate_ip_address($ip)) {
        $ip_address = $ip;
        break;
      }
    }

    return $ip_address;
  }

////
// Wrapper function for is_writable() for Windows compatibility
  function cgf_is_writable($file) {
    if (strtolower(substr(PHP_OS, 0, 3)) === 'win') {
      if (file_exists($file)) {
        $file = realpath($file);
        if (is_dir($file)) {
          $result = @tempnam($file, 'osc');
          if (is_string($result) && file_exists($result)) {
            unlink($result);
            return (strpos($result, $file) === 0) ? true : false;
          }
        } else {
          $handle = @fopen($file, 'r+');
          if (is_resource($handle)) {
            fclose($handle);
            return true;
          }
        }
      } else{
        $dir = dirname($file);
        if (file_exists($dir) && is_dir($dir) && cgf_is_writable($dir)) {
          return true;
        }
      }
      return false;
    } else {
      return is_writable($file);
    }
  }
////
// Create an image and include varible text in the image
  function cgf_text_to_image($text) {
  
	// Set the content-type
	header('Content-Type: image/png');
	//putenv('GDFONTPATH=' . realpath('.'));
	// Create the image
	$im = imagecreatetruecolor(400, 30);
	
	// Create some colors
	$white = imagecolorallocate($im, 255, 255, 255);
	$grey = imagecolorallocate($im, 128, 128, 128);
	$black = imagecolorallocate($im, 0, 0, 0);
	imagefilledrectangle($im, 0, 0, 399, 29, $white);
	
	// Replace path by your own font path
	$font = '/home/proments/public_html/fonts/TIMESTUR.TTF';
	
	// Add some shadow to the text
	imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
	
	// Add the text
	imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
	
	// Using imagepng() results in clearer text compared with imagejpeg()
	return imagepng($im);
	imagedestroy($im);  
  }
  
////
// Remove all expired remote address id
  function cgf_clear_remote_access() {
	$remote_query = cgf_db_query('select a.access_remote_id, a.access_expiration from ' . TABLE_ACCESS_LOCATION  . ' a WHERE 1');
	while ($remote = cgf_db_fetch_array($remote_query)) {
		if ($remote['access_expiration'] < date('Y-m-d') && $remote['access_expiration'] != '0000-00-00') { 				
			cgf_db_query('DELETE FROM ' . TABLE_ACCESS_REMOTE . ' WHERE ' . TABLE_IDENTIFIER . '="' . $remote['access_remote_id'] . '"');
		}
	}
  }


 function cgf_download_file($path,$filename) {
$path =$path;
header('Content-Transfer-Encoding:binary');
header('Last-Modified:'. gmdate('D, d M Y H:i:s', filemtime($path)) . ' GMT');
header('Accept-Ranges: bytes');
header('Content-Length:'.filesize($path));
header('Content-Encoding:none');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename='.$filename);
readfile($path);
}  

 //Get location string from co-ordinates
	//Jay: Aprill 05 2017
	function get_street_address_from_longitue_lattitude($latittue,$longitude)
	{
		$geolocation = $latittue.','.$longitude;
		$request = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.$geolocation.'&sensor=false'; 
		$file_contents = file_get_contents($request);
		
		$json_decode = json_decode($file_contents);
		
		$streetAddress = '';
		if(isset($json_decode->results[0])) {
			$response = array();
			foreach($json_decode->results[0]->address_components as $addressComponet) {
				if(!in_array('political', $addressComponet->types)) {
						if($addressComponet->long_name)
						$streetAddress .=$addressComponet->long_name." ";
				}
			}
		}
		
		return $streetAddress;
	}
//Get location string from co-ordinates
	//Jay: March 18 2017
	function get_users_current_location_details($type='jason_all',$latitude='',$longitude=''){
		$myIpAddress =  $_SERVER['REMOTE_ADDR'];
		//$myIpAddress = '117.217.96.216';
		//$locationJsonString = file_get_contents('http://freegeoip.net/json/'.$myIpAddress);
		$locationJsonString = file_get_contents('http://api.ipstack.com/'.$myIpAddress.'?access_key=648e622b4657cb09646f24dc33249d0b');
		
	
		$locationArray = json_decode($locationJsonString);
		
		$location_address = '';
		if($locationArray && $locationArray != '')
		{
			if($type == 'address')
			{
				if(isset($locationArray->city))
				{
					$location_address .= $locationArray->city;
				}
				
				if(isset($locationArray->region_name))
				{
					if(trim($location_address)!="")
					$location_address .= ', ';
					
					$location_address .= $locationArray->region_name;
				}
				if(isset($locationArray->region_code))
				{
					$location_address .= ' ('.$locationArray->region_code.')';
				}
				if(isset($locationArray->zip_code))
				{
					if(trim($location_address)!="")
					$location_address .= ', ';
					
					$location_address .= $locationArray->zip_code;
				}
				
				if(isset($locationArray->country_name))
				{
					if(trim($location_address)!="")
					$location_address .= ', ';
					
					$location_address .= $locationArray->country_name;
				}
				
				if(isset($locationArray->latitude))
				{
					$location_address .= "\r\n Latitude: ".$locationArray->latitude;
				}
	
				if(isset($locationArray->longitude))
				{
					$location_address .= "\r\n Longitude: ".$locationArray->longitude;
				}
			}
			else if($type == 'jason_alt_long') //Get only longitude lattitude
			{
				$location_address = '{';
				if(isset($locationArray->latitude))
				{
					$location_address .= '"latitude":"'.$locationArray->latitude.'"';
				}
	
				if(isset($locationArray->longitude))
				{
					$location_address .= ',"longitude":"'.$locationArray->longitude.'"';
				}
				$location_address .= '}';
			}
			else if($type == 'jason_all')
			{
				if($latitude!="")
					$locationArray->latitude = $latitude;

				if($longitude!="")
					$locationArray->longitude = $longitude;

				//Add street address
				$locationArray->street_address = get_street_address_from_longitue_lattitude($locationArray->latitude,$locationArray->longitude);
				

				$locationJsonString = json_encode($locationArray);
				return $locationJsonString;
			}
		}

		return $location_address;
	}

	//Get location string from co-ordinates
	//Jay: March 18 2017
	function get_users_location_streetaddress($locationArray){

		$location_address = '';
		if($locationArray && $locationArray != '')
		{
				if(isset($locationArray->street_address))
				{
					$location_address .= $locationArray->street_address;
				}
			
				if(isset($locationArray->city))
				{
					if(trim($location_address)!="")
					$location_address .= ', ';
					
					$location_address .= $locationArray->city;
				}

				if(isset($locationArray->region_name))
				{
					if(trim($location_address)!="")
					$location_address .= ', ';

					$location_address .= $locationArray->region_name;
				}
				if(isset($locationArray->region_code))
				{
					$location_address .= ' ('.$locationArray->region_code.')';
				}

				if(isset($locationArray->zip_code))
				{
					if(trim($location_address)!="")
					$location_address .= ', ';

					$location_address .= $locationArray->zip_code;
				}
				
				/*if(isset($locationArray->country_name))
				{
					if(trim($location_address)!="")
					$location_address .= ', ';
					
					$location_address .= $locationArray->country_name;
				}
				
				if(isset($locationArray->latitude))
				{
					$location_address .= "\r\n Latitude: ".$locationArray->latitude;
				}
	
				if(isset($locationArray->longitude))
				{
					$location_address .= "\r\n Longitude: ".$locationArray->longitude;
				}*/
			
		}

		return $location_address;
	}
?>
