var cHydraWysiwygEditor = function()
{
    this.name = 'hydra_editor';
    this.iframe_id = this.name + '_iframe';
    this.textarea_name = this.name + '_textarea';
    this.textarea_id = this.name + '_textarea';
    this.src_elem_id = false;
    this.table_functions = new cTableFunctions(this);
    // Имя объекта редактора.
    this.instance_name = 'hydra_wysiwyg_editor';

    /**
     * Режим работы редактора (visual||html)
     */
    this.mode = 'visual';
}

/**
 *  Задает имя textarea.
 *  @param String name имя для textarea
 */
cHydraWysiwygEditor.prototype.set_storage_name = function(name)
{
    this.textarea_name = name;
}

cHydraWysiwygEditor.prototype.get_instance_name = function()
{
    return this.instance_name;
}

/**
 * Возвращает dom-объект ифрейма редактора.
 * @return dom-object
 */
cHydraWysiwygEditor.prototype.get_iframe_elem = function()
{
    return document.getElementById(this.iframe_id);
}

/**
*	Определяет document iframe-a.
*	@param Object iframe_elem объект ифрейма.
*	@return Object
*/
cHydraWysiwygEditor.prototype.get_iframe_doc = function(iframe_elem)
{
    if (iframe_elem == undefined)
    {
        iframe_elem = this.get_iframe_elem();
    }
    
    var doc;
    //alert(iframe_elem.contentDocument);
    //alert(iframe_elem.contentWindow.document.body);
    //alert(iframe_elem.document.body);
    
    if( iframe_elem.contentDocument )
        doc = iframe_elem.contentDocument;
    else if( iframe_elem.contentWindow )
        doc = iframe_elem.contentWindow.document;
    else if(iframe_elem.document)
        doc = iframe_elem.document;

    return doc;
}

/**
 * Возвращает объект документа iframe.
 * @return DOMDocument
 */
cHydraWysiwygEditor.prototype.get_doc = function()
{
    return this.get_iframe_doc(this.get_iframe_elem());
}

/**
 *  Возвращает html код, содержащийся в iframe.
 *  @return String
 */
cHydraWysiwygEditor.prototype.get_html_source = function()
{
    var doc = this.get_iframe_doc( this.get_iframe_elem() );
    //debugger;
    return doc.body.innerHTML;
}

/**
 *  Сохраняет html код из редактора в заданный элемент.
 *
 *  @param string target_elem_id элемент в который нужно сохранять изменения
 */
cHydraWysiwygEditor.prototype.save_to = function(target_elem_id)
{
    var target_elem = document.getElementById(target_elem_id);
    if (target_elem)
    {
        target_elem.value = this.get_html_source();
        draw_message('wysiwyg_messagebox', 'Изменения сохранены.');
        
        //alert("Изменения сохранены.");
    }
}

cHydraWysiwygEditor.prototype.save = function()
{
    if (this.mode == 'visual') {
        this.save_to(this.textarea_id);
    }
}

/**
 * Выполняет комманду для редактора.
 * @param String command комманда
 * @param String value значение для команды
 */
cHydraWysiwygEditor.prototype.exec_command = function(command, value)
{
    //debugger;
    var iframe = document.getElementById(this.iframe_id);
    var wysiwyg = iframe.contentWindow.document;
    
        
    if (value)
    {
        wysiwyg.execCommand(command, false, value);
    }
    else
    {
        wysiwyg.execCommand(command, false, true);
    }
    iframe.focus();
}


/**
*	Создает элемент на toolbare.
*/
cHydraWysiwygEditor.prototype.add_toolbar_item = function(toolbar_elem, icon, command, value, hint)
{
    var img_elem = document.createElement('img');
    img_elem.setAttribute('src', HYDRA_ROOT_URL + icon);
    img_elem.setAttribute('title', hint);
    //img_elem.setAttribute('onclick', this.get_instance_name() + '.exec_command("' + command + '",' + value + ')');
    //debugger;
    hydra_add_event(img_elem, 'click', function()
    {
        //alert("serg");
        hydra_wysiwyg_editor.exec_command(command,value);
    });

    /**
    img_elem.onclick = function()
    {
        hydra_wysiwyg_editor.exec_command(command,value)
    }*/
    toolbar_elem.appendChild(img_elem);
}

cHydraWysiwygEditor.prototype.add_toolbar_item_onclick = function(toolbar_elem, icon, event_handler, hint)
{
    var img_elem = document.createElement('img');
    img_elem.setAttribute('src',  HYDRA_ROOT_URL+ icon);
    img_elem.setAttribute('title', hint);
    //img_elem.setAttribute('onclick', event_handler);
    img_elem.onclick = function()
    {
        eval(event_handler);
    };
    //hydra_add_event(img_elem, 'onclick',event_handler)
    //img_elem.onclick = event_handler;
    img_elem = toolbar_elem.appendChild(img_elem);

}

/**
 *  Возвращает текущий выбранный элемент.
 *  @return Object || false
 */
cHydraWysiwygEditor.prototype.get_selected_object = function()
{
    var iframe = this.get_iframe_elem();
    if (!iframe)
    {
        return false;
    }
    if(navigator.appName == 'Microsoft Internet Explorer')
    {
        var selection = iframe.contentWindow.document.selection;
        if(selection.type == "Text")
        {
            //debugger;
            //alert(selection.createRange().parentElement().tagName)
            return selection.createRange().parentElement();

        }
        else if(selection.type == "Control")
        {
            alert(selection.createRange()(0).tagName)
            return selection.createRange()(0);
        }
        else
            return selection.createRange().parentElement();

    }
    if(navigator.appName == 'Netscape')
    {
        var selection = iframe.contentWindow.getSelection();
        if (!selection)
        {
            return false;
        }
//        alert(selection)
//        alert(selection.anchorOffset)
//        alert(selection.focusNode)

        var offset = selection.anchorOffset;
        if (selection.focusNode.childNodes.length > 0)
        {
            var item = selection.focusNode.childNodes[offset];

            return item;
        }
        //debugger;
        //alert(selection.anchorNode);
        return selection.anchorNode;
        //return selection.focusNode;
    //alert(selection);
    }

    


}

/**
 *  Добавляет ссылку.
 */
cHydraWysiwygEditor.prototype.add_link = function()
{
    var temp_elem = editor.get_selected_object();
    var sel_obj;
    while(temp_elem.tagName!='BODY')
        {
            if(temp_elem.tagName=='A')
                break;
            temp_elem=temp_elem.parentNode;
        }

    if(temp_elem.tagName == 'A')
        {
            sel_obj = temp_elem;
        }


    if (true)
    {
        var call_back_params = Array();
        call_back_params['selected_object'] = sel_obj;
        call_back_params['window_id'] = 'add_link_window';
        call_back_params['editor'] = this;
        var win = new cHydraWindow(
            'add_link_window',
            'Свойства ссылки',
            false,
            false,
            this.callback_add_link_win,
            call_back_params);
    }

}

