index.php/attachments/upload/article/44
	// or:
	//		index.php?option=com_attachments&task=upload&parent_id=44
	//		   --> index.php/attachments/upload/parent/44
	// Syntax to delete an attachment:
	//		index.php?option=com_attachments&task=delete&id=4&article_id=44&from=article
	//			--> /attachments/delete/4/artcile/44
	//			--> /attachments/delete/4/article/44/from/article
	// or:
	//		index.php?option=com_attachments&task=delete&id=4&parent_id=44&from=parent
	//			--> /attachments/delete/4/parent/44
	//			--> /attachments/delete/4/parent/44/from/parent
	// Note: The 'from' clause indicates which view the item was called from (eg, article or frontpage)
	$segments = array();
	// get a menu item based on Itemid or currently active
	$app		= JFactory::getApplication();
	$menu		= $app->getMenu();
	// we need a menu item.	 Either the one specified in the query, or the current active one if none specified
	if (empty($query['Itemid'])) {
		$menuItem = $menu->getActive();
	}
	else {
		$menuItem = $menu->getItem($query['Itemid']);
	}
	if ( isset($query['task']) ) {
		$task = $query['task'];
		$segments[] = $task;
		unset($query['task']);
		}
	if ( isset($query['id']) ) {
		if ( $task == 'update' ) {
			$segments[] = 'id';
			}
		$segments[] = $query['id'];
		unset($query['id']);
		}
	if ( isset($query['article_id']) ) {
		$segments[] = 'article';
		$segments[] = $query['article_id'];
		unset($query['article_id']);
		}
	if ( isset($query['parent_id']) ) {
		$segments[] = 'parent';
		$segments[] = $query['parent_id'];
		unset($query['parent_id']);
		}
	if ( isset($query['parent_type']) ) {
		$segments[] = 'parent_type';
		$segments[] = $query['parent_type'];
		unset($query['parent_type']);
		}
	if ( isset($query['parent_entity']) ) {
		$segments[] = 'parent_entity';
		$segments[] = $query['parent_entity'];
		unset($query['parent_entity']);
		}
	if ( isset($query['controller']) ) {
		$segments[] = 'controller';
		$segments[] = $query['controller'];
		unset($query['controller']);
		}
	if ( isset($query['uri']) ) {
		$segments[] = 'uri';
		$segments[] = $query['uri'];
		unset($query['uri']);
		}
	if ( isset($query['update']) ) {
		$segments[] = 'update';
		$segments[] = $query['update'];
		unset($query['update']);
		}
	if ( isset($query['from']) ) {
		$segments[] = 'from';
		$segments[] = $query['from'];
		unset($query['from']);
		}
	if ( isset($query['tmpl']) ) {
		$segments[] = 'tmpl';
		$segments[] = $query['tmpl'];
		unset($query['tmpl']);
		}
	return $segments;
}
/**
 * Parse the route
 *
 * @param array $segments
 *
 * @return the variables parsed from the route
 */
function AttachmentsParseRoute($segments)
{
	$vars = array();
	// NOTE: The task=taskname pair must ALWAYS on the right after opton=com_attachments.
	//		 if a controller is specified, it must appear later in the URL.
	
	$task = $segments[0];
	$vars['task'] = $task;
	$i = 1;
	// Handle the the main keyword clause that have an id immediately following them
	if ( ($task == 'delete') || ($task == 'delete_warning') || ($task == 'download') )	{
		$vars['id'] = $segments[$i];
		$i = 2;
		}
	// Handle the other clauses
	while ( $i < count($segments) ) {
		// Look for article IDs
		if ( ($segments[$i] == 'article') && ($segments[$i-1] != 'from') ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'article' without a following article ID!
";
				exit;
				}
			$vars['article_id'] = $segments[$i+1];
			$i++;
			}
		// Look for parent ID clause
		if ( (($segments[$i] == 'parent') || ($segments[$i] == 'parent_id')) && ($segments[$i-1] != 'from') ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'parent' without a following parent ID!
";
				exit;
				}
			$vars['parent_id'] = $segments[$i+1];
			$i++;
			}
		// Look for 'parent_type' clause
		if ( $segments[$i] == 'parent_type' ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'parent_type' without the actual type!
";
				exit;
				}
			$vars['parent_type'] = $segments[$i+1];
			$i++;
			}
		// Look for 'parent_entity' clause
		if ( $segments[$i] == 'parent_entity' ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'parent_entity' without the actual type!
";
				exit;
				}
			$vars['parent_entity'] = $segments[$i+1];
			$i++;
			}
		// Look for 'controller' clause
		if ( $segments[$i] == 'controller' ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'controller' without controller type!
";
				exit;
				}
			$vars['controller'] = $segments[$i+1];
			$i++;
			}
		// Look for 'id' clause
		if ( $segments[$i] == 'id' ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'id' without any info!
";
				exit;
				}
			$vars['id'] = $segments[$i+1];
			}
		// Look for 'uri' clause
		if ( $segments[$i] == 'uri' ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'uri' without any info!
";
				exit;
				}
			$vars['uri'] = $segments[$i+1];
			$i++;
			}
		// Look for 'update' clause
		if ( $segments[$i] == 'update' ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'update' without any info!
";
				exit;
				}
			$vars['update'] = $segments[$i+1];
			$i++;
			}
		// Look for 'from' clause
		if ( $segments[$i] == 'from' ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'from' without any info!
";
				exit;
				}
			$vars['from'] = $segments[$i+1];
			$i++;
			}
		// Look for 'tmpl' clause
		if ( $segments[$i] == 'tmpl' ) {
			if ( $i+1 >= count($segments) ) {
				echo "
Error in AttachmentsParseRoute:  Found 'tmpl' without any template name!
";
				exit;
				}
			$vars['tmpl'] = $segments[$i+1];
			$i++;
			}
		$i++;
		}
	return $vars;
}
?>