function AW_chat( Refresh_Interval, OnlineRefresh_Interval ){
       var Refresh_Interval;
	   var OnlineRefresh_Interval;
	   
       chat_refresh();
	   online_refresh();
	   
	   
	this.DoRefresh = function(){
	var ajax = new Chat_ajax();
	ajax.onShow ('');
	var varsString = "";
	ajax.setVar("method_sort", method_sort );
	ajax.requestFile = dle_root + "engine/chat/ajax/refresh.php";
	ajax.method = 'POST';
	ajax.element = 'chat-window';
	ajax.sendAJAX(varsString);
	};
	
	this.DoRefresh_ajax = function(){
	var ajax = new dle_ajax();
	ajax.onShow ('');
	var varsString = "";
	ajax.setVar("method_sort", method_sort );
	ajax.requestFile = dle_root + "engine/chat/ajax/refresh.php";
	ajax.method = 'POST';
	ajax.element = 'chat-window';
	ajax.sendAJAX(varsString);
	};
	
    this.chat_refresh = function(){
		if(Refresh_Interval  > 0) Refresh_Interval = setInterval("aw.DoRefresh()", Refresh_Interval );
	};
    function chat_refresh(){
		if(Refresh_Interval > 0) Refresh_Interval = setInterval("aw.DoRefresh()", Refresh_Interval );
	};
   this.ClearRefresh = function(){
		clearInterval(Refresh_Interval);
	};
	
   this.DoOnlineRefresh = function(){
	var ajax = new Chat_ajax();
	ajax.onShow ('');
	var varsString = "";
	ajax.requestFile = dle_root + "engine/chat/ajax/refresh_onlinelist.php";
	ajax.method = 'POST';
	ajax.element = 'chat_online';
	ajax.sendAJAX(varsString);
	};
	
	
	
    this.online_refresh = function(){
		if(OnlineRefresh_Interval  > 0) OnlineRefresh_Interval = setInterval("aw.DoOnlineRefresh()", OnlineRefresh_Interval );
	};
    function online_refresh(){
		if(OnlineRefresh_Interval > 0) OnlineRefresh_Interval = setInterval("aw.DoOnlineRefresh()", OnlineRefresh_Interval );
	};
	
   this.OnlineClearRefresh = function(){
		clearInterval(OnlineRefresh_Interval);
	};
	
	
	 this.translit = function() {
var obj_ta = fombj.message;

if ( (ua_vers >= 4) && is_ie && is_win)
{
if (obj_ta.isTextEdit)
{
obj_ta.focus();
var sel = document.selection;
var rng = sel.createRange();
rng.colapse;
if((sel.type == "Text" || sel.type == "None") && rng != null)
{
rng.text = aw.dotranslate(rng.text);
}
}
else
{
obj_ta.value = aw.dotranslate(obj_ta.value);
}
}
else
{
obj_ta.value = aw.dotranslate(obj_ta.value);
}

obj_ta.focus();

return;
};

 this.dotranslate = function(text)
{
    var txtnew = "";
    var symb = 0;
    var subsymb = "";
    var trans = 1;
    for (kk=0;kk<text.length;kk++)
    {
        subsymb = text.substr(kk,1);
        if ((subsymb=="[") || (subsymb=="<"))
        {
            trans = 0;
        }
        if ((subsymb=="]") || (subsymb==">"))
        {
            trans = 1;
        }
        if (trans)
        {
            symb = transsymbtocyr(txtnew.substr(txtnew.length-1,1), subsymb);
        }
        else
        {
            symb = txtnew.substr(txtnew.length-1,1) + subsymb;
        }
        txtnew = txtnew.substr(0,txtnew.length-1) + symb;
    }
    return txtnew;
};

  
};

	

function DoAddMessage() {
    
	if (!document.chat_form.message.value){
	     alert('Вы не ввели сообщение!');
		 return false;
       }
	if (max_message_len != 0 && document.chat_form.message.value.length >  max_message_len ){
	     alert(" Сообщение слишком большое! \r\n Сократите его до " + max_message_len + " Символов!");
		 return false;
       }
	var ajax = new Chat_ajax();
	ajax.onShow ('');
	var varsString = "";
	ajax.setVar("message", ajax.encodeVAR(document.chat_form.message.value));
    ajax.setVar("text_color", document.chat_form.text_color.value);
	ajax.setVar("font_style", document.chat_form.font_style.value);
	ajax.setVar("vote_skin", "{$config['skin']}");
	ajax.setVar("method_sort", method_sort );
	ajax.requestFile = dle_root + "engine/chat/ajax/addmessage.php";
	ajax.method = 'POST';
	ajax.element = 'chat-window';
	ajax.sendAJAX(varsString);
	
	document.chat_form.message.value = '';
	
	

};