cHydraWysiwygEditor.prototype.callback_add_link_win = function(container_id, callback_params)
{

   /*     var link = prompt("Введите ссылку");

    var iframe = this.get_iframe_elem();


    //debugger;
    var item = this.get_selected_object();

    var item_copy = item.cloneNode(true);

    var parent_node = item.parentNode;
    var a_elem = iframe.contentDocument.createElement('a');
    a_elem.setAttribute('href', link);
    //a_elem.textContent = 'ddddd';

    a_elem.appendChild(item_copy);
    parent_node.appendChild(a_elem);

    parent_node.replaceChild(a_elem, item);


    return;*/
    //debugger;
    //var item = this.get_selected_object();

    
//    var a_elem = iframe.contentDocument.createElement('a');


    //var iframe = this.get_iframe_elem();
    var editor = callback_params['editor'];
    //var iframe = editor.get_iframe_elem();
    //alert(container_id)
    var sel_obj = callback_params['selected_object'];
    var win_id = callback_params['window_id'];
    //var sel_obj_copy = sel_obj.cloneNode(true);
    //var parent_node = sel_obj.parentNode;
    //alert(sel_obj);
    var div = document.getElementById(container_id);
    //alert(div);
    var fieldset = document.createElement('fieldset');
    //this.window.document.appendChild(div);
    fieldset.setAttribute('id', 'properties_fieldset')
    var legend = document.createElement('legend');
    legend.appendChild(document.createTextNode('Свойства ссылки'))
    fieldset.appendChild(legend);
    //win.appendChild(fieldset);
    div.appendChild(fieldset);
    //this.window.document.appendChild(fieldset);
    var def_url = '';
    var def_class = '';
    var def_alt = '';
    var def_target = '';
    if(sel_obj)
        {
            def_url = sel_obj.href;
            def_class = sel_obj.className;
            def_alt = sel_obj.getAttribute('alt');
            def_target = sel_obj.getAttribute('target');
        }

    var ul = new cHydraHTMLUl('properties_fieldset');

    var url_label = create_label_input('url', 'Url', def_url);
    ul.add_li(url_label);


    var class_label = create_label_input('class_name', 'Имя класса', def_class);
    ul.add_li(class_label);

    var alt_label = create_label_input('alt', 'Текст Alt', def_alt);
    ul.add_li(alt_label);


    var target_label = create_label('target', 'target_id')
    ul.add_li(target_label);

    var target_select = new cHydraHTMLSelect('target_id');
    target_select.add_option('_blank','blank');
    target_select.add_option('_self','self');
    target_select.add_option('_parent','parent');
    target_select.add_option('_top','top');
    target_select.set_selected(def_target);

    //create button
    var apply_button = document.createElement('button');
    apply_button.appendChild(document.createTextNode('Применить'))
    apply_button.setAttribute('id', 'submit')
    div.appendChild(apply_button);
    //var cwin = this.get_iframe_elem().contentWindow;
    apply_button.onclick = function() {
        var a_elem;
        if(sel_obj)
            {
                a_elem = sel_obj;
            }
            else
                {
                    editor.exec_command('CreateLink',url_label.childNodes[1].value);
                    a_elem = editor.get_selected_object();
                    a_elem = a_elem.parentNode;
                    //alert(a_elem.tagName);
                }

        //var a_elem = sel_obj;
        a_elem.setAttribute('href', url_label.childNodes[1].value);
        a_elem.setAttribute('alt', alt_label.childNodes[1].value);
        a_elem.className = class_label.childNodes[1].value;
        a_elem.setAttribute('target', target_label.childNodes[1].value);
        
        //a_elem.appendChild(sel_obj_copy);
        //parent_node.appendChild(a_elem);

        //parent_node.replaceChild(a_elem, sel_obj);

        destroy_window(win_id);
    }
}

/**
 * Выводит редактор.
 * @params String container_id контейнер, в который нужно загрузить редактор.
 * @params String src_elem_id элемент источник, у которого берется значение для
 *              текста редактора.
 */
