var cLang = function()
{
    this.lang_code = false;
}

cLang.prototype.set_active_lang = function(lang_code)
{
    this.lang_code = lang_code;
    
    var params = new Array();
    params['s_action'] = 'set_lang';
    params['s_lang_code'] = lang_code;
    call_ajax('lang_state', 'message_box', params); 
}

lang = new cLang();

/**
 * Регистрация события для заданного элемента.
 * @params Object obj объект для которого мы регистрируем событие
 * @params String event_name имя события
 * @param Function fn функция обработчик события.
 */
function hydra_add_event(obj, event_name, fn)
{
        //debugger;
        if (obj.addEventListener)
        {
            // DOM level 2
            obj.addEventListener( event_name, fn, false );
        }
        else if(obj.attachEvent)
        {
            // IE
            obj.attachEvent( 'on' + event_name, fn );
        }
        else
        {
           obj['on' + event_name] = fn;
        }
 }


 // удаление
 /**
  * Удаление зарегистрированного обработчика.
  * @param Object obj объект к которому мы атачим эвент.
  * @param String event_name имя события
  * @param Function fn функция обработки события
  */
 function hydra_remove_event(obj, event_name, fn)
 {
        if (obj.removeEventListener)
        {
                obj.removeEventListener( event_name, fn, false );
        }
        else if (obj.detachEvent)
        {
                obj.detachEvent( 'on' + event_name, fn );
        } 
        else
        {
                obj['on' + event_name] = null;
        }
 }




var cOnLoadManager = function()
{
    this.functions = new Array();
}

cOnLoadManager.prototype.attach = function(function_item)
{
    this.functions[this.functions.length]=function_item;
}
cOnLoadManager.prototype.run_on_load_functions = function()
{

    for(var i=0;i<this.functions.length;i++)
        {
            this.functions[i]();
        }

}


on_load_manager = new cOnLoadManager();

hydra_add_event(window, 'load', function(){on_load_manager.run_on_load_functions()});


/**
 * делает объект dragndrop.
 * @param String elem_id имя события
 */
function make_elem_drag_n_drop(element)
{
   //var element = document.getElementById(elem_id)
   //debugger;
   element.onmousedown= function (event){
        //debugger;
        if (!event)event=window.event;
        this.x0 = event.clientX;
        this.y0 = event.clientY;
        this.divX0 = parseInt(element.style.left);
        this.divY0 = parseInt(element.style.top);
        this.moveState = true;
    };
    element.onmouseup = function (event) {
          //debugger;
            if (!event)event=window.event;
           this.moveState = false;
    };

    element.onmousemove = function(event) {
        //debugger;
        if (!event)event=window.event;
        if (this.moveState) {
            this.style.left = element.divX0 + event.clientX- element.x0 + 'px';
            this.style.top  = element.divY0 + event.clientY - element.y0 + 'px';
        }
    };
    /*element.onmousedown= function (event){
        if (!event)event=window.event;
        alert(1);
    };*/
}

function make_elem_drag_n_drop_by_id(elem_id)
{
   var element = document.getElementById(elem_id)
   make_elem_drag_n_drop(element);
}
/**
* Возвращает значения из элементов ввода, содержащихся
* @param String container_id идентификатор контейнера, в рамках которого определяются значения элементов ввода.
* @return Array
*/
function get_input_values(container_id)
{
    var params = new Array();

    var container = document.getElementById( container_id );


	var collection = container.getElementsByTagName('select');
	if (collection) 
	{
		for (i = 0; i < collection.length; i++) 
		{
			params[collection[i].name] = collection[i].value;
		}
	}


	var validate_ok = true;
	
	
	var collection = container.getElementsByTagName('input');
	if (collection) 
	{
            for (i = 0; i < collection.length; i++) {
			
		if (!form_validator.validate( collection[i] )) {
                    validate_ok = false;
                    var error_container_id = form_validator.get_error_container_id();
                    var error_container = document.getElementById( error_container_id );
                    if (error_container)
                        error_container.innerHTML = form_validator.get_message();
                   // else
                        //alert('Немогу найти контейнер '+form_validator.get_error_container_id());
		}
                else{
                    var error_container = document.getElementById(form_validator.get_error_container_id());
                    if (error_container)
                        error_container.innerHTML = form_validator.get_message();
                   // else
                        //alert('Немогу найти контейнер '+form_validator.get_error_container_id());
                }

			//alert('name='+collection[i].name+'type='+collection[i].type);	
			// обработка чекбоксов
			if (collection[i].type == 'checkbox')
			{
				var c = collection[i].getAttribute('confirm');
				//alert('c is '+c+' for type'+collection[i].type+' and name '+collection[i].name);
				if (collection[i].getAttribute('confirm')==null)
				{
					if (collection[i].checked) 
					{
						params[collection[i].name] = 1;
					}
					else 
					{
						
						if (collection[i].type=='checkbox')
						{
							//alert('set for name '+collection[i].name+' and type'+collection[i].type+' to zero');
							params[collection[i].name] = 0;
						}
						
					}

				}
			}


			if (collection[i].type == 'radio') 
			{
				if (collection[i].checked) 
				{
					params[collection[i].name] = collection[i].value;
				}
			}

			if (collection[i].type == 'text') 
			{
				/* debug
				*/
				//var dis = collection[i].getAttribute('disabled');
				//alert('ff disabled for : '+collection[i].name+' is '+dis);


				//if (collection[i].getAttribute('disabled')==null || collection[i].getAttribute('disabled')=='false')
				//alert('check :'+collection[i].name);
				if ( !is_elem_disabled( collection[i] ) )
				{
					//alert('ff value is '+collection[i].value);
					//var val = collection[i].getAttribute('value');
					//alert('for stupid ie value may be like '+val);
					
					params[collection[i].name] = collection[i].value;
					//alert('put to params name '+collection[i].name+' value '+collection[i].value);
				}
			}

			if (collection[i].type == 'hidden') 
			{
				//alert('set hidden '+collection[i].name);
				params[collection[i].name] = collection[i].value;
			}
			

			//  && (collection[i].getAttribute('confirm')==null)
			if ((collection[i].type == 'password') && (!collection[i].disabled)) 
			{
				params[collection[i].name] = collection[i].value;

				var confirm_elem_id = collection[i].getAttribute('confirm');
				if (confirm_elem_id)
				{
					var pass_value = collection[i].value;
					var confirm_elem = document.getElementById(confirm_elem_id);
					if (confirm_elem)
					{
						var confirm_value = confirm_elem.value; // getAttribute('value');
						if (confirm_value)
						{
							if (pass_value != confirm_value)
							{
								validate_ok = false;
								alert('Введенные пароли не совпадают.');
							}
						}
					}
				}
			}


		}

	}
	
	
	
	
	
	
	
	
	
	
	

	var collection = container.getElementsByTagName('textarea');
	for (i = 0; i < collection.length; i++) 
    {
		if (!is_elem_disabled(collection[i]))
		{
			params[collection[i].name] = collection[i].value;
		}
	}

	if (!validate_ok)
	{
		return false;
	}

	/*for (var HashKey in params)
	{ 
	   param_name  = HashKey; 
	   param_value = params[HashKey];
	   alert('name = '+param_name+' value '+param_value);
    }*/
    return params;
}

function is_elem_disabled(elem)
{
	//alert('try to check '+elem.name);
	var dis = elem.getAttribute('disabled');
	if (dis==true)
	{
		return true;
	}

// this is checking for firefox
	if (dis=='true')
	{
		return true;
	}

	return false;
	//alert('check disabled attribute in function '+dis);
/*	alert('check '+elem.name+' like bool for '+dis);
	if (dis==false)
	{
		alert('like bool is enabled');
	}
	else 
	{
		alert('like bool is disabled');
	}
*/
	if (elem.getAttribute('disabled')==null || elem.getAttribute('disabled')=='false')
	{
		alert('found like enabled');
		return false;
	}
	alert('found like disabled');
	return true;
}

function set_conatiner_elements_disabled_value(container_id, disabled)
{
  
 
	var container = document.getElementById( container_id );
    if (!container)
        return false;
        
    var collection = container.getElementsByTagName('input');
    if (!collection)
        return false;
        
    for (i = 0; i < collection.length; i++) 
    {
        collection[i].disabled = disabled;
        
        if (disabled)
          collection[i].setAttribute('disabled', 'true');
        else   
          collection[i].removeAttribute('disabled');
    }        

	var collection = container.getElementsByTagName('textarea');
    if (!collection)
        return false;
        
    for (i = 0; i < collection.length; i++) 
    {
        collection[i].disabled = disabled;
        
        if (disabled)
          collection[i].setAttribute('disabled', 'true');
        else   
          collection[i].removeAttribute('disabled');
    }        
    
    return true;	
}

function clear_content()
{
	return clear_element_content('content');
}

function clear_element_content(elem_id)
{
	var elem = document.getElementById( elem_id );
	if (elem)
	{
		elem.innerHTML = '';
		return true;
	}
	return false;
}

function clean_input_values(container_id)
{
    var container = document.getElementById( container_id );

	var collection = container.getElementsByTagName('select');
	if (collection)
	{
		for (i = 0; i < collection.length; i++)
		{
			collection[i].selectedIndex = 0;
		}
	}

	var collection = container.getElementsByTagName('input');
	if (collection)
	{
		for (i = 0; i < collection.length; i++)
		{

			// обработка чекбоксов
			if (collection[i].type == 'checkbox')
			{
                //collection[i].value = 0;
                collection[i].checked = false;
			}


			if (collection[i].type == 'radio')
			{
                collection[i].checked = false;
            }

			if (collection[i].type == 'text')
			{
                collection[i].value = '';
			}

			if (collection[i].type == 'hidden')
			{
                //наверно с ними ничего не делаем
				//collection[i].value;
			}


			if ((collection[i].type == 'password') && (!collection[i].disabled))
			{
				collection[i].value = '';

			}


		}

	}

	var collection = container.getElementsByTagName('textarea');
	for (i = 0; i < collection.length; i++)
    {
		collection[i].value = '';
	}

    return true;
}

/**
 *  Возвращает кож нажатой клавиши.
 */
function get_pressed_key_code(evt)
{
    var e = (window.event) ? window.event : evt;
    return e.keyCode;
}

function draw_message(container_id, message) {
    var elem = document.getElementById(container_id);
    if (elem) {
        elem.innerHTML = message;
    }
}

function display_message(container_id, message) {
    var elem = document.getElementById(container_id);
    if (elem) {
        elem.setAttribute('class', 'message');
        elem.innerHTML = message;
    }
}


function enable_element(elem_id) {
    var elem = document.getElementById(elem_id);
    if (elem) {
        elem.disabled = false;
    }
}

/**
 *  Дизейблит заданный элемент.
 *
 *  @param String elem_id идентификатор элемента.
 */
function disable_element(elem_id) {
    var elem = get_element(elem_id);
    if (elem) {
        elem.disabled = true;
    }
}

function get_element(elem_id) {
    var elem = document.getElementById(elem_id);
    return elem;
}

function hydra_get_elems_by_tag(container_id, tag_name) {
    var container = document.getElementById( container_id );
    if (container) {
        return container.getElementsByTagName(tag_name);
    }

    return false;
}


function hydra_create_span(caption, attr) {
    var span = document.createElement('span');
    span.appendChild(document.createTextNode(caption));
    

    // Обработка аттрибутов
    for (var attrName in attr) {
       span.setAttribute(attrName, attr[attrName]);
    }

    return span;
}

/**
 * Создает элемент.
 *
 * @param string tagName имя тега элемента
 * @param array attr атрибуты элемента
 *
 * @return Element || false
 */
function hydra_create_element(tagName, attr) {
    //debugger;
    var elem = document.createElement(tagName);
    if (!elem) {
        return false;
    }

    // Обработка аттрибутов
    for (var attrName in attr) {
       elem.setAttribute(attrName, attr[attrName]);
    }

    return elem;
}

function hydra_create_br() {
    return document.createElement('br');
}

function str_replace(search, replace, subject) {
    return subject.split(search).join(replace);
}

function hydra_elem_offset_x(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        while (1) {
            curleft+=obj.offsetLeft;
            if (!obj.offsetParent) {
                break;
            }
            obj=obj.offsetParent;
        }
    } else if (obj.x) {
        curleft+=obj.x;
    }
    return curleft;
}

function hydra_elem_offset_y(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (1) {
            curtop+=obj.offsetTop;
            if (!obj.offsetParent) {
                break;
            }
            obj=obj.offsetParent;
        }
    } else if (obj.y) {
        curtop+=obj.y;
    }
    return curtop;
}

function confirm_delete()
{
    return confirm("Вы уверены, что хотите удалить?");
}

/**
 * Функция применения изменений на формах.
 *
 * @param object btn кнопка применения изменений
 * @param string container_id контейнер формы
 * @param string plugin_name имя плагина стейта, который будет вызваться через ajax
 */
function apply_changes(btn, container_id, plugin_name)
{
    btn.disabled = true;
    draw_message(container_id+'.message', 'Изменения применяются');
    var params = get_input_values(container_id);

    call_ajax(plugin_name, container_id, params);
    btn.disabled = false;
    draw_message(container_id+'.message', 'Изменения применены.');
}

function hydra_refresh_page()
{
    location.reload();
}
/**
 * Регистрация события для заданного элемента.
 * @params Object obj объект для которого мы регистрируем событие
 * @params String event_name имя события
 * @param Function fn функция обработчик события.
 */
elementWrapper = function()
{

}
elementWrapper.set_attribute_for = function(obj, attribute_name, fn)
{
        if (obj)
        {
            //obj.addEventListener( event_name, fn, false );
            alert(obj)
        }
 }

function get_attribute_for (obj, attribute_name)
{
        
        //obj=window;
        if (obj)
        {
            //alert(typeof(obj))
            return obj.attribute_name;
            return obj.getAttribute(attribute_name);
        }
        return 0;
 }

elementWrapper.getScrollY = function ()
{
    var scrollY = 0;
    if (typeof window.pageYOffset == "number") {
        scrollY = window.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
        scrollY = document.documentElement.scrollTop;
    }  else if (document.body && document.body.scrollTop) {
        scrollY = document.body.scrollTop;
    } else if (window.scrollY) {
        scrollY = window.scrollY;
    }
    return scrollY;
}

var Hydra = function()
{
    //this.lang_code = false;
}

Hydra.prototype.get = function(elem_id)
{
    return document.getElementById(elem_id);
}

Hydra.prototype.open_url = function(url)
{
    document.location.href = url;
}

Hydra.prototype.clear_content = function(elem_id)
{
    this.get(elem_id).innerHTML = '';
}

Hydra.prototype.refresh = function()
{
    document.location.reload();
}


var hydra = new Hydra();
function activate_theme(theme_name, div_id)
{
    var params = Array();
    params['s_theme_name'] = theme_name;
    call_ajax('theme_state', div_id, params);
}

var cAuth = function()
{
	this.state_plugin_name = 'auth_state';
	this.auth_message_container = 'auth_message';
	this.auth_form_container = 'auth_visual';
}

cAuth.prototype.enter = function(btn)
{
    this.enter_custom(btn, this.auth_form_container, this.auth_message_container);
}

/**
 * Login.
 * 
 * @param Element btn
 * @param String form_container   
 */
cAuth.prototype.enter_custom = function(btn, form_container, message_container)
{
  //debugger;
	//btn.disabled = 'false';
	var container = document.getElementById( form_container );

	var collection = container.getElementsByTagName('input');

	var login = '';
	var password = '';
        var captcha = undefined;

	for (i = 0; i < collection.length; i++)
	{
            if (collection[i].name=='s_login')
            {
                    login = collection[i].value;
            }

            if (collection[i].name=='s_password')
            {
                    password = collection[i].value;
            }

            if (collection[i].name=='s_captcha')
            {
                    captcha = collection[i].value;
            }
	}

	var msg_container = document.getElementById( message_container );
	msg_container.innerHTML = 'Checking...';

	this.login(login, password, captcha);
}


cAuth.prototype.restore_enter_btn = function()
{
	var auth_enter_btn = document.getElementById( 'auth_enter' );
	if (auth_enter_btn)
	{
		auth_enter_btn.removeAttribute('disabled');
	}
        
        // Даем возможность вешаться на это событие
        observer.fireEvent('auth.restore_enter_btn');
}

/**
 * Авторизация пользователя в системе.
 *
 * @param string login
 * @param string password
 */
cAuth.prototype.login = function(login, password, captcha)
{
	var params = new Array();
	params['s_action'] = 'login';
	params['s_login'] = login;
	params['s_password'] = password;
        if (captcha != undefined) {
            params['s_captcha'] = captcha;
        }

	call_ajax(this.state_plugin_name, this.auth_message_container, params); 
}

cAuth.prototype.logout = function(login, password)
{
	var params = new Array();
	params['s_action'] = 'logout';

	call_ajax(this.state_plugin_name, this.auth_message_container, params); 
}

cAuth.prototype.show_logout_form = function()
{
	var params = new Array();
	call_ajax('auth_logout_form', this.auth_form_container, params); 
}

cAuth.prototype.show_login_form = function()
{
	clear_content();

	var params = new Array();
	call_ajax('auth_login_form', this.auth_form_container, params); 
}

function do_login(evt)
{
    
    if (get_pressed_key_code(evt) == 13)
    {
        //debugger;
        auth.enter(document.getElementById('auth_enter'));
    }
}



auth = new cAuth();

var CALENDAR_YEAR_FROM = 1970;
var CALENDAR_YEAR_TO = 2070;
var CALENDAR_DAYS_NAMES = new Array('Пн','Вт','Ср','Чт','Пт','Сб','Вс');
var CALENDAR_MONTHS_NAMES = new Array('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');



var cHydraCalendar = function()
{
    this.calendar_body = false;
    this.parent_elem = false;

    /**
     * Объект кнопки открытия редактора.
     *
     * @var object
     */
    this.this_obj = false;
}


cHydraCalendar.prototype.init = function()
{
    if (!this.exists())
    {
	this.calendar_body = this.create_calendar();    
    }
}

cHydraCalendar.prototype.exists = function()
{
    if (this.calendar_body)
    {
	return true;    
    }
    return false;
}


cHydraCalendar.prototype.create_calendar = function()
{
    var calendar_body = document.createElement('div');
    calendar_body.setAttribute('id','calendar');
    calendar_body.style.position = 'absolute';

	
    var button = document.createElement('button');
    button.className = 'return';
    button.innerHTML = 'Вставить';
    button.onclick = return_date_calendar;
    calendar_body.appendChild(button);

    var label = document.createElement('label');
    label.setAttribute('id','calendar_data_text');
    calendar_body.appendChild(label);

    var button = document.createElement('button');
    button.className = 'clear';
    button.innerHTML = 'Очистить';
    button.onclick = clear_date_calendar;
    calendar_body.appendChild(button);

    var button = document.createElement('button');
    button.innerHTML = 'X';
    button.onclick = close_calendar;
    calendar_body.appendChild(button);
    calendar_body.appendChild(document.createElement('br'));

    calendar_body.appendChild(this.create_select_month());

    calendar_body.appendChild(this.create_select_year());
    
        var input_hours = document.createElement('input');
		input_hours.className = 'calendar_hours';
		input_hours.id = 'calendar_hours';
		input_hours.onchange = select_hour_onchange;
		input_hours.setAttribute('maxlength', 2);
		input_hours.type = 'text';
		input_hours.name = 'hours';
		var input_minutes = document.createElement('input');
		input_minutes.className = 'calendar_minutes';
		input_minutes.id = 'calendar_minutes';
		input_minutes.onchange = select_minute_onchange;
		input_minutes.name = 'minutes';
		input_minutes.type = 'text';
		input_minutes.setAttribute('maxlength', 2);

		//div_time.className = 'calendar_time';
		//div_time.id = 'calendar_time';
        calendar_body.appendChild(input_hours);
		calendar_body.appendChild(document.createTextNode(':'));
		calendar_body.appendChild(input_minutes);
        //calendar_body.appendChild(div_time);
		
        calendar_body.appendChild(this.create_select_day());
		

		
	document.body.appendChild(calendar_body);
    //make_elem_drag_n_drop(calendar_body);
	return calendar_body;
}

cHydraCalendar.prototype.draw = function()
{
	this.calendar_body.style.display = 'block';

    this.calendar_body.style.left = hydra_elem_offset_x(this.this_obj) + this.this_obj.offsetWidth + 'px';
    this.calendar_body.style.top = hydra_elem_offset_y(this.this_obj) + 'px';
}

cHydraCalendar.prototype.set_date = function(year, month, day, hour, minute)
{
	this.calendar_body.setAttribute('year', year);
	this.calendar_body.setAttribute('month', month);
	this.calendar_body.setAttribute('day', day);
	this.calendar_body.setAttribute('hour', hour);
	this.calendar_body.setAttribute('minute', minute);
	
	this.refresh();
}

cHydraCalendar.prototype.close = function()
{
	this.calendar_body.style.display = 'none';
}

