public static function call($method, $args, $content_type = null)
    {
        if (count($args) == 0) {
            throw new Exception\InvalidArgsException("You need specify at least the URL to call");
        }

        $method    = strtoupper($method);
        $url       = null;
        $params    = null;
        $callback  = null;
        $data_type = '';
        
        if (!is_string($args[0]) || !filter_var($args[0], FILTER_VALIDATE_URL)) {
            throw new Exception\InvalidArgsException("The URL you specified is not valid.");
        } else {
            $url = \array_shift($args);
        }

        //Is there any parameters to add?
        if (count($args) > 0 && is_array($args[0])) {
            $params = \array_shift($args);
        }
        
        //Is there any callback function to call?
        if (count($args) > 0 && is_callable($args[0])) {
            $callback = \array_shift($args);
        }
        
        //Is there any data type?
        if (count($args) > 0 && is_string($args[0])) {
            $data_type = \array_shift($args);
        }
        //END of arguments treatment

        if ($method == 'POST' && $content_type == 'json') {
            $data = self::curl($method, $url, \reset($params), array(
                CURLOPT_HTTPHEADER     => array('Content-Type: application/json'),
                CURLOPT_POSTFIELDS     => $params,
            ));

        } else if ($method == 'POST' && $content_type == 'xml') {
            $data = self::curl($method, $url, \reset($params), array(
                CURLOPT_HTTPHEADER     => array('Content-Type: text/xml'),
                CURLOPT_POSTFIELDS     => $params,
            ));

        } else {
            $data = self::curl($method, $url, $params);
        }

        $data = StringParser::parse($data, $data_type);

        if (!is_null($callback)) {
            $data = $callback($data);
        }

        return $data;
    }