/*

        Name: documentEditor
	Ver: 0.1 (2010.12.10 11:44)
	(c) Kraynov Ilya (ilya.kraynov@gmail.com)

        Класс для работы с объектом Караби в режиме оператора.

        Класс позволяет просматривать и изменять объект Караби, а так же
        создавать, просматривать, изменять и удалять вложенные объекты
        Караби.


        Определения:

        Коннектор - точка вызова объекта класса documentEditor. Все
        коммуникации с пользователем осуществляются через этот коннектор
        (никаких прямых запросов к объекту!). Коннектор после получения
        соответсвующе сформированного запроса передёт управление объекту
        класса documentEditor. Коннектор должен, каким либо образом
        однозначно идентифицировать пользователя и объект Караби с которым
        ведётся работа.



        Использование:

        Для начала работы необходимо инстанцировать класс. На вход в
        конструктор подаётся объект simple_document, который будет в
        дальнейшем использован, как основной документ.

        Для полноценной работы необходимо определить путь доступа к объекту
        из сети. Так как работа ведётся через коннектор, то должна быть
        определенна ссылка на этот коннектор, позволяющий коннектору
        идентифицировать текущий объект. Параметры: 'connector_url',
        'connector_prefix'.

        Необходимо определить параметр, при передаче которого коннектору,
        коннектор будет перенаправлять запрос объекту. Параметр:
        'connector_internalcall_prefix'.

        Так же необходимо указать ссылку на ресурс откуда будут
        подгружаться необходимые для пользователя ресурсы (JS-файлы,
        CSS-файлы, изображения и прочее). Параметр: 'js_url'.

        Так же может понадобится передать рендерер. Он будет использовать
        при первом запуске объекта, для отрисовки формы редактора в
        оформлении того места откуда осуществляется вызов.

	Пример:
            $document = new SimpleDocument($document_id);
            $document_editor = new DocumentEditor($document);
            $document_editor->set_options(array(
                'connector_url' => 'http://somesite.domain/index.php',
                'connector_prefix' => "action=doDocumentEditor&document=<some_document_id>",
                'connector_internallcall_prefix' => "idE=1",
                'js_url' => '/document_editor_resources/'
            ));
            $document_editor->set_renderer($some_renderer);

            // для первого запуска
            $document_editor->render_newEditor('dE');

            // для передачи управления в объект
            $document_editor->proccessInternallCall();

-------------------------------------------------------------------------------------------

        Разработка

        Определения
        Объект "Редактора"
        Объект "Редактора документа Караби"
        Объект "Редактора свойства документа Караби"

        Концепция. Редакторы документов Караби и их редакторы свойств
        предстовляют собой объекты соответсвующих классов. Классы этих
        объектов предстовляют собой обёртку для объектов классов
        SimpleDocument и SimpleProperty соответственно.

        У объекта "редактор" может быть только один вложенный объект
        "редактора документа Караби" (а соответственно один SimpleDocument)
        - главный документ.

        У объекта "редактора документа Караби" есть набор объектов
        "редактор свойства документа Караби".

        Действия над конечным объектом выполняет сам объект (будь то
        действия или отображения)

        Вложения.
        Модель работы представляет собой дерево.
        Если свойство документа представляет собой ссылку или ссылки на
        вложенные документы, то такой объект предоставляет API для
        управления вложениями (создать, удалить, изменить), а так же доступ
        к вложенным объектам (создаёт объекты "Редактор документа Караби"
        для каждой ссылки).

        Пример дерева:
            Редактор
               Редактор документа Караби ( => SimpleDocument ) 1
                  Редактора свойства документа Караби ( => SimpleProperty ) 1а
                  Редактора свойства документа Караби ( => SimpleProperty ) 1б
                     Редактор документа Караби ( => SimpleDocument ) 1б1
                        Редактора свойства документа Караби ( => SimpleProperty ) 1б1а
                        Редактора свойства документа Караби ( => SimpleProperty ) 1б1б
                  Редактора свойства документа Караби ( => SimpleProperty ) 1в
                  Редактора свойства документа Караби ( => SimpleProperty ) 1г
                  Редактора свойства документа Караби ( => SimpleProperty ) 1д
                     Редактор документа Караби ( => SimpleDocument ) 1д1
                        Редактора свойства документа Караби ( => SimpleProperty ) 1д1а
                        Редактора свойства документа Караби ( => SimpleProperty ) 1д1б
                        Редактора свойства документа Караби ( => SimpleProperty ) 1д1в
                     Редактор документа Караби ( => SimpleDocument ) 1д2
                        Редактора свойства документа Караби ( => SimpleProperty ) 1д2а
                        Редактора свойства документа Караби ( => SimpleProperty ) 1д2б
                        Редактора свойства документа Караби ( => SimpleProperty ) 1д2в
   



        Для обращения к редактору документа Караби или свойству документа
        через запрос из сети используется не просто указание идентификатора
        объекта или свойства, а полный путь до него начиная с главоного
        объекта. Пример:
        






TODO LIST(
	1. В JS сделать проверку на существование функций.
	2. session вынести в отдельный класс.
	3. создать фабрику для документЕдитор_документ
TODO LIST)

*/