cHydraCalendar.prototype.refresh = function()
{
	
	//������� �������� ���������
	var year = this.calendar_body.getAttribute('year');
	var month = this.calendar_body.getAttribute('month');
	var day = this.calendar_body.getAttribute('day');
	var hour = this.calendar_body.getAttribute('hour');
	var minute = this.calendar_body.getAttribute('minute');

	//������������ �������� � ��������� �������
	var label = document.getElementById('calendar_data_text');

	
	label.innerHTML = this.get_date();

	//������������ �������� ����
	var select_year = document.getElementById('calendar_select_year');
	select_year.value = year;

	//������������ �������� ������
	var select_month = document.getElementById('calendar_select_month');
	select_month.value = month;
	
	//������� ���� ������ ��� ����
	select_day = document.getElementById('calendar_select_day');
	select_day.innerHTML = '';
	
	//������� � ���� ������ �������� (��� ������� �� ��������� � ����� ������ �� ������ � ��� ������)
	var first_day_number = this.day_on_week(year,month,1);
	for (var i = 1; i < first_day_number; i++) 
	{
		var select_day_item = document.createElement('div');
		select_day_item.className = 'calendar_column_'+i;
        select_day.appendChild(select_day_item);
	}
	
	//������� � ���� ��� �������� ������
	var day_count = this.days_in_month(year,month);
    var j = i-2;
	for (var i = 1; i <= day_count; i++) 
	{
		var select_day_item = document.createElement('div');
		select_day_item.setAttribute('value',i);
		select_day_item.innerHTML = i;
		select_day_item.className = 'calendar_column_'+((i+j)%7+1);
		select_day_item.onclick = select_day_onchange;
		if(i == day) 
		{
			select_day_item.className = 'calendar_day_change'; 
		}
		select_day.appendChild(select_day_item);
	}
    document.getElementById('calendar_hours').value = hour;
    document.getElementById('calendar_minutes').value = minute;

}

cHydraCalendar.prototype.days_in_month = function(year, month)
{
	return new Date(year, month + 1-1, 0).getDate();
}


cHydraCalendar.prototype.day_on_week = function(year, month, day)
{
	var day = new Date(year, month-1, day).getDay();
	if(day == 0) 
	{
		day = 7;
	}
	return day;
}


cHydraCalendar.prototype.set_year = function(year)
{
	this.calendar_body.setAttribute('year', year);
}

cHydraCalendar.prototype.set_month = function(month)
{
	this.calendar_body.setAttribute('month', month);
}

cHydraCalendar.prototype.set_day = function(day)
{
	this.calendar_body.setAttribute('day', day);
}
cHydraCalendar.prototype.set_hour = function(hour)
{
	this.calendar_body.setAttribute('hour', hour);
}
cHydraCalendar.prototype.set_minute = function(minute)
{
	this.calendar_body.setAttribute('minute', minute);
}

cHydraCalendar.prototype.create_select_year = function()
{

	//������ ���� �������
	var select_year = document.createElement('select');
	select_year.setAttribute('id','calendar_select_year');
	select_year.onchange = select_year_onchange;
	
	//������ ������
	for (var i = CALENDAR_YEAR_FROM; i <= CALENDAR_YEAR_TO; i++) 
	{
		var select_year_item = document.createElement('option');
		select_year_item.setAttribute('value',i);
		select_year_item.innerHTML = i;
		select_year.appendChild(select_year_item);
	}

	return select_year;
}

cHydraCalendar.prototype.create_select_month = function()
{
	//������ ���� �������
	var select_month = document.createElement('select');
	select_month.setAttribute('id','calendar_select_month');
	select_month.onchange = select_month_onchange;

	//������ ������
	for (var i = 1; i <= 12; i++) 
	{
		var select_month_item = document.createElement('option');
		select_month_item.setAttribute('value',i);
		select_month_item.innerHTML = CALENDAR_MONTHS_NAMES[i-1];
		select_month.appendChild(select_month_item);
	}

	return select_month;
}

cHydraCalendar.prototype.create_select_day = function()
{
	var container = document.createElement('div');
	
	// �������� ���� �������� ���� ������ 
	var day_names = document.createElement('div');
	day_names.className = 'calendar_day_names';

	for (var i = 0; i < 7; i++) 
	{
		var day_name = document.createElement('div');
		day_name.innerHTML = CALENDAR_DAYS_NAMES[i];
		day_name.className = 'calendar_column_'+(i+1);
		day_names.appendChild(day_name);
	}
	
	//�������� ���� ������ ���� ������
	var select_day = document.createElement('div');
	select_day.setAttribute('id','calendar_select_day');
	select_day.className = 'calendar_select_day';

	container.appendChild(day_names);
	container.appendChild(select_day);
	return container;
}

cHydraCalendar.prototype.set_parent_elem = function(elem)
{
	this.parent_elem = elem;
}

cHydraCalendar.prototype.return_date = function()
{
    
	var date = this.get_date();
	hydra_calendar.parent_elem.value = date;
    eval(this.jscode);

}

cHydraCalendar.prototype.get_date = function()
{
	var year = this.calendar_body.getAttribute('year');
	var month = this.calendar_body.getAttribute('month');
	var day = this.calendar_body.getAttribute('day');
	var hour = this.calendar_body.getAttribute('hour');
	var minute = this.calendar_body.getAttribute('minute');

	var date_text = '';

	var pattern = /^(\d)$/;


	if(pattern.test(day)) 
	{
		day = '0'+day;
	}

	
	if(pattern.test(month)) 
	{
		month = '0'+month;
	}

	date_text = day + "." + month + "." + year + ' ' + hour + ':' + minute;
	
	return  date_text;
}


function select_year_onchange()
{
	hydra_calendar.set_year( this.value );
	hydra_calendar.refresh();
}


function select_month_onchange()
{
	hydra_calendar.set_month( this.value );
	hydra_calendar.refresh();
}

function select_day_onchange()
{
	hydra_calendar.set_day( this.getAttribute('value') );
	hydra_calendar.refresh();
}
function select_hour_onchange()
{
	hydra_calendar.set_hour( this.value );
	hydra_calendar.refresh();
}
function select_minute_onchange()
{
	hydra_calendar.set_minute( this.value );
	hydra_calendar.refresh();
}


hydra_calendar = new cHydraCalendar();

/**
 * Функция для отображения календаря.
 *
 * @param object obj_id
 * @param string jscode
 */
function show_calendar(obj_id, jscode, this_obj)
{

	
	/*
		var params = new Array();
		params['x'] = 0;
		params['y'] = 0;
		get_elem_position(this_obj, params);
		alert(params);*/

    var obj = document.getElementById(obj_id);
    hydra_calendar.this_obj = this_obj;
    hydra_calendar.init();
    hydra_calendar.draw();
 
    var pattern = /(\d\d)\.(\d\d)\.(\d\d\d\d) (\d\d):(\d\d)/;

    if (pattern.test(obj.value))
    {
	hydra_calendar.set_date(RegExp.$3, RegExp.$2, RegExp.$1, RegExp.$4, RegExp.$5);  
    }
    else
    {
	var my_date = new Date();

	if(getNameBrouser() == 'gecko')
        {
            hydra_calendar.set_date(1900+my_date.getYear(), my_date.getMonth()+1, my_date.getDate(), my_date.getHours(), my_date.getMinutes());
        }
		
        
        if(getNameBrouser() == 'msie')
        {
            hydra_calendar.set_date(my_date.getYear(), my_date.getMonth()+1, my_date.getDate(), my_date.getHours(), my_date.getMinutes());
        }

        
	}

	hydra_calendar.input_elem = obj;
	hydra_calendar.set_parent_elem(obj);
    if (typeof jscode == "undefined") jscode = "";
	hydra_calendar.jscode = jscode;
}

function close_calendar()
{
	hydra_calendar.close();
}

function return_date_calendar()
{
	hydra_calendar.return_date();
	hydra_calendar.close();
}
function clear_date_calendar()
{
    hydra_calendar.input_elem.value='';
    hydra_calendar.close();
}




/*------------------------------------------*/
function show_calendar1(obj)
{
	var calendar_body = document.getElementById('calendar');
	
	if(!calendar_body) 
	{
		calendar_body = create_calendar();
	}
	
	calendar_body.style.display = 'block';

    calendar_body.style.top = event.clientY - 10 + document.body.scrollTop;
	calendar_body.style.left = event.clientX - 10 + document.body.scrollLeft;
	
	calendar_set_date(2007,6,1);
}

function create_calendar()
{
	var calendar_body = document.createElement('div');
	calendar_body.setAttribute('id','calendar');
	calendar_body.style.position = 'absolute';
	calendar_body.appendChild(create_select_year());
	calendar_body.appendChild(create_select_month());
	calendar_body.appendChild(create_select_day());
	
	document.body.appendChild(calendar_body);
	
	return calendar_body;
}



function calendar_set_date(year,month,day)
{
	var calendar = document.getElementById('calendar');
	calendar.setAttribute('year',year);
	calendar.setAttribute('month',month);
	calendar.setAttribute('day',day);
	
	refresh_calendar();
}


function refresh_calendar()
{
	
	//������� �������� ���������
	var calendar = document.getElementById('calendar');
	var year = calendar.getAttribute('year');
	var month = calendar.getAttribute('month');
	var day = calendar.getAttribute('day');

	//������������ �������� ����
	var select_year = document.getElementById('calendar_select_year');
	select_year.value = year;

	//������������ �������� ������
	var select_month = document.getElementById('calendar_select_month');
	select_month.value = month;
	
	//������� ���� ������ ��� ����
	select_day = document.getElementById('calendar_select_day');
	select_day.innerHTML = '';
	
	//������� � ���� ������ �������� (��� ������� �� ��������� � ����� ������ �� ������ � ��� ������)
	var first_day_number = calendar_day_on_week(year,month,1);
    for (var i = 1; i < first_day_number; i++) 
	{
		var select_day_item = document.createElement('div');
		select_day.appendChild(select_day_item);
	}
	
	//������� � ���� ��� �������� ������
	var day_count = calendar_days_in_month(year,month);
	for (var i = 1; i <= day_count; i++) 
	{
		var select_day_item = document.createElement('div');
		select_day_item.setAttribute('value',i);
		select_day_item.innerHTML = i;
		select_day.appendChild(select_day_item);
	}

}




function select_year_onchange1()
{
	var calendar = document.getElementById('calendar');
	calendar.setAttribute('year',this.value);
	refresh_calendar();
}

function select_month_onchange1()
{
	var calendar = document.getElementById('calendar');
	calendar.setAttribute('month',this.value);
	refresh_calendar();
}






function create_select_year()
{
	//������ ���� �������
	var select_year = document.createElement('select');
	select_year.setAttribute('id','calendar_select_year');
	select_year.onchange = select_year_onchange;
	//������ ������
	for (var i = CALENDAR_YEAR_FROM; i <= CALENDAR_YEAR_TO; i++) 
	{
		var select_year_item = document.createElement('option');
		select_year_item.setAttribute('value',i);
		select_year_item.innerHTML = i;
		select_year.appendChild(select_year_item);
	}

	return select_year;
}


function create_select_month()
{
	//������ ���� �������
	var select_month = document.createElement('select');
	select_month.setAttribute('id','calendar_select_month');
	select_month.onchange = select_month_onchange;

	//������ ������
	for (var i = 1; i <= 12; i++) 
	{
		var select_month_item = document.createElement('option');
		select_month_item.setAttribute('value',i);
		select_month_item.innerHTML = CALENDAR_MONTHS_NAMES[i-1];
		select_month.appendChild(select_month_item);
	}

	return select_month;
}


function create_select_day()
{
	var container = document.createElement('div');
	
	var day_names = document.createElement('div');
	day_names.className = 'calendar_day_names';
	for (var i = 0; i < 7; i++) 
	{
		var day_name = document.createElement('div');
		day_name.innerHTML = CALENDAR_DAYS_NAMES[i];
        //day_name.className = ''+i;
        //day_name.setAttribute('id','asd'+i);
		day_names.appendChild(day_name);
	}
	
	var select_day = document.createElement('div');
	select_day.setAttribute('id','calendar_select_day');
	select_day.className = 'calendar_select_day';

	container.appendChild(day_names);
	container.appendChild(select_day);
	return container;
}




function calendar_days_in_month(year,month)
{
	return new Date(year, month + 1-1, 0).getDate();
}

function calendar_day_on_week(year,month,day)
{
	var day = new Date(year, month-1, day).getDay();
	if(day == 0) 
	{
		day = 7;
	}
	return day;
}

function getNameBrouser() {
 var ua = navigator.userAgent.toLowerCase();
 // Определим Internet Explorer
 if (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1 && ua.indexOf("webtv") == -1) {
   return "msie"
 }
 // Opera
 if (ua.indexOf("opera") != -1) {
   return "opera"
 }
 // Gecko = Mozilla + Firefox + Netscape
 if (ua.indexOf("gecko") != -1) {
   return "gecko";
 }
 // Safari, используется в MAC OS
 if (ua.indexOf("safari") != -1) {
   return "safari";
 }
 // Konqueror, используется в UNIX-системах
 if (ua.indexOf("konqueror") != -1) {
   return "konqueror";
 }
 return "unknown";
}






function get_elem_position(elem, params)
{

	params['x'] = elem.offsetLeft + params['x'];
	params['y'] = elem.offsetTop + params['y'];
	if (elem.nodeName != 'BODY')
	{
		get_elem_position(elem.parentNode, params);
	}
}
function call_state(btn, container_id, action, file_name)
{
    btn.disabled = true;

    var params = get_input_values(container_id);
    params['s_action'] = action;
    params['s_file_name'] = file_name;
    call_ajax('state', container_id, params);

    //debugger;
    display_message(container_id+'.message', 'Изменения применяются.');
}



/**
 * function 
 * 
 * @access public	
 * @param 
 * @return 
*/

function navigate_to_page(plugin_id, active_page)
{
	var params = new Array();
	params['i_navigator_active_page'] = active_page;
	call_ajax(plugin_id, plugin_id, params); 
}
/**
 * Проверяет значения на уникальность
 * @param string value значение для проверки
 * @param string config_file файл конфига
 * @param string container_id контейнер, куда нужно возвращать сообщение об ошибке
 */
function check_duplication_value(value, config_file, container_id)
{
    var params = Array();
    params['s_file_name'] = config_file;
    params['s_value'] = value;

    call_ajax('duplication_checker', container_id, params);
}
/**
*	Объект для создания обычных селектов
*
*	@param String container идентификатор контейнера, в который будет помещаться селект.
*			|| Object DOM-объект контейнера
*/
var cHydraHTMLSelect = function(container)
{
	
	if (typeof(container) == 'string')
	{
		this.container_id = container;
		container = document.getElementById( container );
	}
	
	this.select_elem = document.createElement('select');
	
	if (container)
	{
		container.appendChild( this.select_elem );
	}
}
/**
 *
 **/
cHydraHTMLSelect.prototype.set_attribute = function(name, value)
{
	this.select_elem.setAttribute(name, value);
}
cHydraHTMLSelect.prototype.add_event = function(event_name, value)
{
    //debugger;
    if( typeof(value) == 'function')
        {
            hydra_add_event(this.select_elem, event_name, value);
        }
    if( typeof(value) == 'string')
        {
            hydra_add_event(this.select_elem, event_name, function(){eval(value);});
        }
}

/**
*	Создает элемент в комбике.
*	@param String value значение элемента в комбике
*	@param String caption надпись элемента в комбике
*/
cHydraHTMLSelect.prototype.add_option = function(value, caption)
{
	var option_elem = document.createElement('option');
	option_elem.setAttribute('value', value);
	//option_elem.textContent = caption;
    option_elem.appendChild(document.createTextNode(caption))
    this.select_elem.appendChild(option_elem);
}

cHydraHTMLSelect.prototype.set_selected = function(value)
{
    for(var i=0;i<this.select_elem.childNodes.length;i++) {
        if(this.select_elem.childNodes[i].value==value) this.select_elem.childNodes[i].selected = true;
    }
}

cHydraHTMLSelect.prototype.get_element = function()
{
    return this.select_elem;
}


/**
*	Выводит сообщение в блок загрузки файла.
*	@param String message текст сообщения.
*	@param String elem_name имя элемента 
*	@return boolean
*/
function upload_message(message, elem_name)
{
	var message_elem_id = elem_name + '_message';
	var message_elem = document.getElementById( message_elem_id );
	if (message_elem)
	{
		message_elem.innerHTML = message;
		return true;
	}

	return false;
}

/**
*	Создает элемент iframe.
*	@param String elem_name имя элемента.
*/
function create_iframe(elem_name)
{
	var iframe_name = elem_name + '_iframe';
	var container_name = elem_name + '_div';

                
               // progess_bar_interval_id = setInterval(  function() {  update_progress_bar(); }, 3000);

	// Проверяем а нет ли у нас уже такого iframe.
	if ( document.getElementById( iframe_name ) )	{
		return true;
	}
            
	var div_elem = document.createElement('DIV');
	
	div_elem.innerHTML = '<iframe style="display:none" src="about:blank" id="' + iframe_name + '" name="' + iframe_name + '" onload="upload_message(\'Загружено\', \''+elem_name+'\');"></iframe>';

	var elem = document.getElementById( container_name );
	elem.appendChild(div_elem);

       // upload_progress.start(elem_name);
}

/**
*	Создает виджет элемента загрузки.
*	@param String container_id контейнер, в котором запускается менеджер загрузки.
*	@return boolean
*/
function create_upload_widget(container_id)
{
	var elem = document.getElementById( container_id );
	if (!elem) {
		return false;
	}

	var elem_name = elem.getAttribute('name');
	if (!elem_name) 	{
		return false;
	}

	var elem_value = elem.getAttribute('value');

        var upload_script = PROJECT_URL + 'upload.php';
        //var upload_script = HYDRA_ROOT_URL + 'cgi-bin/upload.pl';

	// Создаем форму.
	var form_elem = document.createElement('form');
	form_elem.setAttribute('action', upload_script);
	form_elem.setAttribute('encType', 'multipart/form-data');
	form_elem.setAttribute('method', 'post');
	form_elem.setAttribute('target', elem_name + '_iframe');
	form_elem.setAttribute('onsubmit', 'return create_iframe("' + elem_name + '");');
	elem.appendChild(form_elem);
	
	// Создаем файл
	var file_elem = document.createElement('input');
	file_elem.setAttribute('type', 'file');
	file_elem.setAttribute('name', elem_name + '_file');
	form_elem.appendChild(file_elem);

	// Создаем span
	var span_elem = document.createElement('span');
	span_elem.setAttribute('id', elem_name + '_message');
	form_elem.appendChild(span_elem);

	// Создаем input
	var input_elem = document.createElement('input');
	input_elem.setAttribute('type', 'text');
	input_elem.setAttribute('name', elem_name);
	input_elem.setAttribute('id', elem_name);
	input_elem.setAttribute('value', elem_value);
	form_elem.appendChild(input_elem);


        // Создаем input
	var input_elem = document.createElement('input');
	input_elem.setAttribute('type', 'hidden');
	input_elem.setAttribute('name', 'MAX_FILE_SIZE');
	input_elem.setAttribute('value', 10000000);
	form_elem.appendChild(input_elem);



        
	// Создаем target_dir при условии что она задана.
	var target_dir = elem.getAttribute('target_dir');
	if (target_dir)
	{
		var input_elem = document.createElement('input');
		input_elem.setAttribute('type', 'hidden');
		input_elem.setAttribute('name', 'target_dir');
		input_elem.setAttribute('id', elem_name + '_target_dir');
		input_elem.setAttribute('value', target_dir);
		form_elem.appendChild(input_elem);
	}




	// Создаем кнопку загрузки
	var buton_elem = document.createElement('input');
	buton_elem.setAttribute('type', 'submit');
	buton_elem.setAttribute('value', 'Загрузить');
	form_elem.appendChild(buton_elem);

        // Создаем прогрессбар
        var buton_elem = document.createElement('span');
	buton_elem.setAttribute('id', 'progress-bar');
	form_elem.appendChild(buton_elem);

        var input_elem = document.createElement('input');
        input_elem.setAttribute('type', 'hidden');

        input_elem.setAttribute('name2', elem_name);
        input_elem.setAttribute('id', elem_name + '_file_pb_id');

        input_elem.onserg3 = function() {upload_progress.stop(elem_name); };
        form_elem.appendChild(input_elem);

	return true;
}


function update_progress_bar()
{
    if (!in_call)
        call_ajax('progress_bar', 'progress-bar');
    in_call = true;
}

/**
 * Класс для прогрессбара
 */
var FileUploadProgress = function()
{
	this.files = new Array();
        this.called = new Array();
}

/**
 * Начинает обновление прогрессбара для заданного файла
 * @param string file_name имя файла
 */
FileUploadProgress.prototype.start = function(file_name)
{
    this.files[file_name] = setInterval(  function() {  upload_progress.update(file_name); }, 1000);

    hydra.get(file_name+'_file_pb_id').value = this.get_id(file_name);
    this.set_called(file_name, false);
}

FileUploadProgress.prototype.set_called = function(file_name, status)
{
    this.called[file_name] = status;
}

FileUploadProgress.prototype.get_called = function(file_name)
{
    return this.called[file_name];
}

FileUploadProgress.prototype.get_id = function(file_name)
{
    return this.files[file_name];
}

FileUploadProgress.prototype.stop = function(file_name)
{
    clearInterval( this.get_id(file_name) );
}

FileUploadProgress.prototype.update = function(file_name)
{
    // вызов делаем только если скрипт не выполняется в данный момент
    if (!this.get_called(file_name)) {
        var params = new Array();
        params['s_elem_name'] = file_name;
        call_ajax('progress_bar', 'progress-bar', params);
        this.set_called(file_name, true);
    }
}