cHydraWysiwygEditor.prototype.draw = function(container_id, src_elem_id)
{
    // Получаем контейнер, в который мы будем загружать редактор.
    var container_elem = document.getElementById(container_id);
    if (!container_elem)
    {
        // Если загружать редактор некуда.
        return false;
    }

    // Определяем элемент, из которого мы будем брать текст для редактора.
    var value_elem = document.getElementById(src_elem_id);
    var content = '';
    if (value_elem)
    {
        this.src_elem_id = src_elem_id;
        if (value_elem.value == undefined) {
            content = value_elem.innerHTML;
            value_elem.innerHTML = '';
        }
        else
            content = value_elem.value;

    }

    // Создаем воркспейс редактора
    var editor_ws_elem = document.createElement('div');
    container_elem.appendChild(editor_ws_elem);

    // Создаем div для тулбара
    var toolbar_elem = document.createElement('div');
    toolbar_elem.setAttribute('class', 'wysiwyg_toolbar');
    editor_ws_elem.appendChild(toolbar_elem);

    // Заполнение тулбара
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/bold.gif', 'Bold', null, 'Bold');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/italic.gif', 'Italic', null, 'Italic');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/underline.gif', 'Underline', null, 'Underline');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/strikethrough.gif', 'Strikethrough', null, 'Strikethrough');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/undo.gif', 'Undo', null, 'Undo');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/redo.gif', 'Redo', null, 'Redo');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/cleanup.gif', 'RemoveFormat', null, 'RemoveFormat');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/bullist.gif', 'InsertUnorderedList', null, 'InsertUnorderedList');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/numlist.gif', 'InsertOrderedList', null, 'InsertOrderedList');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/justifyleft.gif', 'JustifyLeft', null, 'JustifyLeft');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/justifycenter.gif', 'JustifyCenter', null, 'JustifyCenter');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/justifyright.gif', 'JustifyRight', null, 'JustifyRight');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/justifyfull.gif', 'JustifyFull', null, 'JustifyFull');
    this.add_toolbar_item(toolbar_elem, '_components/wysiwyg_editor/i/unlink.gif', 'unlink', null, 'unlink');

    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/link.gif', this.get_instance_name() + '.add_link();', 'Добавить ссылку');
    //this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/link.gif',  hydra_wysiwyg_editor.add_link(), 'Добавить ссылку');

    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/add_image.png', this.get_instance_name() + '.add_image();', 'Добавить изображение');
    //this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/add_image.png',  hydra_wysiwyg_editor.add_image, 'Добавить изображение');


    //вставить таблицу
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/insert_table.gif', this.get_instance_name() + '.insert_table();', 'insert table');
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/table_properties.gif', this.get_instance_name() + '.table_properties();', 'table properties');
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/insert_row_before.gif', this.get_instance_name() + '.table_functions.insert_table_row_before();', 'insert row before');
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/insert_row_after.gif', this.get_instance_name() + '.table_functions.insert_table_row_after();', 'insert row after');
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/insert_column_before.gif', this.get_instance_name() + '.table_functions.insert_table_column_before();', 'insert column before');
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/insert_column_after.gif', this.get_instance_name() + '.table_functions.insert_table_column_after();', 'insert column after');

    // Кнопка свойств
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/properties.gif', this.get_instance_name() + '.set_properties();', 'Свойства элемента');
    // Кнопка цвета
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/color_text.gif', this.get_instance_name() + '.set_color();', 'Цвет шрифта');
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/color_fill.gif', this.get_instance_name() + '.set_bgcolor();', 'Выделение цветом');
    //this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/color_text.gif', hydra_wysiwyg_editor.set_color, 'Цвет шрифта');
    //this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/color_fill.gif', hydra_wysiwyg_editor.set_bgcolor, 'Выделение цветом');


    // Кнопка чистки html
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/cleanup.gif', this.get_instance_name() + '.clean_html();', 'clean html');

    // Создаем кнопку сохранения.
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/save.gif', this.get_instance_name() + '.save_to("'+this.textarea_id+'")', 'save changes');

    observer.observeEvent('form.save',
        function() {
            hydra_wysiwyg_editor.save();
        }
    );

    // Создаем комбик форматирования
    var format_combo = new cHydraHTMLSelect( toolbar_elem );
    //format_combo.add_event('change', this.get_instance_name() + '.exec_command("FormatBlock", this.options[this.selectedIndex].value);');
    editor = this;
    format_combo.add_event('change',
        function() {
            editor.exec_command("FormatBlock", this.options[this.selectedIndex].value);
        }
    );
    /*format_combo.onchange = function()
    {
        alert(111)
//        eval(this.get_instance_name() + '.exec_command("FormatBlock", this.options[this.selectedIndex].value);');
    }*/
    //hydra_add_event(toolbar_elem,'onclick',function(){alert(111)})
    //format_combo.onmouseover=function(){alert(111)};
    //format_combo.on
    //alert(format_combo.onclick);
    format_combo.add_option("", '-- Format --');
    format_combo.add_option("<p>", 'Paragraph');
    format_combo.add_option("<address>", 'Address');
    format_combo.add_option("<pre>", 'Preformatted');
    format_combo.add_option("<h1>", 'Heading 1');
    format_combo.add_option("<h2>", 'Heading 2');
    format_combo.add_option("<h3>", 'Heading 3');
    format_combo.add_option("<h4>", 'Heading 4');
    format_combo.add_option("<h5>", 'Heading 5');
    format_combo.add_option("<h6>", 'Heading 6');

    // Создаем комбик смены шрифта
    var font_combo = new cHydraHTMLSelect( toolbar_elem );
    font_combo.set_attribute('onchange', this.get_instance_name() + '.exec_command("FontName", this.options[this.selectedIndex].value);');
    font_combo.add_option("", '-- Font family --');
    font_combo.add_option("andale mono,times", 'Andale Mono');
    font_combo.add_option("arial,helvetica,sans-serif", 'Arial');
    font_combo.add_option("arial black,avant garde", 'Arial Black');
    font_combo.add_option("book antiqua,palatino", 'Book Antiqua');
    font_combo.add_option("comic sans ms,sans-serif", 'Comic Sans MS');
    font_combo.add_option("courier new,courier", 'Courier New');
    font_combo.add_option("georgia,palatino", 'Georgia');
    font_combo.add_option("helvetica", 'Helvetica');
    font_combo.add_option("impact,chicago", 'Impact');
    font_combo.add_option("symbol", 'Symbol');
    font_combo.add_option("tahoma,arial,helvetica,sans-serif", 'Tahoma');
    font_combo.add_option("terminal,monaco", 'Terminal');
    font_combo.add_option("times new roman,times", 'Times New Roman');
    font_combo.add_option("trebuchet ms,geneva", 'Trebuchet MS');
    font_combo.add_option("verdana,geneva", 'Verdana');
    font_combo.add_option("wingdings,zapf dingbats", 'Webdings');

    var font_size_combo = new cHydraHTMLSelect( toolbar_elem );
    font_size_combo.set_attribute('onchange', this.get_instance_name() + '.exec_command("FontSize", this.options[this.selectedIndex].value);');
    font_size_combo.add_option("1", '1');
    font_size_combo.add_option("2", '2');
    font_size_combo.add_option("3", '3');
    font_size_combo.add_option("4", '4');
    font_size_combo.add_option("5", '5');
    font_size_combo.add_option("6", '6');
    font_size_combo.add_option("7", '7');
    font_size_combo.add_option("8", '8');
    font_size_combo.add_option("9", '9');
    font_size_combo.add_option("10", '10');

    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/color_fill.gif', this.get_instance_name() + '.tidy_clean();', 'Tidy clean');
    


    // Создаем div с iframe
    var ws_elem = document.createElement('div');
    editor_ws_elem.appendChild(ws_elem);

    // Создаем текстовую область, в которой мы будем хранить контент.
    var textarea_elem = document.createElement('textarea');
    textarea_elem.setAttribute('id', this.textarea_id);
    textarea_elem.setAttribute('name', this.textarea_name);


    textarea_elem.style.display = 'none';
    textarea_elem.style.width = '100%';
    textarea_elem.style.height = '400px';

    textarea_elem.value = content;
    ws_elem.appendChild(textarea_elem);
    //debugger;
    // Создаем iframe.
    var iframe_elem = document.createElement('iframe');
    iframe_elem.setAttribute('id', this.iframe_id);
    iframe_elem.setAttribute('src', PROJECT_URL+'editor.html'); //PROJECT_URL+'temp.html'
    // document.write("'+content+'");
    // 'javascript:""'
    iframe_elem.setAttribute('name', 'editor_iframe');


    //hydra_add_event(iframe_elem, 'readystatechange', function(){alert("sss");});

    iframe_elem.style.width = '98%';
    iframe_elem.style.height = '400px';
    iframe_elem.style.width = '100%';
    ws_elem.appendChild(iframe_elem);

    //debugger;
    this.set_html(content);

    
    
    

    
    // Создание кнопок
    var visual_button_elem = document.createElement('button');
    visual_button_elem.innerHTML = 'Visual';
    hydra_add_event(visual_button_elem, 'click', function()
    {
        hydra_wysiwyg_editor.set_visual_mode();    
    });

    ws_elem.appendChild(visual_button_elem);

    var html_button_elem = document.createElement('button');
    html_button_elem.innerHTML = 'HTML';
    hydra_add_event(html_button_elem, 'click', function()
    {
        hydra_wysiwyg_editor.set_html_mode();
    });
    ws_elem.appendChild(html_button_elem);

    // Элемент для отображение текущего режима
    var mode_elem = document.createElement('span');
    mode_elem.setAttribute('id', 'wysiwyg.mode');
    ws_elem.appendChild(mode_elem);


    var message_elem = document.createElement('span');
    message_elem.setAttribute('id', 'wysiwyg_messagebox');
    ws_elem.appendChild(message_elem);

    

    
    //iframe_elem.contentWindow.document.designMode = 'On';
    

    this.register_selection_event();





}

cHydraWysiwygEditor.prototype.tidy_clean = function()
{
    var html_source = this.get_html_source();
    var params = new Array();
    params['s_html'] = html_source;
    params['s_html_src'] = this.get_textarea_html();
    call_ajax('hydra_tidy', false, params); //, '_lib/tidy/tidy.php'
}

cHydraWysiwygEditor.prototype.register_selection_event = function()
{
    // Previous handler code here
    var iframe = this.get_iframe_elem();
    var editor = this;
    if(iframe.contentDocument)
    { // select
        // DOM L2
        iframe.contentDocument.addEventListener("mouseup", function(oEvent){

            var selection = iframe.contentWindow.getSelection();


            if(selection){
                editor.current_selection = selection;
            //alert(txt);
            }
        }, false);



    }else if(iframe.contentWindow.document.attachEvent)
    {
        // IE
        iframe.contentWindow.document.attachEvent("onmouseup", function(){
            var selection = iframe.contentWindow.document.selection;
            //debugger;
            if(selection)
            {
                editor.current_selection = selection;
            }
        });
    }
}