function del_message( message_id ) {
    
	if (!message_id){
	     alert('Удаление невозможно. Не задан id сообщения');
		 return false;
       }
	
	var ajax = new dle_ajax();
	ajax.onShow ('');
	var varsString = "";
	ajax.setVar("message_id", message_id);
    ajax.setVar("vote_skin", "{$config['skin']}");
	ajax.setVar("method_sort", method_sort );
	ajax.requestFile = dle_root + "engine/chat/ajax/del_message.php";
	ajax.method = 'POST';
	ajax.element = 'chat-window';
	ajax.sendAJAX(varsString);
	
	
};


function BlockDoAddMessage() {
    
	if (!document.chat_form.message.value){
	     alert('Вы не ввели сообщение!');
		 return false;
       }
	if (max_message_len != 0 && document.chat_form.message.value.length >  max_message_len ){
	     alert(" Сообщение слишком большое! \r\n Сократите его до " + max_message_len + " Символов!");
		 return false;
       }
	var ajax = new Chat_ajax();
	ajax.onShow ('');
	var varsString = "";
	ajax.setVar("message", ajax.encodeVAR(document.chat_form.message.value));
    ajax.setVar("text_color", "#2a2a2a");
	ajax.setVar("vote_skin", "{$config['skin']}");
	ajax.requestFile = dle_root + "engine/chat/ajax/addmessage.php";
	ajax.method = 'POST';
	ajax.element = 'chat-window';
	ajax.sendAJAX(varsString);
	
	document.chat_form.message.value = '';
	
	

};

function OnlineUserMenu( url, m_id, m_ip, group ){

var menu=new Array();

	menu[0]='<a ' + url +' >' + menu_profile + '</a>';
    menu[1]='<a href="' + dle_root + 'index.php?do=pm&doaction=newpm&user=' + m_id + '">' + menu_send + '</a>';
	

	if (group == '1') {
	 
	  menu[2]='<a href="http://www.nic.ru/whois/?ip=' + m_ip + '" target="_blank">Информация о IP адресе</a>';
      menu[3]='<a href="' + dle_root + dle_admin + '?mod=iptools&ip=' + m_ip + '" target="_blank">Другие пользователи</a>';
      menu[4]='<a href="' + dle_root + dle_admin + '?mod=chat&action=ipfilter&ip=' + m_ip + '" target="_blank">Забанить адрес</a>';
	 
		menu[5]='<a onclick="window.open(\'' + dle_root + dle_admin + '?mod=editusers&action=edituser&id=' + m_id + '\', \'User\',\'toolbar=0,location=0,status=0, left=0, top=0, menubar=0,scrollbars=yes,resizable=0,width=540,height=500\'); return false;" href="#">' + menu_uedit + '</a>';
	}

return menu;
};

function chat_quote ( m_name ){
     document.chat_form.message.value = document.chat_form.message.value + '[b]' + m_name + '[/b],';
}