var upload_progress =  new FileUploadProgress();

/**
*  Открывает элемент комбика.
*/
function open_combo(elem_id)
{
	var elem = document.getElementById(elem_id);
	if (elem)
	{
		if (elem.style.visibility == "hidden")
		{
			elem.style.visibility = "visible";
		}
		else
		{
			elem.style.visibility = "hidden";
		}
		
	}
}

function create_tree_combo_widget(elem_id)
{
	var container_elem = document.getElementById( elem_id )
	if (container_elem)
	{
		var widget_elem_name = container_elem.getAttribute('name');
		if (!widget_elem_name)
		{
			return false;
		}

		var div_elem = document.createElement('DIV');
		div_elem.setAttribute('id', widget_elem_name + '_tree_elem');
		container_elem.appendChild(div_elem);
		
		var span_elem = document.createElement('span');
		span_elem.setAttribute('id', widget_elem_name + '_message');
		div_elem.appendChild(span_elem);

		var hidden_elem = document.createElement('input');
		hidden_elem.setAttribute('type', 'hidden');
		hidden_elem.setAttribute('id', widget_elem_name);
		div_elem.appendChild(hidden_elem);	
		

		var button_elem = document.createElement('button');
		button_elem.setAttribute('onclick', 'open_combo("' + widget_elem_name + '_tree' + '");');
		button_elem.textContent = 'Комбик';
		div_elem.appendChild(button_elem);	

		var tree_combo_elem = document.createElement('div');
		tree_combo_elem.setAttribute('id', widget_elem_name + '_tree');
		tree_combo_elem.setAttribute('class', 'tree_combo');
		tree_combo_elem.style.visibility = 'hidden';
		div_elem.appendChild(tree_combo_elem);	
		
		call_ajax('tree_combo', widget_elem_name + '_tree');
		return true;
	}
}
/**
 * Запускает js-функцию, которая на основе json и других аттрибутов рисует select
 *
 * @return String
 */
function create_select_from_json(json,elem_id, name, value, event_name,event_body)
{
    var elem_select = new cHydraHTMLSelect(elem_id);
        elem_select.set_attribute('name',name);
        elem_select.set_attribute('id', elem_id + '_select');
        elem_select.add_event(event_name, function(){eval(event_body)});
        for(id in json)
            {
                elem_select.add_option(id,json[id]);
            }
        elem_select.set_selected(value);
}

/**
 * Файловый менеджер.
 */
var cFileManager = function()
{
    this.folder_div_id = 'file_manager_folders';
    this.path_id = 'file_manager_path';
    this.init_callback = function() {  };
    this.draw_folders_callback = function() {  };

    // текущая папка.
    this.current_folder = '';

    this.folders = new Array();

    // Идентификтор элемента куда будет помещаться путь к файлу.
    this.target_elem_id = false;
}

cFileManager.prototype.init = function()
{
    // Вызываем call_back функцию инициализации.
    this.init_callback();
}

/**
 *  Устанавливает target_elem_id
 *  @param String target_elem_id идентификатор элемента назначения.
 */
cFileManager.prototype.set_target_elem_id = function(target_elem_id)
{
    this.target_elem_id = target_elem_id;
}

cFileManager.prototype.add_folder = function(folder)
{
    if (folder != undefined) {
        if (folder != '') {
            this.folders.push(folder);
        }
    }
    
}

/**
*	Обновление области просмотра каталогов.
*	@parem string folder - папка, которую мы открываем
*/
cFileManager.prototype.refresh = function(folder)
{
    this.add_folder(folder);

    var path = this.folders.join('/');

    this.get_folder_content( path );
}

/**
*	Запускает ajax-плагин для получения содержимого заданной папки.
*	@param String folder путь к папке, содержимое которой нужно получить.
*/
cFileManager.prototype.get_folder_content = function( folder )
{
    var elem = hydra.get('s_file_manager_image_target_dir');
    elem.value = this.folders.join('/');
    


	var elem = document.getElementById( this.folder_div_id );
    //addEvent(elem, 'click', function(){ alert('serg'); });
    elem.onserg = function(){file_manager_refresh();  clearInterval(progess_bar_interval_id)};

    
	if (elem)
	{
		elem.innerHTML = 'Загрузка...';
		
		var params = new Array();
		params['s_path'] = folder;
		call_ajax('file_manager_dir_content', this.folder_div_id, params);
	}
}

cFileManager.prototype.draw_parent_folder = function()
{
    this.folders.pop();
    var path = this.folders.join('/');
    this.get_folder_content( path );
    return;

	//debugger;
	var path_elem = document.getElementById( this.path_id );
	if (!path_elem)
	{
		return false;
	}

	var path_value = path_elem.value;
	var paths = path_value.split('/');
	
	// Чистим путь
	var new_path = new Array();
	for (var i=0; i<paths.length-1; i++)
	{
		if (paths[i].length > 0)
		{
			new_path.push( paths[i] );
		}
	}
	//delete paths[ paths.length-1 ];
	path_value = new_path.join('/');

	this.get_folder_content( path_value );
}

cFileManager.prototype.add_image = function()
{
 //   var iframe_doc = hydra_wysiwyg_editor.get_iframe_doc();
    
  //  var selection = iframe.contentWindow.getSelection();
   // var selection = iframe_doc.getSelection(); //
   // theRange = selection.createRange(); //getRangeAt(0);
   //   theRange.collapse(false);

   // Получаем элемент, где хранится путь к файлу.
   var file_elem = document.getElementById('file_manager.current_file');
   if (!file_elem)
   {
       return false;
   }

   
   if (this.target_elem_id)
   {
       // Если у нас элемент назначения редактор
       if (this.target_elem_id == 'iframe')
       {
            var iframe = hydra_wysiwyg_editor.get_iframe_elem();
            if(iframe)
            {
                iframe.contentWindow.document.execCommand('InsertImage', false, PROJECT_URL+'upload/'+file_elem.value);
                return true;
            }
       }
       else
       {
           //alert('"'+this.target_elem_id+'"');
           // Получаем элемент для помещения туда пути к файлу.
            var input = document.getElementById(this.target_elem_id);
            //alert(input);
            if (input)
            {
                input.value = /*PROJECT_URL+*/'upload/'+file_elem.value;
            }
            else {
                alert("Не могу найти элемент для вставки "+this.target_elem_id);
            }
            
            return true;
       }
   }



/*
    var theImageNode = iframe.contentWindow.document.createElement("img");

    //alert(PROJECT_URL);
    var file_elem = document.getElementById('file_manager.current_file');
    theImageNode.setAttribute('src', PROJECT_URL+'upload/'+file_elem.value); //PROJECT_URL+
 //theImageNode.alt = 'sadsad';

 iframe.contentWindow.document.body.appendChild(theImageNode);*/
}

cFileManager.prototype.delete_file = function()
{
   var file_elem = document.getElementById('file_manager.current_file');
   if (!file_elem)
   {
       return false;
   }
   var params = new Array();
    params['s_delete_file_name']=file_elem.value;
    call_ajax('file_manager_delete_file', '', params);
    //alert(file_elem.value);
    return true;
 //   var iframe_doc = hydra_wysiwyg_editor.get_iframe_doc();

  //  var selection = iframe.contentWindow.getSelection();
   // var selection = iframe_doc.getSelection(); //
   // theRange = selection.createRange(); //getRangeAt(0);
   //   theRange.collapse(false);

   // Получаем элемент, где хранится путь к файлу.
   /*var file_elem = document.getElementById('file_manager.current_file');
   if (!file_elem)
   {
       return false;
   }

   if (this.target_elem_id)
   {
       // Если у нас элемент назначения редактор
       if (this.target_elem_id == 'iframe')
       {
            var iframe = hydra_wysiwyg_editor.get_iframe_elem();
            if(iframe)
            {
                iframe.contentWindow.document.execCommand('InsertImage', false, PROJECT_URL+'upload/'+file_elem.value);
                return true;
            }
       }
       else
       {
           // Получаем элемент для помещения туда пути к файлу.
            var input = document.getElementById(this.target_elem_id);
            if (input)
            {
                input.value = 'upload'+file_elem.value;
            }

            return true;
       }
   }*/



/*
    var theImageNode = iframe.contentWindow.document.createElement("img");

    //alert(PROJECT_URL);
    var file_elem = document.getElementById('file_manager.current_file');
    theImageNode.setAttribute('src', PROJECT_URL+'upload/'+file_elem.value); //PROJECT_URL+
 //theImageNode.alt = 'sadsad';

 iframe.contentWindow.document.body.appendChild(theImageNode);*/
}

cFileManager.prototype.set_current_file = function(file_name)
{
    var current_file_elem = document.getElementById('file_manager.current_file');
    current_file_elem.setAttribute('value', file_name);
}

/**
 * Создает директорию.
 **/
cFileManager.prototype.create_folder = function()
{
    
    var folder = prompt("Введите имя директории : ");
    var path = get_element('file_manager_path').value;

    var params = new Array();
    params['s_folder'] = folder;
    params['s_path'] = path;
    call_ajax('file_manager_create_folder', '', params);

}

/**
*	Выводит содержимое папки на основании данных из data 
*	@param Object data
*/
cFileManager.prototype.draw_folders = function(data)
{
	// Создаем div в котором будем выводить папки и файлы
	var div_elem = document.getElementById( this.folder_div_id );
	if ( !div_elem )
	{
		return false;
	}
	div_elem.innerHTML = '';
	
	if (data.folders != undefined)
	{
		var len = data.folders.captions.length;
		for (i=0; i<len; i++)
		{
			var folder_caption = data.folders.captions[i];
			var elem = document.createElement('a');

			elem.setAttribute('href', 'javascript: file_manager.refresh("' + folder_caption + '")');
			elem.setAttribute('class', 'folder');
			elem.textContent = folder_caption;
		
			div_elem.appendChild( elem );

			var br_elem = document.createElement('br');
			div_elem.appendChild( br_elem );
		}
	}
	
	if (data.files != undefined)
	{
		var len = data.files.captions.length;
		for (i=0; i<len; i++)
		{
			var elem = document.createElement('a');
			var file_caption = data.files.captions[i];

			elem.setAttribute('href', 'javascript:file_manager.set_current_file("'+data.path+'/'+file_caption+'");');
			elem.setAttribute('class', 'file');
			elem.textContent = file_caption;
		
			div_elem.appendChild( elem );

                        var elem = document.createElement('span');
                        elem.textContent = data.files.size[i];
                        div_elem.appendChild( elem );

			var br_elem = document.createElement('br');
			div_elem.appendChild( br_elem );
		}
	}
	
        
	// создание path.
	var path_elem = document.createElement('input');
	path_elem.setAttribute('type', 'hidden');
	path_elem.setAttribute('name', 'path');
	path_elem.setAttribute('id', 'file_manager_path');
	path_elem.setAttribute('value', data.path);
	div_elem.appendChild( path_elem );
	

	// Создание folder up.
	if (data.path!='false')
	{
		var image_elem = document.createElement('img');
		image_elem.setAttribute('src', '../_components/widgets/file_manager/i/up.ico');
		//image_elem.setAttribute('onclick', 'file_manager.refresh("' + data.path + '");');
		image_elem.setAttribute('onclick', 'file_manager.draw_parent_folder();');
		
		div_elem.appendChild( image_elem );

	}


    var br_elem = document.createElement('br');
    div_elem.appendChild( br_elem );
    var current_file_elem = document.createElement('input');
    current_file_elem.setAttribute('type', 'text');
	current_file_elem.setAttribute('name', 'current_file');
	current_file_elem.setAttribute('id', 'file_manager.current_file');
	current_file_elem.setAttribute('value', '');
	div_elem.appendChild( current_file_elem );

	this.draw_folders_callback();
}

function file_manager_refresh()
{
    if (file_manager != undefined)
    {
        file_manager.refresh();
    }
}

function set_file_upload_target_dir()
{
	var path_elem = document.getElementById('file_manager_path');
	if (!path_elem)
	{
		return false;
	}
	//alert(path_elem.value);

	
	var target_dir_elem = document.getElementById('s_file_manager_image_target_dir');
	if (!target_dir_elem)
	{
	
		return false;
	}

    var target = document.getElementById('s_file_manager_image_div');
    var target_dir = target.getAttribute('target_dir');
    //alert(target_dir);

	target_dir_elem.value = target_dir + path_elem.value + '/';
	//alert(target_dir_elem.value);
}

// Инстанцирование класса
file_manager = new cFileManager();
// Устанавливаем call-back функцию
file_manager.init_callback = function() {run_widgets('file_manager');};
file_manager.draw_folders_callback = function() {set_file_upload_target_dir();};
/**
 * Класс для работы с закладками.
 * @param String container_id идетификатор контейнера, в котором создаются закдаки
 * @param String name имя компонета
 * @param String width ширина компонента
 */
var cTabs = function( container_id, name, width)
{
    

    this.container_id = container_id;
    this.name = name;
    this.items_container_id = name + '_items';

     // Проверяем а есть ли уже такой контейнер
  
    var div_elem = document.getElementById(this.items_container_id);
   
    if (div_elem != null)
    {
        this.created = true;
        return true;
    }


    this.items = new Array();

    // Создание элемента ul.
    this.container_elem = document.getElementById( this.container_id );

    if (!this.container_elem)
    {
        alert("Немогу найти : "+this.container_id);
        return false;
    }

    this.ul_elem = document.createElement('ul');
    if (!this.ul_elem)
    {
        return false;
    }

    this.ul_elem.setAttribute('class', 'tab');
    this.container_elem.appendChild(this.ul_elem);

    this.created = false;

    this.current_tab_index = 0;
    

    // Создание контейнера вкладок.
    div_elem = document.createElement('div');
    div_elem.style.width = width;
    //div_elem.style.border = '1px solid black';
    div_elem.setAttribute('id', this.items_container_id);
    div_elem.setAttribute('class', 'tabs_container');
    this.container_elem.appendChild(div_elem);
}


/**
 * Добавляет закладку
 * @param String tab_caption кепшен закладки.
 * @param String link ссылка, на которую будет вести закладка.
 * @param String plugin_name имя плагина, который будет запускаться при нажатии
 * @param Array plugin_params праметры плагина, запускаемого во вкладке.
 * на данную закладку.
 */
cTabs.prototype.add = function( tab_caption, link, plugin_name, plugin_params, js_code )
{
    if (this.created==true) {
        return false;
    }

    var item = new Array();
    item['caption'] = tab_caption;
    item['plugin_name'] = plugin_name;
    if (plugin_params != undefined)
    {
        item['plugin_params'] = plugin_params;
    }
    if (js_code != undefined)
    {
        item['js_code'] = js_code;
    }

    this.items.push( item );

    var index = this.items.length - 1;

    var li_elem = document.createElement('li');
    this.ul_elem.appendChild(li_elem);

    var a_elem = document.createElement('a');
    if (!link)
    {
        link = 'javascript:' + this.name + '.open_tab('+index+')';
    }

    a_elem.setAttribute('href', link);
    li_elem.appendChild(a_elem);

    var span_elem = document.createElement('span');
    span_elem.textContent = tab_caption;
    a_elem.appendChild(span_elem);
}

/**
 * Возвращает имя элемента таба по его индексу.
 *
 * @param int tab_index индекс таба
 * @return string
 */
cTabs.prototype.get_tab_name = function( tab_index )
{
    return this.name + '[items][' + tab_index + ']';
}

/**
 *  Проверяет существует ли физически такая закладка.
 */
cTabs.prototype.tab_exists = function( tab_index )
{
    var tab_name = this.get_tab_name( tab_index );
    var elem = document.getElementById(tab_name);
    if (!elem)
    {
        return false;
    }

    return elem;
}

cTabs.prototype.create_tab = function( tab_index )
{
    //debugger;
    var items_container = document.getElementById(this.items_container_id);
    if (!items_container)
    {
        return false;
    }

    var item = document.createElement('div');
    item.setAttribute('id', this.get_tab_name(tab_index));

    items_container.appendChild(item);

    this.load_tab(tab_index);
}

cTabs.prototype.load_tab = function( tab_index )
{
    
    var js_code = this.items[ tab_index ]['js_code'];
    if (js_code != undefined)
    {
        eval(js_code);
    }

    var plugin_name = this.items[ tab_index ]['plugin_name'];
    if (plugin_name)
    {
        var plugin_params = this.items[ tab_index ]['plugin_params'];
        if (!plugin_params)
        {
            plugin_params = new Array();
        }
        var item_container_id = this.get_tab_name(tab_index);
        call_ajax(plugin_name, item_container_id, plugin_params);
    }
    
}

cTabs.prototype.hide_tab = function( tab_index )
{
    var tab = this.tab_exists(tab_index);
    if (tab)
    {
        tab.style.display = 'none';
    }
}

cTabs.prototype.show_tab = function( tab_index )
{
    var tab = this.tab_exists(tab_index);
    if (tab)
    {
        tab.style.display = 'block';
    }
}

cTabs.prototype.hide_all_tabs = function()
{
    if (this.items)
    for (i=0; i<this.items.length; i++)
    {
        this.hide_tab(i);
    }
}

/**
 *  Открывает заклаку по ее индексу.
 */
cTabs.prototype.open_tab = function( tab_index )
{
    this.current_tab_index = tab_index;

    this.hide_all_tabs();
    if (this.tab_exists(tab_index))
    { 
        this.show_tab(tab_index);
    }
    else 
    {
        this.create_tab(tab_index);
    }
}
// Активный элемент файла (чисто для косметики)
var fm2_active_file = null;
// Активное имя файла
var fm2_active_file_name = '';

var fm2_target_elem = null;

/**
 * Открывает файловый менеджер
 *
 * @param object target_elem
 */
function fm2_show(target_elem_id)
{
    var params = new Array();
    if (target_elem_id != undefined) {
        params['s_file_name'] = hydra.get(target_elem_id).value;
        fm2_target_elem = hydra.get(target_elem_id);
    }
    
    var fm2_win = new cHydraWindow(
        'fm2_window',
        'Файловый менеджер',
        'fm2_ws',
        params
    );

}

/**
 * Загружает секцию контента файлового менеджера
 * @param string file_name имя файла или папки
 */
function fm2_load_content(file_name)
{
    call_ajax('fm2_content', 'fm2-content', {'s_file_name':file_name});
}

/**
 * Вызывается перед сабмитом формы
 */
function fm2_submit()
{
    // Задаем путь куда аплоадить
    // Путь передается для Iframe
    hydra.get('fm2_target_dir').value = hydra.get('fm2-path').value;
}

/**
 * Устаналивает события файлового менеджера
 */
function fm2_set_events()
{
    // Этот эвент вызывается из ифрейма для того, чтобы обновить контентную часть
    hydra.get('fm2-content').onrefresh = function(target_dir) {
        fm2_load_content(target_dir);
    };

}

/**
 * Обработчик файла в файловом менеджере
 *
 * @param object elem элемент файла, по которому клинкул пользователь
 * @param string file_name имя файла
 */
function fm2_set_active_file(elem, file_name)
{
    if (fm2_active_file) {
        fm2_active_file.setAttribute('class', '');
    }
    elem.setAttribute('class', 'fm2-active-file');
    fm2_active_file = elem;

    // Запоминаем имя активного файла
    fm2_active_file_name = file_name;
}

/**
 * Вставляет картинку в редактор
 */
function fm2_add_image_to_editor()
{
    if (fm2_active_file_name == '') {
        alert("Не выбран файл");
        return false;
    }

    editor_toolbar.add_image(PROJECT_URL+fm2_active_file_name);

    var iframe = hydra_wysiwyg_editor.get_iframe_elem();
    if(iframe)    {
        iframe.contentWindow.document.execCommand('InsertImage', false, PROJECT_URL+fm2_active_file_name);
        //hydra_wysiwyg_editor.get_selected_object().setAttribute("align", "right");
        return true;
    }
}

/**
 * Признак, что мы выбрали файл (со своего компа)
 */
function fm2_set_has_file(file_elem)
{
    hydra.get('fm2-add-file').setAttribute('class', 'has-file');
    hydra.get('fm2-add-file').setAttribute('title', file_elem.value);
}

function fm2_link_file()
{
    if (fm2_active_file_name == '') {
        alert("Не выбран файл");
        return false;
    }

    fm2_target_elem.value = fm2_active_file_name;
}
/**
*	Объект для создания обычных списков(ul)
*
*	@param String container идентификатор контейнера, в который будет помещаться ul-список.
*			|| Object DOM-объект контейнера
*/
var cHydraHTMLUl = function(container)
{

	if (typeof(container) == 'string')
	{
		this.container_id = container;
		container = document.getElementById( container );
	}

	this.ul_elem = document.createElement('ul');

	if (container)
	{
		container.appendChild( this.ul_elem );
	}
}

cHydraHTMLUl.prototype.set_attribute = function(name, value)
{
	this.ul_elem.setAttribute(name, value);
}

/**
*	Создает элемент cписка.
*	@param Element elem элемент который нужно добавить в качестве единицы списка
*/
cHydraHTMLUl.prototype.add_li = function(elem)
{
	var li_elem = document.createElement('li');
    li_elem.appendChild(elem);
	this.ul_elem.appendChild(li_elem);
}