cHydraWysiwygEditor.prototype.insert_node_in_selection = function(obj)
{
    var selection = this.current_selection;

    if(navigator.appName == 'Microsoft Internet Explorer')
    {
        //debugger;
        if(selection)
        {
            var range = selection.createRange();
            range.pasteHTML(obj.outerHTML);
        //alert(selection);
        //alert(selection);
        //range.pasteHTML(obj.outerHTML);
        }
    }
    if(navigator.appName == 'Netscape')
    {
        //this.get_doc().execCommand('hilitecolor',false,bgcolor_label.childNodes[1].value)
        //alert(selection);
        
        var range = selection.getRangeAt(0);
        //alert(range)
        //alert(range.startContainer)
        //alert(range.endContainer)
        range.deleteContents();
        range.insertNode(obj)

    }
// Previous handler code here
}

/**
 * Позволяет настраивать свойства выбранного объекта.
 **/
cHydraWysiwygEditor.prototype.set_properties = function()
{
    var elem = this.get_selected_object();
    if (elem && elem.getAttribute && elem.setAttribute)
    {
        var call_back_params = Array();
        call_back_params['selected_object'] = elem;
        call_back_params['window_id'] = 'set_element_properties_window';
        var win = new cHydraWindow(
            'set_element_properties_window',
            'Свойства элемента',
            false,
            false,
            this.callback_prop_win,
            call_back_params);
    }
}
cHydraWysiwygEditor.prototype.callback_prop_win = function(container_id, callback_params)
{
    //alert(container_id)
    var sel_obj = callback_params['selected_object'];
    var win_id = callback_params['window_id'];

    //alert(sel_obj);
    var div = document.getElementById(container_id);
    //alert(div);
    var fieldset = document.createElement('fieldset');
    //this.window.document.appendChild(div);
    fieldset.setAttribute('id', 'properties_fieldset')
    var legend = document.createElement('legend');
    legend.appendChild(document.createTextNode('свойства '+sel_obj.tagName+' объекта'))
    fieldset.appendChild(legend);
    //win.appendChild(fieldset);
    div.appendChild(fieldset);
    //this.window.document.appendChild(fieldset);

    var ul = new cHydraHTMLUl('properties_fieldset');
    var align_label = create_label('Выравнивание', 'align_id')
    ul.add_li(align_label);
    var align_select = new cHydraHTMLSelect('align_id');
    align_select.add_option('left','влево');
    align_select.add_option('center','в центр');
    align_select.add_option('right','вправо');
    align_select.set_selected(sel_obj.getAttribute('align'));

    var valign_label = create_label('Вертикальное выравнивание', 'valign_id')
    ul.add_li(valign_label);
    var valign_select = new cHydraHTMLSelect('valign_id');
    valign_select.add_option('top','вверх');
    valign_select.add_option('middle','в середину');
    valign_select.add_option('center','в центр');
    valign_select.add_option('bottom','вниз');
    valign_select.add_option('baseline','базовая линия');
    valign_select.set_selected(sel_obj.getAttribute('valign'));

    var alt_label = create_label_input('alt', 'Текст Alt', sel_obj.getAttribute('alt'));
    ul.add_li(alt_label);

    var border_width_label = create_label_input('border_width', 'Граница (px)', sel_obj.style.borderWidth);
    ul.add_li(border_width_label);

    var title_label = create_label_input('title', 'Подсказка', sel_obj.getAttribute('title'));
    ul.add_li(title_label);

    var class_label = create_label_input('class_name', 'Имя класса', sel_obj.className);
    ul.add_li(class_label);

    var padding_label = create_label_input('padding', 'Внешний отступ', sel_obj.style.padding);
    ul.add_li(padding_label);
    var padding_top_label = create_label_input('padding-top', 'Внешний отступ Top', sel_obj.style.paddingTop);
    ul.add_li(padding_top_label);
    var padding_left_label = create_label_input('padding-left', 'Внешний отступ Left', sel_obj.style.paddingLeft);
    ul.add_li(padding_left_label);
    var padding_right_label = create_label_input('padding-right', 'Внешний отступ Right', sel_obj.style.paddingRight);
    ul.add_li(padding_right_label);
    var padding_bottom_label = create_label_input('padding-bottom', 'Внешний отступ Bottom', sel_obj.style.paddingBottom);
    ul.add_li(padding_bottom_label);

    var margin_label = create_label_input('margin', 'Внутренний отступ', sel_obj.style.margin);
    ul.add_li(margin_label);
    var margin_top_label = create_label_input('margin-top', 'Внутренний отступ Top', sel_obj.style.marginTop);
    ul.add_li(margin_top_label);
    var margin_left_label = create_label_input('margin-left', 'Внутренний отступ Left', sel_obj.style.marginLeft);
    ul.add_li(margin_left_label);
    var margin_right_label = create_label_input('margin-right', 'Внутренний  отступ Right', sel_obj.style.marginRight);
    ul.add_li(margin_right_label);
    var margin_bottom_label = create_label_input('margin-bottom', 'Внутренний отступ Bottom', sel_obj.style.marginBottom);
    ul.add_li(margin_bottom_label);

    //create button
    var apply_button = document.createElement('button');
    apply_button.appendChild(document.createTextNode('Применить'))
    apply_button.setAttribute('id', 'submit')
    div.appendChild(apply_button);
    //var cwin = this.get_iframe_elem().contentWindow;
    apply_button.onclick = function() {

        sel_obj.style.borderWidth = border_width_label.childNodes[1].value;
        sel_obj.setAttribute('align', align_label.childNodes[1].value);
        sel_obj.setAttribute('valign', valign_label.childNodes[1].value);
        sel_obj.setAttribute('alt', alt_label.childNodes[1].value);
        sel_obj.setAttribute('title', title_label.childNodes[1].value);
        sel_obj.className = class_label.childNodes[1].value;
        sel_obj.style.paddingTop = padding_top_label.childNodes[1].value;
        sel_obj.style.paddingLeft = padding_left_label.childNodes[1].value;
        sel_obj.style.paddingRight = padding_right_label.childNodes[1].value;
        sel_obj.style.paddingBottom = padding_bottom_label.childNodes[1].value;
        if(padding_label.childNodes[1].value>0)
            sel_obj.style.padding = padding_label.childNodes[1].value;
        sel_obj.style.marginTop = margin_top_label.childNodes[1].value;
        sel_obj.style.marginLeft = margin_left_label.childNodes[1].value;
        sel_obj.style.marginRight = margin_right_label.childNodes[1].value;
        sel_obj.style.marginBottom = margin_bottom_label.childNodes[1].value;
        if(margin_label.childNodes[1].value>0)
            sel_obj.style.margin = margin_label.childNodes[1].value;

    //destroy_window(win_id);
    }
}

cHydraWysiwygEditor.prototype.set_color = function()
{
    var elem = this.get_selected_object();
    //alert(elem);
    if (elem )
    {
        var call_back_params = Array();
        call_back_params['selected_object'] = elem;
        call_back_params['window_id'] = 'set_element_color_window';
        call_back_params['iframe_id'] = this.iframe_id;
        call_back_params['iframe'] = this.get_iframe_elem();
        var win = new cHydraWindow(
            'set_element_color_window',
            'Свойства цвета',
            false,
            false,
            this.callback_color_win,
            call_back_params);
    }
}