function Chat_ajax(file){
	this.AjaxFailedAlert = "AJAX not supported.\n";
	this.requestFile = file;
	this.method = "POST";
	this.URLString = "";
	this.encodeURIString = true;
	this.execute = false;
	this.add_html = false;
	this.loading_fired		= 0;
	this.centerdiv          = null;

	this.onLoading = function() { };
	this.onLoaded = function() { };
	this.onInteractive = function() { };
	this.onCompletion = function() { };

	this.onShow = function( message )
	{
		if ( ! this.loading_fired )
		{
			this.loading_fired = 1;
		
			//------------------------------------------------
			// Change text?
			//------------------------------------------------
		
		
		
		this.centerdiv         = new center_div();
		this.centerdiv.divname = 'chat-loading-layer';
		this.centerdiv.move_div();
		}
		
		return;
	};

	this.onHide = function()
	{
		try
		{
			if ( this.centerdiv && this.centerdiv.divobj )
			{
				this.centerdiv.clear_div();
			}
		}
		catch(e)
		{
		}
	
		this.loading_fired = 0;
	
		return;
};


	this.createAJAX = function() {
		try {
			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (err) {
				this.xmlhttp = null;
			}
		}
		if(!this.xmlhttp && typeof XMLHttpRequest != "undefined")
			this.xmlhttp = new XMLHttpRequest();
		if (!this.xmlhttp){
			this.failed = true; 
		}
	};
	
	this.setVar = function(name, value){
		if (this.URLString.length < 3){
			this.URLString = name + "=" + value;
		} else {
			this.URLString += "&" + name + "=" + value;
		}
	};
	
	this.encVar = function(name, value){
		var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value);
	return varString;
	};
	
	this.encodeURLString = function(string){
		varArray = string.split('&');
		for (i = 0; i < varArray.length; i++){
			urlVars = varArray[i].split('=');
			if (urlVars[0].indexOf('amp;') != -1){
				urlVars[0] = urlVars[0].substring(4);
			}
			varArray[i] = this.encVar(urlVars[0],urlVars[1]);
		}
	return varArray.join('&');
	};

	this.encodeVAR = function(url){
	
	url = url.toString();

	var regcheck = url.match(/[\x90-\xFF]/g);
	
	if ( regcheck )
	{
		for (var i = 0; i < i.length; i++)
		{
			url = url.replace(regcheck[i], '%u00' + (regcheck[i].charCodeAt(0) & 0xFF).toString(16).toUpperCase());
		}
	}

	return escape(url).replace(/\+/g, "%2B");
	};
	
	this.runResponse = function(){

                        var milisec = new Date;
                        var jsfound = false;
                        milisec = milisec.getTime();

                        var js_reg = /<script.*?>(.|[\r\n])*?<\/script>/ig;

                        var js_str = js_reg.exec(this.response);
                        if (js_str != null) {

						var js_arr = new Array(js_str.shift());
                        var jsfound = true;
        
                        while(js_str) {
                                js_str = js_reg.exec(this.response);
                                if (js_str != null) js_arr.push(js_str.shift());
                        }

                          for(var i=0; i<js_arr.length;i++) {
                                this.response = this.response.replace(js_arr[i],'<span id="'+milisec+i+'" style="display:none;"></span>');
                          }
						}
                            if ( this.add_html ) {
                                this.elementObj.innerHTML += this.response; 
                            } else {
                                this.elementObj.innerHTML = this.response; 
                            }

                        if (jsfound) {

                        var js_content_reg = /<script.*?>((.|[\r\n])*?)<\/script>/ig;

                        for (i = 0; i < js_arr.length; i++) {
                                var mark_node = document.getElementById(milisec+''+i);
                                var mark_parent_node = mark_node.parentNode;
                                mark_parent_node.removeChild(mark_node);
                                
                                js_content_reg.lastIndex = 0;
                                var js_content = js_content_reg.exec(js_arr[i]);
                                var script_node = mark_parent_node.appendChild(document.createElement('script'));
							    script_node.text = js_content[1];  

                                var script_params_str = js_arr[i].substring(js_arr[i].indexOf(' ',0),js_arr[i].indexOf('>',0));
                                var params_arr = script_params_str.split(' ');

								if (params_arr.length > 1) {
                                   for (var j=0;j< params_arr.length; j++ )        {
                                        
                                        if(params_arr[j].length > 0){
                                                var param_arr = params_arr[j].split('=');
                                                param_arr[1] = param_arr[1].substr(1,(param_arr[1].length-2));
                                                script_node.setAttribute(param_arr[0],param_arr[1]);
                                        }

                                  }
								}

                          }
                        }
	};


	
	this.sendAJAX = function(urlstring){
		this.responseStatus = new Array(2);
		if(this.failed && this.AjaxFailedAlert){ 
			alert(this.AjaxFailedAlert); 
		} else {
			if (urlstring){ 
				if (this.URLString.length){
					this.URLString = this.URLString + "&" + urlstring; 
				} else {
					this.URLString = urlstring; 
				}
			}
			if (this.encodeURIString){
				var timeval = new Date().getTime(); 
				this.URLString = this.encodeURLString(this.URLString);
				this.setVar("rndval", timeval);
			}
			if (this.element) { this.elementObj = document.getElementById(this.element); }
			if (this.xmlhttp) {
				var self = this;
				if (this.method == "GET") {
					var totalurlstring = this.requestFile + "?" + this.URLString;
					this.xmlhttp.open(this.method, totalurlstring, true);
				} else {
					this.xmlhttp.open(this.method, this.requestFile, true);
				}
				if (this.method == "POST"){
  					try {
						this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');  
					} catch (e) {}
				}

				this.xmlhttp.send(this.URLString);
				this.xmlhttp.onreadystatechange = function() {
					switch (self.xmlhttp.readyState){
						case 1:
							self.onLoading();
						break;
						case 2:
							self.onLoaded();
						break;
						case 3:
							self.onInteractive();
						break;
						case 4:
							self.response = self.xmlhttp.responseText;
							self.responseXML = self.xmlhttp.responseXML;
							self.responseStatus[0] = self.xmlhttp.status;
							self.responseStatus[1] = self.xmlhttp.statusText;
						    self.onHide();
							self.onCompletion();
							if (self.elementObj) {
								var elemNodeName = self.elementObj.nodeName;
								elemNodeName = elemNodeName.toLowerCase();
								if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){
									if (self.response == 'error') { alert('Доступ отклонен'); } else {
                                    if ( self.add_html ) {
									self.elementObj.value += self.response;
                                    } else { self.elementObj.value = self.response;}
									}
								} else {
									if (self.response == 'error') { alert('Доступ отклонен'); } else {
									if(self.execute) { self.runResponse(); } else {
                                        if ( self.add_html ) {

                                           self.elementObj.innerHTML += self.response;

                                        } else	{ self.elementObj.innerHTML = self.response; }
                                      }
									}
								}
							}
							self.URLString = "";
						break;
					}
				};
			}
		}
	};
this.createAJAX();
}



