/**
 * Internal function used with dump();
 *
 * @access      private
 * @version     3.0
 * @since       1.0.0
 * @author      Dan Aldridge
 *
 * @param       variable     $var
 * @param       string      $var_name
 * @param       string      $indent
 * @param       string      $reference
 *
 * @return      string
 */
function doDump(&$var, $var_name = null, $indent = null, $reference = null, $counter = 0)
{
    $do_dump_indent = '   ';
    $reference = $reference . $var_name;
    $keyvar = 'the_do_dump_recursion_protection_scheme';
    $keyname = 'referenced_object_name';
    $return = '';
    #if($counter >= 14){ return; }
    $return .= '<li>';
    if (is_array($var) && isset($var[$keyvar])) {
        $real_var =& $var[$keyvar];
        $real_name =& $var[$keyname];
        $type = ucfirst(gettype($real_var));
        $return .= $indent . $var_name . '<span class="ident">' . $type . '</span> = <span style="color:#e87800;">&amp;' . $real_name . '</span><br />';
    } else {
        $var = array($keyvar => $var, $keyname => $reference);
        $avar =& $var[$keyvar];
        $type = ucfirst(gettype($avar));
        $type_color = '<span style="color:black">';
        $color = 'black';
        if ($type == 'String') {
            $type_color = '<span style="color:green">';
            $color = 'green';
        } elseif ($type == 'Integer') {
            $type_color = '<span style="color:red">';
            $color = 'red';
        } elseif ($type == 'Double') {
            $type_color = '<span style="color:#0099c5">';
            $type = 'Float';
            $color = '#0099c5';
        } elseif ($type == 'Boolean') {
            $type_color = '<span style="color:#92008d">';
            $color = '#92008d';
        } elseif ($type == 'null') {
            $type_color = '<span style="color:black">';
            $color = 'black';
        } elseif ($type == 'Resource') {
            $type_color = '<span style="color:#00c19f">';
            $color = '#00c19f';
        }
        $keyNames = array('["password"]', '["pin"]');
        $avar = in_array($var_name, $keyNames) ? str_pad('', strlen($avar), '*') : $avar;
        if (is_array($avar)) {
            $count = count($avar);
            $return .= '' . $indent . ($var_name ? $var_name . ' => ' : '') . '<span class="ident">' . $type . '(' . $count . ')</span>' . $indent . '<ul>(';
            $keys = array_keys($avar);
            foreach ($keys as $name) {
                $value =& $avar[$name];
                $return .= doDump($value, '["' . $name . '"]', $indent . $do_dump_indent, $reference, 1);
            }
            $return .= ")</ul>";
        } elseif (is_object($avar)) {
            $return .= $indent . $var_name . ' <span class="ident">' . $type . '</span>' . $indent . '<ul>(';
            $_indent = $indent . $do_dump_indent;
            $avar = (array) $avar;
            foreach ($avar as $key => $value) {
                $return .= doDump($value, "->" . $key, $indent . $do_dump_indent, $reference, $counter++);
            }
            $return .= ")</ul>";
        } elseif (is_int($avar)) {
            $return .= $indent . $var_name . ' = <span class="ident">' . $type . '(' . strlen($avar) . ')</span> ' . $type_color . $avar . '</span>';
        } elseif (is_string($avar)) {
            $return .= $indent . $var_name . ' = <span class="ident">' . $type . '(' . strlen($avar) . ')</span> ' . $type_color . '"' . str_replace(str_split("\t\n\r\v"), '', htmlspecialchars($avar)) . '"</span>';
        } elseif (is_float($avar)) {
            $return .= $indent . $var_name . ' = <span class="ident">' . $type . '(' . strlen($avar) . ')</span> ' . $type_color . $avar . '</span>';
        } elseif (is_bool($avar)) {
            $return .= $indent . $var_name . ' = <span class="ident">' . $type . '(' . strlen($avar) . ')</span> ' . $type_color . ($avar == 1 ? 'true' : 'false') . '</span>';
        } elseif (is_null($avar)) {
            $return .= $indent . $var_name . ' = <span class="ident">' . $type . '(' . strlen($avar) . ')</span> ' . $type_color . 'NULL</span>';
        } elseif (is_resource($avar)) {
            $return .= $indent . $var_name . ' = <span class="ident">' . $type . '</span> ' . $type_color . $avar . '</span>';
        } else {
            $return .= $indent . $var_name . ' = <span class="ident">' . $type . '(' . strlen($avar) . ')</span> ' . "{$avar}";
        }
        $var = $var[$keyvar];
    }
    $return .= '</li>';
    return $return;
}
/**
 * Internal function used with dump();
 *
 * @access     private
 * @version    2.0
 * @since   1.0.0
 * @author  xLink
 *
 * @param   variable     $var
 * @param   string      $var_name
 * @param   string      $indent
 * @param   string      $reference
 *
 * @return  string
 */
