<?php
/**
 * Modified by Pierre-Henry Soria
 */
namespace PFBC\ErrorView;

class Standard extends \PFBC\ErrorView {
    public function applyAjaxErrorResponse() {
        $id = $this->_form->getAttribute("id");
        echo <<<JS
        var errorSize = response.errors.length;
        if(errorSize == 1)
            var errorFormat = "error was";
        else
            var errorFormat = errorSize + " errors were";

        var errorHTML = '<div class="alert alert-error"><a class="close" data-dismiss="alert" href="#">×</a><strong class="alert-heading">The following ' + errorFormat + ' found:</strong><ul>';
        for(e = 0; e < errorSize; ++e)
            errorHTML += '<li>' + response.errors[e] + '</li>';
        errorHTML += '</ul></div>';
        jQuery("#$id").prepend(errorHTML);
JS;

    }

    private function parse($errors) {
        $list = array();
        if(!empty($errors)) {
            $keys = array_keys($errors);
            $keySize = sizeof($keys);
            for($k = 0; $k < $keySize; ++$k)
                $list = array_merge($list, $errors[$keys[$k]]);
        }
        return $list;
    }

    public function render() {
        $errors = $this->parse($this->_form->getErrors());
        if(!empty($errors)) {
            $size = sizeof($errors);
            $errors = implode("</li><li>", $errors);

            if($size == 1)
                $err_msg = trans('The following error was found');
            else
                $err_msg = trans('The following %0% errors were found', $size);

            echo <<<HTML
            <div class="alert alert-error">
                <a class="close" data-dismiss="alert" href="#">×</a>
                <strong class="alert-heading">$err_msg</strong>
                <ul><li>$errors</li></ul>
            </div>
HTML;
        }
    }

    public function renderAjaxErrorResponse() {
        $errors = $this->parse($this->_form->getErrors());
        if(!empty($errors)) {
            header("Content-type: application/json");
            echo json_encode(array("errors" => $errors));
        }
    }
}