cHydraWysiwygEditor.prototype.callback_color_win = function(container_id, callback_params)
{
    alert(container_id)
    var sel_obj = callback_params['selected_object'];
    var win_id = callback_params['window_id'];
    var doc = callback_params['iframe'].contentWindow.document;

    var div = document.getElementById(container_id);
    //div.appendChild(document.createTextNode('asddsaasd'));
    var color_label =create_label_input('color', 'цвет', '');
    div.appendChild(color_label);
    var table_color_select = document.createElement('TABLE');
    table_color_select.setAttribute('id', 'table_color_select');
    //div_color_select.style.display = 'table';
    //table_color_select.className = 'color_table';
    //alert(Math.floor(0.5)*3);
    var table_color_body = document.createElement('TBODY');
    for(var i=0;i<12;i++)
    {
        var temp_table_row = document.createElement('TR');
        //temp_div_row.style.display = 'table-row';
        temp_table_row.className = 'color_table_row';
        //temp_div_row.className='div_color_select_row';
        for(var j=0;j<18;j++)
        {
            var temp_table_cell = document.createElement('TD');


            //temp_div.className='div_color_select_cell';
            //temp_table_cell.style.height = '10px';
            //temp_table_cell.style.width = '10px';
            //temp_div.style.display = 'table-cell';
            temp_table_cell.className = 'color_table_cell';
            temp_table_cell.style.backgroundColor=get_color_from(i,j);
            temp_table_cell.i=i;
            temp_table_cell.j=j;
            temp_table_cell.onclick = function()
            {
                color_label.childNodes[1].value=get_color_from(this.i,this.j);
            };
            //temp_div.appendChild(document.createElement('br'))
            temp_table_row.appendChild(temp_table_cell);
        }
        table_color_body.appendChild(temp_table_row);
    }
    table_color_select.appendChild(table_color_body);
    div.appendChild(table_color_select);

    var apply_button = document.createElement('button');
    apply_button.appendChild(document.createTextNode('Применить'));
    apply_button.setAttribute('id', 'submit');
    div.appendChild(apply_button);
    apply_button.onclick = function() {
        //debugger;
        if(sel_obj.nodeType==document.TEXT_NODE || !sel_obj.nodeType)
        {
            doc.execCommand('ForeColor',false,color_label.childNodes[1].value)
        }
        else
        {
            sel_obj.style.color = color_label.childNodes[1].value;
        }
    //destroy_window(win_id);
    };
}

cHydraWysiwygEditor.prototype.set_bgcolor = function()
{
    var elem = this.get_selected_object();
    if (elem)
    {
        var call_back_params = Array();
        call_back_params['selected_object'] = elem;
        call_back_params['window_id'] = 'set_element_bgcolor_window';
        call_back_params['iframe'] = this.get_iframe_elem();
        var win = new cHydraWindow(
            'set_element_bgcolor_window',
            'Свойства цвета',
            false,
            false,
            this.callback_bgcolor_win,
            call_back_params);
    }
}
cHydraWysiwygEditor.prototype.callback_bgcolor_win = function(container_id, callback_params)
{
    //alert(container_id)
    var sel_obj = callback_params['selected_object'];
    var win_id = callback_params['window_id'];
    var doc = callback_params['iframe'].contentWindow.document;

    var div = document.getElementById(container_id);
    var bgcolor_label =create_label_input('bg_color', 'Фон', '');
    div.appendChild(bgcolor_label);
    var table_color_select = document.createElement('TABLE');
    table_color_select.setAttribute('id', 'table_color_select');
    //div_color_select.style.display = 'table';
    //table_color_select.className = 'color_table';
    //alert(Math.floor(0.5)*3);
    var table_color_body = document.createElement('TBODY');
    for(var i=0;i<12;i++)
    {
        var temp_table_row = document.createElement('TR');
        //temp_div_row.style.display = 'table-row';
        temp_table_row.className = 'color_table_row';
        //temp_div_row.className='div_color_select_row';
        for(var j=0;j<18;j++)
        {
            var temp_table_cell = document.createElement('TD');


            //temp_div.className='div_color_select_cell';
            //temp_table_cell.style.height = '10px';
            //temp_table_cell.style.width = '10px';
            //temp_div.style.display = 'table-cell';
            temp_table_cell.className = 'color_table_cell';
            temp_table_cell.style.backgroundColor=get_color_from(i,j);
            temp_table_cell.i=i;
            temp_table_cell.j=j;
            temp_table_cell.onclick = function()
            {
                bgcolor_label.childNodes[1].value=get_color_from(this.i,this.j);
            };
            //temp_div.appendChild(document.createElement('br'))
            temp_table_row.appendChild(temp_table_cell);
        }
        table_color_body.appendChild(temp_table_row);
    }
    table_color_select.appendChild(table_color_body);
    div.appendChild(table_color_select);

    var apply_button = document.createElement('button');
    apply_button.appendChild(document.createTextNode('Применить'))
    apply_button.setAttribute('id', 'submit');
    div.appendChild(apply_button);

    apply_button.onclick = function() {
        if(sel_obj.nodeType==document.TEXT_NODE)
        {
            if(navigator.appName == 'Microsoft Internet Explorer')
            {
                doc.execCommand('BackColor',false,bgcolor_label.childNodes[1].value)
            }
            if(navigator.appName == 'Netscape')
            {
                doc.execCommand('hilitecolor',false,bgcolor_label.childNodes[1].value)
            }

        }
        else
        {
            sel_obj.style.backgroundColor = bgcolor_label.childNodes[1].value;
        }

    //destroy_window(win_id);
    }
}

get_color_from = function(i,j)
{
    //debugger;
    var rcolor;
    var bcolor;
    var gcolor;
    if(i%2==0)
        rcolor = (Math.floor(j / 6))*3;
    else
        rcolor = (Math.floor(j / 6))*3+9;
    bcolor = (Math.floor(i / 2))*3;
    gcolor = (j % 6)*3;

    var color ='#';
    
    color+=Number(rcolor).toString(16);
    color+=Number(rcolor).toString(16);
    color+=Number(bcolor).toString(16);
    color+=Number(bcolor).toString(16);
    color+=Number(gcolor).toString(16);
    color+=Number(gcolor).toString(16);
    
    return color;
}

cHydraWysiwygEditor.prototype.add_image = function()
{
    file_manager.set_target_elem_id('iframe');
    var win = new cHydraWindow('file_manager', 'Файловый менеджер', 'file_manager_ws');
}

cHydraWysiwygEditor.prototype.set_html_mode = function()
{
    var html = this.get_html_source();
    
    var iframe_elem = document.getElementById(this.iframe_id);
    iframe_elem.style.display = 'none';
    var textarea_elem = document.getElementById(this.name+'_textarea');
    textarea_elem.style.display = 'block';
    textarea_elem.value = html;

    this.mode = 'html';
    draw_message('wysiwyg.mode', 'HTML');
}

/**
 * Устанавливает режим визуализации.
 */
cHydraWysiwygEditor.prototype.set_visual_mode = function()
{
    var iframe_elem = document.getElementById(this.iframe_id);
    iframe_elem.style.display = 'block';

    var textarea_elem = document.getElementById(this.name+'_textarea');
    textarea_elem.style.display = 'none';
    var html = textarea_elem.value;

    this.set_html(html);
    this.mode = 'visual';
    draw_message('wysiwyg.mode', 'Design Mode');
}

/**
 *  Заносит в редактор текст в виде html.
 *  @param String html
 *  @return boolean
 */