/**
*	Констркутор класса.
*	@param cHydraWysiwygEditor wysiwygEditor эдитор которому пренадлежит
*	объект этого вспомогательного класса
*/
var cTableFunctions = function(wysiwygEditor)
{
    this.wysiwygEditor = wysiwygEditor;
}
/**
*	получает по запросу актуальную таблицу(this_table), актуальную строчку(this_tr)
*	и актуальную яйчеку(this_td) в которой находится курсор юзера
*/

cTableFunctions.prototype.get_table_data = function(){
    //var cwin = this.wysiwygEditor.get_iframe_elem().contentWindow;
    //debugger;
    var selection = this.wysiwygEditor.current_selection;
    var temp_node = this.wysiwygEditor.get_selected_object();
    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;
    else{
        var arr = Array();
        arr['this_table']=this_table;
        arr['this_tr']=this_tr;
        arr['this_td']=this_td;
        return arr;
    }
}
/**
*	вставляет строку до.
*/

cTableFunctions.prototype.insert_table_row_before = function() {
   // debugger;
    var this_document = this.wysiwygEditor.get_iframe_elem().contentWindow.document;
    var table_data = this.get_table_data();
    var index = get_index_of_tr_in_table(table_data['this_table'],table_data['this_tr']);
    var tr = table_data['this_table'].insertRow(index);
    for(var i = 0; i<table_data['this_tr'].childNodes.length;i++){
        var td = this_document.createElement('TD');
        td.appendChild(this_document.createTextNode('node '+(index+1)+' '+(i+1)));
        tr.appendChild(td);
    }

}
/**
*	вставляет строку после.
*/

cTableFunctions.prototype.insert_table_row_after = function() {
    var this_document = this.wysiwygEditor.get_iframe_elem().contentWindow.document;
    var table_data = this.get_table_data();
    var index = get_index_of_tr_in_table(table_data['this_table'],table_data['this_tr'])+1;
    var tr = table_data['this_table'].insertRow(index);

    for(var i = 0; i<table_data['this_tr'].childNodes.length;i++){
        var td = this_document.createElement('TD');
        td.appendChild(this_document.createTextNode('node '+(index+1)+' '+(i+1)));
        tr.appendChild(td);
    }
}
/**
*	вставляет столбик до.
*/

cTableFunctions.prototype.insert_table_column_before = function() {
    var this_document = this.wysiwygEditor.get_iframe_elem().contentWindow.document;
    var table_data = this.get_table_data();
    var index = get_index_of_td_in_tr(table_data['this_tr'],table_data['this_td']);
    if(navigator.appName == 'Microsoft Internet Explorer')
        {
            var table_compatible = table_data['this_table'].childNodes[0];
        }
    if(navigator.appName == 'Netscape')
        {
            var table_compatible = table_data['this_table'];
        }
    for(var i = 0; i<table_compatible.childNodes.length;i++){
        var tr = table_compatible.childNodes[i];
        var td = tr.insertCell(index);
        td.appendChild(this_document.createTextNode('node '+(i+1)+' '+(index+1)));
    }
}
/**
*	вставляет столбик после.
*/

cTableFunctions.prototype.insert_table_column_after = function() {
    var this_document = this.wysiwygEditor.get_iframe_elem().contentWindow.document;
    var table_data = this.get_table_data();
    var index = get_index_of_td_in_tr(table_data['this_tr'],table_data['this_td'])+1;
        if(navigator.appName == 'Microsoft Internet Explorer')
        {
            var table_compatible = table_data['this_table'].childNodes[0];
        }
    if(navigator.appName == 'Netscape')
        {
            var table_compatible = table_data['this_table'];
        }
    for(var i = 0; i<table_compatible.childNodes.length;i++){
        
        var tr = table_compatible.childNodes[i];

        var td = document.createElement('td');
        tr.appendChild(td);

        //var td = tr.insertCell(index);
        td.appendChild(this_document.createTextNode('node '+(i+1)+' '+(index+1)));
    }
}
/**
*	создает лейбл с инпутом внутри (удобно для составления форм).
*/

function create_label_input(input_name,label_name,value)
{    
    var label = document.createElement('label');
    var input = document.createElement('input');
    var span = document.createElement('span');
    input.setAttribute('name', input_name);
    input.setAttribute('value', value);
    span.appendChild(document.createTextNode(label_name));
    label.appendChild(span);
    label.appendChild(input);

    return label;
}

/**
*	создает лейбл .
*/
function create_label(label_name,label_id)
{
    
    var label = document.createElement('label');
    label.setAttribute('id', label_id)
    var span = document.createElement('span');
    span.appendChild(document.createTextNode(label_name));
    label.appendChild(span);
    return label;
}
/**
*	возвращает индекс строки в таблице
*/

function get_index_of_tr_in_table(table,tr){
    if(navigator.appName == 'Microsoft Internet Explorer')
        {
            var nodes = table.childNodes[0].childNodes;
        }
    if(navigator.appName == 'Netscape')
        {
            var nodes = table.childNodes;
        }
    for(var i=0;i<nodes.length;i++){
        if (nodes[i] == tr)
            return i;
    }
    return -1;
}
/**
*	возвращает индекс яйчейки в строке
*/
function get_index_of_td_in_tr(tr,td){
    for(var i=0;i<tr.childNodes.length;i++){
        if (tr.childNodes[i] == td)
            return i;
    }
    return -1;
}

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);
    
    if (typeof(command)=="srtring") {
        hydra_add_event(img_elem, 'click', function()  {
                hydra_wysiwyg_editor.exec_command(command,value);
            }
        );
    }

    if (typeof(command)=="function") {
        hydra_add_event(img_elem, 'click', command);
    }

    /**
    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);

    
    if (typeof(event_handler)=="function") {
        img_elem.onclick = event_handler;
    }

    if (typeof(event_handler)=="string") {
        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()
{
    alert("bb");
    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);
    }
}

/**
 * Устанавливает выравнивание.
 * @param string align тип выравнивания
 */
cHydraWysiwygEditor.prototype.set_align = function(align, command)
{
    // Выравниваение объектное
    var obj = this.get_selected_object();
    if (obj) {
        obj.setAttribute('align', align);
    }
    else {
        // Делаем обычное выравнивание
        hydra_wysiwyg_editor.exec_command(command,null);
    }
}

/**
 * Выводит редактор.
 * @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_onclick(toolbar_elem, '_components/wysiwyg_editor/i/justifyleft.gif', this.get_instance_name() + '.set_align("left", "JustifyLeft");',  'JustifyLeft');
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/justifycenter.gif', this.get_instance_name() + '.set_align("center", "JustifyCenter");',  'JustifyCenter');
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/justifyright.gif', this.get_instance_name() + '.set_align("right", "JustifyRight");',  'JustifyRight');
    this.add_toolbar_item_onclick(toolbar_elem, '_components/wysiwyg_editor/i/justifyfull.gif', this.get_instance_name() + '.set_align("justify", "JustifyFull");',  '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()
    {
        var body_style =  '';
        
        if (typeof(HTML_EDITOR_BODY_STYLE) != 'undefined') {
            body_style = 'style="'+HTML_EDITOR_BODY_STYLE+'"';
        }


        iframe_elem.contentWindow.document.write('<head></head><body '+body_style+'>'+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);
    }
/**
 * Панель управления для редактирования html-элементов.
 */
var cHydraWysiwygToolbar = function()
{
	this.iframe_id = 'hydra_editor_iframe';
	this.src_elem_id = false;
}

cHydraWysiwygToolbar.prototype.create = function(container_id)
{
    
    var toolbar_elem = document.getElementById(container_id);
	return this.add_toolbar_item(toolbar_elem, '../_components/wysiwyg_toolbar/i/bold.gif', 'Bold', null);
}

/**
 * Создает кнопку на панели управления
 */
cHydraWysiwygToolbar.prototype.add_toolbar_item = function(toolbar_elem, icon, command, value)
{
	var img_elem = document.createElement('img');
	img_elem.setAttribute('src', icon);
	img_elem.setAttribute('onclick', 'document.exec_command("' + command  + '");'); //+ '",' + value
	toolbar_elem.appendChild(img_elem);
}

wysiwyg_toolbar = new cHydraWysiwygToolbar();
function draw_captcha()
{
    call_ajax('captcha', 'captcha');
}

observer.observeEvent('auth.restore_enter_btn', function() { draw_captcha(); });
var HydraEditorToolbar = function()
{
    // Определяем тип броузера
    if (navigator.appName == 'Microsoft Internet Explorer') {
        this.browser_type = 'ie';
    }

    if (navigator.appName == 'Netscape') {
        this.browser_type = 'gecko';
    }
}

/**
 * Инициализация тулбара с заданном контейнере
 * @param string container_id  идентификатор контейнера, в который надо загружать тулбар
 */
HydraEditorToolbar.prototype.init = function(toolbar_container_id, content_container_id)
{
    
    var toolbar_container = hydra.get(toolbar_container_id);
    if (!toolbar_container) {
        alert("Некуда загружать тулбар");
        return false;
    }

    var toolbar = document.createElement('ul');
    toolbar.setAttribute('class', 'editor-toolbar');
    toolbar_container.appendChild(toolbar);

    // Добавляем элементы на тулбар
    this.add_toolbar_items(toolbar, {
        html: {
           "caption" : "html",
           "onclick":function() {editor_toolbar.change_mode(content_container_id);}
        },
        bold:{
            "class":"editor-toolbar-bold",
            "onclick":function() {editor_toolbar.bold();},
            "title": "Сделать текст жирным"
        },
        italic: {
            "class":"editor-toolbar-italic",
            "onclick":function() {editor_toolbar.italic();},
            "title": "Сделать текст наклонным"
        },
        link: {
            "class":"editor-toolbar-link",
            "onclick":function() {editor_toolbar.link();},
            "title": "Добавить ссылку"
        },
        unlink: {
            "class":"editor-toolbar-unlink",
            "onclick":function() {editor_toolbar.unlink();},
            "title": "Убрать ссылку"
        },
        numlist: {
            "class":"editor-toolbar-numlist",
            "onclick":function() {editor_toolbar.numlist();},
            "title": "Нумерованный список"
        },
        bullist: {
            "class":"editor-toolbar-bullist",
            "onclick":function() {editor_toolbar.bullist();},
            "title": "Ненумерованный список"
        },
        align_left: {
            "class":"editor-toolbar-align-left",
            "onclick":function() {editor_toolbar.align_left();},
            "title": "Выравнивание влево"
        },
        align_right: {
            "class":"editor-toolbar-align-right",
            "onclick":function() {editor_toolbar.align_right();},
            "title": "Выравнивание вправо"
        },
        align_justify: {
            "class":"editor-toolbar-align-justify",
            "onclick":function() {editor_toolbar.align_justify();},
            "title": "Полное выравнивание"
        },
        align_center: {
            "class":"editor-toolbar-align-center",
            "onclick":function() {editor_toolbar.align_center();},
            "title": "Выравнивание по центру"
        },
        insert_image: {
            "class":"editor-toolbar-insert-image",
            "onclick":function() {editor_toolbar.insert_image();},
            "title": "Добавить картинку"
        },
        font: {
            "class":"editor-toolbar-font",
            "onclick":function() {editor_toolbar.show_submenu(this, 'choose-fonts-menu', 'create_font_menu' );},
            "title": "Изменить шрифт"
        },
        format: {
            "class":"editor-toolbar-format",
            "onclick":function() {editor_toolbar.show_submenu(this, 'choose-format-menu', 'create_format_menu' );},
            "title": "Форматирование блока"
        },
        clear_format: {
            "class":"editor-toolbar-clearformat",
            "onclick":function() {editor_toolbar.exec_command("RemoveFormat", true);},
            "title": "Очистить форматирование"
        },
        indent: {
            "class":"editor-toolbar-indent",
            "onclick":function() {editor_toolbar.exec_command("Indent", true);},
            "title": "Увеличить отступ (сделать подсписок)"
        },
        outdent: {
            "class":"editor-toolbar-outdent",
            "onclick":function() {editor_toolbar.exec_command("Outdent", true);},
            "title": "Уменьшить отступ (выйти из подсписка)"
        }
    });
}

/**
 * Создает кнопки на панели управления
 *
 * @param object toolbar_elem контейнер для кнопок - ul
 * @param array items  массив кнопок
 * <code>
 *  (
 *      ["class"] - класс ссылки
 *      ["onclick"] -  функция, которая будет вызываться при клике
 *  )
 * </code>
 */
HydraEditorToolbar.prototype.add_toolbar_items = function(toolbar_elem, items)
{
    for (var item_index in items) {
        var item = items[item_index];

        var li = document.createElement('li');
        var a = document.createElement('button');
        if (item['class'] != undefined) {
            a.setAttribute('class', 'editor-toolbar-item '+item['class']);
        }
        
        a.onclick = item["onclick"];

        if (item["caption"] != undefined) {
           a.innerHTML = item["caption"];
        }

        if (item["title"] != undefined) {
           a.title = item["title"];
        }

        li.appendChild(a);
        toolbar_elem.appendChild(li);
    }
}

/**
 * Переключает режим работы редактора html/design_mode
 */
HydraEditorToolbar.prototype.change_mode = function(content_container_id)
{
    // Получаем наш редактируемый div
    var design = hydra.get(content_container_id);
    var html = hydra.get(content_container_id+"-html");

    // Если у нас видимый div
    if (html.style.display == "none") {
        design.style.display = "none";
        html.value = design.innerHTML;
        html.style.display = "block";
        return;
    }
    else    {
        design.innerHTML = html.value;
        html.style.display = "none";
        design.style.display = "block";
    }
    
    
    
}

/**
 * Возвращает объект выделения
 */
HydraEditorToolbar.prototype.get_selection = function()
{
    if (document.selection != undefined) {
        return document.selection;
    }
    
    var selection = window.getSelection();
    
    if (!selection.type) {
            selection.type = 'Text';
    }
    if (!selection.createRange) {
            /**
             * Для FF имитируем присутствие IE ф-ций
             */
            selection.createRange = function() {
                    var range = this.getRangeAt(0);

                    range.parentElement = function() {
                            // var result = this.startContainer;
                            var result = this.commonAncestorContainer;
                            /**
                             * Если предком является елемент #text
                             */
                            if (result.nodeType == 3) {
                                    /**
                                     * Нужно получить родительский узел
                                     */
                                    result = result.parentNode;
                            }
                            return result;
                    };

                    return range;
            };
    }
    return selection;
}

/**
 * Определение выбранного объекта для гекко
 */
HydraEditorToolbar.prototype.get_gecko_selected_object = function()
{
    var selection = this.get_selection();
    if (!selection)    {
        return false;
    }

    var offset = selection.anchorOffset;
    if (selection.focusNode.childNodes.length > 0)    {
        var item = selection.focusNode.childNodes[offset];

        return item;
    }

    return selection.anchorNode;
}

/**
 * Возвращает текущий выбранный объект
 */
HydraEditorToolbar.prototype.get_selected_object = function()
{
    // Пока определяем выбранный объект только для гекко
    return this.get_gecko_selected_object();
}

HydraEditorToolbar.prototype.bold2 = function()
{
    var range = window.getSelection().getRangeAt(0);
  if (range != null) {
    var span = document.createElement('strong');
    span.className = 'myClass';
    range.surroundContents(span);
  }
return true;

    //alert(window.getSelection());
    var selection = this.get_selection();
    
    selection = "<strong>"+selection+"</strong>";
    document.execCommand('inserthtml', false, selection);
  
}

HydraEditorToolbar.prototype.bold = function()
{
    //alert(this.get_selected_object());
    window.document.execCommand("bold", null, "");
}

HydraEditorToolbar.prototype.italic = function()
{
    window.document.execCommand("italic", null, "");
}

HydraEditorToolbar.prototype.list = function()
{
    window.document.execCommand("bold", null, "");
}

/**
 * Создает ссылку из выделенного элемента
 */
HydraEditorToolbar.prototype.link = function()
{
    var url = prompt("Enter a URL:", "http://");

    
    var link = this.get_selected_object();
    if (link.tagName == "A") {
        link.href = url;
        return true;
    }

    this.wrap_selection_by_tag("a", {"href":url});
}

HydraEditorToolbar.prototype.unlink = function()
{
    window.document.execCommand("unlink", null, "");
    return true;

    var link = this.get_selected_object();
    if (!link) {
        return false;
    }
    if (link.tagName == "A") {
        //link.href = url;
        alert(link.innerHTML);
        return true;
    }

    
}

HydraEditorToolbar.prototype.wrap_selection_by_tag = function(tag_name, attr)
{
      //var range = window.getSelection().getRangeAt(0);
      var selection = this.get_selection();
      var range = selection.createRange();

      if (range != null) {
        var elem = document.createElement(tag_name);

        // Проставляем аттрибуты
        for (var attr_name in attr) {
            elem.setAttribute(attr_name, attr[attr_name]);
        }
        
        
        range.surroundContents(elem);
      }
}

HydraEditorToolbar.prototype.numlist = function()
{
    window.document.execCommand("InsertOrderedList", null, "");
}

HydraEditorToolbar.prototype.bullist = function()
{
    window.document.execCommand("InsertUnorderedList", null, "");
}

HydraEditorToolbar.prototype.align_left = function()
{
    this.set_elem_align("left");
    //window.document.execCommand("JustifyLeft", null, "");
}

HydraEditorToolbar.prototype.align_right = function()
{
    this.set_elem_align("right");
    //window.document.execCommand("JustifyRight", null, "");
}

HydraEditorToolbar.prototype.align_justify = function()
{
    this.set_elem_align("justify");
}

HydraEditorToolbar.prototype.align_center = function()
{
    this.set_elem_align("center");
}

HydraEditorToolbar.prototype.set_elem_align = function(align)
{
    // Если у нас объект, то делаем ему выравнивание (например для картинки)
    var obj = this.get_selected_object();
    if (obj.tagName) {
        obj.setAttribute("align", align);
        return true;
    }
     

    // Проверяем, а вдруг у нас уже есть параграф для данного текста
    var selection = this.get_selection();
    var range = selection.createRange();
    var parent_elem = range.parentElement();

    if (parent_elem.tagName == 'P') {
        parent_elem.setAttribute("align", align);
        return true;
    }

    this.wrap_selection_by_tag("p", {"align":align});
}

HydraEditorToolbar.prototype.insert_image = function()
{
    fm2_show();
}

/**
 * Вставляет картинку в редактируемую область
 */
HydraEditorToolbar.prototype.add_image = function(href)
{
    window.document.execCommand('InsertImage', false, href);
}

HydraEditorToolbar.prototype.create_submenu = function(submenu_id, items, item_func)
{
    var ul = document.createElement('ul');
    ul.setAttribute("id", submenu_id);
    for (var item in items) {
        var li = document.createElement('li');
        var a = document.createElement('a');

        item_func(a, item, items[item]);

        li.appendChild(a);
        ul.appendChild(li);
   }

   return ul;
}

HydraEditorToolbar.prototype.create_font_menu = function(elem)
{
    var fonts = {
        arial:"Arial",
        tahoma:"Tahoma",
        times: "Times New Roman",
        courier: "Courier New",
        georgia: "Georgia",
        helvestica: "Helvetica",
        impact: "Impact",
        verdana: "Verdana"
    };

    var ul = this.create_submenu("choose-fonts-menu", fonts,
        function(a, key, value) {
            a.style.fontFamily = value;
            a.innerHTML = value;
            a.href = "javascript: editor_toolbar.set_font('"+value+"');";
        });
    elem.parentNode.appendChild(ul);
    return ul;
    /* ------------------------------------ */

    var ul = document.createElement('ul');
    ul.setAttribute("id", "choose-fonts-menu");
    for (var font in fonts) {
        var li = document.createElement('li');
        var a = document.createElement('a');
        
        a.style.fontFamily = fonts[font];
        a.innerHTML = fonts[font];
        a.href = "javascript: editor_toolbar.set_font('"+fonts[font]+"');";

        li.appendChild(a);
        ul.appendChild(li);

   }
   // Добавляем не как ребенка кнопки, а просто как рядом стоящий на том же уровне узел
   elem.parentNode.appendChild(ul);
   return ul;
}

/**
 * Форматирование
 **/
HydraEditorToolbar.prototype.create_format_menu = function(elem)
{
    var formats = {
        h1:"Заголовок-1",
        h2:"Заголовок-2",
        h3: "Заголовок-3",
        h4: "Заголовок-4",
        h5: "Заголовок-5",
        p: "Параграф"
    };

    var ul = this.create_submenu("choose-format-menu", formats,
        function(a, key, value) {
            var h = document.createElement(key);
            h.innerHTML = value;
            a.appendChild(h);
            a.href = "javascript: editor_toolbar.format_block('"+key+"');";
        });
    elem.parentNode.appendChild(ul);
    return ul;
}

HydraEditorToolbar.prototype.format_block = function(value)
{
    this.exec_command('FormatBlock', value);

    var menu = hydra.get('choose-format-menu');
    if (menu) {
        this.hide_menu(menu);
    }
}


HydraEditorToolbar.prototype.show_menu = function(elem)
{
   elem.style.display = "block";
}

HydraEditorToolbar.prototype.hide_menu = function(elem)
{
   elem.style.display = "none";
}

HydraEditorToolbar.prototype.menu_is_visible = function(elem)
{
   if (elem.style.display == "block") {
       return true;
   }

   return false;
}

