/**
 * Utility method to get the absolute url of a reason page
 * 
 * Provide an entity when possible for a slight performance boost
 *
 * @author Nathan White
 * @param mixed entity or entity_id corresponding to a page or site
 * @return mixed string absolute url if successful; else null
 */
function reason_get_page_url($page_entity_or_id)
{
    static $builder;
    // lets use a singleton builder instance
    if (!isset($builder)) {
        $builder = new reasonPageUrl();
    }
    if (is_object($page_entity_or_id)) {
        $builder->set_id($page_entity_or_id->id());
        $builder->provide_page_entity($page_entity_or_id);
    } elseif (is_numeric($page_entity_or_id)) {
        $builder->set_id($page_entity_or_id);
    } else {
        trigger_error('reason_get_page_url was passed a parameter that is not an object or integer - a url cannot be generated');
        return null;
    }
    return $builder->get_url();
}