function evaChat()
{
    this.maxLength=255;
    this.globalRows=false;
    this.globalLastId=0;
    this.globalSend=false;

    this.nowRefresh=false;
    this.nowRefreshUsers=false;

    this.chatKey="";

    this.chatMW			="#chat";
    this.chatItems		="#chatItems";
    this.setStatus		="#setStatus";
    this.status			="#status";
    this.makeOnline		="#makeOnline";
    this.colorPicker	="#colorPiker";
    this.manyColors		="#manyColors";
    this.chatString		="#chatString";
    this.sendButton		="#sendButton";
    this.tempField		="#tempField";
    this.chatCounter	="#chatCounter";
    this.lang           ="#LANG";

    this.usersInterval  = 20000;
    this.chatInterval   = 10000;
	this.langId			=0;
	this.nickName		="";

    this.roomId         ="";

    this.intervalRows=false;
    this.intervalUsers=false;

	this.longMessages=false;
	this.longGroups=false;


	this.userNick="";
	this.stoppingPulling=false;


    var self=this;
	this.setNick = function(str)
	{
		this.nickName=str;
	};
	this.setLang = function(id)
	{
		this.langId=id;
	};
    this.setRoomId = function(id)
    {
        this.roomId=id;
    };
    this.setChatKey = function(str, callback)
    {
        this.chatKey=str;
        $.post("/ajax_handlers/chatControll.php",{ QUERY: "SET_KEY", KEY: self.chatKey, ROOM: self.roomId, NICK:self.nickName }, function(e){
            if(callback) callback();
        });
    };

    this.init = function()
    {
        $(this.setStatus).click(function(){
            self.setStatusClick($(self.status).val());
            return false;
        });

        $(this.chatMW+" .prel,"+this.chatMW+" .prel2").css({ opacity: 0.8 });

        if($.browser.msie && $.browser.version=="7.0")
        {
            $(this.chatMW+" .inpStr").css("marginTop","0px");
            $(this.chatMW+" .inpStr").css({ width: "99%", border: "1px solid #ffffff" });
        }

        $(this.makeOnline).click(function(e){
            self.makeOnlineClick();
            return false;
        });

        //alert(this.colorPicker);
        $(this.colorPicker).click(function(){
            self.colorPickerShow();
            return false;
        });
        $(this.chatString).keyup(function(){
            self.izmerit();
        });
        $(this.sendButton).click(function(e){
            self.sendMessage($(self.chatString).val());
            return false;
        });
        $(this.chatString).keypress(function(e){
            self.izmerit();
            //alert(e.keyCode);
            if (e.ctrlKey && e.keyCode == 13 || e.keyCode == 10)
            {
                self.sendMessage($(this).val());
                $(this).val("");
            }
        });

			self.getUsers();
        	self.getRows();
		$(this.chatMW).find(".userClick").live("click",function(){
			self.userClick($(this));
			return false;
		});
		$(window).ready(function(){
			setTimeout(function(){ self.startIntervals(); }, 1000);
		});

        //this.startIntervals();

    };
	this.userClick=function(ob)
	{
		if(ob.is(".ava"))
		{
			var nick=ob.parent().find(".userClick").eq(1).html();
		}
		else
			var nick=ob.html();
		this.addToArea("[B]"+nick+"[/B], ");
	};
	this.stopLongPuling = function()
	{
		this.stoppingPulling=true;
		try {
			this.longMessages.abort();
			this.longGroups.abort();
		}catch(e){}
	};
	this.startLongPuling = function()
	{
		this.longMessages=$.post("/ajax_handlers/chatControll.php", { QUERY:"LONG_MESSAGES", LAST_ID:self.globalLastId, ROOM:self.roomId, LANG:self.langId }, function(e){
			//alert(e);
			if(e=="REFRESH") { self.getRows(true); }
			else
			{
				if(!self.stoppingPulling)
				{
					//alert("starto!");
					self.startLongPuling();
				}
			}
		});
		this.stoppingPulling=false;
	};
    this.startIntervals = function()
    {
		//alert("go!");
		this.startLongPuling();
        /*this.stopIntervals();
        if(this.chatInterval>0){ this.intervalRows=setInterval(function(){ self.getRows(); }, this.chatInterval); }*/
        if(this.usersInterval>0){ this.intervalUsers=setInterval(function(){ self.getUsers(); }, this.usersInterval);  }
    };
	this.stopIntervals = function()
    {
        try {
		self.stopLongPuling();
         clearInterval(self.intervalRows);
         clearInterval(self.intervalUsers);
        } catch(e){  }
    };
    this.makeOnlineClick = function()
    {
        $(this.chatMW+" .prel").show();
        $.post("/ajax_handlers/chatControll.php",{ QUERY: "SET_KEY", KEY: self.chatKey, ROOM: self.roomId }, function(e){
            $("#chat .prel").hide();
            $(self.chatMW).removeClass("offline");
            self.getUsers();
            self.getRows();
            self.startIntervals();
        });
    };
    this.colorPickerShow = function()
    {
        if($(this.manyColors).html())
        {
            $(this.manyColors).hide();
            $(this.manyColors).html("");
            return false;
        }
        $(this.manyColors).show();
        var x=0;
        var y=0;
        var z=0;
        for (x=0;x<=255;x=x+45)
        {
            //alert(":(");
            for (y=0;y<=255;y=y+45)
            {
                for (z=0;z<=255;z=z+45)
                {
                    $(this.manyColors).append("<div class='bb_asf_piker' style='background:#"+this.d2h(z)+this.d2h(x)+this.d2h(y)+"'></div>");
                }
            }
        }
        $(this.manyColors).append("<div style='clear: both;'><div></div></div>");
        $(this.manyColors+' .bb_asf_piker').click(function(){
            var color=$(this).css("background-color");
            if (color.substr(0,1)!="#") color=self.rgbConvert(color);
            $(self.manyColors).html("");
            $(self.manyColors).hide();
            $(self.colorPicker).css("background-color",color);
            self.refreshColor(color);
            //$("#colorHex").val(color);
        });
    };
    this.refreshColor = function(str)
    {
        $.post("/ajax_handlers/chatControll.php",{ QUERY: "SET_COLOR", COLOR: str, ROOM: self.roomId }, function(e){

        });
    };

    this.d2h = function(d) {var iR=d.toString(16); if(iR.length<2) iR="0"+iR; return iR; };
    this.h2d = function(h) {return parseInt(h,16);};
    this.rgbConvert = function(str)
    {
       str = str.replace(/rgb\(|\)/g, "").split(",");
       str[0] = parseInt(str[0], 10).toString(16).toLowerCase();
       str[1] = parseInt(str[1], 10).toString(16).toLowerCase();
       str[2] = parseInt(str[2], 10).toString(16).toLowerCase();
       str[0] = (str[0].length == 1) ? '0' + str[0] : str[0];
       str[1] = (str[1].length == 1) ? '0' + str[1] : str[1];
       str[2] = (str[2].length == 1) ? '0' + str[2] : str[2];
       return ("#"+str.join(""));
    };

    this.setStatusClick = function(str)
    {
        $.post("/ajax_handlers/chatControll.php",{ QUERY: "SET_STATUS", STATUS: str, ROOM: self.roomId }, function(e){
            self.getUsers();
        });
    };
    this.removeTrash = function()
    {
        var max=30;
        ob=$(this.chatMW+" .chatLine");
        $.each(ob,function(i,o){
            if((i-max)>=0) ob.eq(i-max).remove();
        });
    };
    this.aTo = function(ob)
    {
        var str="";
        if(ob.find("img").length>0)
        {
            str=ob.parent().find("a").eq(1).html();
        } else str=ob.html();

        var v=$(this.chatString).val();
        $(this.chatString).val(v+"[B]"+str+"[/B], ");
        this.izmerit();
        return false;
    };
	this.addToArea=function(str)
	{
		var v=$(this.chatString).val();
        $(this.chatString).val(v+str);
		$(this.chatString).focus();
        this.izmerit();
	};
    this.pushRow = function(ob)
    {
        $(this.chatItems+" .broken").append(ob);
    };
    this.getRows = function(long)
    {
        if(!self.nowRefresh)
        {
            $(this.chatMW+" .prel").show();
            self.nowRefresh=true;
			//alert("go!");
            this.globalRows=$.post("/ajax_handlers/chatControll.php",{ QUERY: "GET_MESSAGES", LAST_ID: self.globalLastId, ROOM: self.roomId }, function(e){
                //alert(e);
                $(self.tempField).html(e);
                var ob=$(self.tempField).find("tr.chatLine");

                if(ob.length>0)
                {
                    $.each(ob, function(i,o){
                        //alert(ob.eq(i).html());
                        self.pushRow(ob.eq(i));
                    });


                    var tempLast=$(self.tempField).find("input").val();
                    if(parseInt(tempLast)>0) self.globalLastId=tempLast;

                    var height=$(self.chatItems).height()-$(this.chatMW+" .chatField").height();
                    $(self.chatMW+" .chatField").animate({scrollTop: height }, 300, function(){ self.removeTrash(); })
                }
                $(self.chatMW+" .prel").hide();
                self.nowRefresh=false;
				//alert("done!");
                if(long) self.startLongPuling();
            });
        }
    };
    this.getUsers = function()
    {
        if(!self.nowRefreshUsers)
        {
            self.nowRefreshUsers=true;
            $(this.chatMW+" .prel2").show();
            //alert(self.chatKey);
            $.post("/ajax_handlers/chatControll.php", { QUERY: "GET_USERS", KEY: self.chatKey, ROOM: self.roomId }, function(e){
                //alert(self.chatKey+" "+e);
                if(e=="KEY_ERROR")
                {
                    self.stopIntervals();

                     $(self.chatMW).addClass("offline");
                     self.nowRefreshUsers=false;
                     $(self.chatMW+" .prel2").hide();

                     return false;
                }
                $(self.chatMW+" .users").html(e);
                $(self.chatMW+" .prel2").hide();
                self.nowRefreshUsers=false;
            });
        }
    };
    this.izmerit = function()
    {
        $(this.chatCounter+" .count").html(this.maxLength-$(this.chatString).val().length);
    };
    this.sendMessage = function(str)
    {
        this.stopLongPuling();
        var lang=$(this.lang).val();
        this.globalSend=$.post("/ajax_handlers/chatControll.php", { QUERY: "SEND_MESSAGE", MESSAGE: str, LANG: lang, ROOM: self.roomId }, function(e){
            self.getRows(true);
			//self.sendingMessage=false;
        });
        $(this.chatString).val("");
    }
}