cHydraWysiwygEditor.prototype.set_html = function(html)
{
     // debugger;
    iframe_elem = document.getElementById(this.iframe_id);
    if (!iframe_elem)
    {
        return false;
    }
    var doc = this.get_iframe_doc(iframe_elem);
    if (!doc)
    {
        return false;
    }
    
 
    //html = html.replace(/(\[n\])+/i, "666");
    //html = html.replace(/(\[r\])+/i, "777");
    
     
    //alert(doc.body);
    //alert(iframe_elem.contentWindow.document.body);
    // iframe_elem.contentWindow.document.designMode = 'on';
    //alert(iframe_elem.contentWindow.document);
    //alert(iframe_elem.contentWindow.document.body);
    //iframe_elem.contentWindow.document.body = iframe_elem.contentWindow.document.createElement ('BODY');
    try{
     iframe_elem.contentWindow.document.execCommand("useCSS", false, true)
    }catch(e){}
    //alert(iframe_elem.contentWindow.document.body);
    //alert(doc.body);
    //debugger;
    hydra_editor_content = html;
    //iframe_elem.contentWindow.document.write('<body></body>');
    //alert(hydra_editor_content);
    //alert(iframe_elem.contentWindow.document.body);
        //iframe_elem.contentWindow.document.body=iframe_elem.contentWindow.document..createElement('BODY');
        //iframe_elem.contentWindow.document.body.innerHTML=hydra_editor_content;
    hydra_editor_onload = function()
    {
        
        iframe_elem.contentWindow.document.write('<head></head><body>'+hydra_editor_content+'</body>');
        //alert(hydra_editor_content)
        //iframe_elem.contentWindow.document.body.innerHTML=hydra_editor_content;
        iframe_elem.contentWindow.document.designMode = 'on';
        hydra_wysiwyg_editor.register_selection_event();

        // Создаем css в редакторе
        
        var links = document.getElementsByTagName('link');
        var links_count = links.length;
        //for (i = 0; i < links_count; i++)
        //{
            var cssLink = iframe_elem.contentWindow.document.createElement("link");
            cssLink.href = '';
            cssLink .rel = "stylesheet";
            cssLink .type = "text/css";
            cssLink = links.item(links_count-1).cloneNode(false);
            //alert(links.item(links_count-1).innerHTML);
            //alert(iframe_elem.contentWindow.document.getElementsByTagName('BODY').length)
            //alert(iframe_elem.contentWindow.document.getElementsByTagName('HEAD')[0])
            //alert(iframe_elem.contentWindow.he)
            //iframe_elem.contentWindow.document.getElementsByTagName('HEAD')[0].appendChild(cssLink);
            //iframe_elem.contentWindow.document.getElementsByTagName('HEAD')[0].appendChild(iframe_elem.contentWindow.document.createTextNode('2'));
            //iframe_elem.contentWindow.document.getElementsByTagName('HEAD')[0].appendChild(cssLink);
            iframe_elem.contentWindow.document.getElementsByTagName('head')[0].appendChild(cssLink);
        //}

        //iframe_elem.contentWindow.document.getElementsByTagName('body')[0].style.padding = '20px';

        /*var base = iframe_elem.contentWindow.document.createElement('BASE');
        base.href = PROJECT_URL;
        iframe_elem.contentWindow.document.getElementsByTagName('head')[0].appendChild(base);*/
    };


    


    hydra_add_event(iframe_elem.contentWindow, 'load', hydra_editor_onload);
    //iframe_elem.contentWindow.document.body.load = function() {alert("fuck")};
    var iframe_doc = this.get_iframe_doc();
    if (iframe_doc.body)
        iframe_doc.body.innerHTML = html;
    //iframe_elem.contentWindow.document.body.innerHTML = html;
    return;

    wysiwyg_textarea2iframe(this.textarea_id, this.iframe_id);
    return;

    //alert(html);
    //html = '<html><head><base href="http://192.168.1.100:81/hydra/nonstop/"></head><body><br/>'+html+'</body></html>';

    doc.open();
    doc.write(html);
    doc.close();
    return;
    
    doc.open();
    if (html=='')
    html ='<br/>';
    doc.write(html);


    // -----------------------------------exp
    //var doc = this.get_doc();

    var base = doc.createElement('BASE');
    base.href = PROJECT_URL;
    doc.getElementsByTagName('head')[0].appendChild(base);
    

    /* var style = doc.createElement('link');
    style.rel = 'stylesheet';
    style.type = 'text/css';
    style.href = 'http://localhost/hydra/it/workspace/it/css/default.css';
    doc.getElementsByTagName('head')[0].appendChild(style);
*/
    // -----------------------------------/exp

    doc.body.innerHTML = html;

    doc.body.style.background = 'white';
    doc.close();


    return true;
    };

    // Копирование текста из textarea в iframe
    function wysiwyg_textarea2iframe(textarea_id, iframe_id){
        //debugger;
        try{
            var iframe =  document.getElementById(iframe_id);
            var doc = iframe.contentWindow.document;
            doc.designMode = 'on';

            //doc.body.innerHTML = 'serg';
            if(navigator.appName == 'Microsoft Internet Explorer')
            {
            
                var iframe_win = document.getElementById(iframe_id).contentWindow;
                if (!iframe_win.document.body )
                {
                    iframe_win.document.open();
                    iframe_win.document.write('1');
                }
                iframe_win.document.body.innerHTML = document.getElementById(textarea_id).value;
            }
            if(navigator.appName == 'Netscape')
            {
            
                //document.getElementById(iframe_id).contentWindow.document.write("хуй");
            
                document.getElementById(iframe_id).contentWindow.document.body.innerHTML = document.getElementById(textarea_id).value;
            
            }
      
            var links = document.getElementsByTagName('link');
            var links_count = links.length;
            for (i = 0; i < links_count; i++)
            {
            //document.getElementById(iframe_id).contentWindow.document.getElementsByTagName('head')[0].appendChild(links.item(i));
            }
        //document.getElementById(iframe_id).contentWindow.document.getElementsByTagName('head')[0].appendChild(links.item(links_count-1));
        } catch(e) {
       
            setTimeout("wysiwyg_textarea2iframe('" + textarea_id + "', '" + iframe_id + "')", 0);
        }
    }


    cHydraWysiwygEditor.prototype.insert_table = function()
    {
        var win = new cHydraWindow(
            'insert_table_properties',
            'Свойства таблицы',
            350,
            350,
            100,
            100,
            false,
            false,
            false);
        //debugger;

        //insert_table_properties = new cTabs(win.get_container_id(), 'insert_table_properties', 350, 350);
        var insert_table_properties = new cTabs(win.get_container_id(), 'insert_table_properties', 350, 350);
    
        //debugger;
        //insert_table_properties = new cTabs("insert_table_properties_container", 'insert_table_properties', 350, 350);
        insert_table_properties.add('Основные', false, '', null,'');
        // Открываем первую по счету вкладку
        insert_table_properties.open_tab(0);
        //инициализируем окошко для
        this.insert_table_init('insert_table_properties');


    }

    cHydraWysiwygEditor.prototype.insert_table_init = function(win_id){
        var fieldset = document.createElement('fieldset');
        fieldset.setAttribute('id', 'properties_fieldset');
        var legend = document.createElement('legend');
        legend.appendChild(document.createTextNode('Настройки'));
        fieldset.appendChild(legend);
        document.getElementById(win_id+"[items][0]").appendChild(fieldset);

        var ul = new cHydraHTMLUl('properties_fieldset');
        //cols
        var cols_label = create_label_input('table_cols','Строки:',3);
        ul.add_li(cols_label);
        //rows
        var rows_label = create_label_input('table_rows','Колонки:',3);
        ul.add_li(rows_label);
        //border-style
        var border_style_label = create_label('Стиль границ:','border_style_id');
        ul.add_li(border_style_label);
        var border_style_select = new cHydraHTMLSelect('border_style_id');
        border_style_select.add_option('none', 'нет');
        border_style_select.add_option('hidden', 'скрытая');
        border_style_select.add_option('hidden', 'скрытая');
        border_style_select.add_option('dotted','точечная');
        border_style_select.add_option('dashed','пунктирная');
        border_style_select.add_option('solid','солидная');
        border_style_select.add_option('double','двойная');
        border_style_select.add_option('groove','грув');
        border_style_select.add_option('ridge','ридж');
        border_style_select.add_option('inset','внутрь');
        border_style_select.add_option('outset','наружу');
        //border width
        var border_width_label = create_label('Толщина границ:','border_width_id');
        ul.add_li(border_width_label);
        var border_width_select = new cHydraHTMLSelect('border_width_id');
        border_width_select.add_option('thin','тонкая');
        border_width_select.add_option('medium','средняя');
        border_width_select.add_option('thick','толстая');
        //cellspacing
        var cellspacing_label = create_label_input('table_cellspacing', 'Внутренний отступ:', '');
        ul.add_li(cellspacing_label);
        //cellpadding
        var cellpadding_label = create_label_input('table_cellpadding', 'Внешний отступ:', '');
        ul.add_li(cellpadding_label);
        //align
        var align_label = create_label('Форматирование:', 'align_id');
        ul.add_li(align_label);
        var align_select = new cHydraHTMLSelect('align_id');
        align_select.add_option('left','влево');
        align_select.add_option('center','в центр');
        align_select.add_option('right','вправо');
        //create button
        var create_table_button = document.createElement('button');
        create_table_button.appendChild(document.createTextNode('Cоздать таблицу'));
        create_table_button.setAttribute('id', 'submit');
        document.getElementById(win_id+"[items][0]").appendChild(create_table_button);
        var cwin = this.get_iframe_elem().contentWindow;
        var editor = this;
        create_table_button.onclick = function() {
            var table = document.createElement('table');

            for(var i = 0;i<cols_label.childNodes[1].value;i++){
                var tr = document.createElement('tr');
                for(var j = 0;j<rows_label.childNodes[1].value;j++){
                    var td = document.createElement('td');
                    td.appendChild(document.createTextNode('col ' + (i+1) + ' ' + (j+1)));
                    tr.appendChild(td);
                }
                table.appendChild(tr);
            }
            table.style.borderStyle = border_style_label.childNodes[1].value;
            table.style.borderWidth = border_width_label.childNodes[1].value;
            table.setAttribute('cellspacing', cellspacing_label.childNodes[1].value);
            table.setAttribute('cellpadding', cellpadding_label.childNodes[1].value);
            table.setAttribute('align', align_label.childNodes[1].value);

            editor.insert_node_in_selection(table);
        

            destroy_window(win_id);

        }

    }

    cHydraWysiwygEditor.prototype.get_textarea_html = function()
    {
        return document.getElementById(this.textarea_id).value;
    }
    
    cHydraWysiwygEditor.prototype.set_textarea_html = function(html)
    {
        html = str_replace('[n]', "\n", html);
        html = str_replace('[r]', "\r", html);
        //html = html.replace(new RegExp ('\[n\]', 'g'), "666");
        //html = html.replace(/\[r\]/, "777");
         document.getElementById(this.textarea_id).value = html;
    }


    cHydraWysiwygEditor.prototype.table_properties = function()
    {

        var cwin = this.get_iframe_elem().contentWindow;
        var selection = cwin.getSelection();
        var temp_node = selection.focusNode;
        var this_table = null;
        var this_tr = null;
        var this_td = null;
        while(temp_node!==null)
        {
            if(temp_node.nodeName=='TABLE')
            {
                this_table = temp_node;
                break;
            }
            if(temp_node.nodeName=='TR')
                this_tr = temp_node;

            if(temp_node.nodeName=='TD')
                this_td = temp_node;

            temp_node = temp_node.parentNode;
        }
        if(this_table == null || this_tr == null || this_td == null) return false;

        var win = new cHydraWindow(
            'table_properties',
            'Свойства таблицы',
            370,
            400,
            100,
            100,
            false,
            false,
            false);
        var js_code = '';
        table_properties = new cTabs(win.get_container_id(), 'table_properties', 370, 400);

        table_properties.add('Общие', false, '', null,js_code);

        // Открываем первую по счету вкладку
        table_properties.open_tab(0);

        this.properties_table_init('table_properties', this_table, this_tr, this_td);


    }

    cHydraWysiwygEditor.prototype.properties_table_init = function(win_id, this_table, this_tr, this_td)
    {
        var fieldset = document.createElement('fieldset');
        fieldset.setAttribute('id', 'border_style');
        var legend = document.createElement('legend');
        legend.appendChild(document.createTextNode('Стиль Границ'));
        fieldset.appendChild(legend);
        document.getElementById(win_id+"[items][0]").appendChild(fieldset);

        var ul = new cHydraHTMLUl('border_style');

        //border-left-style
        var border_left_style_label = create_label('Левая граница:','border_left_style_id');
        ul.add_li(border_left_style_label);
        var border_left_style_select = new cHydraHTMLSelect('border_left_style_id');
        border_left_style_select.add_option('none', 'нет');
        border_left_style_select.add_option('hidden', 'скрытая');
        border_left_style_select.add_option('hidden', 'скрытая');
        border_left_style_select.add_option('dotted','точечная');
        border_left_style_select.add_option('dashed','пунктирная');
        border_left_style_select.add_option('solid','солидная');
        border_left_style_select.add_option('double','двойная');
        border_left_style_select.add_option('groove','грув');
        border_left_style_select.add_option('ridge','ридж');
        border_left_style_select.add_option('inset','внутрь');
        border_left_style_select.add_option('outset','наружу');
        border_left_style_select.set_selected(this_table.style.borderLeftStyle);
        //border-right-style

        var border_right_style_label = create_label('Правая граница:','border_right_style_id');
        ul.add_li(border_right_style_label);
        var border_right_style_select = new cHydraHTMLSelect('border_right_style_id');
        border_right_style_select.add_option('none', 'нет');
        border_right_style_select.add_option('hidden', 'скрытая');
        border_right_style_select.add_option('hidden', 'скрытая');
        border_right_style_select.add_option('dotted','точечная');
        border_right_style_select.add_option('dashed','пунктирная');
        border_right_style_select.add_option('solid','солидная');
        border_right_style_select.add_option('double','двойная');
        border_right_style_select.add_option('groove','грув');
        border_right_style_select.add_option('ridge','ридж');
        border_right_style_select.add_option('inset','внутрь');
        border_right_style_select.add_option('outset','наружу');
        border_right_style_select.set_selected(this_table.style.borderRightStyle);
        //border-top-style
        var border_top_style_label = create_label('Верхняя граница:','border_top_style_id');
        ul.add_li(border_top_style_label);
        var border_top_style_select = new cHydraHTMLSelect('border_top_style_id');
        border_top_style_select.add_option('none', 'нет');
        border_top_style_select.add_option('hidden', 'скрытая');
        border_top_style_select.add_option('hidden', 'скрытая');
        border_top_style_select.add_option('dotted','точечная');
        border_top_style_select.add_option('dashed','пунктирная');
        border_top_style_select.add_option('solid','солидная');
        border_top_style_select.add_option('double','двойная');
        border_top_style_select.add_option('groove','грув');
        border_top_style_select.add_option('ridge','ридж');
        border_top_style_select.add_option('inset','внутрь');
        border_top_style_select.add_option('outset','наружу');
        border_top_style_select.set_selected(this_table.style.borderTopStyle);
        //border-bottom-style
        var border_bottom_style_label = create_label('Нижняя граница:','border_bottom_style_id');
        ul.add_li(border_bottom_style_label);
        var border_bottom_style_select = new cHydraHTMLSelect('border_bottom_style_id');
        border_bottom_style_select.add_option('none', 'нет');
        border_bottom_style_select.add_option('hidden', 'скрытая');
        border_bottom_style_select.add_option('hidden', 'скрытая');
        border_bottom_style_select.add_option('dotted','точечная');
        border_bottom_style_select.add_option('dashed','пунктирная');
        border_bottom_style_select.add_option('solid','солидная');
        border_bottom_style_select.add_option('double','двойная');
        border_bottom_style_select.add_option('groove','грув');
        border_bottom_style_select.add_option('ridge','ридж');
        border_bottom_style_select.add_option('inset','внутрь');
        border_bottom_style_select.add_option('outset','наружу');
        border_bottom_style_select.set_selected(this_table.style.borderBottomStyle);

        var fieldset = document.createElement('fieldset');
        fieldset.setAttribute('id', 'border_width_style');
        var legend = document.createElement('legend');
        legend.appendChild(document.createTextNode('Толщина Границ'));
        fieldset.appendChild(legend);
        document.getElementById(win_id+"[items][0]").appendChild(fieldset);

        ul = new cHydraHTMLUl('border_width_style');

        //border-left-width
        var border_left_width_style_label = create_label('Левая граница:', 'border_left_width_style_id');
        ul.add_li(border_left_width_style_label);
        var border_left_width_style_select = new cHydraHTMLSelect('border_left_width_style_id');
        border_left_width_style_select.add_option('thin','тонкая');
        border_left_width_style_select.add_option('medium','средняя');
        border_left_width_style_select.add_option('thick','толстая');
        border_left_width_style_select.set_selected(this_table.style.borderLeftWidth);

        //border-right-width
        var border_right_width_style_label = create_label('Левая граница:', 'border_right_width_style_id');
        ul.add_li(border_right_width_style_label);
        var border_right_width_style_select = new cHydraHTMLSelect('border_right_width_style_id');
        border_right_width_style_select.add_option('thin','тонкая');
        border_right_width_style_select.add_option('medium','средняя');
        border_right_width_style_select.add_option('thick','толстая');
        border_right_width_style_select.set_selected(this_table.style.borderRightWidth);
        //border-top-width
        var border_top_width_style_label = create_label('Левая граница:', 'border_top_width_style_id');
        ul.add_li(border_top_width_style_label);
        var border_top_width_style_select = new cHydraHTMLSelect('border_top_width_style_id');
        border_top_width_style_select.add_option('thin','тонкая');
        border_top_width_style_select.add_option('medium','средняя');
        border_top_width_style_select.add_option('thick','толстая');
        border_top_width_style_select.set_selected(this_table.style.borderTopWidth);
        //border-bottom-width
        var border_bottom_width_style_label = create_label('Левая граница:', 'border_bottom_width_style_id');
        ul.add_li(border_bottom_width_style_label);
        var border_bottom_width_style_select = new cHydraHTMLSelect('border_bottom_width_style_id');
        border_bottom_width_style_select.add_option('thin','тонкая');
        border_bottom_width_style_select.add_option('medium','средняя');
        border_bottom_width_style_select.add_option('thick','толстая');
        border_bottom_width_style_select.set_selected(this_table.style.borderBottomWidth);

        fieldset = document.createElement('fieldset');
        fieldset.setAttribute('id', 'other_properties');
        legend = document.createElement('legend');
        legend.appendChild(document.createTextNode('Другие настройки'));
        fieldset.appendChild(legend);
        document.getElementById(win_id+"[items][0]").appendChild(fieldset);

        ul = new cHydraHTMLUl('other_properties');


        //cellspacing
        var cellspacing_label = create_label_input('table_cellspacing', 'Внутренний отступ', this_table.cellSpacing);
        ul.add_li(cellspacing_label);
        //cellpadding
        var cellpadding_label = create_label_input('table_cellpadding', 'Внешний отступ', this_table.cellPadding);
        ul.add_li(cellpadding_label);
        //align
        var align_label = create_label('Левая граница:', 'align_id');
        ul.add_li(align_label);
        var align_select = new cHydraHTMLSelect('align_id');
        align_select.add_option('left','влево');
        align_select.add_option('center','в центр');
        align_select.add_option('right','вправо');
        align_select.set_selected(this_table.getAttribute('align'));
        //apply button
        var table_apply_changes_button = document.createElement('button');
        table_apply_changes_button.appendChild(document.createTextNode('обновить'))
        table_apply_changes_button.setAttribute('id', 'submit');
        document.getElementById(win_id+"[items][0]").appendChild(table_apply_changes_button);
        table_apply_changes_button.onclick = function() {
            this_table.style.borderLeftStyle = border_left_style_label.childNodes[1].value;
            this_table.style.borderRightStyle = border_right_style_label.childNodes[1].value;
            this_table.style.borderTopStyle = border_top_style_label.childNodes[1].value;
            this_table.style.borderBottomStyle = border_bottom_style_label.childNodes[1].value;

            this_table.style.borderLeftWidth = border_left_width_style_label.childNodes[1].value;
            this_table.style.borderRightWidth = border_right_width_style_label.childNodes[1].value;
            this_table.style.borderTopWidth = border_top_width_style_label.value;
            this_table.style.borderBottomWidth = border_bottom_width_style_label.value;

            this_table.setAttribute('cellspacing', cellspacing_label.childNodes[1].value);
            this_table.setAttribute('cellpadding', cellpadding_label.childNodes[1].value);
            this_table.setAttribute('align', align_label.childNodes[1].value);
            destroy_window('table_properties');
        }
    }


    cHydraWysiwygEditor.prototype.clean_html = function()
    {

        //var html = this.get_html_source();

        //debugger;
        cleaner = new cHTMLCleaner();
        var doc = this.get_iframe_doc( this.get_iframe_elem() );
        cleaner.clean_tree(doc.body, false);
        alert('complete');
        return;
        html = clean_html_code(html);
        alert(html);
        this.set_html(html);
    }

    hydra_wysiwyg_editor = new cHydraWysiwygEditor();



    function load_wysiwyg_editor(value_elem_id, src_elem_id, name)
    {
        //debugger;
        hydra_wysiwyg_editor.set_storage_name(name);
        hydra_wysiwyg_editor.draw(value_elem_id, src_elem_id);
    }

    function draw_hydra_wysiwyg_editor(value_elem_id)
    {

        var value_elem = document.getElementById(value_elem_id);
        var content = '';
        if (value_elem)
        {

            content = value_elem.value;
        }
        var window_container_id = create_window('test_window', 'Редактор', 600, 450, 10, 10);
        hydra_wysiwyg_editor.draw(window_container_id, value_elem_id);
    }