function doDump(&$var, $var_name = null, $indent = null, $reference = null)
{
    $do_dump_indent = '<span style="color:#eeeeee;">|</span> &nbsp;&nbsp; ';
    $reference = $reference . $var_name;
    $keyvar = 'the_do_dump_recursion_protection_scheme';
    $keyname = 'referenced_object_name';
    $return = '';
    if (is_array($var) && isset($var[$keyvar])) {
        $real_var =& $var[$keyvar];
        $real_name =& $var[$keyname];
        $type = ucfirst(gettype($real_var));
        $return .= $indent . $var_name . '<span style="color:#a2a2a2">' . $type . '</span> = <span style="color:#e87800;">&amp;' . $real_name . '</span><br />';
    } else {
        $var = array($keyvar => $var, $keyname => $reference);
        $avar =& $var[$keyvar];
        $type = ucfirst(gettype($avar));
        if ($type == 'String') {
            $type_color = '<span style="color:green">';
        } elseif ($type == 'Integer') {
            $type_color = '<span style="color:red">';
        } elseif ($type == 'Double') {
            $type_color = '<span style="color:#0099c5">';
            $type = 'Float';
        } elseif ($type == 'Boolean') {
            $type_color = '<span style="color:#92008d">';
        } elseif ($type == 'null') {
            $type_color = '<span style="color:black">';
        } elseif ($type == 'Resource') {
            $type_color = '<span style="color:#00c19f">';
        }
        $keyNames = array('[\'password\']', '[\'pin\']');
        $avar = in_array($var_name, $keyNames) ? str_pad('', strlen($avar), '*') : $avar;
        if (is_array($avar)) {
            $count = count($avar);
            $return .= $indent . ($var_name ? $var_name . '=> ' : '') . '<span style="color:#a2a2a2">' . $type . '(' . $count . ')</span><br />' . $indent . '(<br />';
            $keys = array_keys($avar);
            foreach ($keys as $name) {
                $value =& $avar[$name];
                $return .= doDump($value, "['{$name}']", $indent . $do_dump_indent, $reference);
            }
            $return .= "{$indent})<br />";
        } elseif (is_object($avar)) {
            $return .= "{$indent}{$var_name} <span style='color:#a2a2a2'>{$type}</span><br />{$indent}(<br />";
            $_indent = $indent . $do_dump_indent;
            foreach ($avar as $key => $value) {
                $return .= "{$_indent}{$key} <span style='color:#a2a2a2'>{$type}</span><br />{$_indent}(<br />{$_indent})<br />";
            }
            $return .= "{$indent})<br />";
        } elseif (is_int($avar)) {
            $return .= "{$indent}{$var_name} = <span style='color:#a2a2a2'>{$type}(" . strlen($avar) . ")</span> " . "{$type_color}{$avar}</span><br />";
        } elseif (is_string($avar)) {
            $return .= "{$indent}{$var_name} = <span style='color:#a2a2a2'>{$type}(" . strlen($avar) . ")</span> " . "{$type_color}\"" . str_replace(str_split("\t\n\r\v"), '', htmlspecialchars($avar)) . "\"</span><br />";
        } elseif (is_float($avar)) {
            $return .= "{$indent}{$var_name} = <span style='color:#a2a2a2'>{$type}(" . strlen($avar) . ")</span> " . "{$type_color}{$avar}</span><br />";
        } elseif (is_bool($avar)) {
            $return .= "{$indent}{$var_name} = <span style='color:#a2a2a2'>{$type}(" . strlen($avar) . ")</span> " . "{$type_color}" . ($avar == 1 ? "true" : "false") . "</span><br />";
        } elseif (is_null($avar)) {
            $return .= "{$indent}{$var_name} = <span style='color:#a2a2a2'>{$type}(" . strlen($avar) . ")</span> {$type_color}NULL</span><br />";
        } elseif (is_resource($avar)) {
            $return .= "{$indent}{$var_name} = <span style='color:#a2a2a2'>{$type}</span> {$type_color}{$avar}</span><br />";
        } else {
            $return .= "{$indent}{$var_name} = <span style='color:#a2a2a2'>{$type}(" . strlen($avar) . ")</span> " . "{$avar}<br />";
        }
        $var = $var[$keyvar];
        return $return;
    }
}