HydraEditorToolbar.prototype.exec_command = function(command, value)
{
    window.document.execCommand(command, false, value);
}

/**
 * Устанавливает заданный шрифт
 * @param string font_name имя шрифта
 */
HydraEditorToolbar.prototype.set_font = function(font_name)
{
    window.document.execCommand('FontName', false, font_name);
    var menu = hydra.get('choose-fonts-menu');
    if (menu) {
        this.hide_menu(menu);
    }
}

/**
 * Отображает меню установки шрифта
 * @param object elem - Элемент, для которого нужно отображать выбор шрифта
 * @param string submenu_id идентификатор submenu
 * @param string creator_func_name имя метода, что создает сабменю
 */
HydraEditorToolbar.prototype.show_submenu = function(elem, submenu_id, creator_func_name)
{
    // Проверяем не создали ли мы уже меню
    var menu = hydra.get(submenu_id); 
    if (!menu) {
        // Если меню еще не было создано - создаем его
        menu = this[creator_func_name](elem);  //create_font_menu
    }

    if (this.menu_is_visible(menu)) {
        this.hide_menu(menu);
    }
    else {
        this.show_menu(menu);
    }
}


editor_toolbar = new HydraEditorToolbar();



var cAjaxRequest = function()
{
	this.http_request = false;
}



