
groupboard={MIN_WHITEBOARD_PACKET:1,LINE:1,CIRCLE:2,TEXT:3,FREEHAND:4,CLEAR:5,NEWUSER:6,DELUSER:7,UPLOAD_PIC:8,DOWNLOAD_PIC:9,BACKGROUND_PIC:10,RECTANGLE:11,FILLED_CIRCLE:12,FILLED_RECTANGLE:13,UNDO:14,SPRAYCAN:14,SET_BOARD:15,ENTER_BOARD:16,ERROR:17,TOO_MANY_USERS:18,WRONG_PASSWORD:19,SHOW_ADVERT:20,GET_BAN_LIST:21,REPLY_BAN_LIST:22,SET_BAN_LIST:23,GET_GALLERY_INDEX:24,REPLY_GALLERY_INDEX:25,GET_BACKGROUND_INDEX:26,REPLY_BACKGROUND_INDEX:27,DELETE_GALLERY_PIC:28,DELETE_BACKGROUND_PIC:29,IS_ADMIN:30,DISABLE_CLEAR:31,ENABLE_CLEAR:32,UPLOAD_BACKGROUND_PIC:33,UPLOAD_BACKGROUND_OKAY:34,GET_BOARD_INFO:35,REPLY_BOARD_INFO:36,SET_BOARD_INFO:37,DISABLE_DRAW:38,ENABLE_DRAW:39,COMPRESSED_LINES:40,GET_STATUS:41,INSERT_PANEL:42,DISABLE_LOAD:43,ENABLE_LOAD:44,DELETE_ITEM:45,MOVE_ITEM:46,REMOVED_ITEM:47,REMOVED_COMPRESSED_LINES:48,POINTER:49,CHECK_DOC_HOST:51,REMOVED_LINE:52,PAN:53,USER_PW_LOGIN:54,IMAGE:55,HIGHLIGHTER:63,FILL:64,SET_PANEL:65,CLEAR_PANEL:66,POLYGON:67,SOLID_POLYGON:68,HATCHED_POLYGON:69,MAX_WHITEBOARD_PACKET:69,MIN_CHAT_PACKET:70,CHANGE_NAME:70,CHAT_TO_ALL:71,CHAT_TO_USER:72,BAN_CLIENT:73,MESSAGE:74,BAN_CLIENT_REASON:74,MAX_CHAT_PACKET:74,MIN_BRUSH:0,CIRCLE_BRUSH:0,SLASH_BRUSH:1,BACKSLASH_BRUSH:2,MAX_BRUSH:2,graff:false,spraycan_on:false,custom_colour:null,num_users:0,we_are_admin:false,exiting:false,SPRAY_NUM:10,SPRAY_INTERVAL:25,wb:null,temp:null,last_x:null,last_y:null,last_size:null,last_col:null,colours:null,background_pic:null,background_img:null,save_filename:null,col_r:null,col_g:null,col_b:null,mouse_is_down:false,pointer_img:null,panels:null,t:null,t2:null,t3:null,wbtop:0,wbleft:0,cur_panel:0,num_panels:1,cur_size:1,cur_col:6,cur_tool:4,cur_brush:0,board_width:0,board_height:0,start_x:0,start_y:0,last_text_width:0,compressed_used:0,compress_dx:null,compress_dy:null,fill_warning_given:false,multipage_warning_given:false,no_canvas_child:false,users:null,reverse_users:null,load_filenames:null,bg_urls:null,user_ips:null,our_name:"",chat_user:null,allow_loading:true,allow_drawing:true,allow_clearing:true,backgrounds_url:"",asked_for_password:false,asked_for_username:false,paused:false,show_ip:false,set_name:"",multi_page:true,display_title:true,singleuser:false,hide_chat:false,show_drawing_user:false,password:null,username:null,need_password:false,need_username:false,is_designer:false,board_info_win:null,banlist_win:null,drawlog_win:null,col_names:null,last_bg:"",last_good_pkt:-1,centre_in_window:false,scale_to_fit:false,paste_image:null,cur_poly_points:0,cur_poly_x:null,cur_poly_y:null,java_codebase:"/java",MAX_COMPRESSED_DATA:4,MAX_POLYGON_POINTS:2000,start:function(server,board_id)
{var t=tunnel;var g=groupboard;g.col_names=new Array("white","red","green","blue","pink","orange","black","gray","magenta","cyan","brown");for(i=11;i<256;i++)
{g.col_names[i]=i;}
g.board_id=board_id;g.server=server;g.backgrounds_url="http://"+server+g.java_codebase+"/";if(!g.asked_for_username&&g.need_username&&g.username==null)
{g.asked_for_username=true;g.prompt_for_username();return;}
if(g.username==null)
{g.username='';}
if(!g.asked_for_password&&g.need_password&&g.password==null)
{g.asked_for_password=true;g.prompt_for_password();return;}
if(g.password==null)
{g.password='';}
if((!g.singleuser)&&(!g.hide_chat))
{var u=document.getElementById("userlist");while(u.childNodes.length>=1)
{u.removeChild(u.firstChild);}
var n=document.createElement("option");n.text="ALL";try
{u.add(n,null);}
catch(ex)
{u.add(n);}
u.selectedIndex=0;}
g.users=new Array();g.panels=new Array();g.cur_poly_x=new Array();g.cur_poly_y=new Array();g.reverse_users=new Array();g.load_filenames=new Array();g.bg_urls=new Array("");g.user_ips=new Array();g.last_x=new Array();g.last_y=new Array();g.compress_dx=new Array();g.compress_dy=new Array();g.colours=new Array();g.last_size=new Array();g.last_col=new Array();g.colours[0]="rgb(255,255,255)";g.colours[1]="rgb(255,0,0)";g.colours[2]="rgb(0,255,0)";g.colours[3]="rgb(0,0,255)";g.colours[4]="rgb(255,175,175)";g.colours[5]="rgb(255,200,0)";g.colours[6]="rgb(0,0,0)";g.colours[7]="rgb(128,128,128)";g.colours[8]="rgb(255,0,255)";g.colours[9]="rgb(0,255,255)";g.colours[10]="rgb(165,42,42)";var index=12;var swap_g=false;var swap_b=false;for(r=0;r<6;r++)
{for(gg=0;gg<6;gg++)
{var g2=gg;if(swap_g)
{g2=5-gg;}
for(b=0;b<6;b++)
{var b2=b;if(swap_b)
{b2=5-b;}
if(g.graff)
{g.colours[r+gg*6+b*36+12]="rgb("+r*51+","+g2*51+","+b2*51+")";++index;}
else
{g.colours[r+gg*6+b*36+12]="rgb("+r*51+","+gg*51+","+b*51+")";}}
swap_b=!swap_b;}
swap_g=!swap_g;}
t.open(server,80,41211);t.writeByte(8);t.writeShort(5);t.writeInt(g.board_id);if(g.singleuser)
{t.writeByte(0);}
else
{t.writeByte(1);}
t.post();var resp=t.readUbyte();if(resp!=39)
{alert("error connecting to server");return;}
var l=t.readUshort();if(l!=2)
{alert("error connecting to server");return;}
var p=t.readUshort();t.close();t.open(server,80,p);var version=t.readUbyte();if(g.need_username)
{t.writeByte(g.USER_PW_LOGIN);}
else
{t.writeByte(g.SET_BOARD);}
t.writeInt(board_id);if(g.need_username)
{t.writeShort(g.username.length);}
t.writeShort(g.password.length);if(g.need_username)
{t.writeStringOnly(g.username);}
t.writeStringOnly(g.password);t.post();var canvas=document.getElementById("whiteboard");g.wb=canvas.getContext('2d');var temp=document.getElementById("temp");g.temp=temp.getContext('2d');g.wbtop=0;var w=document.getElementById('whiteboard');while(null!=w)
{g.wbtop+=w.offsetTop;w=w.offsetParent;}
g.wbleft=0;w=document.getElementById('whiteboard');while(null!=w)
{g.wbleft+=w.offsetLeft;w=w.offsetParent;}
w=document.getElementById('whiteboard');g.board_width=w.width-0;g.board_height=w.height-0;g.main_loop();},prompt_for_password:function()
{REDIPS.dialog.showhtml(350,120,'<p>Enter password:</p><form name=\'frm1\'> <input name=\'pw\'><br><button onclick=\'groupboard.password = document.frm1.pw.value; REDIPS.dialog.hide(); groupboard.start(groupboard.server, groupboard.board_id); return false\'>OK</button> <button onclick=\'REDIPS.dialog.hide(); return false\'>Cancel</button> </form></body>');},prompt_for_username:function()
{REDIPS.dialog.showhtml(350,120,'<form name=\'frm1\'>Username: <input name=\'u\'><br>Password:<input name=\'pw\'><br><button onclick=\'groupboard.password = document.frm1.pw.value; groupboard.username = document.frm1.u.value; REDIPS.dialog.hide(); groupboard.start(groupboard.server, groupboard.board_id); return false\'>OK</button> <button onclick=\'REDIPS.dialog.hide(); return false\'>Cancel</button> </form></body>');},set_paste_image:function(img)
{var g=groupboard;if(img.indexOf('/')==-1)
{img="data/"+Math.floor(g.board_id/1000)+"/"+(g.board_id%1000)+"/backgrounds/"+img;}
g.paste_image=img;g.cur_tool=g.IMAGE;},del_user:function(id)
{var name=groupboard.users[id];var u=document.getElementById("userlist");if(u==null)
{return;}
for(i=0;i<u.length;i++)
{if(u.options[i].text==name)
{u.remove(i);break;}}},main_loop:function()
{var t=tunnel;var g=groupboard;var start_time=new Date().getTime();t.get(1,true);while((!g.paused)&&(t.inbuf.length-t.inbuf_start>0))
{var pkt=t.readUbyte();switch(pkt)
{case g.CHANGE_NAME:var id=t.readUint();var name_len=t.readUshort();var ip_len=t.readUshort();var name=t.readStringSize(name_len);var ip=t.readStringSize(ip_len);if((!g.singleuser)&&(!g.hide_chat))
{g.del_user(id);g.users[id]=name;g.user_ips[id]=ip;g.reverse_users[name]=id;var n=document.createElement("option");var u=document.getElementById("userlist");n.text=name;try
{u.add(n,null);}
catch(ex)
{u.add(n);}}
break;case g.ENTER_BOARD:g.num_users=t.readUshort();if(!g.singleuser)
{document.getElementById("num_users").innerHTML="There are "+g.num_users+" other users connected.";}
else
{document.getElementById("num_users").innerHTML="Connected - single-user mode";}
var flags=t.readUbyte();if(flags&64)
{g.is_designer=true;}
if(g.is_designer)
{var our_id=t.readInt();}
var title=t.readString();if(g.display_title)
{document.getElementById("title").innerHTML=title;document.getElementById("title").style.display='block';}
if(null!=g.background_pic)
{var url="data/"+Math.floor(g.board_id/1000)+"/"+(g.board_id%1000)+"/backgrounds/"+g.background_pic;g.background_img=new Image();g.background_img.src=g.backgrounds_url+url;g.draw_item(g.wb,g.BACKGROUND_PIC,0,0,0,0,0,0,0,url,0,null,null);}
if(g.set_name!=""&&g.our_name=="")
{if(null!=document.getElementById("name"))
{document.getElementById("name").value=g.set_name;}
g.send_change_name(g.set_name);}
break;case g.DISABLE_LOAD:g.allow_loading=false;break;case g.ENABLE_LOAD:g.allow_loading=true;break;case g.DISABLE_CLEAR:g.allow_clearing=false;break;case g.ENABLE_CLEAR:g.allow_clearing=true;break;case g.DISABLE_DRAW:g.allow_drawing=false;break;case g.ENABLE_DRAW:g.allow_drawing=true;break;case g.REPLY_BACKGROUND_INDEX:var filename=t.readString();var url=t.readString();var n=document.createElement("option");n.text=filename;var filelist=document.getElementById('filelist');g.bg_urls[filelist.length]=url;try
{filelist.add(n,null);}
catch(ex)
{filelist.add(n);}
break;case g.REPLY_BAN_LIST:if(null!=g.banlist_win)
{var banlist=g.banlist_win.document.getElementById('banlist');banlist.value=t.readString().replace(/:/g,'\n');var save_but=g.banlist_win.document.getElementById('save');save_but.disabled=false;}
break;case g.REPLY_BOARD_INFO:var flags=t.readInt();var cat=t.readInt();var visits=t.readInt();var visits_week=t.readInt();var visits_prev=t.readInt();var visible=t.readByte();var title=t.readString();var url=t.readString();var email=t.readString();var pw=t.readString();var admin_pw=t.readString();if(null!=g.board_info_win)
{var f=g.board_info_win.document.frm1;f.title.value=title;f.url.value=url;f.email.value=email;f.visits.value=visits;f.visits_week.value=visits_week;f.visits_prev.value=visits_prev;if(flags&1)
{f.whiteboard.checked="checked";}
if(flags&2)
{f.chat.checked="checked";}
if(flags&4)
{f.bboard.checked="checked";}
if(flags&32)
{f.games.checked="checked";}
if(visible)
{f.visible.checked="checked";}
f.password.value=pw;f.password2.value=pw;f.admin_password.value=admin_pw;f.admin_password2.value=admin_pw;f.category.selectedIndex=cat-1;f.ok.disabled=false;}
break;case g.REPLY_GALLERY_INDEX:var filename=t.readString();var title=t.readString();var author=t.readString();var ip=t.readString();var n=document.createElement("option");if(g.we_are_admin)
{n.text=title+" ("+author+" - "+ip+")";}
else
{n.text=title+" ("+author+")";}
var filelist=document.getElementById('filelist');g.load_filenames[filelist.length]=filename;try
{filelist.add(n,null);}
catch(ex)
{filelist.add(n);}
break;case g.ERROR:var msg=t.readString();alert(msg);break;case g.TOO_MANY_USERS:alert("Too many users - please try again later");break;case g.WRONG_PASSWORD:t.close();if(g.need_username)
{g.prompt_for_username();}
else
{g.prompt_for_password();}
break;case g.MESSAGE:case g.CHAT_TO_USER:case g.CHAT_TO_ALL:var from_id=0;var str='';if(pkt!=g.MESSAGE)
{from_id=t.readUint();var ip='';if(g.show_ip)
{ip=' ('+g.user_ips[from_id]+')';}
if(g.CHAT_TO_ALL==pkt)
{str+="&lt;"+g.users[from_id]+ip+"&gt; ";}
else
{str+="<font color='#ff0000'>*"+g.users[from_id]+ip+"*</font> ";}}
var msg=t.readString();if(msg.length>0)
{msg=msg.replace(/</g,"&lt;");msg=msg.replace(/>/g,"&gt;");msg=msg.replace(/http:\/\/([^ <]*)/g,"<a rel=\"nofollow\" target=\"_blank\" href=\"http://$1\">http://$1</a>");str+=msg;var chat=document.getElementById("chat");if(null!=chat)
{chat.innerHTML+=str+"<br>";chat.scrollTop=chat.scrollHeight;}}
break;case g.CHECK_DOC_HOST:var allowed_host=t.readString();if(!document.domain.match(allowed_host+"$"))
{alert("Error: you are accessing this board from "+document.domain+" but it can only be accessed from "+allowed_host);}
break;case g.IS_ADMIN:g.we_are_admin=true;break;case g.NEWUSER:var user_num=t.readUint();if(!g.singleuser)
{++g.num_users;g.users[user_num]='Anon';document.getElementById("num_users").innerHTML="There are "+g.num_users+" other users connected.";}
break;case g.DELUSER:var id=t.readUint();if(!g.singleuser)
{--g.num_users;g.del_user(id);document.getElementById("num_users").innerHTML="There are "+g.num_users+" other users connected.";}
break;case g.POINTER:var id=t.readUint();var set_x=t.readShort();var set_y=t.readShort();var set_size=t.readByte();var set_col=t.readByte();g.draw_pointer(set_x,set_y,set_size,set_col);break;case g.CLEAR:g.do_clear_all();break;case g.MOVE_ITEM:var id=t.readUint();var item_id=t.readUint();var x=t.readShort();var y=t.readShort();break;case g.PAN:var x=t.readShort();var y=t.readShort();var zoom=t.readShort();break;case g.DELETE_ITEM:var id=t.readUint();var item_id=t.readUint();break;default:if(pkt>=g.MIN_WHITEBOARD_PACKET&&pkt<=g.MAX_WHITEBOARD_PACKET)
{var num_poly_points=0;var poly_x=new Array(g.MAX_POLYGON_POINTS);var poly_y=new Array(g.MAX_POLYGON_POINTS);var col_index;var set_thickness=1;var type="";if(pkt==g.COMPRESSED_LINES||pkt==g.REMOVED_COMPRESSED_LINES)
{type="lines/freehand";var num_items=t.readUbyte();if(num_items>g.MAX_COMPRESSED_DATA)
{num_items=g.MAX_COMPRESSED_DATA;}
var set_id=t.readUint();var set_item_id=0;if(g.is_designer)
{set_item_id=t.readUint();}
var compress_dx=new Array(g.MAX_COMPRESSED_DATA);var compress_dy=new Array(g.MAX_COMPRESSED_DATA);compress_dx[0]=t.readByte();compress_dy[0]=t.readByte();compress_dx[1]=t.readByte();compress_dy[1]=t.readByte();compress_dx[2]=t.readByte();compress_dy[2]=t.readByte();compress_dx[3]=t.readByte();compress_dy[3]=t.readByte();col_index=t.readUbyte();var set_text=t.readString();var cur_x=g.last_x[set_id];var cur_y=g.last_y[set_id];set_thickness=g.last_size[set_id];col_index=g.last_col[set_id];var brush=g.CIRCLE_CRUSH;if(set_thickness>=0x0f)
{brush=(set_thickness>>4)&0x0f;set_thickness=set_thickness&0x0f;}
if(set_thickness!=1)
{set_thickness=(set_thickness-1)*2;}
if(pkt!=g.REMOVED_COMPRESSED_LINES)
{if(typeof(col_index)!=='undefined')
{if(col_index<=255&&col_index>=0)
{g.wb.strokeStyle=g.colours[col_index];g.wb.fillStyle=g.colours[col_index];}
else
{var alpha=(col_index>>24)&0xff;var red=(col_index>>16)&0xff;var green=(col_index>>8)&0xff;var blue=col_index&0xff;g.wb.strokeStyle="rgba("+red+","+green+","+blue+","+(alpha/255)+")";g.wb.fillStyle="rgba("+red+","+green+","+blue+","+(alpha/255)+")";}}
if(typeof(set_thickness)!=='undefined')
{g.wb.lineWidth=set_thickness;if(g.graff&&set_thickness!=1)
{g.wb.lineWidth=set_thickness*1.5;}}
g.wb.lineCap="round";var add=0;if(set_thickness%2!=0)
{add=0.5;}
if(typeof(cur_x)!=='undefined'&&typeof(cur_y)!=='undefined')
{for(i=0;i<num_items;i++)
{if(brush==g.BACKSLASH_BRUSH)
{var th=Math.round(set_thickness*0.7);g.wb.lineCap="butt";g.wb.lineWidth=1;g.wb.beginPath();g.wb.moveTo(cur_x+add-th,cur_y+add-th);g.wb.lineTo(cur_x+add+th,cur_y+add+th);g.wb.lineTo(cur_x+add+compress_dx[i]+th,cur_y+add+compress_dy[i]+th);g.wb.lineTo(cur_x+add+compress_dx[i]-th,cur_y+add+compress_dy[i]-th);g.wb.fill();g.wb.stroke();}
else if(brush==g.SLASH_BRUSH)
{var th=Math.round(set_thickness*0.7);g.wb.lineCap="butt";g.wb.lineWidth=1;g.wb.beginPath();g.wb.moveTo(cur_x+add+th,cur_y+add-th);g.wb.lineTo(cur_x+add-th,cur_y+add+th);g.wb.lineTo(cur_x+add+compress_dx[i]-th,cur_y+add+compress_dy[i]+th);g.wb.lineTo(cur_x+add+compress_dx[i]+th,cur_y+add+compress_dy[i]-th);g.wb.fill();g.wb.stroke();}
else
{g.wb.beginPath();g.wb.moveTo(cur_x+add,cur_y+add);g.wb.lineTo(cur_x+compress_dx[i]+add,cur_y+compress_dy[i]+add);g.wb.stroke();}
cur_x+=compress_dx[i];cur_y+=compress_dy[i];}
g.last_x[set_id]=cur_x;g.last_y[set_id]=cur_y;if(g.show_drawing_user&&t.inbuf.length-t.inbuf_start<100)
{var username=g.users[set_id];if(typeof(username)=='undefined')
{username='Unknown';}
g.clear_temp();g.draw_item(g.temp,g.TEXT,0,cur_x,cur_y,0,0,2,col_index,username,0,null,null);if(g.t2==null)
{g.t2=setTimeout("groupboard.clear_temp(); groupboard.t2 = null",2000);}}}}}
else
{set_thickness=t.readUbyte();var set_id=t.readUint();var set_item_id=0;if(g.is_designer)
{set_item_id=t.readUint();}
var set_x=t.readShort();var set_y=t.readShort();var set_width=t.readShort();var set_height=t.readShort();col_index=t.readUbyte();var set_text=t.readString();if(pkt>=g.POLYGON&&pkt<=g.HATCHED_POLYGON)
{num_poly_points=t.readShort();for(var i=0;i<num_poly_points;++i)
{poly_x[i]=t.readShort();poly_y[i]=t.readShort();}}
switch(pkt)
{case g.LINE:type="line";break;case g.CIRCLE:type="oval";break;case g.FILLED_CIRCLE:type="filled oval";break;case g.RECTANGLE:type="rectangle";break;case g.FILLED_RECTANGLE:type="filled rectangle";break;case g.POLYGON:type="polygons";break;case g.SOLID_POLYGON:type="filled polygons";break;case g.HATCHED_POLYGON:type="hatched polygons";break;}
if(pkt==g.TEXT&&set_thickness==100&&set_x==-1000)
{if(set_text.length==0)
{g.pointer_img=null;}
else
{g.pointer_img=new Image();g.pointer_img.src=g.backgrounds_url+set_text;}}
else if(pkt==g.CLEAR_PANEL)
{g.do_clear();}
else if(pkt==g.SET_PANEL)
{var new_panel_num=set_thickness;g.set_panel(new_panel_num,false);}
else if(pkt==g.INSERT_PANEL)
{g.insert_panel(false);}
else if(pkt!=g.REMOVED_ITEM)
{g.draw_item(g.wb,pkt,set_id,set_x,set_y,set_width,set_height,set_thickness,col_index,set_text,num_poly_points,poly_x,poly_y);if(g.show_drawing_user&&t.inbuf.length-t.inbuf_start<100)
{var username=g.users[set_id];if(typeof(username)=='undefined')
{username='Unknown';}
g.clear_temp();g.draw_item(g.temp,g.TEXT,0,set_x,set_y,0,0,2,col_index,username,0,null,null);if(g.t2==null)
{g.t2=setTimeout("groupboard.clear_temp(); groupboard.t2 = null",2000);}}}
if(null!=g.drawlog_win)
{var log=g.drawlog_win.document.getElementById('log');log.value+=g.users[set_id]+" ("+g.user_ips[set_id]+"): colour "+g.col_names[col_index]+", size "+set_thickness+", "+type+"\n";}}}
else
{alert("error: unknown packet "+pkt+" received from server (last good packet: "+g.last_good_pkt+")");exiting=true;}
break;}
g.last_good_pkt=pkt;var timediff=new Date().getTime()-start_time;if(timediff>100)
{setTimeout("groupboard.main_loop()",1);return;}}
if(g.exiting)
{t.close();}
else if(!t.connected())
{document.getElementById("num_users").innerHTML="Lost connection to server - try reloading page";}
else
{if(g.paused)
{setTimeout("groupboard.main_loop()",100);}
else
{setTimeout("groupboard.main_loop()",1000);}}},close:function()
{tunnel.close();},touch_move:function(e)
{e.preventDefault();groupboard.mouse_move(e.targetTouches[0]);},touch_start:function(e)
{e.preventDefault();groupboard.mouse_down(e.targetTouches[0]);},touch_end:function(e)
{e.preventDefault();groupboard.mouse_up(e.changedTouches[0]);},set_panel:function(panel_num,send_to_server)
{var g=groupboard;if(panel_num==g.cur_panel)
{return;}
g.last_bg="";if(!g.multi_page)
{return;}
if(send_to_server)
{g.transmit_item(g.SET_PANEL,0,0,0,0,panel_num,0,''+(g.cur_panel+1),0,null,null);}
var w=document.getElementById("whiteboard");if(!w.toDataURL&&!g.multipage_warning_given)
{g.multipage_warning_given=true;alert("multi-page not supported on your browser. Please upgrade to an HTML5-compliant browser such as Firefox, Safari, Chrome or IE9");return;}
var imgdata=w.toDataURL("image/png");var img=new Image();g.paused=true;g.panels[g.cur_panel]=img;img.onload=function()
{g.paused=false;}
img.onerror=function()
{g.paused=false;}
g.paused=true;img.src=imgdata;var p=document.getElementById('page_num');g.cur_panel=panel_num;g.do_clear();if(null!=g.panels[g.cur_panel])
{try
{g.wb.drawImage(g.panels[g.cur_panel],0,0);}
catch(ex)
{alert('exception '+ex+' while drawing image');}}
if(panel_num>=g.num_panels)
{++g.num_panels;var n=document.createElement("option");n.text=""+g.num_panels;try
{p.add(n,null);}
catch(ex)
{p.add(n);}}
p.selectedIndex=g.cur_panel;},next_page:function()
{var g=groupboard;g.set_panel(g.cur_panel+1,true);},prev_page:function()
{var g=groupboard;if(g.cur_panel>0)
{g.set_panel(g.cur_panel-1,true);}},insert_panel:function(send_to_server)
{var g=groupboard;if(send_to_server)
{g.transmit_item(g.INSERT_PANEL,0,0,0,0,0,0,"",0,null,null);}
g.set_panel(g.cur_panel,false);for(var i=g.num_panels-1;i>=g.cur_panel;i--)
{g.panels[i+1]=g.panels[i];}
++g.num_panels;var p=document.getElementById('page_num');var n=document.createElement("option");n.text=""+g.num_panels;try
{p.add(n,null);}
catch(ex)
{p.add(n);}
g.do_clear();},double_click:function(e)
{var g=groupboard;if(!g.allow_drawing)
{return;}
var x=0;var y=0;if(e.pageX||e.pageY)
{x=e.pageX-g.wbleft;y=e.pageY-g.wbtop;}
else if(e.clientX||e.clientY)
{x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft-g.wbleft;y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop-g.wbtop;}
if(g.cur_tool>=g.POLYGON&&g.cur_tool<=g.HATCHED_POLYGON)
{g.cur_poly_x[g.cur_poly_points]=x;g.cur_poly_y[g.cur_poly_points]=y;++g.cur_poly_points;g.clear_temp();g.draw_item(g.wb,g.cur_tool,0,x,y,0,0,g.cur_size,g.cur_col,"",g.cur_poly_points,g.cur_poly_x,g.cur_poly_y);g.transmit_item(g.cur_tool,x,y,0,0,g.cur_size,g.cur_col,"",g.cur_poly_points,g.cur_poly_x,g.cur_poly_y);g.cur_poly_points=0;}},mouse_down:function(e)
{var g=groupboard;var t=tunnel;if(!g.allow_drawing)
{return;}
g.mouse_is_down=true;g.compressed_used=0;var x=0;var y=0;if(e.pageX||e.pageY)
{x=e.pageX-g.wbleft;y=e.pageY-g.wbtop;}
else if(e.clientX||e.clientY)
{x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft-g.wbleft;y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop-g.wbtop;}
var send_text="";if(null!=g.custom_colour)
{send_text="#"+g.custom_colour;}
if(g.cur_tool>=g.POLYGON&&g.cur_tool<=g.HATCHED_POLYGON)
{g.cur_poly_x[g.cur_poly_points]=x;g.cur_poly_y[g.cur_poly_points]=y;++g.cur_poly_points;}
else if(g.cur_tool==g.SPRAYCAN&&g.graff)
{g.spraycan_on=true;setTimeout('groupboard.spray()',g.SPRAY_INTERVAL);}
else if(g.cur_tool==g.TEXT)
{g.send_text();var tt=document.getElementById('temptext');var t=document.createElement('input');t.id="textinput";t.style.position="absolute";t.style.left=x+"px";t.style.top=y+"px";var fontsize=(g.cur_size+1)*5;t.style.fontSize=fontsize+"px";t.style.fontFamily="times,serif";t.style.marginTop="-0.9em";t.style.color=g.colours[g.cur_col];t.onkeydown=function(event){var e=window.event||event;if(e.keyCode==10||e.keyCode==13){groupboard.send_text();}};tt.appendChild(t);setTimeout("document.getElementById('textinput').focus()",10);}
else if(g.cur_tool==g.IMAGE)
{if(g.paste_image!=null)
{g.draw_item(g.wb,g.cur_tool,0,x,y,0,0,1,g.cur_col,g.paste_image,0,null,null);g.transmit_item(g.cur_tool,x,y,0,0,1,g.cur_col,g.paste_image,0,null,null);}}
else if(g.cur_tool==g.FILL)
{g.draw_item(g.wb,g.cur_tool,0,x,y,0,0,1,g.cur_col,send_text,0,null,null);g.transmit_item(g.cur_tool,x,y,0,0,1,g.cur_col,send_text,0,null,null);}
else if(g.cur_tool==g.POINTER)
{g.draw_pointer(x,y,g.cur_size,g.cur_col);t.writeByte(g.cur_tool);t.writeShort(x);t.writeShort(y);t.writeByte(g.cur_size);t.writeByte(g.cur_col);if(g.t3==null)
{g.t3=setTimeout("groupboard.t3 = null; tunnel.post();",1000);}}
g.start_x=x;g.start_y=y;g.last_col[0]=0;g.last_size[0]=0;},mouse_up:function(e)
{var g=groupboard;var t=tunnel;if(!g.mouse_is_down)
{return;}
g.mouse_is_down=false;var x=0;var y=0;if(e.pageX||e.pageY)
{x=e.pageX-g.wbleft;y=e.pageY-g.wbtop;}
else if(e.clientX||e.clientY)
{x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft-g.wbleft;y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop-g.wbtop;}
var send_text="";if(null!=g.custom_colour)
{send_text="#"+g.custom_colour;}
switch(g.cur_tool)
{case g.LINE:case g.CIRCLE:case g.FILLED_CIRCLE:case g.RECTANGLE:case g.FILLED_RECTANGLE:g.clear_temp();g.draw_item(g.wb,g.cur_tool,0,g.start_x,g.start_y,x-g.start_x,y-g.start_y,g.cur_size,g.cur_col,send_text,0,null,null);g.transmit_item(g.cur_tool,g.start_x,g.start_y,x-g.start_x,y-g.start_y,g.cur_size,g.cur_col,send_text,0,null,null);break;case g.SPRAYCAN:if(g.graff)
{g.spraycan_on=false;}
break;case g.FREEHAND:if(g.compressed_used>0)
{g.send_compressed_data();}
var send_thickness=g.cur_size;if(g.graff&&g.cur_brush!=g.CIRCLE_BRUSH)
{send_thickness=(send_thickness|(g.cur_brush<<4));}
g.draw_item(g.wb,g.cur_tool,0,g.start_x,g.start_y,x-g.start_x,y-g.start_y,send_thickness,g.cur_col,send_text,0,null,null);var send_item=g.LINE;if(g.HIGHLIGHTER==g.cur_tool)
{send_item=g.HIGHLIGHTER;}
g.transmit_item(send_item,g.start_x,g.start_y,x-g.start_x,y-g.start_y,send_thickness,g.cur_col,send_text,0,null,null);g.last_col[0]=g.cur_col;g.last_size[0]=g.cur_size;g.start_x=x;g.start_y=y;break;}
if(g.t3!=null)
{clearTimeout(g.t3);}
g.t3=setTimeout("groupboard.t3 = null; tunnel.post();",1);},spray:function()
{var g=groupboard;if(g.spraycan_on&&g.cur_tool==g.SPRAYCAN)
{var send_text="";if(null!=g.custom_colour)
{send_text="#"+g.custom_colour;}
g.draw_item(g.wb,g.cur_tool,0,g.start_x,g.start_y,0,0,g.cur_size,g.cur_col,send_text,0,null,null);g.transmit_item(g.cur_tool,g.start_x,g.start_y,0,0,g.cur_size,g.cur_col,send_text,0,null,null);setTimeout('groupboard.spray()',g.SPRAY_INTERVAL);}},mouse_move:function(e)
{var g=groupboard;var t=tunnel;var x=0;var y=0;if(e.pageX||e.pageY)
{x=e.pageX-g.wbleft;y=e.pageY-g.wbtop;}
else if(e.clientX||e.clientY)
{x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft-g.wbleft;y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop-g.wbtop;}
if(g.mouse_is_down||(g.cur_tool>=g.POLYGON&&g.cur_tool<=g.HATCHED_POLYGON))
{var send_text="";if(null!=g.custom_colour)
{send_text="#"+g.custom_colour;}
d=Math.pow(x-g.start_x,2)+Math.pow(y-g.start_y,2);{switch(g.cur_tool)
{case g.POINTER:g.draw_pointer(x,y,g.cur_size,g.cur_col);t.writeByte(g.cur_tool);t.writeShort(x);t.writeShort(y);t.writeByte(g.cur_size);t.writeByte(g.cur_col);if(g.t3==null)
{g.t3=setTimeout("groupboard.t3 = null; tunnel.post();",1000);}
g.start_x=x;g.start_y=y;break;case g.SPRAYCAN:g.start_x=x;g.start_y=y;break;case g.FREEHAND:case g.HIGHLIGHTER:var send_thickness=g.cur_size;if(g.graff&&g.cur_brush!=g.CIRCLE_BRUSH)
{send_thickness=(send_thickness|(g.cur_brush<<4));}
g.draw_item(g.wb,g.cur_tool,0,g.start_x,g.start_y,x-g.start_x,y-g.start_y,send_thickness,g.cur_col,send_text,0,null,null);var dx=x-g.start_x;var dy=y-g.start_y;if(dx>-128&&dx<128&&dy>-128&&dy<128&&g.last_size[0]==g.cur_size&&g.last_col[0]==g.cur_col&&g.cur_tool==g.FREEHAND)
{g.compress_dx[g.compressed_used]=x-g.start_x;g.compress_dy[g.compressed_used]=y-g.start_y;++g.compressed_used;if(g.compressed_used>=g.MAX_COMPRESSED_DATA)
{g.send_compressed_data();}}
else
{if(g.compressed_used>0)
{g.send_compressed_data();}
var send_item=g.LINE;if(g.HIGHLIGHTER==g.cur_tool)
{send_item=g.HIGHLIGHTER;}
g.transmit_item(send_item,g.start_x,g.start_y,dx,dy,send_thickness,g.cur_col,send_text,0,null,null);}
g.last_col[0]=g.cur_col;g.last_size[0]=g.cur_size;g.start_x=x;g.start_y=y;break;case g.LINE:case g.CIRCLE:case g.FILLED_CIRCLE:case g.RECTANGLE:case g.FILLED_RECTANGLE:case g.POLYGON:case g.SOLID_POLYGON:case g.HATCHED_POLYGON:g.clear_temp();if(g.cur_tool>=g.POLYGON&&g.cur_tool<=g.HATCHED_POLYGON)
{g.cur_poly_x[g.cur_poly_points]=x;g.cur_poly_y[g.cur_poly_points]=y;++g.cur_poly_points;}
g.draw_item(g.temp,g.cur_tool,0,g.start_x,g.start_y,x-g.start_x,y-g.start_y,g.cur_size,g.cur_col,send_text,g.cur_poly_points,g.cur_poly_x,g.cur_poly_y);if(g.cur_tool>=g.POLYGON&&g.cur_tool<=g.HATCHED_POLYGON)
{--g.cur_poly_points;}
break;}}}},set_custom_colour:function(custom_col)
{groupboard.custom_colour=parseInt(custom_col,16);},set_colour:function(new_colour)
{if(new_colour<0||new_colour>255)
{alert("set_colour:invalid colour "+new_colour);}
else
{groupboard.cur_col=new_colour;}
groupboard.custom_colour=null;},set_thickness:function(new_thickness)
{if(new_thickness<1||new_thickness>10)
{alert("set_thickness: invalid thickness "+new_thickness);}
else
{groupboard.cur_size=new_thickness-0;}},set_brush:function(new_brush)
{if(new_brush>=groupboard.MIN_BRUSH&&new_brush<=groupboard.MAX_BRUSH)
{groupboard.cur_brush=new_brush;}},set_tool:function(new_tool)
{var g=groupboard;if(new_tool==0)
{alert('not implemented');return;}
if(null!=g.pointer_img)
{g.pointer_img=null;g.transmit_item(g.TEXT,-1000,-1000,0,0,100,0,"",0,null,null);}
if(new_tool<1||new_tool>69)
{alert("set_tool: invalid tool "+new_tool);}
else
{g.cur_poly_points=0;if(g.cur_tool==g.TEXT&&new_tool!=g.TEXT)
{g.send_text();}
g.cur_tool=new_tool-0;}},fill_area:function(wb,set_x,set_y,set_col)
{var g=groupboard;if(wb.getImageData)
{im=wb.getImageData(0,0,g.board_width,g.board_height);ind=set_y*(im.width*4)+(set_x*4);pxl_r=im.data[ind];pxl_g=im.data[ind+1];pxl_b=im.data[ind+2];pxl_a=im.data[ind+3];new_r=set_col.replace(/rgba?\(([0-9]+),([0-9]+),([0-9]+)[,\)].*/,"$1")-0;new_g=set_col.replace(/rgba?\(([0-9]+),([0-9]+),([0-9]+)[,\)].*/,"$2")-0;new_b=set_col.replace(/rgba?\(([0-9]+),([0-9]+),([0-9]+)[,\)].*/,"$3")-0;if(pxl_r==new_r&&pxl_g==new_g&&pxl_b==new_b&&pxl_a==255)
{return;}
fill_stack=new Array();fill_done=new Array(im.width*im.height);fill_stack.push(set_y);fill_stack.push(set_x);while(fill_stack.length>0)
{curr_x=fill_stack.pop();curr_y=fill_stack.pop();ind=curr_y*(im.width*4)+(curr_x*4);save_x=curr_x;save_ind=ind;var nflag=true;var sflag=true;while(curr_x>0&&im.data[ind]==pxl_r&&im.data[ind+1]==pxl_g&&im.data[ind+2]==pxl_b&&im.data[ind+3]==pxl_a)
{im.data[ind]=new_r;im.data[ind+1]=new_g;im.data[ind+2]=new_b;im.data[ind+3]=255;fill_done[ind/4]=true;if(curr_y>0)
{testind=ind-im.width*4;if((!fill_done[testind/4])&&im.data[testind]==pxl_r&&im.data[testind+1]==pxl_g&&im.data[testind+2]==pxl_b&&im.data[testind+3]==pxl_a)
{if(nflag||curr_x==0)
{fill_stack.push(curr_y-1);fill_stack.push(curr_x);}
else
{fill_done[testind/4]=true;}
nflag=false;}
else
{nflag=true;}}
if(curr_y<im.height)
{testind=ind+im.width*4;if((!fill_done[testind/4])&&im.data[testind]==pxl_r&&im.data[testind+1]==pxl_g&&im.data[testind+2]==pxl_b&&im.data[testind+3]==pxl_a)
{if(sflag||curr_x==0)
{fill_stack.push(curr_y+1);fill_stack.push(curr_x);}
else
{fill_done[testind/4]=true;}
sflag=false;}
else
{sflag=true;}}
--curr_x;ind-=4;}
curr_x=save_x+1;ind=save_ind+4;var nflag=true;var sflag=true;while(curr_x<im.width&&im.data[ind]==pxl_r&&im.data[ind+1]==pxl_g&&im.data[ind+2]==pxl_b&&im.data[ind+3]==pxl_a)
{im.data[ind]=new_r;im.data[ind+1]=new_g;im.data[ind+2]=new_b;im.data[ind+3]=255;fill_done[ind/4]=true;if(curr_y>0)
{testind=ind-im.width*4;if((!fill_done[testind/4])&&im.data[testind]==pxl_r&&im.data[testind+1]==pxl_g&&im.data[testind+2]==pxl_b&&im.data[testind+3]==pxl_a)
{if(nflag||curr_x==0)
{fill_stack.push(curr_y-1);fill_stack.push(curr_x);}
else
{fill_done[testind/4]=true;}
nflag=false;}
else
{nflag=true;}}
if(curr_y<im.height)
{testind=ind+im.width*4;if((!fill_done[testind/4])&&im.data[testind]==pxl_r&&im.data[testind+1]==pxl_g&&im.data[testind+2]==pxl_b&&im.data[testind+3]==pxl_a)
{if(sflag||curr_x==0)
{fill_stack.push(curr_y+1);fill_stack.push(curr_x);}
else
{fill_done[testind/4]=true;}
sflag=false;}
else
{sflag=true;}}
++curr_x;ind+=4;}}
wb.putImageData(im,0,0);}
else if(!g.fill_warning_given)
{g.fill_warning_given=true;alert("Flood fill not supported on your browser. Please upgrade to an HTML5 compliant browser such as Firefox, Safari, Chrome or IE9");}},transmit_item:function(set_tool,set_x,set_y,set_width,set_height,set_thickness,col_index,set_text,num_poly_points,poly_x,poly_y)
{var t=tunnel;var g=groupboard;t.writeByte(set_tool);t.writeByte(set_thickness);t.writeShort(set_x);t.writeShort(set_y);t.writeShort(set_width);t.writeShort(set_height);t.writeByte(col_index);if(g.is_designer)
{t.writeInt(0);}
t.writeString(set_text);if(set_tool>=g.POLYGON&&set_tool<=g.HATCHED_POLYGON)
{t.writeShort(num_poly_points);for(var i=0;i<num_poly_points;++i)
{t.writeShort(poly_x[i]);t.writeShort(poly_y[i]);}}
if(g.t3==null&&(!(g.cur_tool==g.FREEHAND&&g.mouse_is_down)))
{g.t3=setTimeout("groupboard.t3 = null; tunnel.post();",1000);}},draw_background_pic:function(url,img)
{var g=groupboard;g.last_bg=url;if(null==img)
{img=new Image();}
var x=0;var y=0;if(g.wb.drawImage)
{if(img.src&&img.complete)
{try
{if(g.scale_to_fit)
{var scale=g.board_width/img.width;if(g.board_height/img.height<scale)
{scale=g.board_height/img.height;}
g.wb.drawImage(img,g.board_width/2-img.width*scale/2,g.board_height/2-img.height*scale/2,img.width*scale,img.height*scale);}
else if(g.centre_in_window)
{g.wb.drawImage(img,g.board_width/2-img.width/2,g.board_height/2-img.height/2);}
else
{g.wb.drawImage(img,0,0);}}
catch(ex)
{}}
else
{img.onload=function()
{try
{if(g.scale_to_fit)
{var scale=g.board_width/img.width;if(g.board_height/img.height<scale)
{scale=g.board_height/img.height;}
g.wb.drawImage(img,g.board_width/2-img.width*scale/2,g.board_height/2-img.height*scale/2,img.width*scale,img.height*scale);}
else if(g.centre_in_window)
{g.wb.drawImage(img,g.board_width/2-img.width/2,g.board_height/2-img.height/2);}
else
{g.wb.drawImage(img,0,0);}}
catch(ex)
{}
g.paused=false;}
img.onerror=function()
{g.paused=false;}
g.paused=true;img.src=g.backgrounds_url+url;}}
else
{img.src=g.backgrounds_url+url;var w=document.getElementById('whiteboard');if(g.centre_in_window)
{var x=g.board_width/2-img.width/2;var y=g.board_height/2-img.height/2;img.style.position="absolute";img.style.left=x+"px";img.style.top=y+"px";}
w.firstChild.appendChild(img);}},draw_item:function(wb,set_tool,set_id,set_x,set_y,set_width,set_height,set_thickness,col_index,set_text,num_poly_points,poly_x,poly_y)
{var g=groupboard;var orig_set_thickness=set_thickness;var fontsize=(set_thickness+1)*5;var brush=g.CIRCLE_CRUSH;if(set_thickness>=0x0f)
{brush=(set_thickness>>4)&0x0f;set_thickness=set_thickness&0x0f;}
var t=set_thickness;if(set_thickness!=1)
{set_thickness=(set_thickness-1)*2;}
if(set_text!=""&&set_text.charAt(0)=='#')
{var endindex=set_text.indexOf(" ");if(endindex==-1)
{endindex=set_text.length;}
var rgb=set_text.substring(1,endindex);var alpha=(rgb>>24)&0xff;if(alpha==0)
{alpha=255;rgb|=0xff000000}
col_index=rgb;if(endindex==set_text.length)
{set_text="";}
else
{set_text=set_text.substring(endindex+1);}}
var col="";if(col_index<=255&&col_index>=0)
{col=g.colours[col_index];}
else
{var alpha=(col_index>>24)&0xff;var red=(col_index>>16)&0xff;var green=(col_index>>8)&0xff;var blue=col_index&0xff;col="rgba("+red+","+green+","+blue+","+(alpha/255)+")";}
wb.strokeStyle=col;wb.fillStyle=col;wb.lineWidth=set_thickness;if(g.graff&&set_thickness!=1)
{wb.lineWidth=set_thickness*1.5;}
wb.lineCap="round";switch(set_tool)
{case g.BACKGROUND_PIC:g.draw_background_pic(set_text,null);break;case g.LINE:case g.FREEHAND:wb.beginPath();var add=0;if(set_thickness%2!=0)
{add=0.5;}
if(set_width==0&&set_height==0)
{set_width=0.1;}
if(brush==g.BACKSLASH_BRUSH)
{var th=Math.round(set_thickness*0.7);wb.lineCap="butt";wb.lineWidth=1;wb.moveTo(set_x-th,set_y-th);wb.lineTo(set_x+th,set_y+th);wb.lineTo(set_x+set_width+th,set_y+set_height+th);wb.lineTo(set_x+set_width-th,set_y+set_height-th);wb.fill();wb.stroke();}
else if(brush==g.SLASH_BRUSH)
{var th=Math.round(set_thickness*0.7);wb.lineCap="butt";wb.lineWidth=1;wb.moveTo(set_x+th,set_y-th);wb.lineTo(set_x-th,set_y+th);wb.lineTo(set_x+set_width-th,set_y+set_height+th);wb.lineTo(set_x+set_width+th,set_y+set_height-th);wb.fill();wb.stroke();}
else
{wb.moveTo(set_x+add,set_y+add);wb.lineTo(set_x+set_width+add,set_y+set_height+add);wb.stroke();}
if(set_id!=0)
{g.last_x[set_id]=set_x+set_width;g.last_y[set_id]=set_y+set_height;g.last_size[set_id]=orig_set_thickness;g.last_col[set_id]=col_index;}
break;case g.HIGHLIGHTER:wb.globalAlpha=0.3922;wb.beginPath();var th=Math.round(set_thickness*0.7);wb.moveTo(set_x+th,set_y-th);wb.lineTo(set_x-th,set_y+th);wb.lineTo(set_x+set_width-th,set_y+set_height+th);wb.lineTo(set_x+set_width+th,set_y+set_height-th);wb.fill();wb.globalAlpha=1.0;break;case g.FILLED_RECTANGLE:wb.fillRect(set_x,set_y,set_width,set_height);break;case g.RECTANGLE:var add=0;if(set_thickness%2!=0)
{add=0.5;}
wb.beginPath();wb.moveTo(set_x+add,set_y+add);wb.lineTo(set_x+set_width-1+add,set_y+add);wb.stroke();wb.beginPath();wb.moveTo(set_x+set_width-1+add,set_y+add);wb.lineTo(set_x+set_width-1+add,set_y+set_height-1+add);wb.stroke();wb.beginPath();wb.moveTo(set_x+set_width-1+add,set_y+set_height-1+add);wb.lineTo(set_x+add,set_y+set_height-1+add);wb.stroke();wb.beginPath();wb.moveTo(set_x+add,set_y+set_height-1+add);wb.lineTo(set_x+add,set_y+add);wb.stroke();break;case g.FILLED_CIRCLE:if(set_width!=0&&set_height!=0)
{wb.save();wb.beginPath();wb.translate(set_x,set_y);wb.scale(set_width,set_height);wb.arc(0.5,0.5,0.5,0.0,Math.PI*2,false);wb.fill();wb.restore();}
break;case g.CIRCLE:if(set_width!=0&&set_height!=0)
{wb.save();wb.beginPath();wb.translate(set_x,set_y);wb.scale(set_width,set_height);wb.lineWidth=Math.abs(set_thickness/set_width);wb.arc(0,0,1.0,0.0,Math.PI*2,false);wb.stroke();wb.restore();}
break;case g.FILL:g.fill_area(wb,set_x,set_y,col);break;case g.TEXT:g.draw_text(wb,set_text,fontsize,set_x,set_y,col);break;case g.SPRAYCAN:if(g.graff)
{wb.lineCap="butt";wb.lineWidth=1;for(var i=0;i<t*g.SPRAY_NUM;i++)
{var x,y,dx,dy;do
{dx=(Math.random()-0.5)*4.0*t;dy=(Math.random()-0.5)*4.0*t;}while(dx*dx+dy*dy>4*t*t);x=set_x+dx;y=set_y+dy;wb.fillRect(x,y,1,1);}}
else
{}
break;case g.POLYGON:case g.SOLID_POLYGON:case g.HATCHED_POLYGON:if(num_poly_points>1)
{if(set_tool==g.HATCHED_POLYGON)
{wb.globalAlpha=0.5;}
wb.beginPath();wb.moveTo(poly_x[0],poly_y[0]);for(var i=1;i<num_poly_points;i++)
{wb.lineTo(poly_x[i],poly_y[i]);}
wb.lineTo(poly_x[0],poly_y[0]);if(set_tool==g.POLYGON)
{wb.stroke();}
else
{wb.fill();}
if(set_tool==g.HATCHED_POLYGON)
{wb.globalAlpha=1.0;}}
break;case g.IMAGE:var img=new Image();if(wb.drawImage)
{img.onload=function()
{try
{wb.drawImage(img,set_x-set_width/2,set_y-set_height/2);}
catch(ex)
{}
g.paused=false;}
img.onerror=function()
{g.paused=false;}
g.paused=true;img.src=g.backgrounds_url+set_text;}
else
{img.src=g.backgrounds_url+set_text;var w=document.getElementById('whiteboard');img.style.position="absolute";set_x=set_x-set_width/2;set_y=set_y-set_height/2;img.style.left=set_x+"px";img.style.top=set_y+"px";w.firstChild.appendChild(img);}
break;}},draw_pointer:function(set_x,set_y,set_thickness,set_col)
{var g=groupboard;g.clear_temp();if(null!=g.pointer_img)
{if(g.temp.drawImage)
{try
{g.temp.drawImage(g.pointer_img,set_x-g.pointer_img.width/2,set_y-g.pointer_img.height/2);}
catch(ex)
{}}
else
{var img=new Image(g.pointer_img);var w=document.getElementById("temp");img.style.position="absolute";set_x=set_x-img.width/2;set_y=set_y-img.height/2;img.style.left=set_x+"px";img.style.top=set_y+"px";w.firstChild.appendChild(img);}}
else
{g.temp.strokeStyle=g.colours[set_col];g.temp.fillStyle=g.colours[set_col];g.temp.lineWidth=1;g.temp.beginPath();g.temp.moveTo(set_x-set_thickness*10,set_y);g.temp.lineTo(set_x+set_thickness*10,set_y);g.temp.stroke();g.temp.beginPath();g.temp.moveTo(set_x,set_y-set_thickness*10);g.temp.lineTo(set_x,set_y+set_thickness*10);g.temp.stroke();}
if(g.t2==null)
{g.t2=setTimeout("groupboard.clear_temp(); groupboard.t2 = null",2000);}},draw_text:function(wb,set_text,fontsize,set_x,set_y,col)
{var g=groupboard;if(set_text.charAt(0)=='#')
{var endindex=set_text.indexOf(" ");if(endindex==-1)
{endindex=set_text.length;}
var rgb=set_text.substring(1,endindex);if(endindex==set_text.length)
{set_text="";}
else
{set_text=set_text.substring(endindex+1);}
var alpha=(rgb>>24)&0xff;if(alpha==0)
{alpha=255;}
var red=(rgb>>16)&0xff;var green=(rgb>>8)&0xff;var blue=rgb&0xff;col="rgba("+red+","+green+","+blue+","+(alpha/255)+")";}
if(g.is_designer)
{set_y+=fontsize;}
var agt=navigator.userAgent.toLowerCase();var broken_filltext=(agt.indexOf('iphone')!=-1)||(agt.indexOf('ipad')!=-1);if(wb.fillText&&(!broken_filltext))
{wb.strokeStyle=col;wb.fillStyle=col;wb.font=fontsize+"px"+" Times New Roman,serif";wb.fillText(set_text,set_x,set_y);}
else
{var d=document.createElement('div');var x=g.wbleft+set_x;var y=g.wbtop+set_y;d.innerHTML=set_text;d.style.position="absolute";d.style.left=set_x+"px";d.style.top=set_y+"px";d.style.fontSize=fontsize+"px";d.style.fontFamily="times,serif";d.style.marginTop="-0.9em";d.style.color=col;var w=document.getElementById('whiteboard');if(w.firstChild&&(!g.no_canvas_child))
{if(wb==g.wb)
{w.firstChild.appendChild(d);}
else
{w=document.getElementById('temptext');w.appendChild(d);}}
else
{if(wb==g.wb)
{w=document.getElementById('whiteboard');w=document.getElementById('text');}
else
{w=document.getElementById('temptext');}
g.no_canvas_child=true;w.appendChild(d);}
if(wb==g.temp)
{g.last_text_width=d.offsetWidth;}}},do_clear_all:function()
{var g=groupboard;if(g.is_designer&&g.multi_page)
{g.panels=new Array();g.num_panels=1;g.cur_panel=0;var p=document.getElementById('page_num');while(p.childNodes.length>=1)
{p.removeChild(p.firstChild);}
var n=document.createElement("option");n.text="1";try
{p.add(n,null);}
catch(ex)
{p.add(n);}
p.selectedIndex=0;}
g.do_clear();},confirm_clear:function()
{if(confirm('Are you sure you wish to clear the whiteboard?'))
{groupboard.clear();}},do_clear:function()
{var g=groupboard;g.wb.clearRect(0,0,g.board_width,g.board_height);g.temp.clearRect(0,0,g.board_width,g.board_height);var text=document.getElementById("text");while(text.childNodes.length>=1)
{text.removeChild(text.firstChild);}
text=document.getElementById("temptext");while(text.childNodes.length>=1)
{text.removeChild(text.firstChild);}
if(null!=g.background_pic)
{var url="data/"+Math.floor(g.board_id/1000)+"/"+(g.board_id%1000)+"/backgrounds/"+g.background_pic;g.draw_background_pic(url,g.background_img);}},clear_all:function()
{var g=groupboard;var t=tunnel;if(!g.allow_clearing)
{return;}
var reply=confirm('Are you sure you wish to clear all pages?');if(!reply)
{return;}
t.writeByte(g.CLEAR);t.post();g.do_clear_all();},clear:function(dont_set_bg)
{var g=groupboard;var t=tunnel;if(!g.allow_clearing)
{return;}
if(g.is_designer)
{g.transmit_item(g.CLEAR_PANEL,0,0,0,0,0,0,"",0,null,null);}
else
{t.writeByte(g.CLEAR);}
t.post();g.do_clear();if(g.last_bg!=""&&(!dont_set_bg))
{g.set_background(g.last_bg);}},send_chat:function(str)
{var g=groupboard;var t=tunnel;if(document.getElementById("name").value!=g.our_name)
{g.send_change_name(document.getElementById("name").value);}
if(g.chat_user)
{t.writeByte(g.CHAT_TO_USER);t.writeInt(g.chat_user);var chat=document.getElementById("chat");var ip='';if(g.show_ip)
{ip=' ('+g.user_ips[g.chat_user]+')';}
var msg=str;msg=msg.replace(/</g,"&lt;");msg=msg.replace(/>/g,"&gt;");msg=msg.replace(/http:\/\/([^ <]*)/g,"<a rel=\"nofollow\" target=\"_blank\" href=\"http://$1\">http://$1</a>");chat.innerHTML+="&gt;"+g.users[g.chat_user]+ip+"&lt; "+msg+"<br>";chat.scrollTop=chat.scrollHeight;}
else
{t.writeByte(g.CHAT_TO_ALL);}
t.writeString(str);t.post();},chat_to:function(name)
{var g=groupboard;if(name=="ALL")
{g.chat_user=null;}
else
{g.chat_user=g.reverse_users[name];}},send_change_name:function(str)
{var g=groupboard;var t=tunnel;g.our_name=str;t.writeByte(g.CHANGE_NAME);t.writeString(str);t.post();},send_text:function()
{var g=groupboard;var t=tunnel;var ti=document.getElementById("textinput");if(ti)
{var text=ti.value;if(text!="")
{if(null!=g.custom_colour)
{text="#"+g.custom_colour+" "+text;}
g.transmit_item(g.cur_tool,g.start_x,g.start_y,0,0,g.cur_size,g.cur_col,text,0,null,null);var fontsize=(g.cur_size+1)*5;g.draw_text(g.wb,text,fontsize,g.start_x,g.start_y,g.colours[g.cur_col]);}}
g.clear_temp();},clear_temp:function()
{var g=groupboard;g.temp.clearRect(0,0,g.board_width,g.board_height);var text=document.getElementById("temptext");while(text.childNodes.length>=1)
{text.removeChild(text.firstChild);}},send_compressed_data:function()
{var t=tunnel;var g=groupboard;t.writeByte(g.COMPRESSED_LINES);t.writeByte(g.compressed_used);t.writeByte(g.compress_dx[0]);t.writeByte(g.compress_dy[0]);t.writeByte(g.compress_dx[1]);t.writeByte(g.compress_dy[1]);t.writeByte(g.compress_dx[2]);t.writeByte(g.compress_dy[2]);t.writeByte(g.compress_dx[3]);t.writeByte(g.compress_dy[3]);t.writeByte(0);if(g.is_designer)
{t.writeInt(0);}
t.writeShort(0);g.compressed_used=0;},clear_colours:function()
{for(var i=0;i<=10;i++)
{document.getElementById('colour_'+i).src='/Icons.3dlook/colour_'+i+'.gif';}},clear_tools:function()
{document.getElementById('freehand_tool').src='/java.graff/circle_nib.gif';document.getElementById('slash_nib_tool').src='/java.graff/slash_nib.gif';document.getElementById('backslash_nib_tool').src='/java.graff/backslash_nib.gif';document.getElementById('spraycan_tool').src='/java.graff/spraycan.gif';document.getElementById('flood_fill_tool').src='/java.graff/flood_fill.gif';document.getElementById('line_tool').src='/java.graff/line.gif';document.getElementById('filled_rect_tool').src='/java.graff/rect.gif';document.getElementById('filled_oval_tool').src='/java.graff/oval.gif';document.getElementById('text_tool').src='/java.graff/text.gif';},htmlgen:function(width,height,static_background)
{var d=document;var g=groupboard;var chat_height=200;if(g.singleuser||g.hide_chat)
{chat_height=0;}
if(g.is_designer&&g.multi_page)
{d.write('<div id="panels">Page: <select onchange="groupboard.set_panel(this.selectedIndex, true);" id="page_num"><option>1</option></select><button onclick="groupboard.prev_page();">Prev</button><button onclick="groupboard.next_page()">Next</button><button onclick="groupboard.insert_panel(true);">Insert Before</button><button onclick="groupboard.clear_all()">Clear All Pages</button></div>');}
var agt=navigator.userAgent.toLowerCase();var android_or_ios=(agt.indexOf('iphone')!=-1)||(agt.indexOf('ipad')!=-1)||(agt.indexOf('android')!=-1);d.write('<div id="title">&nbsp;</div> <div id="num_users">Loading, please wait...</div> <div id="gb" style="position: relative; left: 0px; top: 0px; width: '+width+'px; height: '+(height+chat_height)+'px"> <div style="border: #aaaaaa 1px solid; position: absolute; top: 0px; left: 0px; width: '+width+'px; height: '+height+'px"></div>');if(static_background!==undefined)
{d.write('<img id="background" style="position: absolute; top: 1px; left: 1px; width: '+width+'px; height: '+height+'px" src="'+static_background+'">');}
d.write('<canvas id="whiteboard" style="position: absolute; top: 1px; left: 1px;" width="'+width+'" height="'+height+'"></canvas> <canvas id="temp" style="position: absolute; top: 1px; left: 1px;" width="'+width+'" height="'+height+'"></canvas> <img id="wbcover" style="position: absolute; top: 1px; left: 1px; width: '+width+'px; height: '+height+'px" src="/images/dot.png" ontouchstart="groupboard.touch_start(event);" ontouchmove="groupboard.touch_move(event);" ontouchend="groupboard.touch_end(event);" ontouchcancel="groupboard.touch_end(event);" ondblclick="groupboard.double_click(event); return false;"');if(!android_or_ios)
{d.write(' onmousedown="groupboard.mouse_down(event); return false;" onmousemove="groupboard.mouse_move(event); return false;" onmouseout="if (this == event.target) groupboard.mouse_up(event); return false;" onmouseup="groupboard.mouse_up(event); return false;"');}
d.write(' tabindex="1" /> <div id="temptext" style="position: absolute; top: 1px; left: 1px"></div> <div id="text" style="position: absolute; top: 1px; left: 1px"></div>');var tools_height=0;if(g.graff)
{d.write('<div style="position: absolute; top: '+(height+2)+'px; left: 0px; width: '+(width+2)+'px; height: 20px">');d.write('<table><tr>');d.write('<td>Size:</td><td><select onchange="groupboard.set_thickness(this.selectedIndex+1)">');for(var i=1;i<=10;++i)
{d.write('<option>'+i+'</option>');}
d.write('</select></td>');for(var i=0;i<=10;++i)
{var on='';if(i==g.cur_col)
{on='_on';}
d.write('<td><img onclick="groupboard.clear_colours(); this.src=\'/Icons.3dlook/colour_'+i+'_on.gif\'; groupboard.set_colour('+i+')" id="colour_'+i+'" src="/Icons.3dlook/colour_'+i+on+'.gif"></td>');}
d.write('<td nowrap><input id="picker" style="visibility:hidden; width:1px; height:1px;" onchange="groupboard.clear_colours(); groupboard.set_custom_colour(this.color)" class="color {pickerClosable:true}"><button onclick="document.getElementById(\'picker\').color.showPicker()">More...</button></td>');d.write('</tr></table><table><tr>');tools_height=28;d.write('<td><img title="Freehand" id="freehand_tool" onclick="groupboard.clear_tools(); this.src=\'/java.graff/circle_nib_on.gif\'; groupboard.set_tool(groupboard.FREEHAND); groupboard.set_brush(groupboard.CIRCLE_BRUSH)" src="/java.graff/circle_nib_on.gif"></td>');d.write('<td><img title="Slash nib" id="slash_nib_tool" onclick="groupboard.clear_tools(); this.src=\'/java.graff/slash_nib_on.gif\'; groupboard.set_tool(groupboard.FREEHAND); groupboard.set_brush(groupboard.SLASH_BRUSH)" src="/java.graff/slash_nib.gif"></td>');d.write('<td><img title="Backslash nib" id="backslash_nib_tool" onclick="groupboard.clear_tools(); this.src=\'/java.graff/backslash_nib_on.gif\'; groupboard.set_tool(groupboard.FREEHAND); groupboard.set_brush(groupboard.BACKSLASH_BRUSH)" src="/java.graff/backslash_nib.gif"></td>');d.write('<td><img title="Spraycan" onclick="groupboard.clear_tools(); this.src=\'/java.graff/spraycan_on.gif\'; groupboard.set_tool(groupboard.SPRAYCAN)" id="spraycan_tool" src="/java.graff/spraycan.gif"></td>');d.write('<td><img title="Flood Fill" onclick="groupboard.clear_tools(); this.src=\'/java.graff/flood_fill_on.gif\'; groupboard.set_tool(groupboard.FILL)" id="flood_fill_tool" src="/java.graff/flood_fill.gif"></td>');d.write('<td><img title="Line" onclick="groupboard.clear_tools(); this.src=\'/java.graff/line_on.gif\'; groupboard.set_tool(groupboard.LINE)" id="line_tool" src="/java.graff/line.gif"></td>');d.write('<td><img title="Filled Rect" onclick="groupboard.clear_tools(); this.src=\'/java.graff/rect_on.gif\'; groupboard.set_tool(groupboard.FILLED_RECTANGLE)" id="filled_rect_tool" src="/java.graff/rect.gif"></td>');d.write('<td><img title="Filled Oval" onclick="groupboard.clear_tools(); this.src=\'/java.graff/oval_on.gif\'; groupboard.set_tool(groupboard.FILLED_CIRCLE)" id="filled_oval_tool" src="/java.graff/oval.gif"></td>');d.write('<td><img title="Text" onclick="groupboard.clear_tools(); this.src=\'/java.graff/text_on.gif\'; groupboard.set_tool(groupboard.TEXT)" id="text_tool" src="/java.graff/text.gif"></td>');d.write('<td><img title="Clear" onclick="groupboard.confirm_clear()" src="/java.graff/tool_trash.gif"></td>');d.write('<td><button onclick="groupboard.load()">Load</button></td>');d.write('<td><button onclick="groupboard.save()">Save</button></td>');if(static_background=='')
{d.write('<td><button onclick="groupboard.set_background()">Set Background</button></td>');}
d.write('</div>');}
if((!g.singleuser)&&(!g.hide_chat))
{d.write('<div style="position: absolute; top: '+(height+tools_height+2)+'px; left: 0px; width: '+(width+2)+'px; height: 200px"><table style="border-spacing: 0" width="100%"> <tr><td style="padding-left: 0; padding-right: 5px; padding-top: 5px; padding-bottom: 5px" width="80%" height="100%"> <div style="font-size: 14px; width: 100%; height: 150px; overflow:auto; border: 1px solid #aaaaaa" id="chat"></div> </td> <td><table><tr> <td>Name:</td><td><input id="name" onkeydown="if (event.keyCode == 13 || event.keyCode == 10) { groupboard.send_change_name(this.value); return false}"/></td></tr> <tr><td>Chat&nbsp;To:</td><td width="100%"> <select id="userlist" style="width: 100%" size="8" onchange="groupboard.chat_to(this.options[this.selectedIndex].text);"></select> </td></tr>');if(groupboard.we_are_admin)
{d.write('<tr><td>&nbsp;</td><td><button onclick="groupboard.ban_user()">Ban</button></td></tr>');}
d.write('</table></td></tr> <tr><td style="padding-left: 0" colspan="2"> <input style="width: 100%; clear: both" id="chat_input" value="Click here to chat" onkeydown="if (event.keyCode == 13 || event.keyCode == 10) { groupboard.send_chat(this.value); this.value=\'\'; return false; }" onclick="if (this.value == \'Click here to chat\') this.value=\'\';"/> </td></tr></table></div>');}
d.write('</div>');},set_ban_list:function(list)
{var t=tunnel;var g=groupboard;t.writeByte(g.SET_BAN_LIST);list=list.replace(/\r/g,'');t.writeString(list.replace(/\n/g,':'));t.post();},load_pic:function(filename)
{var t=tunnel;var g=groupboard;g.last_bg="";g.clear(true);t.writeByte(g.DOWNLOAD_PIC);t.writeString(filename);t.post();},delete_bg:function(filename)
{var t=tunnel;var g=groupboard;if(!g.we_are_admin)
{alert('Only admin users can delete backgrounds');}
else
{t.writeByte(g.DELETE_BACKGROUND_PIC);t.writeString(filename);t.post();}},delete_pic:function(filename)
{var t=tunnel;var g=groupboard;if(!g.we_are_admin)
{alert('Only admin users can delete pictures');}
else
{t.writeByte(g.DELETE_GALLERY_PIC);t.writeString(filename);t.post();}},save_pic:function(title,name)
{var t=tunnel;var g=groupboard;t.writeByte(g.UPLOAD_PIC);t.writeShort(title.length);t.writeShort(name.length);t.writeStringOnly(title);t.writeStringOnly(name);t.post();g.clear(false);},load:function()
{var g=groupboard;var t=tunnel;t.writeByte(g.GET_GALLERY_INDEX);t.post();REDIPS.dialog.showhtml(200,300,'<p>Choose File to Load:</p><form name=\"frm1\"><select name=\"filelist\" id=\"filelist\" style=\"width: 100%\" size=\"16\"></select> <button onclick=\'groupboard.load_pic(groupboard.load_filenames[document.frm1.filelist.selectedIndex]); REDIPS.dialog.hide(); return false\'>Load</button> <button onclick=\'groupboard.delete_pic(groupboard.load_filenames[document.frm1.filelist.selectedIndex]); REDIPS.dialog.hide(); return false\'>Delete</button> <button onclick=\'REDIPS.dialog.hide(); return false\'>Cancel</button> </form>');},set_background:function(url)
{var t=tunnel;var g=groupboard;if(null==url)
{t.writeByte(g.GET_BACKGROUND_INDEX);t.post();REDIPS.dialog.showhtml(300,300,'<p>Choose Background:</p><form name=\"frm1\"><select name=\"filelist\" id=\"filelist\" style=\"width: 100%\" size=\"16\"><option>BLANK</option></select> <button onclick=\'groupboard.set_background(groupboard.bg_urls[document.frm1.filelist.selectedIndex]); REDIPS.dialog.hide(); return false\'>Set Background</button> <button onclick=\'groupboard.delete_bg(groupboard.bg_urls[document.frm1.filelist.selectedIndex]); REDIPS.dialog.hide(); return false\'>Delete</button> <button onclick=\'REDIPS.dialog.hide(); return false\'>Cancel</button> </form>');g.bg_urls[0]="";}
else
{g.last_bg=url;g.clear(true);if(url!="")
{if(-1==url.indexOf('/'))
{url="data/"+parseInt(g.board_id/1000)+"/"+(g.board_id%1000)+"/backgrounds/"+url;}
g.draw_item(g.wb,g.BACKGROUND_PIC,0,0,0,0,0,0,0,url,0,null,null);g.transmit_item(g.BACKGROUND_PIC,0,0,0,0,0,0,url,0,null,null);}
t.post();}},ban_user:function()
{var g=groupboard;var t=tunnel;var l=document.getElementById('userlist');if(l==null)
{return;}
var u=l.options[l.selectedIndex].text;var id=g.reverse_users[u];if(id)
{t.writeByte(g.BAN_CLIENT);t.writeInt(id);}},show_drawing_log:function()
{groupboard.drawlog_win=window.open('/ajax/drawlog.html','drawlog','toolbar=0, scrollbars=0, width=600, height=400');},set_save_filename:function(f)
{groupboard.save_filename=f;},save_as:function(filename)
{groupboard.save_pic(filename,filename);},save:function()
{if(null!=groupboard.save_filename)
{groupboard.save_as(groupboard.save_filename);}
else
{REDIPS.dialog.showhtml(350,120,'<p>Save Picture</p><form name=\'frm1\'> <table> <tr> <td>Title of Picture:</td><td><input name=\'title\'></td> </tr> <td>Your Name and/or Email Address:</td><td><input name=\'nm\'></td></tr> </table> <button onclick=\'groupboard.save_pic(document.frm1.title.value,document.frm1.nm.value); REDIPS.dialog.hide(); return false\'>Save</button> <button onclick=\'REDIPS.dialog.hide(); return false\'>Cancel</button> </form></body>');}},show_extended_palette:function()
{alert('not implemented');},undo:function()
{alert('not implemented');},cut:function()
{alert('not implemented');},copy:function()
{alert('not implemented');},paste:function()
{alert('not implemented');},delete_items:function()
{alert('not implemented');},select_all:function()
{alert('not implemented');},clear_selection:function()
{alert('not implemented');},set_zoom:function()
{alert('not implemented');},zoom_in:function()
{alert('not implemented');},zoom_out:function()
{alert('not implemented');},show_banlist:function()
{var g=groupboard;var t=tunnel;if(g.we_are_admin)
{g.banlist_win=window.open('/ajax/banlist.html','banlist','toolbar=0, scrollbars=0, width=200, height=340');t.writeByte(g.GET_BAN_LIST);t.post();}},show_board_info:function()
{var g=groupboard;var t=tunnel;if(g.we_are_admin)
{g.board_info_win=window.open('/ajax/boardinfo.html','boardinfo','toolbar=0, scrollbars=0, width=350, height=620');t.writeByte(g.GET_BOARD_INFO);t.post();}},set_board_info:function(cat,wb,chat,bboard,games,visits,visits_week,visits_prev,title,url,email,pw,adminpw,visible)
{var g=groupboard;var t=tunnel;var flags=0;if(wb)
{flags+=1;}
if(chat)
{flags+=2;}
if(bboard)
{flags+=4;}
if(games)
{flags+=32;}
t.writeByte(g.SET_BOARD_INFO);t.writeInt(flags);t.writeShort(title.length);t.writeShort(url.length);t.writeShort(email.length);t.writeShort(pw.length);t.writeShort(adminpw.length);t.writeStringOnly(title);t.writeStringOnly(url);t.writeStringOnly(email);t.writeStringOnly(pw);t.writeStringOnly(adminpw);flags=0;if(visible)
{flags=1;}
t.writeByte(flags);t.writeInt(cat);t.post();},show_message_board:function()
{var g=groupboard;window.open('http://www.groupboard.com/forums/'+g.board_id,'forums_'+g.board_id);},set_allow_drawing:function(state)
{var t=tunnel;var g=groupboard;if(state)
{t.writeByte(g.ENABLE_DRAW);}
else
{t.writeByte(g.DISABLE_DRAW);}
t.post();},set_allow_clearing:function(state)
{var t=tunnel;var g=groupboard;if(state)
{t.writeByte(g.ENABLE_CLEAR);}
else
{t.writeByte(g.DISABLE_CLEAR);}
t.post();},set_allow_loading:function(state)
{var t=tunnel;var g=groupboard;if(state)
{t.writeByte(g.ENABLE_LOAD);}
else
{t.writeByte(g.DISABLE_LOAD);}
t.post();},close_bg_win:function()
{var g=groupboard;if(null!=g.bg_win)
{g.bg_win.window.close();g.bg_win=null;}},close_board_info_win:function()
{var g=groupboard;if(null!=g.board_info_win)
{g.board_info_win.window.close();g.board_info_win=null;}},close_banlist_win:function()
{var g=groupboard;if(null!=g.banlist_win)
{g.banlist_win.window.close();g.banlist_win=null;}},set_pointer:function(pic)
{var g=groupboard;g.set_tool(g.POINTER);g.pointer_img=new Image();g.pointer_img.src=g.backgrounds_url+pic;g.transmit_item(g.TEXT,-1000,-1000,0,0,100,0,pic,0,null,null);},close_drawlog_win:function()
{var g=groupboard;if(null!=g.drawlog_win)
{g.drawlog_win.window.close();g.drawlog_win=null;}}};
