function utf8_decode ( str_data ) {
    var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;
    str_data += '';
    while ( i < str_data.length ) {
        c1 = str_data.charCodeAt(i);
        if (c1 < 128) {
            tmp_arr[ac++] = String.fromCharCode(c1);
            i++;
        } else if ((c1 > 191) && (c1 < 224)) {
            c2 = str_data.charCodeAt(i+1);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
    return tmp_arr.join('');
}
function gcbos_engine(){this.console=null;this.input=null;this.notice=null;this.typingInterval=-1;this.typingTime=new Date();this.typingSpeedMin=5;this.typingSpeedMax=50;this.typingSpeed=1;this.checkInterval=-1;this.checkTime=new Date(0);this.checkSpeedMin=1000;this.checkSpeedMax=50000;this.checkSpeed=this.checkSpeedMin;this.typingLeft="";this.start=-1;this.request=null;this.autoScrollOffset=50;this.tags=[];this.tagStack=[];this.lastElement=null;this.lastTextNode=null;this.messages=[];this.enabled=true;this.init=function(){var a=this;this.console=fetch_object("gcbos_console");this.input=fetch_object("gcbos_input");this.notice=fetch_object("gcbos_notice");if(fetch_cookie("gcbos_speed")!==null){this.typingSpeed=fetch_cookie("gcbos_speed")}if(fetch_cookie("gcbos_height")!==null){this.setHeight(fetch_cookie("gcbos_height"))}this.enter=new YAHOO.util.KeyListener(this.input,{keys:YAHOO.util.KeyListener.KEY.ENTER},{fn:this.sendInput,scope:a,correctScope:a});this.speeddown=new YAHOO.util.KeyListener(this.input,{keys:YAHOO.util.KeyListener.KEY.UP},{fn:this.speedDown,scope:a,correctScope:a});this.speedup=new YAHOO.util.KeyListener(this.input,{keys:YAHOO.util.KeyListener.KEY.DOWN},{fn:this.speedUp,scope:a,correctScope:a});this.tags.instant={open:function(b,d,c){if((!!d)||(c)){return false}a.instant=true;return true},close:function(){a.instant=false}};this.tags.notice={open:function(b,d,c){a.clearNotice();if((!!d)||(c)){return false}a.lastElement=a.notice;/*a.lastElement.style.display='block';*/a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""));return true},close:function(){a.lastElement=a.console;a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""))}};this.tags.message={open:function(b,e,c){if((!e)||(c)){return false}e=e.split("|");var g=parseInt(e[0],10);var f=e[1];if((typeof(a.messages[g])=="undefined")||(g<=0)){a.console.appendChild(a.lastElement=document.createElement("div"));a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""));a.messages[g]=a.lastElement;a.lastElement.gcbosid=g;a.lastElement.message=f}else{var d=a.typingLeft.match(/^(\w+)(|=(["|']?)([\s\S]+?)\3)\s*(\/|)\](.*?\[\/\1\])/i);a.typingLeft=a.typingLeft.substr(d[6].length)}return true},close:function(){a.lastElement=a.console;a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""))}};this.tags.edit={open:function(b,d,c){if((!d)||(c)){return false}a.lastElement.appendChild(a.lastElement=document.createElement("span"));a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""));YAHOO.util.Event.addListener(a.lastElement,"dblclick",a.editMessage,a,a);return true},close:function(){a.lastElement=a.lastElement.parentNode;a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""))}};this.tags.delmessage={open:function(b,d,c){if((!d)||(c)){return false}var e=document.createAttribute("title");e.value="#"+d;a.lastElement.appendChild(a.lastElement=document.createElement("span"));a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""));a.lastElement.setAttributeNode(e);YAHOO.util.Event.addListener(a.lastElement,"click",a.deleteMessage,a,a);return true},close:function(){a.lastElement=a.lastElement.parentNode;a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""))}};this.tags.modify={open:function(b,f,d){if((!f)||(d)){return false}f=f.split("|");var h=f[0];var c=f[1];var g=f[2];if(a.messages[h]){if(c=="1"){a.messages[h].parentNode.removeChild(a.messages[h]);a.messages[h]=null}else{a.messages[h].message=g;a.lastElement=a.messages[h];while(a.lastElement.firstChild){a.lastElement.removeChild(a.lastElement.firstChild)}a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""))}}else{var e=a.typingLeft.match(/^(\w+)(|=(["|']?)([\s\S]+?)\3)\s*(\/|)\](.*?\[\/\1\])/i);a.typingLeft=a.typingLeft.substr(e[6].length)}return true},close:function(){a.lastElement=a.console;a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""))}};this.tags["delete"]={open:function(b,d,c){if((!!d)||(c)){return false}a.buildingDelete=true;a.deleting=false;a.forDeletion=0;return true},close:function(){a.buildingDelete=false;a.deleting=true}};this.tags.pm={open:function(b,d,c){if((!d)||(c)){return false}a.lastElement.appendChild(a.lastElement=document.createElement("span"));a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""));a.lastElement.username=d;YAHOO.util.Event.addListener(a.lastElement,"click",a.sendPm,a,a);return true},close:function(){a.lastElement=a.lastElement.parentNode;a.lastElement.appendChild(a.lastTextNode=document.createTextNode(""))}};this.tags.clear={open:function(b,d,c){if((d)||(!c)){return false}a.clearConsole();return true}};this.dummyElements=this.elementList("area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param","embed");this.enter.enable();this.speedup.enable();this.speeddown.enable();this.clearConsole();this.lastElement=this.console;this.console.appendChild(this.lastTextNode=document.createTextNode(""));this.checkMessages();this.typingInterval=window.setInterval(function(){a.continueTyping()},this.typingSpeedMax);this.checkInterval=window.setInterval(function(){a.checkMessages()},this.checkSpeed)};this.sendPm=function(c){var b=c.target||c.srcElement;var d=this.input.value;var a=d.match(/^\/pm (("|').*?\2|\w+?)\s+/i);while(typeof(b.username)=="undefined"){b=b.parentNode}if(a){d=d.substr(a[0].length)}this.input.value='/pm "'+b.username.replace('"','\\"')+'" '+d};this.editMessage=function(b){var a=b.target||b.srcElement;while(typeof(a.gcbosid)=="undefined"){a=a.parentNode}this.input.value="/edit "+a.gcbosid+" "+utf8_decode(a.message);this.input.focus()};this.deleteMessage=function(b){var a=b.target||b.srcElement;while(typeof(a.gcbosid)=="undefined"){a=a.parentNode}this.input.value="/delete "+a.gcbosid;this.input.focus()};this.htmlEntitiesDecode=function(a){var b=document.createElement("textarea");b.innerHTML=a;return b.value};this.elementList=function(){var a=new Object();for(var b=0;b<arguments.length;b++){a[arguments[b]]=true}return a};this.speedUp=function(){var a=new Date();a.setDate(a.getDate()+7);this.typingSpeed++;if(this.typingSpeed>this.typingSpeedMax){this.typingSpeed=this.typingSpeedMax}set_cookie("gcbos_speed",this.typingSpeed,a)};this.speedDown=function(){var a=new Date();a.setDate(a.getDate()+7);this.typingSpeed--;if(this.typingSpeed<this.typingSpeedMin){this.typingSpeed=this.typingSpeedMin}set_cookie("gcbos_speed",this.typingSpeed,a)};this.buildQuery=function(c){var a="";for(var b in c){if(a.length>0){a+="&"}a+=encodeURIComponent(b)+"="+encodeURIComponent(c[b])}return a};this.sendInput=function(){if(this.input.value.length>0){var a={action:"send_message",ajax:true,start:this.start,message:this.input.value};var b={success:this.processMessages,argument:a,handle:this};if((this.request)&&(YAHOO.util.Connect.isCallInProgress(this.request))){YAHOO.util.Connect.abort(this.request)}this.request=YAHOO.util.Connect.asyncRequest("POST","gcbos.php",b,this.buildQuery(a))}this.input.value=""};this.clearConsole=function(){while(this.console.firstChild){this.console.removeChild(this.console.firstChild)}this.lastElement=this.console;this.lastElement.appendChild(this.lastTextNode=document.createTextNode(""))};this.clearNotice=function(){while(this.notice.firstChild){this.notice.removeChild(this.notice.firstChild)}};this.checkMessages=function(e){if(e==null){e=this}if(!e.enabled){return}var a=new Date();var c=a.getTime();var b=e.checkTime.getTime();if(c-b<e.checkSpeed){return}e.checkTime=a;var d={action:"list_messages",ajax:true,start:e.start};var f={success:e.processMessages,argument:d,handle:e};if((e.request)&&(YAHOO.util.Connect.isCallInProgress(e.request))){return}e.request=YAHOO.util.Connect.asyncRequest("POST","gcbos.php",f,e.buildQuery(d))};this.processMessages=function(c){var a=c.responseText;var b=c.getResponseHeader["GCBOS-Start"]||c.getResponseHeader["Gcbos-Start"];b=parseInt(b,10);if((b<this.handle.start)||(a.length<1)){this.handle.checkSpeed+=this.handle.checkSpeedMin/2;if(this.handle.checkSpeed>this.handle.checkSpeedMax){this.handle.checkSpeed=this.handle.checkSpeedMax}return}else{this.handle.checkSpeed=this.handle.checkSpeedMin}this.handle.start=b;this.handle.request=null;if(a==null){a=""}if(a.length>0){if(this.handle.checkInterval<=0){clearInterval(this.handle.checkInterval);this.handle.checkInterval=-1}this.handle.typingLeft+=a;this.handle.checkMessages()}else{if(this.handle.checkInterval<0){this.handle.checkInterval=setInterval(this.handle.checkMessages,this.handle.checkSpeed,this.handle)}}};this.continueTyping=function(g){if((this.continueTyping==null)&&(g!=null)){return g.continueTyping(g)}if(!this.enabled){return}var b=new Date();var f=b.getTime();var e=this.typingTime.getTime();var d=!(this.console.scrollTop<(this.console.scrollHeight-this.console.clientHeight)-this.autoScrollOffset);var h=false;this.typingTime=b;while(((f-e>=this.typingSpeed)||(this.instant))&&(this.typingLeft.length>0)){f-=this.typingSpeed;h=true;if(this.deleting){this.forDeletion--;if(this.forDeletion<=0){this.forDeletion=0;this.deleting=false;this.buildingDelete=false}if((this.lastElement.lastChild!=null)&&(this.lastElement.lastChild.nodeType==3)&&(this.lastElement.lastChild.data.length>0)){this.lastElement.lastChild.deleteData(this.lastElement.lastChild.data.length-1,1)}else{if(this.lastElement.lastChild!=null){this.lastElement.removeChild(this.lastElement.lastChild);this.forDeletion++}}}else{var c=this.typingLeft.substr(0,1);this.typingLeft=this.typingLeft.substr(1);if(!this.lastTextNode){this.lastElement.appendChild(this.lastTextNode=document.createTextNode(""))}if(c=="["){if(this.typingLeft.substr(0,1)=="!"){this.typingLeft=this.typingLeft.substr(1)}else{if(this.processCode()){continue}}}else{if(c=="<"){if(this.processHtml()){continue}}else{if(c=="&"){var a=this.typingLeft.match(/^#?(\w+);/);if(a){this.typingLeft=this.typingLeft.substr(a[0].length);c=this.htmlEntitiesDecode("&"+a[0])}}else{if(this.instant){var a=this.typingLeft.match(/^(\w+)/);if(a){c+=this.typingLeft.substr(0,a[0].length);this.typingLeft=this.typingLeft.substr(a[0].length)}}}}}if(this.buildingDelete){this.forDeletion+=c.length}this.appendText(c)}}if((d)&&(h)){this.console.scrollTop=this.console.scrollHeight}};this.processCode=function(){if(this.typingLeft.substr(0,1)=="/"){return this.closeCode()}var d=this.typingLeft.match(/^(\w+)(|=(["|']?)([\s\S]+?)\3)\s*(\/|)\]/);if(!d){return false}var b=d[1];var e=d[4];var c=!!d[5];var f=false;var a=false;if((d[3]!="")&&(e)){e=e.replace(new RegExp("\\\\"+d[3],"gi"),d[3])}if(e){e=e.replace(/\\([\[\]])/gi,"$1")}if(!this.tags[b]){return false}var g=this.typingLeft.substr(0,this.typingLeft.match(/^([\s\S]*?)(\[message|$)/)[0].length);f=g.match(new RegExp("\\[\\/"+b+"\\]","i"));if((!c)&&(!f)){return false}if(!c){this.tagStack.push(b)}if(this.tags[b]["open"](b,e,c)){this.typingLeft=this.typingLeft.substr(d[0].length);return true}else{return false}};this.processHtml=function(){if(this.typingLeft.substr(0,1)=="/"){return this.closeHtml()}var f=this.typingLeft.match(/^(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/);var b=[];if(!f){return false}var a=f[0];var e=f[1];var d=f[2];var c=!!f[3]||this.dummyElements[e];var h=this;if((!c)&&(!this.typingLeft.substr(0,this.typingLeft.match(/^(.*?)(\[reset \/\])?$/m)[0].length).match(new RegExp("<\\/"+e+">","i")))){return false}var g=document.createElement(e);d.replace(/(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g,function(){var j=arguments[1];var k=arguments[2]?arguments[2]:arguments[3]?arguments[3]:arguments[4]?arguments[4]:"";k=k.replace(/&#?(\w+);/g,h.htmlEntitiesDecode);if(j=="style"){g.style.cssText=k}else{var i=document.createAttribute(j);i.value=k;g.setAttributeNode(i)}});this.lastElement.appendChild(g);if(!c){this.lastElement=g}this.lastElement.appendChild(this.lastTextNode=document.createTextNode(""));this.typingLeft=this.typingLeft.substr(f[0].length);return true};this.closeCode=function(){if(this.tagStack.length<1){return false}var c=this.typingLeft.match(/^\/(\w+)\]/);var e=false;var b=-1;if(!c){return false}for(var d in this.tagStack){if(this.tagStack[d].toLowerCase()==c[1].toLowerCase()){this.tags[this.tagStack[d]]["close"]();this.typingLeft=this.typingLeft.substr(c[0].length);e=true;b=d;break}}if(e){var a=[];for(var d in this.tagStack){if(d!=b){a.push(this.tagStack[d])}}this.tagStack=a;return true}else{return false}};this.closeHtml=function(){var a=this.typingLeft.match(new RegExp("^\\/"+this.lastElement.nodeName+">","i"));if(!a){return false}this.lastElement=this.lastElement.parentNode;this.lastElement.appendChild(this.lastTextNode=document.createTextNode(""));this.typingLeft=this.typingLeft.substr(a[0].length);return true};this.appendText=function(c){var a=true;var b=false;if(this.console.scrollTop<(this.console.scrollHeight-this.console.clientHeight)-this.autoScrollOffset){a=false}if(c.substr(c.length-1)=="\n"){c=c.substr(0,c.length-1);b=true}this.lastTextNode.appendData(c);if(b){this.lastElement.appendChild(document.createElement("br"));this.lastElement.appendChild(this.lastTextNode=document.createTextNode("\n"))}if(a){this.console.scrollTop=this.console.scrollHeight}};this.modifyHeight=function(a){this.setHeight(parseInt(this.console.style.height)+a)};this.setHeight=function(a){if(a<=0){a=0}this.console.style.height=a+"px";var b=new Date();b.setDate(b.getDate()+7);set_cookie("gcbos_height",a,b);this.setEnabled(a>0)};this.setEnabled=function(a){if(a==this.enabled){return}if(a){this.console.style.display="block";this.input.style.display="block"}else{this.console.style.display="none";this.input.style.display="none"}this.enabled=a}};