cAjaxRequest.prototype.init = function()
{
	if (window.XMLHttpRequest) 
	{ // Mozilla, Safari,...
		this.http_request = new XMLHttpRequest();
		if (this.http_request.overrideMimeType) 
		{
			this.http_request.overrideMimeType('text/xml');
		}
	} 
	else if (window.ActiveXObject) 
	{ // IE
		try 
		{
			this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) 
		{
			try 
			{
				this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	if (!this.http_request) {
		alert('Giving up :( Cannot create an XMLHTTP instance');
		return false;
	}



	return true;
}

cAjaxRequest.prototype.call_url = function(url, send_str, callback_func_name, method_type)
{
	this.http_request.onreadystatechange = callback_func_name;
	this.http_request.open(method_type, url, true);

	this.http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8'); 
	this.http_request.setRequestHeader('Accept-Charset', 'utf-8'); 
	this.http_request.setRequestHeader('Accept-Language', 'ru'); 


	//alert(url);	
	//alert(send_str);

	if (method_type=='GET') 
	{
	    send_str = '';
	}
	
	this.http_request.send(send_str);
}

cAjaxRequest.prototype.is_success = function()
{
	//alert(this.http_request.readyState);
	if (this.http_request.readyState == 4) 
	{	// COMPLETED
		if (this.http_request.status == 200) 
		{	// HTTP STATUS
			return true;
		} else 
		{
			alert('There was a problem with the request. '+this.http_request.status);
			return false;
		}
	}
}

cAjaxRequest.prototype.get_ready_state = function()
{
	return this.http_request.readyState;
}


cAjaxRequest.prototype.get_response_text = function()
{

	return this.http_request.responseText;
}

cAjaxRequest.prototype.get_response_xml = function()
{
	//alert(this.http_request.responseText);
	return this.http_request.responseXML;
}


/**
 * Вызов плагина через Ajax.
 * 
 * @access public	
 * @param string plugin_name имя плагина
 * @param string container_id контейнер, куда загружать результат выполнения плагина
 * @param array params параметры плагина
 * @param string custom_url кастомный url для запуска плагина
 * @return void
*/

function call_ajax(plugin_name, container_id, params, custom_url, preloader_container_id)
{
    
    if (params=='undefined')
    {
            params = new Array();
    }

    var ajax = new cAjaxRequest();
    ajax.init();

    // Формируем callback-функцию ответа ajax
    var call_back = function()
    {
        // Если ajax-запрос завершился успешно.
	if (ajax.is_success())
	{
            // В начале пробуем получить ответ в виде xml-документа.
            var xml_doc = ajax.get_response_xml();
		
            if (typeof(xml_doc)=='object')
            {
                var xml_doc_root = xml_doc.documentElement;
                if (xml_doc_root)
                {
                    // Если у нас есть контейнер куда помещать результат.
                    if (container_id != false)
                    {
                        var html_result_node = xml_doc_root.getElementsByTagName('html_result');
                        if (html_result_node)
                        {
                            if (html_result_node[0])
                            {
                                var html_result = html_result_node[0].firstChild.data;
                                if (html_result)
                                {
                                    var container = document.getElementById(container_id);
                                    if (container)
                                    {
                                        if(html_result!='')
                                        {
                                            // ���� � ��� ��������� ��������� ���������� ����� �������
                                            if (container.getAttribute('replace')=='false')
                                            {
                                                container.innerHTML = html_result;
                                            }
                                            else
                                            {
                                                // Dorian - временно включил outer html
                                                //container.outerHTML = html_result;
                                                if (typeof(container.outerHTML) != 'undefined')
                                                {
                                                    //container.outerHTML = html_result;
                                                    container.innerHTML = html_result;
                                                }
                                                else
                                                {
                                                    container.innerHTML = html_result;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }


                    // Работа с JSON.
                    var json_result_node = xml_doc_root.getElementsByTagName('json_result');
                    if (json_result_node)
                    {
                        if (json_result_node[0])
                        {
                            // Извлекаем json-последовательность.
                            var json_result = json_result_node[0].firstChild.data;
                            // Получаем объект json, который потом можем использовать в обработке javascript-вызова.
                            if (json_result!="")
                                var json = eval( "(" + json_result + ")" );
                        }
                    }

                    // Обработка javascript
                    var java_script_result_node = xml_doc_root.getElementsByTagName('java_script_result');
                    if (java_script_result_node)
                    {
                        if (java_script_result_node[0])
                        {
                            var java_script_result = java_script_result_node[0].firstChild.data;
                            eval(java_script_result);
                        }
                    }
					
									
                }
                else
                {
                    var container = document.getElementById(container_id);
                    if (container)
                    {
                        container.innerHTML = ajax.get_response_text();
                    }
                }

        }
			

			delete ajax;
			delete call_back;


		}
	}
	var nocache = Math.random()
	var url = PROJECT_URL + "ajax.php?&s_main_plugin_name="+plugin_name; //+'&nocache='+nocache;
        //var url = PROJECT_URL + "ajax/"+plugin_name+".php";
        if (custom_url != undefined) {
            if (custom_url) {
                url = HYDRA_ROOT_URL + custom_url;
            }
            
        }

	// �������������� ���������� � ������ � ������ ���� ��� ��� ������ ������
	/*if (typeof(params)=='object')
	{
		url = url + arr_to_string(params);
	}*/

    // preloader
    if ((preloader_container_id == 'undefined') || (!preloader_container_id)) {
        preloader_container_id = container_id;
    }
    var elem = document.getElementById(preloader_container_id);
    if (elem) {
        elem.innerHTML = '<img src="'+HYDRA_ROOT_URL+'_core/i/preloader2.gif"/>';
    }
        

    ajax.call_url(url, arr_to_string(params), call_back, 'POST');
}

function arr_to_string(params)
{
	var vars = '';
	for (var HashKey in params) 
	{ 
	   param_name  = HashKey; 
	   param_value = params[HashKey];

	   vars += '&' + param_name + '=' + encodeURIComponent(param_value);
	} 

	return vars;
}


function get_plugin_body(obj)
{

	if (obj.tagName == 'body')
	{
		return false;
	}


	if (obj.getAttribute('plugin_name') == null)
	{
		return get_plugin_body(obj.parentNode);
	}
	else
	{
		return obj;
	}	
	

}

/**
 * function 
 * 
 * @access public	
 * @param 
 * @return 
*/

function reload_plugin(plugin_id) 
{
	
	var plugin_body = document.getElementById(plugin_id);

	var attrs = plugin_body.attributes;

	var params = new Array();
	for(var i = attrs.length-1; i>=0; i--) {
		if(attrs[i].value != 'null') 
		{
			params[attrs[i].name] = attrs[i].value;
		}
	}

	call_ajax(params['plugin_name'], plugin_id, params); 

}

function run_content_plugin(plugin_name, params)
{
    call_ajax(plugin_name, 'content', params);
}

function call_script()
{
    var ajax = new cAjaxRequest();
    ajax.init();

    var url = PROJECT_URL+'test.php';
    ajax.call_url(url, false, function(){ delete ajax; } , 'POST');
}
var cFormValidator = function()
{
	this.message = '';
	this.error_container_id = '';
	
	//this.http_request = false;
}

/**
*	Возвращает текст сообщения при неудачной валидации элемента.
*/
cFormValidator.prototype.get_message = function()
{
	return this.message;
}
/**
*	Возвращает текст сообщения при неудачной валидации элемента.
*/

cFormValidator.prototype.get_error_container_id = function()
{
	return this.error_container_id;
}

cFormValidator.prototype.get_label_caption = function(elem)
{
    //debugger;
    var elem_id = elem.getAttribute('id');
    var label_elem = document.getElementById(elem_id + '_label');
	if (label_elem)
	{
    caption = label_elem.textContent;
    if (caption == undefined) 
    {
        caption = label_elem.innerHTML;
    }
  
	  return caption;
  }
	else
	{
        var caption = elem.getAttribute('caption');
        if (caption)
            return caption;
	
	}
  
  
}

/**
*	Валидирует заданный DOMElement.
*	@param Object elem DOMElement
*	@return boolean
*/
cFormValidator.prototype.validate = function(elem)
{
	if (!elem)
	{
		return true;
	}

	var not_null = elem.getAttribute('not_null');
	var elem_id = elem.getAttribute('id');

        var pattern = elem.getAttribute('pattern');
        this.error_container_id = elem_id+'_error_container';

	// Обработка not null элементов.
	if (not_null == "true")
	{
            var disabled = elem.getAttribute('disabled');
        
        if (disabled)
        {
            return true;
            
        }

		if (elem.value.length == 0)
		{
			var label_caption = this.get_label_caption(elem);
            
			this.message = error_messages.get_not_null_error_message(label_caption);
			elem.style.border = '1px solid red';
			return false;
		}
        else
            {
                this.message = "";
                elem.style.border = ''
            }

		
	}

    // Проверка шаблона
    if (pattern)
    {
        // Если у нас валидация емейла.
        if (pattern=='email') {
            pattern = /^([A-Za-z0-9_\-\.])+@([A-Za-z0-9_\-\.])+.([A-Za-z]{2,4})/;
        }

        var re = new RegExp(pattern);
        if (!re.test(elem.value))
        {
            var label_caption = this.get_label_caption(elem);
			this.message = error_messages.get_pattern_error_message(label_caption);
            elem.style.border = '1px solid red';
            return false;
        }
        else
            {
                this.message = "";
                elem.style.border = ''
            }

             
    }

	return true;
}

form_validator = new cFormValidator();

var cErrorMessages = function()
{
}

/**
*	Возвращает текст сообщения при неудачной валидации элемента.
*/
cErrorMessages.prototype.get_not_null_error_message = function(field_caption)
{
	return NOT_NULL_ERRMSG_BEGIN + field_caption + NOT_NULL_ERRMSG_END;
}

cErrorMessages.prototype.get_pattern_error_message = function(field_caption)
{
	return PATTERN_ERRMSG_BEGIN + field_caption + PATTERN_ERRMSG_END;
}

error_messages = new cErrorMessages();

var NOT_NULL_ERRMSG_BEGIN = 'Поле ';
var NOT_NULL_ERRMSG_END = ' должно быть задано.';
var PATTERN_ERRMSG_BEGIN = 'Поле ';
var PATTERN_ERRMSG_END = ' имеет неверный формат.';


/**
* Сохраняет заданную форму.
* @param String container_id контейнер в котором находится форма.
* @param String state_config_file путь к конфигурационному файлу стейта
* @param String action имя экшена
* @param object button_elem кнопка, которую нажимают
*/
function save_form(container_id, state_config_file, action, button_elem, callback_function, preloader_container_id)
{
    if (button_elem) {
        button_elem.disabled = true;
    }

    display_message(container_id+'.message', 'Изменения применяются...');

    observer.fireEvent('form.save');

    var params = get_input_values(container_id);

    if (!params) {
        if (button_elem) {
            button_elem.disabled = false;
        }
        return false;
    }

    if (action == undefined) {
        var rec_id = dictionary_get_rec_id_value(container_id);
        if (rec_id > 0) {
            params['s_action'] = 'update';
        }
        else {
            params['s_action'] = 'insert';
        }
    }
    else
    {
        params['s_action'] = action;
    }

    if (state_config_file) {
        params['s_file_name'] = state_config_file;
        call_ajax('state', container_id, params, false, preloader_container_id);
    }
    else {
        call_ajax('simple_state', container_id, params, false, preloader_container_id);
    }
    

    

    if (callback_function)
        callback_function();
}

/**
* Загружает форму, вызывая заданный плагин в заданный контейнер.
* @param String dict_plugin_id идентификатор контейра, в котором рассположен справочник.
* @param String form_plugin_id идентификатор плагина формы, которую нужно запустить
* @param String form_container идентификатор контейнера, в который нужно запустить плагин формы
*/
function dictionary_load_form(form_plugin_id, form_container_id, rec_id, grid_plugin_name)
{
    var params = new Array();
    
 
    // Проверяем а есть ли у нас дополнительные параметры
    if (hydra.get(grid_plugin_name+'.extend_params')) {
        params = get_input_values(grid_plugin_name+'.extend_params');
    }

    if (rec_id != undefined)
    {
        if (rec_id)
            params['i_rec_id'] = rec_id;
    }

    return call_ajax(form_plugin_id, form_container_id, params);
}

function dictionary_get_selected_record(dictionary_container_id)
{
	var dictionary_elem = document.getElementById( dictionary_container_id );
	if (!dictionary_elem)
	{
		return false;
	}

	var collection = dictionary_elem.getElementsByTagName('input');
	if (collection) 
	{
		for (i = 0; i < collection.length; i++) 
		{
			if (collection[i].type=='checkbox')
			{
				if (collection[i].checked)
				{
					return collection[i].value;
				}
			}
		}

		return false;
	}
}

/**
* Определеяет значение rec_id элемента.
* @param String container_id контейнер, в котором может находиться элемент rec_id.
* @return int || bool
*/
function dictionary_get_rec_id_value(container_id)
{
	var elem = document.getElementById( container_id );
	if (!elem)
	{
		return false;
	}

	var collection = elem.getElementsByTagName('input');
	if (collection) 
	{
		for (i = 0; i < collection.length; i++) 
		{
			if (collection[i].type=='hidden')
			{
				if (collection[i].name == 'i_rec_id')
				{
					return collection[i].value;
				}
			}
		}

		return false;
	}
}

function dictionary_get_selected_records(container_id)
{
	var elem = document.getElementById( container_id );
	if (!elem)
	{
		return false;
	}

	var collection = elem.getElementsByTagName('input');
	if (collection) 
	{
		var index = 0;
		var recs = new Array();
		for (var i = 0; i < collection.length; i++) 
		{
			if (collection[i].type=='checkbox')
			{
				if (collection[i].checked)
				{
					recs['a_recs['+index+']'] = collection[i].value;
					index++;
				}
			}
		}

		return recs;
	}
}

/**
 *  Загружает плагин формы в заданный контейнер.
 *  @params String plugin_name имя плагина
 *  @params String container_id контейнер, в который нужно загрузить форму
 *  @params int rec_id идентификатор записи
 */
function load_form(plugin_name, container_id, rec_id)
{
    var params = new Array();
    params ['i_rec_id'] = rec_id;

	call_ajax(plugin_name, container_id, params);
}


/**
* Удаляет выбранные записи в рамках заданного контейнера справочника согласно инструкциям
* заданным в state_config_file.
* @params String container_id контейнер, в рамках которого будет происходить удаление.
* @params String state_config_file путь к конфигурационном файлу стейта.
*/
function dictionary_delete_records(container_id, state_config_file)
{
    if (!confirm_delete()) {
        return false;
    }
    
    var plugin_name = 'state';

    var params = dictionary_get_selected_records(container_id);
    params ['s_action'] = 'delete';

    // Проверяем а есть ли у нас дополнительные параметры
    if (hydra.get(container_id+'.extend_params')) {
        var ext_params = get_input_values(container_id+'.extend_params');

        for(var key in ext_params) {
            params[key] = ext_params[key];
        }
    }

    if (state_config_file) {
        params['s_file_name'] = state_config_file;
    }
    else {
        plugin_name = 'simple_state';
    }

    call_ajax(plugin_name, container_id, params);
}

/**
 * Удаление одиночной записи.
 * @param int rec_id идентификатор записи
 * @param String state_config_file путь к файлу конфируграции стейта
 * @param Stering container_id идентификатор контейнера
 */
function dictionary_delete_record(rec_id, state_config_file, container_id, btn)
{
    if (!confirm_delete()) {
        return false;
    }

    if (btn) {
        btn.disabled = true;
    }
    
    var params = new Array();
    params ['s_action'] = 'delete';
    params['s_file_name'] = state_config_file;
    params['i_rec_id'] = rec_id;

    call_ajax('state', container_id, params);

    if (btn) {
        btn.disabled = false;
    }
}
/**
*	Осуществляет запуск всех виджетов в рамках заданного container_id.
*	@param String container_id идентификатор контейнера, в рамках которого осуществляется запуск виджетов.
*
*	<span type="widget" [js_code="какой-то js-code"] [plugin_name="какой плагин запускать"] [id="куда запускать плагин"]></span>
*/
function run_widgets(container_id)
{
    var container = document.getElementById(container_id);
    if (!container)    {
        return false;
    }
    
    // Получение всех span в текущем контейнере, которые потенциально могут быть виджетами.
    var collection = container.getElementsByTagName('span');
    if (collection)
    {
        for (i = 0; i < collection.length; i++)
        {
            // Мы обрабатываем только виджеты.
            var type = collection[i].getAttribute('type');
            if (type == undefined) {
                    // Если нету аттрибута с типом - это не виджет
                    continue;
            }
            if (type != 'widget')  {
                    // Если другое значение аттрибута type - это не виджет
                    continue;
            }

            // Проверяем наличие кастомного js-кода
            var js_code = collection[i].getAttribute('js_code');
            if (js_code) {
                    eval(js_code);
                    continue;
            }

            // Формируем параметры для запуска плагина.
            var attrs = collection[i].attributes;
            if (attrs) {

                // Сбор параметров
                var params = new Array();
                for (var j=0; j<attrs.length; j++) {
                    if(attrs[j].value != 'null') {
                        params[attrs[j].name] = attrs[j].value;
                    }
                }

                // Получение наименования плагина
                var plugin_name = collection[i].getAttribute('plugin_name');
                if (!plugin_name) {
                        // Нечего запускать
                        continue;
                }

                var plugin_container_id = collection[i].getAttribute('id');
                if (!plugin_container_id) {
                        // Некуда запускать
                        continue;
                }
               
                // запуск плагина виджета
                call_ajax(plugin_name, plugin_container_id, params);
            } // of attrs
        } // of for
    } // of if colllection
}

/**
 *  Конструирует объект окна.
 *  
 *  @param String window_id идентификатор окна
 *  @param String window_title заголовок окна
 *  @param String plugin_name имя плагина
 *  @param Array plugin_params параметры плагина
 *  @param function callback_function функция, которая будет вызвана при создании окна
 *  @param array callback_params параметры для callback функции
 **/
var cHydraWindow = function(
        window_id,
        window_title,
        plugin_name,
        plugin_params,
        callback_function,
        callback_params
    )
{
    
    this.window_container_id = window_id + '_container';

    // Проверяем, а нет ли у нас сейчас такого запущенного окна.
	var exist_win_elem = document.getElementById(window_id);
	if (exist_win_elem)
	{
		// Проверка наличия контейнера
		var exit_container_elem = document.getElementById(this.window_container_id);
		if (exit_container_elem)
		{
			return this.window_container_id;
		}
	}
    
    var window_elem = document.createElement('DIV');
	window_elem.style.border = '1px solid black';
	//window_elem.style.width = width + 'px';
	//window_elem.style.height = height + 'px';
	window_elem.style.position = 'absolute';


    var width = 100;
    var height = 100;
  
    
	window_elem.style.left = (screen.width/2-width/2)+'px';
    //debugger;
	window_elem.style.top = (screen.height/2-height + elementWrapper.getScrollY())+'px';
	//window_elem.style.top = (screen.height/2-height + window.scrollY)+'px';
	window_elem.setAttribute('class', 'hydra_window');
	window_elem.setAttribute('id', window_id);
    //debugger;
    /*hydra_add_event(window_elem,'onmousedown',function onmousedown(event){
        //debugger;
        window_elem.x0 = event.clientX;
        window_elem.y0 = event.clientY;
        window_elem.divX0 = parseInt(window_elem.style.left);
        window_elem.divY0 = parseInt(window_elem.style.top);
        window_elem.moveState = true;
    })*/
    /*window_elem.onmousedown= function (event){
        if (!event)event=window.event;
        this.x0 = event.clientX;
        this.y0 = event.clientY;
        this.divX0 = parseInt(window_elem.style.left);
        this.divY0 = parseInt(window_elem.style.top);
        this.moveState = true;
    };
    window_elem.onmouseup = function (event) {
            if (!event)event=window.event;
           this.moveState = false;
    };

    window_elem.onmousemove = function(event) {
        if (!event)event=window.event; 
        if (this.moveState) {
            this.style.left = window_elem.divX0 + event.clientX- window_elem.x0 + 'px';
            this.style.top  = window_elem.divY0 + event.clientY - window_elem.y0 + 'px';
        }
    };*/
    //make_elem_drag_n_drop(window_elem);
    //
    // title
    var window_title_elem = hydra_create_element('DIV', {'class':'title'});
    window_elem.appendChild(window_title_elem);

    var span_elem = document.createElement('div');
    span_elem.innerHTML = window_title;
    window_title_elem.appendChild(span_elem);

	// create close window icon
	var img_elem = document.createElement('img');

	img_elem.setAttribute('src', '../_lib/window/i/close.gif');
    img_elem.style.position = 'absolute';
    img_elem.style.right = '0px';
	img_elem.setAttribute('onclick', 'destroy_window("'+window_id+'");');
	span_elem.appendChild(img_elem);

	// Контейнер содержимого окна
	var container_elem = document.createElement('DIV');
    container_elem.setAttribute('class', 'hydra_window_body');
	container_elem.setAttribute('id', this.window_container_id);
	window_elem.appendChild(container_elem);

    // Создаем само окно.
    document.body.appendChild(window_elem);

    // Загрузка плагина через ajax.
    // Если есть что запускать.
    if (plugin_name)
    {
	if (plugin_params == undefined)
	{
            plugin_params = new Array();
	}
	call_ajax(plugin_name, this.window_container_id, plugin_params);
    }

    // Запуск callback-функции
    if (callback_function != undefined)
    {
	if (typeof(callback_function) == 'function' )
	{
            if(callback_params)
            {
		// Вызов callback функции. с параметрами
		return callback_function(this.window_container_id,callback_params);
            }
            else
            {
		// Вызов callback функции.
		return callback_function(this.window_container_id);
            }
	}
    }

	
}

cHydraWindow.prototype.get_container_id = function()
{
    return this.window_container_id;
}

// Объявим функцию для определения координат мыши
function defPosition(event) {
    var x =0;
    var y = 0;
 /*   if (document.attachEvent != null) { // Internet Explorer & Opera
        x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    }*/
//    if (!document.attachEvent && document.addEventListener) { // Gecko
        x = event.clientX + window.scrollX;
        y = event.clientY + window.scrollY;
//    }
    return {x:x, y:y};
}


// Функция инициализации движения
// Записываем всё параметры начального состояния
/*function initMove(div, event) {

    var event = event || window.event;
    x0 = defPosition(event).x;
    y0 = defPosition(event).y;
    divX0 = parseInt(div.style.left);
    divY0 = parseInt(div.style.top);
    moveState = true;
}



function moveHandler(div, event) {
    var event = event || window.event;
    if (moveState) {
        div.style.left = divX0 + defPosition(event).x - x0;
        div.style.top  = divY0 + defPosition(event).y - y0;
    }
}*/

/**
 * Создает окно.
 * @param String window_id
 * @param String window_title заголовок окна
 * @param int width ширина окна
 * @param int height высота окна
 * @param int left положение окна слева
 * @param int top положение окна сверху
 * @param String plugin_name имя плагина, который нужно запустить в окне
 * @param Array plugin_params параметры для плагина
 * @param Function callback_function функция, которую нужно вызвать после
 * создания окна и загрузки в него плагина.
 */
function create_window(
    window_id,
    window_title,
    width,
    height,
    left,
    top,
    plugin_name,
    plugin_params,
    callback_function
    )
{
	var window_container_id = window_id + '_container';

	// Проверяем, а нет ли у нас сейчас такого запущенного окна.
	var exist_win_elem = document.getElementById(window_id);
	if (exist_win_elem)
	{
		// Проверка наличия контейнера
		var exit_container_elem = document.getElementById(window_container_id);
		if (exit_container_elem)
		{
			return window_container_id;
		}
	}

	var window_elem = document.createElement('DIV');	
	window_elem.style.border = '1px solid black';
	window_elem.style.width = width + 'px';
	window_elem.style.height = height + 'px';
	window_elem.style.position = 'absolute';
	window_elem.style.left = 100;
	window_elem.style.top = 100;
	window_elem.setAttribute('class', 'hydra_window');
	window_elem.setAttribute('id', window_id);

	
	// title
	var window_title_elem = document.createElement('DIV');
    window_title_elem.setAttribute('class', 'title');
	window_elem.appendChild(window_title_elem);

	var span_elem = document.createElement('div');	
	span_elem.innerHTML = 'Заголовок окна';
	window_title_elem.appendChild(span_elem);
	
	// create close window icon
	var img_elem = document.createElement('img');
   
	img_elem.setAttribute('src', '../_lib/window/i/close.gif');
	
	img_elem.setAttribute('onclick', 'destroy_window("'+window_id+'");');
	span_elem.appendChild(img_elem);

	// Контейнер содержимого окна
	var container_elem = document.createElement('DIV');	
	container_elem.setAttribute('id', window_container_id);
	window_elem.appendChild(container_elem);

    // Создаем само окно.
	document.body.appendChild(window_elem);
	
	// Загрузка плагина через ajax.
	// Если есть что запускать.
	if (plugin_name)
	{
		if (plugin_params == undefined)
		{
			plugin_params = new Array();
		}

		call_ajax(plugin_name, window_container_id, plugin_params);
	}
	
	// Запуск callback-функции
	if (callback_function != undefined)
	{
		if (typeof(callback_function) == 'function' )
		{
			// Вызов callback функции.
			return callback_function(window_container_id);
		}
	}

	return window_container_id;
}

function destroy_window(window_id)
{
	var elem = document.getElementById(window_id);
	if (elem)
	{
        if (elem!=undefined)
            document.body.removeChild(elem);
	}
}
/**
 *  Класс для чистки HTML-кода.
 *  @author Sergey Suzdaltsev
 */
var cHTMLCleaner = function()
{
    this.good_tags=["a","p","br","strong","b","em","i","tt","code","pre","ul","ol","li","img","table","tbody","thead","tfoot","caption","tr","td","th","col","colgroup","h1","h2","h3","h4","h5","h6","small","big","sub","sup","div","span"]
    // Теги, допустимые в html-документе.
    this.allowed_tags = [];
    for(i in this.good_tags){
        this.allowed_tags[this.good_tags[i]]=true
    }

    // Инициализация допустимых аттрибутов.
    this.good_attr = [];
    this.good_attr["all"] = ["href", "target", "name", "title", "alt", "src", "id", "bgColor", "color", "class"];
    this.good_attr["img"] = ["width", "height", "border", "align"];
    this.good_attr["table"] = ["cellspacing", "cellpadding", "border", "width"];
    this.good_attr["td"] = ["colspan", "rowspan"];
    this.good_attr["tr td col colgroup"] = ["noWrap", "align", "valign", "width"];
    this.good_attr["a area"] = ["href", "name"];
    this.good_attr["br"] = ["clear"];
    this.good_attr["li"] = ["type"];
    //debugger;
    // Формируем допустимые аттрибуты для разных тегов
    var valid_attr = [];
    for (key in this.good_attr)
    {
        var keys = key.split(" ");
        for (tag in keys)
        {
            for (attr in this.good_attr[key])
            {
                var my_tag_name = keys[tag];
                var my_attr_name = this.good_attr[key][attr];
                if (!this.good_attr[ my_tag_name ]) {
                    this.good_attr[ my_tag_name ] = true;
                }
                
                this.good_attr[ my_tag_name ][ my_attr_name ] = true;
            }
        }
    }
}

/**
 *  Рекурсивно обходит дерево элементов в рамках заданного контейнера.
 *  @param Element elem
 *  @param boolean must_clean
 */
cHTMLCleaner.prototype.clean_tree = function(elem, must_clean)
{
    //debugger;
    var elem_children = elem.children;
    if (elem_children==undefined) {
        elem_children = elem.childNodes;
    }
    var i;
    if(elem_children)
    {
        for(i=elem_children.length-1;i>=0;i--)
        {
            cleaner.clean_tree(elem_children[i], true);
        }
    }

    if(must_clean) cleaner.clean_object(elem);
}

/**
 * Чистит отдельный элемент.
 * @param Element elem
 */
cHTMLCleaner.prototype.clean_object = function(elem)
{
    // Текстовые узлы не трогаем.
    if (elem.nodeType == 3) {
        return;
    }

    current_tag_name = elem.nodeName;
    if (current_tag_name)
    {
        current_tag_name = current_tag_name.toLowerCase();
        // Если данный тег не разрешен убиваем его.
        if (!this.allowed_tags[current_tag_name])
        {
            var parent_node = elem.parentNode;
            parent_node.removeChild(elem);
            return;
        }

        //debugger;
        // Чистим аттрибуты
        var attr = elem.attributes;
        for (var i=0; i<=attr.length-1; i++)
        {   //debugger;
            var attr_name = attr[i].name;
            attr_name = attr_name.toLowerCase();

            
            // Проверка аттрибута class
            if (attr_name == "class") {
               
                var reg = /MsoNormal/;
                var attr_value = attr[i].value;
               
                if (reg.test(attr_value))
                {
                     elem.removeAttribute(attr_name);
                }
            }
            // Проверка className
            if (elem.className) {
                reg = /MsoNormal/;
                attr_value = elem.className;

                if (reg.test(attr_value))
                {
                     elem.removeAttribute("class");
                }
            }
            
            // Если есть хорошие аттрибуты для такого тега
            if (this.good_attr[current_tag_name])
            {
                if (!this.good_attr[current_tag_name][attr_name]) {
                    // Проверяем может такой аттрибут есть у all
                    if (!this.good_attr['all'][attr_name]) {
                        // Убиваем такой аттрибут
                        elem.removeAttribute(attr_name);
                    }
                }
            }
            else {
                // Проверяем может такой аттрибут есть у all
                    if (!this.good_attr['all'][attr_name]) {
                        // Убиваем такой аттрибут
                        elem.removeAttribute(attr_name);
                    }
            }
        }
    }
}
cHTMLCleaner.prototype.clean = function(elem)
{
    debugger;
    

    var children = elem.childNodes;
    var child_count = children.length - 1;
    for(i=0; i<=child_count; i++)
    {
        var child = children[i];
        // Проверяем а есть ли у него дети.
        var child_children = child.childNodes;
        if (child_children) {
            var child_children_count = child_children.length-1;
            if (child_children_count>0) {
                cleaner.clean(child);
            }
        }
        if (child.nodeType == 3 || child.nodeType==8) {
            continue;
        }

        current_tag_name = child.nodeName;
        
        if (current_tag_name) {
            current_tag_name = current_tag_name.toLowerCase();
            var res = this.allowed_tags[current_tag_name];
            if (res == undefined) {
                elem.removeChild(child);
            }
            
            
        }
        else {
            if (child.nodeType == 1) {
                elem.removeChild(child);
            }
        }
        
       
    }
}
document.onmousemove = mouseMove;
document.onmousedown = mouseDown;
document.onmouseup   = mouseUp;
var dragObject     = null;
var mouseOffset = null;
/*
window.onload = function(){
	// Create our helper object that will show the item while dragging
	dragHelper = document.createElement('DIV');
	dragHelper.style.cssText = 'position:absolute;display:none;';

	CreateDragContainer(
		document.getElementById('DragContainer1'),
		document.getElementById('DragContainer2'),
		document.getElementById('DragContainer3')
	);

	document.body.appendChild(dragHelper);
}
*/

function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

function makeClickable(object){
	object.onmousedown = function(){
		dragObject = this;
	}
}




function getMouseOffset(target, ev){
	ev = ev || window.event;

	var docPos    = getPosition(target);
	var mousePos  = mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getPosition(e){
	var left = 0;
	var top  = 0;

	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

/*function mouseMove(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);

	if(dragObject){
		dragObject.style.position = 'absolute';
		dragObject.style.top      = mousePos.y - mouseOffset.y;
		dragObject.style.left     = mousePos.x - mouseOffset.x;

		return false;
	}
}*/

/*function mouseUp(ev){
	dragObject = null;
}*/

/*function makeDraggable(item){
	if(!item) return;
	item.onmousedown = function(ev){
		dragObject  = this;
		mouseOffset = getMouseOffset(this, ev);
		return false;
	}
}
*/
/*
All code from the previous example is needed with the exception
of the mouseUp function which is replaced below
*/

var dropTargets = [];

function addDropTarget(dropTarget){
	dropTargets.push(dropTarget);
}

/*function mouseUp(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);

	for(var i=0; i<dropTargets.length; i++){
		var curTarget  = dropTargets[i];
		var targPos    = getPosition(curTarget);
		var targWidth  = parseInt(curTarget.offsetWidth);
		var targHeight = parseInt(curTarget.offsetHeight);

		if(
			(mousePos.x > targPos.x)                &&
			(mousePos.x < (targPos.x + targWidth))  &&
			(mousePos.y > targPos.y)                &&
			(mousePos.y < (targPos.y + targHeight))){
				// dragObject was dropped onto curTarget!
		}
	}

	dragObject   = null;
}*/

// iMouseDown represents the current mouse button state: up or down
/*
lMouseState represents the previous mouse button state so that we can
check for button clicks and button releases:

if(iMouseDown && !lMouseState) // button just clicked!
if(!iMouseDown && lMouseState) // button just released!
*/
var mouseOffset = null;
var iMouseDown  = false;
var lMouseState = false;
var dragObject  = null;

// Demo 0 variables
var DragDrops   = [];
var curTarget   = null;
var lastTarget  = null;
var dragHelper  = null;
var tempDiv     = null;
var rootParent  = null;
var rootSibling = null;

Number.prototype.NaN0=function(){return isNaN(this)?0:this;}

function CreateDragContainer(){
	/*
	Create a new "Container Instance" so that items from one "Set" can not
	be dragged into items from another "Set"
	*/
	var cDrag        = DragDrops.length;
	DragDrops[cDrag] = [];

	/*
	Each item passed to this function should be a "container".  Store each
	of these items in our current container
	*/
	for(var i=0; i<arguments.length; i++){
		var cObj = arguments[i];
		DragDrops[cDrag].push(cObj);
		cObj.setAttribute('DropObj', cDrag);

		/*
		Every top level item in these containers should be draggable.  Do this
		by setting the DragObj attribute on each item and then later checking
		this attribute in the mouseMove function
		*/
		for(var j=0; j<cObj.childNodes.length; j++){

			// Firefox puts in lots of #text nodes...skip these
			if(cObj.childNodes[j].nodeName=='#text') continue;

			cObj.childNodes[j].setAttribute('DragObj', cDrag);
		}
	}
}

function AddDragContainer(cDrag,cObj){
	/*
	Create a new "Container Instance" so that items from one "Set" can not
	be dragged into items from another "Set"
	*/
    if(!DragDrops[cDrag])
        DragDrops[cDrag] = [];

    DragDrops[cDrag].push(cObj);
    if (cObj)
        cObj.setAttribute('DropObj', cDrag);

    /*
    Every top level item in these containers should be draggable.  Do this
    by setting the DragObj attribute on each item and then later checking
    this attribute in the mouseMove function
    */
    for(var j=0; j<cObj.childNodes.length; j++){

        // Firefox puts in lots of #text nodes...skip these
        if(cObj.childNodes[j].nodeName=='#text') continue;

        cObj.childNodes[j].setAttribute('DragObj', cDrag);
    }
}


function mouseMove(ev){
	ev         = ev || window.event;

	/*
	We are setting target to whatever item the mouse is currently on

	Firefox uses event.target here, MSIE uses event.srcElement
	*/
	var target   = ev.target || ev.srcElement;
	var mousePos = mouseCoords(ev);

	// mouseOut event - fires if the item the mouse is on has changed
	if(lastTarget && (target!==lastTarget)){
		// reset the classname for the target element
		var origClass = lastTarget.getAttribute('origClass');
		if(origClass) lastTarget.className = origClass;
	}

	/*
	dragObj is the grouping our item is in (set from the createDragContainer function).
	if the item is not in a grouping we ignore it since it can't be dragged with this
	script.
	*/
	var dragObj = target.getAttribute('DragObj');

	 // if the mouse was moved over an element that is draggable
	if(dragObj!=null){

		// mouseOver event - Change the item's class if necessary
		if(target!=lastTarget){
			var oClass = target.getAttribute('overClass');
			if(oClass){
				target.setAttribute('origClass', target.className);
				target.className = oClass;
			}
		}
            
		// if the user is just starting to drag the element
		if(iMouseDown && !lMouseState){
            //debugger;

			// mouseDown target
			curTarget     = target;

			// Record the mouse x and y offset for the element
			rootParent    = curTarget.parentNode;
			rootSibling   = curTarget.nextSibling;

			mouseOffset   = getMouseOffset(target, ev);

			// We remove anything that is in our dragHelper DIV so we can put a new item in it.
			for(var i=0; i<dragHelper.childNodes.length; i++) dragHelper.removeChild(dragHelper.childNodes[i]);

			// Make a copy of the current item and put it in our drag helper.
			dragHelper.appendChild(curTarget.cloneNode(true));
			dragHelper.style.display = 'block';

			// set the class on our helper DIV if necessary
			var dragClass = curTarget.getAttribute('dragClass');
			if(dragClass){
				dragHelper.firstChild.className = dragClass;
			}

			// disable dragging from our helper DIV (it's already being dragged)
			dragHelper.firstChild.removeAttribute('DragObj');

			/*
			Record the current position of all drag/drop targets related
			to the element.  We do this here so that we do not have to do
			it on the general mouse move event which fires when the mouse
			moves even 1 pixel.  If we don't do this here the script
			would run much slower.
			*/
			var dragConts = DragDrops[dragObj];

			/*
			first record the width/height of our drag item.  Then hide it since
			it is going to (potentially) be moved out of its parent.
			*/
			curTarget.setAttribute('startWidth',  parseInt(curTarget.offsetWidth));
			curTarget.setAttribute('startHeight', parseInt(curTarget.offsetHeight));
			curTarget.style.display  = 'none';

			// loop through each possible drop container
			for(var i=0; i<dragConts.length; i++){
				with(dragConts[i]){
					var pos = getPosition(dragConts[i]);

					/*
					save the width, height and position of each container.

					Even though we are saving the width and height of each
					container back to the container this is much faster because
					we are saving the number and do not have to run through
					any calculations again.  Also, offsetHeight and offsetWidth
					are both fairly slow.  You would never normally notice any
					performance hit from these two functions but our code is
					going to be running hundreds of times each second so every
					little bit helps!

					Note that the biggest performance gain here, by far, comes
					from not having to run through the getPosition function
					hundreds of times.
					*/
					setAttribute('startWidth',  parseInt(offsetWidth));
					setAttribute('startHeight', parseInt(offsetHeight));
					setAttribute('startLeft',   pos.x);
					setAttribute('startTop',    pos.y);
				}

				// loop through each child element of each container
				for(var j=0; j<dragConts[i].childNodes.length; j++){
					with(dragConts[i].childNodes[j]){
						if((nodeName=='#text') || (dragConts[i].childNodes[j]==curTarget)) continue;

						var pos = getPosition(dragConts[i].childNodes[j]);

						// save the width, height and position of each element
						setAttribute('startWidth',  parseInt(offsetWidth));
						setAttribute('startHeight', parseInt(offsetHeight));
						setAttribute('startLeft',   pos.x);
						setAttribute('startTop',    pos.y);
					}
				}
			}
		}
	}

	// If we get in here we are dragging something
	if(curTarget){
        			//debugger;
		// move our helper div to wherever the mouse is (adjusted by mouseOffset)
		dragHelper.style.top  = (mousePos.y - mouseOffset.y) + 'px';
		dragHelper.style.left = (mousePos.x - mouseOffset.x) + 'px';

		var dragConts  = DragDrops[curTarget.getAttribute('DragObj')];
		var activeCont = null;

		var xPos = mousePos.x - mouseOffset.x + (parseInt(curTarget.getAttribute('startWidth')) /2);
		var yPos = mousePos.y - mouseOffset.y + (parseInt(curTarget.getAttribute('startHeight'))/2);

		// check each drop container to see if our target object is "inside" the container
		//for(var i=(dragConts.length-1); i>=0; i++){
            //debugger;
		for(var i=(dragConts.length-1); i>=0; i--){
			with(dragConts[i]){
				if(((parseInt(getAttribute('startLeft')))                               < parseInt(xPos)) &&
					((parseInt(getAttribute('startTop')))                                < parseInt(yPos)) &&
					((parseInt(getAttribute('startLeft')) + parseInt(getAttribute('startWidth')))  > parseInt(xPos)) &&
					((parseInt(getAttribute('startTop'))  + parseInt(getAttribute('startHeight'))) > parseInt(yPos))){

						/*
						our target is inside of our container so save the container into
						the activeCont variable and then exit the loop since we no longer
						need to check the rest of the containers
						*/
						activeCont = dragConts[i];

						// exit the for loop
						break;
				}
			}
		}

		// Our target object is in one of our containers.  Check to see where our div belongs
		if(activeCont){
			// beforeNode will hold the first node AFTER where our div belongs
			var beforeNode = null;

			// loop through each child node (skipping text nodes).
			for(var i=activeCont.childNodes.length-1; i>=0; i--){
				with(activeCont.childNodes[i]){
					if(nodeName=='#text') continue;

					// if the current item is "After" the item being dragged
					if(
						curTarget != activeCont.childNodes[i]                              &&
						((parseInt(getAttribute('startLeft')) + parseInt(getAttribute('startWidth')))  > parseInt(xPos)) &&
						((parseInt(getAttribute('startTop'))  + parseInt(getAttribute('startHeight'))) > parseInt(yPos))){
							beforeNode = activeCont.childNodes[i];
					}
				}
			}

			// the item being dragged belongs before another item
			if(beforeNode){
				if(beforeNode!=curTarget.nextSibling){
					activeCont.insertBefore(curTarget, beforeNode);
				}

			// the item being dragged belongs at the end of the current container
			} else {
				if((curTarget.nextSibling) || (curTarget.parentNode!=activeCont)){
					activeCont.appendChild(curTarget);
				}
			}

			// make our drag item visible
			if(curTarget.style.display!=''){
				curTarget.style.display  = '';
			}
		} else {

			// our drag item is not in a container, so hide it.
			if(curTarget.style.display!='none'){
				curTarget.style.display  = 'none';
			}
		}
	}

	// track the current mouse state so we can compare against it next time
	lMouseState = iMouseDown;

	// mouseMove target
	lastTarget  = target;

	// track the current mouse state so we can compare against it next time
	lMouseState = iMouseDown;

	// this helps prevent items on the page from being highlighted while dragging
	return false;
}

function mouseUp(ev){
	if(curTarget){
		// hide our helper object - it is no longer needed
		dragHelper.style.display = 'none';

		// if the drag item is invisible put it back where it was before moving it
		if(curTarget.style.display == 'none'){
			if(rootSibling){
				rootParent.insertBefore(curTarget, rootSibling);
			} else {
				rootParent.appendChild(curTarget);
			}
		}

		// make sure the drag item is visible
		curTarget.style.display = '';
	}
	curTarget  = null;
	iMouseDown = false;
}

function mouseDown(){
	iMouseDown = true;
    if(lastTarget){
        if(lastTarget.getAttribute('draggable'))
            {
                return false; 
            }
	}
}


/**
 * Активация пакета.
 *
 * @param object self
 */
function activate_package(self, package_name, grid_name)
{
    //self.disabled = true;
    draw_message(grid_name+'.message', 'Изменения применяются.');

    var params = new Array();
    params['s_package_name'] = package_name;
    params['s_action'] = 'install';
    call_ajax('package_state', grid_name+'.message', params);
}

function deactivate_package(self, package_name, grid_name)
{
    //self.disabled = true;
    draw_message(grid_name+'.message', 'Изменения применяются.');

    var params = new Array();
    params['s_package_name'] = package_name;
    params['s_action'] = 'remove';
    call_ajax('package_state', grid_name+'.message', params);
}
function auth_user_profiles_manager_load()
{
	
	var params = Array();
    call_ajax('auth_user_profiles_manager', 'content', params);    

}


function auth_user_register_page_load()
{
	
	var params = Array();
    call_ajax('auth_user_register_page', 'auth_user_register_form', params);    

}

function auth_user_confirm_page_load()
{

	var params = Array();
    call_ajax('auth_user_confirm_page', 'content', params);    

}





function auth_user_register_form_load()
{
	
	var params = Array();
    call_ajax('auth_user_register_form', 'content', params);    

}

function auth_user_register() 
{
	debugger;	
	var params = get_input_values('auth_user_register_form');
    params['s_action'] = 'register_user';

	clean_form_message('auth_user_register_form');
	send_form_message('auth_user_register_form', 'Анализ данных', 'inform');

    call_ajax('auth_user_state', 'form_message', params);    

}


function profile_load_form(plugin_form_name)
{

	var container = document.getElementById('auth_user_profiles_manager_content');
	container.innerHTML = '<div id="profile_form_body"><div/>'
	call_ajax(plugin_form_name, 'profile_form_body');

}



/**
 * function 
 * 
 * @access public	
 * @param 
 * @return 
*/

//01.04.2008 Roman - добавлен обязательный аттрибут form_body_id для работы со несколькими формами врамках броузера (по идее он соответствует идентификатору контейнера плагина и потому из-вестен на уровне стейта)
function send_form_message(form_body_id, message, type_id) 
{

	var form_message_element = get_form_message_element(form_body_id); 
	form_message_element.innerHTML += '<span class="form_message_' + type_id + '">' + message + '</span>';

}

/**
 * function 
 * 
 * @access public	
 * @param 
 * @return 
*/

//01.04.2008 Roman - добавлен обязательный аттрибут form_body_id для работы со несколькими формами врамках броузера (по идее он соответствует идентификатору контейнера плагина и потому из-вестен на уровне стейта)
function clean_form_message(form_body_id) 
{

	var form_message_element = get_form_message_element(form_body_id); 
	form_message_element.innerHTML = '';

}

/**
 * function 
 * 
 * @access public	
 * @param 
 * @return 
*/

function get_form_message_element(form_body_id) 
{
	
	var form_body = document.getElementById(form_body_id);
	var elements = form_body.getElementsByTagName('div');

	for (var i = 0; i < elements.length; i++) 
	{
		var element = elements[i];
		if(element.getAttribute('name') == 'form_message') 
		{
			return element; 
		}
	
	}

	return false;
}

/**
 * function auth_user_activate_jur_lica
 * активирует юридические лица на форме регистрации пользователя
 * @access public	
 * @autor Dorian 
 * @param 
 * @return 
*/

function auth_user_activate_jurlica()
{
	set_conatiner_elements_disabled_value('auth_user_register_form.jurlica', false);
    set_conatiner_elements_disabled_value('auth_user_register_form.phizlica', true);
}

function auth_user_activate_phizlica()
{
	set_conatiner_elements_disabled_value('auth_user_register_form.jurlica', true);
    set_conatiner_elements_disabled_value('auth_user_register_form.phizlica', false);
}

function auth_user_profile_apply(btn)
{
	var params = get_input_values('auth_user.account');

	params['s_action'] = 'profile_apply';
    params['i_user_id'] = document.getElementById('auth_user_profile').getAttribute('i_user_id');
	
	clean_form_message('auth_user.account');
	send_form_message('auth_user.account', 'Анализ данных', 'inform');

    call_ajax('auth_user_state', false, params);    
}

function auth_user_profile_apply_password(btn)
{

	clean_form_message('auth_user.account_password');

	var params = get_input_values('auth_user.account_password');
    params['s_action'] = 'profile_apply_password';
    params['i_user_id'] = document.getElementById('auth_user_password_profile').getAttribute('i_user_id');


	if(params['a_auth_user[account][confirmation_password]'] != params['a_auth_user[account][password]']) 
	{
		send_form_message('auth_user.account_password', 'Пароли не совпадают', 'error');
		return false;
	}

	send_form_message('auth_user.account_password', 'Анализ данных', 'inform');

    call_ajax('auth_user_state', false, params);    
}

function auth_user_activate_profile_apply(btn)
{
	var params = get_input_values('auth_user_profile_activate');

	params['s_action'] = 'profile_apply_active';
    params['i_user_id'] = document.getElementById('auth_user_profile_activate').getAttribute('i_user_id');
	
	clean_form_message('auth_user_profile_activate');
	send_form_message('auth_user_profile_activate', 'Анализ данных', 'inform');

    call_ajax('auth_user_state', false, params);    
}

function auth_user_roles_profile_apply(btn)
{
	var params = get_input_values('auth_user_profile_roles');

	params['s_action'] = 'profile_apply_roles';
    params['i_user_id'] = document.getElementById('auth_user_profile_roles').getAttribute('i_user_id');
	
	clean_form_message('auth_user_profile_roles');
	send_form_message('auth_user_profile_roles', 'Анализ данных', 'inform');

    call_ajax('auth_user_state', false, params);    
}


/**
 * function 
 * 
 * @access public	
 * @param 
 * @return 
*/

function auth_user_admin_users_list_open_manager(user_id) 
{

	document.getElementById('auth_user_admin_users_list[list]').style.display = 'none';
	
	var form_body = document.getElementById('auth_user_admin_users_list[form_manager]');
	form_body.style.display = 'block';
	form_body.innerHTML = '<div id="auth_user_admin_users_list[form_manager]_body"></div>';
	
	var params = new Array();
	params['i_user_id'] = user_id;
	call_ajax('auth_user_admin_users_list_form_manager', 'auth_user_admin_users_list[form_manager]_body', params); 

}

function auth_user_admin_users_list_open_manager_close()
{

	document.getElementById('auth_user_admin_users_list[list]').style.display = 'block';
	document.getElementById('auth_user_admin_users_list[form_manager]').style.display = 'none';
	document.getElementById('auth_user_admin_users_list[form_manager]').innerHTML = '';

}

function admin_profile_load_form(plugin_form_name)
{

	var container = document.getElementById('auth_user_admin_users_list_form_manager_content');
	container.innerHTML = '<div id="admin_profile_form_body"><div/>'

	var params = new Array();
	params['i_user_id'] = document.getElementById('auth_user_admin_users_list_form_manager').getAttribute('i_user_id');

	call_ajax(plugin_form_name, 'admin_profile_form_body', params);

}


/**
 * function 
 * 
 * @access public	
 * @param 
 * @return 
*/

function auth_user_admin_users_delete(user_id) 
{

	if(confirm('Вы уверенны что ходите удалить пользователя?'))
	{ 

		var params = new Array();

		params['s_action'] = 'profile_delete';
		params['i_user_id'] = user_id;

		call_ajax('auth_user_state', false, params);    

	}

}

/**
 * Позволяет показывать и скрывать пароль
 */
function auth_show_password(elem_id)
{
    var elem = hydra.get(elem_id);
    if (!elem) {
        return false;
    }
    
    var type = elem.getAttribute('type');
    if (type == 'password') {
        elem.setAttribute('type', 'text');
    }
    else {
        elem.setAttribute('type', 'password');
    }
}
function password_recover(container_id,plugin_id)
{
	var params = get_input_values(container_id);
	call_ajax(plugin_id, container_id, params);
}

function division_edit(division_id)
{
    var input = window.document.getElementById('division_input_'+division_id);
    var cancel_link = window.document.getElementById('division_cancel_'+division_id);
    var update_link = window.document.getElementById('division_update_'+division_id);
    var edit_link = window.document.getElementById('division_edit_'+division_id);
    cancel_link.style.display = 'inline';
    update_link.style.display = 'inline';
    edit_link.style.display = 'none';
    
    input.readOnly = false;
    input.style.borderStyle = 'double'
    input.style.backgroundColor = 'silver';
    input.style.color = 'black';
}
function division_cancel(division_id)
{
    var input = window.document.getElementById('division_input_'+division_id);
    var hidden = window.document.getElementById('division_hidden_'+division_id);
    var cancel_link = window.document.getElementById('division_cancel_'+division_id);
    var update_link = window.document.getElementById('division_update_'+division_id);
    var edit_link = window.document.getElementById('division_edit_'+division_id);
    cancel_link.style.display = 'none';
    update_link.style.display = 'none';
    edit_link.style.display = 'inline';

    input.style.borderStyle = 'none';
  
    input.style.backgroundColor = 'transparent';
    input.readOnly = true;
    input.value = hidden.value;
 }
function division_update(division_id)
{
    var input = window.document.getElementById('division_input_'+division_id);
    var hidden = window.document.getElementById('division_hidden_'+division_id);
    var cancel_link = window.document.getElementById('division_cancel_'+division_id);
    var update_link = window.document.getElementById('division_update_'+division_id);
    var edit_link = window.document.getElementById('division_edit_'+division_id);
    cancel_link.style.display = 'none';
    update_link.style.display = 'none';
    edit_link.style.display = 'inline';

    var new_value = input.value;

    input.style.borderStyle = 'none';
    input.style.backgroundColor = 'transparent';
    input.readOnly = true;

    var params = Array();
    params['s_file_name'] = '../_modules/division_manager/xml/state/division_manager_form.xml';
    params['s_action'] = 'update';
    params['i_division_id'] = division_id;
    params['s_division_name'] = new_value;
	//debugger;
    call_ajax('state', 'division_div', params);
    hidden.value = new_value;
}
function division_delete(division_id, parent_id)
{
    if (!confirm("Вы уверены что хотите удалить выбранный раздел?")) {
        return false;
    }

    var params = Array();
    params['s_file_name'] = '../_modules/division_manager/xml/state/division_manager_form.xml';
    params['s_action'] = 'delete';
    params['i_division_id'] = division_id;
    params['i_parent_id'] = parent_id;
    //debugger;
    call_ajax('state', 'division_div', params);
}
function division_insert(division_id)
{
    var params = Array();
    params['s_file_name'] = '../_modules/division_manager/xml/state/division_manager_form.xml';
    params['s_action'] = 'insert';
    params['i_parent_id'] = division_id;
    //debugger;
    call_ajax('state', 'division_div', params);

    //li.parentNode.removeChild(li);
}


function division_show_children(division_id)
{
    var open_a_tag = window.document.getElementById('division_'+division_id+'_a_open');
    open_a_tag.style.display = 'none';
    var close_a_tag = window.document.getElementById('division_'+division_id+'_a_close');
    close_a_tag.style.display = 'inline';
    var params = Array();
    params['i_parent_id'] = division_id;
    //debugger;
    call_ajax('division_manager', 'division_'+division_id+'_children', params);
}
function division_hide_children(division_id)
{
    var open_a_tag = window.document.getElementById('division_'+division_id+'_a_open');
    open_a_tag.style.display = 'inline';
    var close_a_tag = window.document.getElementById('division_'+division_id+'_a_close');
    close_a_tag.style.display = 'none';
    var div_children = window.document.getElementById('division_'+division_id+'_children');
    div_children.removeChild(div_children.childNodes[1]);
}
function division_clean_children(division_id)
{
    var open_a_tag = window.document.getElementById('division_'+division_id+'_a_open');
    var close_a_tag = window.document.getElementById('division_'+division_id+'_a_close');

    var div_children = window.document.getElementById('division_'+division_id+'_children');
    if(div_children){
        if(div_children.getElementsByTagName('li').length==0 & div_children.getElementsByTagName('ul').length>0)
            {
                div_children.removeChild(div_children.childNodes[1]);
                open_a_tag.style.display = 'none';
                close_a_tag.style.display = 'none';
            }
    }
}

function open_properties_form(division_id, container_id)
{
    
    var win = new cHydraWindow(
    'properties_tabs_window',
    'Свойства раздела');

    /*window_id,
    window_title,
    plugin_name,
    plugin_params,
    callback_function,
    callback_params*/
   
        
    // Создаем объект закладок order_tabs
    // При этом закладки создаются внутри контейнера container_id
    // Имя области закладок order_tabs
    // 500 и 400 соотв. ширина и высота элемента закладок
    properties_tabs = new cTabs(win.get_container_id(), 'properties_tabs', 330, 350);

     //var container = window.document.getElementById(container_id);
     //container.style.display = 'block';
     var params = new Array();
     params['i_division_id'] = division_id;
     // Добавляем вкладку с лейблом Заказа, не даем ей прямой ссылки (false)
     // при открытии влкадки будет загружаться плагин order_management_form
     // с параметрами params
     //debugger;
     properties_tabs.add('SEO', false, 'division_properties_form', params);
     properties_tabs.add('Права', false, 'division_rights_form', params);
     properties_tabs.add('Материалы', false, 'division_materials_form', params);
     properties_tabs.add('Шаблоны', false, 'division_template', params);
     //properties_tabs.add('Многоязычность', false, 'order_detail_management', params);

     // Открываем первую по счету вкладку
     properties_tabs.open_tab(0);

      
    
}

function division_properties_apply()
{

    var btn = document.getElementById('division_properties.apply_btn');
    btn.setAttribute('disabled', true);

    var message = document.getElementById('division_properties.message');
    message.innerHTML = 'Идет сохранение...';

    save_form('division_properties_form', '../_modules/division_manager/xml/state/division_properties_form.xml', 'apply', false, false, 'division_properties.message');
}

function division_properties_update(container_id)
{
    var params = Array();
	params = get_input_values(container_id);
    if (!params)
    {
        // Если нечего сохранять.
        return false;
    }
    params['s_file_name'] = '../_modules/division_manager/xml/state/division_properties_form.xml';
    params['s_action'] = 'division_properties_update';
    //debugger;
    call_ajax('state', container_id, params);
    destroy_window("properties_tabs_window");
}

function division_rights_save(container_id)
{
    var button = document.getElementById('division_rights.apply_btn');
    if (button) {
        button.disabled = true;
    }

    display_message('division_rights.message', 'Идет сохранение');

    var params = Array();
	params = get_input_values(container_id);
    if (!params)
    {
        // Если нечего сохранять.
        return false;
    }
    params['s_file_name'] = '../_modules/division_manager/xml/state/division_rights_form.xml';
    params['s_action'] = 'save';
    //debugger;
    call_ajax('state', container_id, params, false, 'division_rights.message');
    //destroy_window("properties_tabs_window");

    display_message('division_rights.message', 'Сохранение завершено.');
    if (button) {
        button.disabled = false;
    }
}

function division_materials_save(container_id)
{
    disable_element('division_materials.apply_btn');
    draw_message('division_materials.message', 'Идет сохранение');

    var params = Array();
	params = get_input_values(container_id);
    params['s_file_name'] = '../_modules/division_manager/xml/state/division_materials_form.xml';
    params['s_action'] = 'save';
    //debugger;
    call_ajax('state', container_id, params, false, 'division_materials.message');

    draw_message('division_materials.message', 'Изменения применены');
    enable_element('division_materials.apply_btn');
    //destroy_window("properties_tabs_window");
}

function save_division_parents_orders(container_id,ret_container_id)
{
    document.getElementById(ret_container_id).innerHTML = 'Порядок сохраняется...';
    var ul_tree = document.getElementById(container_id);
    var root_li = ul_tree.childNodes[0];
    //alert(root_li);
    //alert(root_li.getAttribute('division_id'));
    var root_id = root_li.getAttribute('division_id');
    var root_children = document.getElementById('division_'+root_id+'_children').childNodes[1];
    var parents_array = new Array();
    parents_array[root_id] = 0;
    parents_array = get_parents_rec(root_children,parents_array,root_id);

    var orders_array = new Array();
    //parents_array[root_id] = 0;
    orders_array = get_orders_rec(root_children,orders_array);
    //обновляем родителей
    var params = new Array();
    params['s_file_name'] = '../_modules/division_manager/xml/state/division_manager_form.xml';
    for(var i=0;i<parents_array.length;i++)
        {
            if(parents_array[i] != undefined)
                {
                    params['a_parents['+i+']'] = parents_array[i];
                }
        }
    params['s_action'] = 'save_parents';
    call_ajax('state', container_id, params);
    
    //обновляем порядковые номера
    var params = new Array();
    params['s_file_name'] = '../_modules/division_manager/xml/state/division_manager_form.xml';
    for(var i=0;i<orders_array.length;i++)
        {
            if(orders_array[i] != undefined)
                {
                    params['a_orders['+i+']'] = orders_array[i];
                }
        }
    params['s_action'] = 'save_orders';
//debugger;

    call_ajax('state', container_id, params);
    //debugger;
}

function get_parents_rec(container, parents_array,parent_id)
{
    for(var i=0; i<container.childNodes.length;i++)
        {
            var li = container.childNodes[i];
            var division_id = li.getAttribute('division_id');
            parents_array[division_id] = parent_id;
            var li_children = document.getElementById('division_'+division_id+'_children').childNodes[1];
            if(li_children)
                {
                    parents_array = get_parents_rec(li_children,parents_array,division_id);
                }
        }
    return parents_array;
}
function get_orders_rec(container, orders_array)
{
    for(var i=0; i<container.childNodes.length;i++)
        {
            var li = container.childNodes[i];
            var division_id = li.getAttribute('division_id');
            orders_array[division_id] = i;
            var li_children = document.getElementById('division_'+division_id+'_children').childNodes[1];
            if(li_children)
                {
                    orders_array = get_orders_rec(li_children,orders_array);
                }
        }
    return orders_array;
}

/**
 * Открывает окно со свойствами заданного материала
 *
 * @param string materialPlugin
 */
function open_material_properties_window(materialPlugin,division_id) {

    var params = new Array();
    params['i_division_id'] = division_id;

    var window = new cHydraWindow(
        'material_properties_win',
        'Управление материалами',
        materialPlugin + '_properties',
        params
    );
}

USER_STATE_CONFIG = '../_modules/users/xml/state/user_management_form.xml';

/**
 * Открывает форму закза.
 * @param int order_id идентификатор заказа.
 * @param String container_id контейнер, в который необходимо загрузить форму.
 */
function open_change_user_form(container_id, rec_id)
{
    // Создаем объект для работы с вкладками в контейнере container_id
    users_tabs = new cTabs(container_id, 'users_tabs', 500, 400);

    var params = new Array()
    params['i_rec_id'] = rec_id;
     
     // Добавляем вкладку с лейблом Заказа, не даем ей прямой ссылки (false)
     // при открытии влкадки будет загружаться плагин order_management_form
     // с параметрами params
     users_tabs.add('Общие', false, 'users_management_form', params);
     users_tabs.open_tab(0);
    
     // Создаем вкладку изменить пароль
     users_tabs.add('Изменить пароль', false, 'users_password_management_form', params, '');
     
     // Создаем вкладку по управлению группами
     users_tabs.add('Группы', false, 'users_groups_management_form', params);
}

function open_add_user_form(container_id)
{

     users_tabs = new cTabs(container_id, 'users_tabs', 500, 400);
     var params = new Array();
     // Добавляем вкладку с лейблом Заказа, не даем ей прямой ссылки (false)
     // при открытии влкадки будет загружаться плагин order_management_form
     // с параметрами params
     users_tabs.add('Общие', false, false, false);
     dictionary_load_form('users_management_form','users_tabs[items][0]');
     //users_tabs.add('Изменить пароль', false, false, false);
     //dictionary_load_form('users_password_management_form','users_tabs[items][1]');
     // Открываем первую по счету вкладку
     users_tabs.open_tab(0);
}

/**
 * Открывает форму закза.
 * @param int order_id идентификатор заказа.
 * @param String container_id контейнер, в который необходимо загрузить форму.
 */
function save_user_groups(container_id)
{
    var params = Array();
	params = get_input_values(container_id);
    params['s_file_name'] = USER_STATE_CONFIG;
    params['s_action'] = 'save_user_groups';
    
    call_ajax('state', container_id, params);
}

function activate_user(rec_id,container_id)
{
    var params = Array();
	params['i_user_id'] = rec_id;
    /*params['s_file_name'] = USER_STATE_CONFIG;
    params['s_action'] = 'activate_user';*/

    call_ajax('users_activate_user', container_id, params);

}
function send_activation_link(user_id,container_id)
{
    var params = Array();
	params['i_user_id'] = user_id;
    //alert(user_id);
    /*params['s_file_name'] = USER_STATE_CONFIG;
    params['s_action'] = 'activate_user';*/

    call_ajax('send_activation_link', container_id, params);

}

function do_registration(btn)
{
    btn.disabled = true;

    observer.fireEvent('registration.before', btn);

    return save_form('users_registration_form', '../_modules/users/xml/state/users_registration_form.xml', 'insert', btn);

    /*
    var pass_input = document.getElementById('users_registration_form').getElementsByTagName('input');
    if(pass_input[1].value==pass_input[2].value)
            return save_form('users_registration_form', '../_modules/users/xml/state/users_registration_form.xml', 'insert', btn);
    else {
        draw_message('users_registration_form.message', 'Пароли не совпадают');
    }*/


    btn.disabled = false;
}


/**
 * Открывает соответствующий таб пользовательского профайла.
 * @param int order_id идентификатор заказа.
 * @param String container_id контейнер, в который необходимо загрузить форму.
 */
function open_user_profile_tab(plugin_name, container_id, rec_id)
{
    var params = Array();
    params['i_rec_id']= rec_id;
    call_ajax(plugin_name,container_id,params);
}
function open_groups_form(container_id, rec_id)
{
     groups_tabs = new cTabs(container_id, 'groups_tabs', 500, 400);

     var params = new Array()
     params['i_rec_id'] = rec_id;

     // Добавляем вкладку с лейблом Заказа, не даем ей прямой ссылки (false)
     // при открытии влкадки будет загружаться плагин order_management_form
     // с параметрами params
     groups_tabs.add('Общие', false, 'group_management_form', params);
     groups_tabs.open_tab(0);
     


     groups_tabs.add('Доступ по IP', false, 'group_management_access', params, '');

}
/**
 * Делает элемент редактируемым
 */
function set_elem_editable(elem_id)
{
    var elem = hydra.get(elem_id);
    if (!elem) {
        return false;
    }
   
    elem.setAttribute("contentEditable", "true");
    elem.setAttribute("style", "border:1px solid black;border-style: dashed;");
}

function set_elem_not_editable(elem_id)
{
    var elem = hydra.get(elem_id);
    if (!elem) {
        return false;
    }

    elem.setAttribute("contentEditable", "false");
    elem.setAttribute("style", "");
}

function create_textarea_for(container_id)
{
    // Создаем текстовую область
    var editor_div = hydra.get(container_id);
    if (!editor_div) {
        alert("Немогу найти элемент с контентом");
        return false;
    }

    var textarea = document.createElement("textarea");
    textarea.setAttribute("id", container_id+"-html");

    textarea.style.width = editor_div.clientWidth+"px";

    var height = editor_div.clientHeight;
    if (height < 20) {
        height = 250;
    }
    textarea.style.height = height+"px";
    textarea.innerHTML = editor_div.innerHTML;
    textarea.style.display  = "none";

    editor_div.parentNode.insertBefore( textarea, editor_div );
    return true;
}

/**
 * Делает публикацию редактируемой
 * @param int publication_id идентификатор публикации
 */
function publication_edit(publication_id)
{
    set_elem_editable("publication-title-"+publication_id);
    set_elem_editable("publication-content-"+publication_id);

    // Создаем текстовую область
    create_textarea_for("publication-content-"+publication_id);

    // Инициализация тулбара
    editor_toolbar.init("publication-toolbar-"+publication_id, "publication-content-"+publication_id);

    call_ajax('publications_seo_manage', "publication-panel-"+publication_id, {"i_rec_id":publication_id});
}

/**
 * Создает новую публикацию
 */
function publication_new()
{
    var container = hydra.get("publication-new");
    container.innerHTML = '';
    
    var form_elem = document.createElement('div');
    form_elem.setAttribute('id', "publication-new-form");
    container.appendChild(form_elem);

    call_ajax('publications_new', "publication-new-form");
}

function publication_edit_cancel(publication_id)
{
    set_elem_not_editable("publication-title-"+publication_id);
    set_elem_not_editable("publication-content-"+publication_id);
    hydra.get("publication-panel-"+publication_id).innerHTML = "";
    hydra.get("publication-toolbar-"+publication_id).innerHTML = "";
}

/**
 * Сохранение публикации
 */
function publication_save(publication_id, btn)
{
    //btn.disabled = "true";
    
    var params = get_input_values('publication-panel-'+publication_id);
    if (hydra.get("publication-title-"+publication_id)) {
        params['s_page_title'] = hydra.get("publication-title-"+publication_id).innerHTML;
    }
    if (hydra.get("publication-content-"+publication_id)) {
        params['s_page_content'] = hydra.get("publication-content-"+publication_id).innerHTML;
    }
    
    params['i_rec_id'] = publication_id;
    if (publication_id > 0) {
        params['s_action'] = 'update';
    }
    else {
        params['s_action'] = 'insert';
        var div_elem = hydra.get("publications-list");
        params['i_division_id'] = div_elem.getAttribute("division_id");
    }
    

    call_ajax('publications_state', 'publication-message-'+publication_id, params);
}

function publication_delete(publication_id, btn)
{
    btn.disabled = "true";
    if (!confirm("Вы уверены, что хотите удалить публикацию?")) {
        btn.removeAttribute("disabled");
        return false;
    }

    var params =  new Array();
    params['i_rec_id'] = publication_id;
    params['s_action'] = 'delete';

    call_ajax('publications_state', 'publication-message-'+publication_id, params);
}

/**
 * -------------------------------
 */
function editor_get_selection()
{
    var selection = (document.selection || window.getSelection());

    alert(selection);
}

function editor_set_bold()
{
    editor_get_selection();
}


function init_toolbar(items, publication_id)
{
    
    var toolbar_container = hydra.get("publication-toolbar-"+publication_id);
    var toolbar = document.createElement('ul');
    for (var item_index in items) {
        var li = document.createElement('li');
        var a = document.createElement('a');

        //button.setAttribute('onclick', items[item_index]["onclick"]);
        button.onclick = items[item_index]["onclick"];
        button.style.setProperty("background-image", "url(../_components/wysiwyg_toolbar/i/bold.gif);", "22");
        //button.style.background.image = "url(../_components/wysiwyg_toolbar/i/bold.gif);";
        button.style.width = "16px";
        button.style.height = "16px";
        button.style.display = "block";

        

        toolbar.appendChild(button);
    }
    toolbar_container.appendChild(toolbar);
}

function add_comment(container_id,entity_type_id,entity_id)
{
    var params = Array();
    params['i_entity_type_id'] = entity_type_id;
    params['i_entity_id'] = entity_id;
    //debugger;
    call_ajax('comments_form', container_id, params);
}

/**
 * Подтверждает комментарий.
 * @param String container_id идентификатор контейнера
 * @param int comment_id идентификатор комментария.
 */
function approve_comment(container_id, comment_id)
{
    comment_set_approve_message(comment_id, 'Подтверждается...');

    var params =  new Array();
    params['s_action'] = 'approve_comment';
    params['s_file_name'] = '../_modules/comments/xml/state/comments_form.xml';
    params['i_comment_id'] = comment_id;
    call_ajax('state', container_id, params);
}

function comment_set_approve_message(comment_id, message)
{
    var elem = document.getElementById('comment_'+comment_id+'_approve');
    if (elem)
    {
        elem.innerHTML = message;
    }
}

/**
 * Удаляет комментарий.
 * @param String container_id идентификатор контейнера
 * @param int comment_id идентификатор комментария.
 */
function delete_comment(container_id, comment_id)
{
    comment_set_approve_message(comment_id, 'Удаляется...');

    var params =  new Array();
    params['s_action'] = 'delete_comment';
    params['s_file_name'] = '../_modules/comments/xml/state/comments_form.xml';
    params['i_comment_id'] = comment_id;
    call_ajax('state', container_id, params);
}
function add_comment_form(container_id)
{
    var params = Array();
	params = get_input_values(container_id);
    if (!params)
    {
        // Если нечего сохранять.
        return false;
    }
    params['s_file_name'] = '../_modules/comments/xml/state/comments_form.xml';
    params['s_action'] = 'add_comment';
    //debugger;
    call_ajax('state', container_id, params);
}
/**
 * открывает форму для добавления картинки в базу.
 * @param String container_id идентификатор контейнера
 */
function add_picture(container_id, entity_type_id, entity_id)
{
    var params = Array();
    params['i_entity_type_id'] = entity_type_id;
    params['i_entity_id'] = entity_id;
    //alert(container_id);
    call_ajax('gallery_form', container_id, params);
}
/**
 * Удаляет картинку из базы.
 * @param String container_id идентификатор контейнера
 * @param int picture_id идентификатор картины.
 */
function delete_picture(container_id, picture_id)
{
    var params =  new Array();
    params['s_action'] = 'delete_picture';
    params['s_file_name'] = '../_modules/gallery/xml/state/gallery_form.xml';
    params['i_picture_id'] = picture_id;
    call_ajax('state', container_id, params);
}
/**
 * Делает превью обновление картинки.
 * @param String container_id идентификатор контейнера
 * @param String picture_url урл картинки.
 * @param String picture_title подпись.
 */
function picture_preview(container_id, picture_url, picture_title)
{
    var params =  new Array();
    //params['i_picture_id'] = picture_id;
    params['s_picture_url'] = picture_url;
    params['s_picture_title'] = picture_title;
    call_ajax('picture_preview', container_id, params);
}


/*function panel_shift_to_left(container_id, page, gallery_id, number_of_pictures, onpage)
{
    alert(page);
    var params =  new Array();
    if(page==1)
        return;
    else
        params['i_page'] = page-1;
    params['i_gallery_id'] = gallery_id;
    call_ajax('navigate_pictures', container_id, params);
}
function panel_shift_to_right(container_id, page, gallery_id, number_of_pictures, onpage)
{
    alert(page);
    var params =  new Array();
    if(number_of_pictures<page+onpage)
        return;
    else
        params['i_page'] = page+1;
    params['i_gallery_id'] = gallery_id;
    call_ajax('navigate_pictures', container_id, params);
}*/
/**
 * Сохраняет картинку в базу.
 * @param String container_id идентификатор контейнера
 */
function add_picture_form(container_id)
{
    var params = Array();
	params = get_input_values(container_id);
    if (!params)
    {
        //Если нечего сохранять.
        return false;
    }
    params['s_file_name'] = '../_modules/gallery/xml/state/gallery_form.xml';
    params['s_action'] = 'add_picture';
    //debugger;
    call_ajax('state', container_id, params);
}
/**
 * Запускает файловый менеджер, который может загружать картинки.
 * @param String container_id идентификатор контейнера
 */
function get_url_from_file_manager(input_id)
{
   //document.input_id = input_id;
   file_manager.set_target_elem_id(input_id);
   var win = new cHydraWindow('file_manager', 'Файловый менеджер', 'file_manager_ws');
}
/**
 * Осуществляет поиск.
 */
function do_search()
{
    var search_query_elem = hydra.get('search_query');
    if (!search_query_elem)
    {
        return false;
    }
    if (search_query_elem.value!='')
        window.location.href = 'search/' + search_query_elem.value + '/';
    else {
        search_query_elem.value = 'Введiть текст';
    }
}
/**
 * Открывает форму закза.
 * @param int order_id идентификатор заказа.
 * @param String container_id контейнер, в который необходимо загрузить форму.
 */
function open_add_form(container_id)
{
     var params = new Array();
     call_ajax('banner_management_form', container_id, params);
}

/**
 * Открывает форму закза.
 * @param int order_id идентификатор заказа.
 * @param String container_id контейнер, в который необходимо загрузить форму.
 */
function open_change_form(banner_id, container_id)
{
     var params = new Array();
     params['i_rec_id'] = banner_id;
     call_ajax('banner_management_form', container_id, params);
}

/**
 * Открывает форму закза.
 * @param int order_id идентификатор заказа.
 * @param String container_id контейнер, в который необходимо загрузить форму.
 */
function banner_delete(banner_id, container_id)
{
    var params = new Array();
    params['s_file_name'] = '../_modules/banners/xml/state/banner_management_form.xml';
    params['s_action'] = 'delete';
    params['i_rec_id'] = banner_id;
    call_ajax('state', container_id, params)
    //alert(container_id)
}

/**
 * Запускает файловый менеджер, который может загружать картинки.
 * @param String container_id идентификатор контейнера
 */
function get_url_from_file_manager(input_id)
{
   //document.input_id = input_id;
   file_manager.set_target_elem_id(input_id);
   var win = new cHydraWindow('file_manager', 'Файловый менеджер', 'file_manager_ws');
}


/**
 * Сохраняет содержимое контейнера.
 *
 * @param string container_id идентификатор контейнера
 */
function save_items(container_id)
{
    var counters = document.getElementById(container_id);
    var params = new Array();
    params['a_jscodes'] = new Array();
    for(var i=0;i<counters.childNodes.length;i++)
    {
        

        var node_type = counters.childNodes[i].nodeType;
        if (node_type == 3) {
            continue;
        }
        
        if (counters.childNodes[i]) {
            
            var temp_ta = counters.childNodes[i].getElementsByTagName('textarea')[0];
            if(temp_ta)
                params['a_jscodes['+i+'][jscode]'] = temp_ta.value;
        }
    }
    params['s_file_name'] = '../_modules/counters/xml/state/counters_state.xml';
    params['s_action'] = 'save';
    call_ajax('state', container_id+'_message', params);
}

function add_item(container_id)
{
    var counters = document.getElementById(container_id);
    var count = counters.getElementsByTagName('textarea').length;
    var counter = document.createElement('DIV');
    counter.setAttribute('id', 'counter_'+count);
    var textarea = document.createElement('TEXTAREA');
    var button = document.createElement('BUTTON');
    button.appendChild(document.createTextNode('Удалить'));
    button.onclick ='var elem = document.getElementById("counter_'+count+'");elem.parentNode.removeChild(elem);';
    counter.appendChild(document.createTextNode('Cчетчик номер '+count));
    textarea.appendChild(document.createTextNode(' '));
    //textarea.setAttribute('name', 'text_area_counter'+count)
    counter.appendChild(textarea);
    counter.appendChild(button);
    counters.appendChild(counter);
    CreateDragContainer(
                        document.getElementById(container_id)
                    );
}
function package_updater_apply_updates()
{
    var params = Array();
    params = get_input_values('package_updater.packages');
    
    params['s_action'] = 'apply_updates';

    call_ajax('package_updater_state', 'package_updater.packages', params);
}



//скрипт для инициализации горизонтальной части горизонтального меню

var cssmenuids=["horizontal_menu"]; //Enter id(s) of CSS Horizontal UL menus, separated by commas
var csssubmenuoffset=0; //Offset of submenus from main menu. Default is 0 pixels.

var horizontalmenu_hover_items = true;

function createcssmenu2()
{
    //определяем выводится ли на странице меню вообще
    var is_menu_on_page = false;
    
    for (var i=0; i<cssmenuids.length; i++){
        is_menu_on_page = is_menu_on_page || Boolean(document.getElementById(cssmenuids[i]));
    }
    //если да, то инициализируем его
    if (is_menu_on_page) {
        //для всех меню на странице
        for (var i=0; i<cssmenuids.length; i++){
            var ultag=document.getElementById(cssmenuids[i])
            var litags = ultag.childNodes;
            for (var t=0; t<litags.length; t++){
                
                if(litags[t].getElementsByTagName('li').length>0)
                {
                    //добавляем курсор, если есть дети
                    var spanref=document.createElement("span")
                    spanref.className="hor_arrowdiv"
                    spanref.innerHTML="&nbsp;&nbsp;&nbsp;&nbsp;"
                    litags[t].childNodes[0].appendChild(spanref)
                    //litags[t].firstChild.appendChild(spanref)
                    
                    //если есть дети соответственно добавить функции для их показа и скрытия
                    if(litags[t].lastChild.nodeName=='UL'){
                        //сдвинуть детей вниз
                        litags[t].lastChild.style.top=litags[t].lastChild.parentNode.offsetHeight+csssubmenuoffset+"px"
                        //открытие детей
                        litags[t].lastChild.parentNode.onmouseover=function(){

                            if (horizontalmenu_hover_items) {
                                this.className = this.getAttribute('class_name') + '_hover';
                            }
                            
                            
                            

                            this.style.zIndex=100
                            this.getElementsByTagName("ul")[0].style.visibility="visible"
                            this.getElementsByTagName("ul")[0].style.zIndex=0
                        }
                        //закрытие детей
                        litags[t].lastChild.parentNode.onmouseout=function(){
                            this.className = this.getAttribute('class_name');

                            this.style.zIndex=0
                            this.getElementsByTagName("ul")[0].style.visibility="hidden"
                            this.getElementsByTagName("ul")[0].style.zIndex=100
                        }
                    }

                }
                else {

                    if (horizontalmenu_hover_items) {
                        // Вешаем hover
                        litags[t].lastChild.parentNode.onmouseover=function(){
                            this.className = this.getAttribute('class_name') + '_hover';
                        }
                        // Вешаем восстановление
                        litags[t].lastChild.parentNode.onmouseout=function(){
                            this.className = this.getAttribute('class_name');
                        }
                    }
                    
                }
            }
        }
    }
}

//инициализация при загрузки страницы
/*    if (window.addEventListener)
        window.addEventListener("load", createcssmenu2, false)
    else if (window.attachEvent)
        window.attachEvent("onload", createcssmenu2)
*/
//скрипт для инициализации вертикальной части меню

var menuids=new Array("horizontal_menu") //Enter id(s) of UL menus, separated by commas
var submenuoffset=0 //Offset of submenus from main menu. Default is -2 pixels.

function createcssmenu(){

    //определяем выводится ли на странице меню вообще
    var is_menu_on_page = false;
    for (var i=0; i<cssmenuids.length; i++){
        is_menu_on_page = is_menu_on_page || Boolean(document.getElementById(cssmenuids[i]));
    }
    
    //если да, то инициализируем его
    if (is_menu_on_page) {

        //для всех меню на странице
        for (var i=0; i<menuids.length; i++){
            var menu=document.getElementById(menuids[i]);
            var ultags = menu.getElementsByTagName('ul')
            for (var t=0; t<ultags.length; t++){
               //если это не горизонтальная часть меню
                if(ultags[t].parentNode.parentNode.className=='verticalcssmenu') {
                    
                    //то добавляем вертикальную стрелку
                    var spanref=document.createElement("span")
                    spanref.className="ver_arrowdiv"
                    spanref.innerHTML="&nbsp;&nbsp;"
                    ultags[t].parentNode.getElementsByTagName("a")[0].appendChild(spanref)
                    
                    //добавляем функцию показа детей
                    ultags[t].parentNode.onmouseover=function(){
                        this.getElementsByTagName("ul")[0].style.left=this.parentNode.offsetWidth+submenuoffset+"px"
                        this.getElementsByTagName("ul")[0].style.visibility="visible"

                        //this.className = this.getAttribute('class_name') + '_hover';
                    }

                    //и добавляем функцию укрывания детей
                    ultags[t].parentNode.onmouseout=function(){
                        this.getElementsByTagName("ul")[0].style.visibility="hidden"

                        //this.className = this.getAttribute('class_name');
                    }

                    
                }

                if (horizontalmenu_hover_items) {
                    // Вешаем обработчки на пункты меню (li)
                    for (var j=0;j<ultags[t].children.length; j++) {
                        ultags[t].children[j].onmouseover=function(){
                            this.className = this.getAttribute('class_name') + '_hover';
                        }
                        ultags[t].children[j].onmouseout=function(){
                            this.className = this.getAttribute('class_name');
                        }
                    }
                }
            }
        }
    }
}
//инициализация при загрузки страницы
if (window.addEventListener)
    window.addEventListener("load", createcssmenu, false)
else if (window.attachEvent)
    window.attachEvent("onload", createcssmenu)
