function title(channel, tit){
   if(channel.indexOf("#") !== 0){
     return;
   }

   send("TITLE "+channel+": "+tit, function(respons){
      if(respons.command() == "ERROR"){
         getChannel(channel).error(language(respons.message()));
      }else{
         getChannel(channel).setTitle(respons.message());
      }
   });
}

function join(channel, error){
	if(channel.indexOf("#") !== 0){
	  error(language("A channel name should alweys start width #"));
	  return;
	}
	send("JOIN: "+channel.trim(), function(respons){
		if(respons.command() == "ERROR"){
			//ohh no some thinks dont works :(
			if(typeof error !== "undefined"){
				error(respons);
			}
		}else if(respons.command() == "JOIN"){
			appendChannel(respons.message());
		}else if(respons.command() == "TITLE"){
			getChannel(respons.channel()).setTitle(respons.message());
		}
	});
}

function leave(name, success, error){
	if(name.indexOf("#") == -1){
		return;
	}
	
	send("LEAVE: "+name, function(respons){
		if(respons.command() == "ERROR"){
			if(typeof error != "undefined"){
				error(respons);
			}
		}else{
			if(typeof success != "undefined"){
				success(respons);
			}
		}
	});
}

function online(channel, callback, error){
   if(channel.index("#") !== 0){
      return;
   }

   send("ONLINE: "+channel, function(respons){
       if(respons.command() == "ERROR" && typeof error !== "undefined"){
          error(respons.message());
       }else{
          callback(respons.message().split(","));//the message is nick,nick,nick
       }
   });
}

function message(channel, message){
	send("MESSAGE "+channel+": "+cleanMessage(message));
}

function cleanMessage(message){
	message = message.replace(/\n/g, "[br]");
	return message;
}

@@ -1,16 +1,551 @@
+function userInfo(channel, nick, callback, error)%7B%0A   send(%22INFO %22+channel+%22: %22+nick, function(respons)%7B%0A      if(respons.command() == %22ERROR%22 && typeof error !== %22undefined%22)%7B%0A         error(respons.message());%0A      %7Delse%7B%0A         //it a single string as key=vale;key=value%0A         var values = %7B%7D;%0A         var part = respons.message().split(%22;%22);%0A         for(var i=0;i%3Cpart.length;i++)%7B%0A            var value = part%5Bi%5D.split(%22=%22);%0A            values%5Bvalue%5B0%5D%5D= value%5B1%5D;%0A         %7D %0A         callback(values);%0A      %7D%0A   %7D);%0A%7D%0A%0A
 function title(c

Update command.js