<?xml version="1.0" encoding="UTF-8" ?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
    	  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  
-->
<library>


<class name="chatTabItem" extends="view" 
	   width="240" >

	<attribute name="user_id" value="0" type="number" />
	<attribute name="username" value="" type="string" />
	<attribute name="usertime" value="" type="string" />
	<attribute name="usercolor" value="0" type="string" />
	<attribute name="cbtext" value="" type="string" />
	
	<handler name="oninit">
		<![CDATA[
			if($debug) Debug.write("chatTabItem/WIDTH: "+this.width);
			if($debug) Debug.write("chatTab Item on init");
	        var downloadurl = canvas.protocol+'://'+canvas.rtmphostlocal+':'+canvas.red5httpport
	        		+canvas.httpRootKey+'DownloadHandler?fileName=CHAT'
	        		+'&moduleName=chat&parentPath=&room_id='
	        		+'&remoteUserid='+this.user_id
	        		+'&sid='+canvas.sessionId;
	        //Debug.write("downloadurl "+downloadurl);
	        this._userpic.setAttribute('src',downloadurl);	
	        
	        if(canvas.isrtl == 'true'){
	        	this.header_user.stAttribute('textalign', 'right');
	        	this.header_time.setAttribute('align', 'left');
	        	this.multi.setAttribute('textalign', 'right');
	        }
	        
	        
	        
	        
	        //Debug.write("TIME: "+this.usertime);
        ]]>
	</handler>
	
	<image name="_userpic" />
	
	
	<text text="$once{ parent.username }" x="40" resize="false" fontsize="10"
		  width="$once{ parent.width - 40 }" bgcolor="$once{ parent.usercolor }"
		  selectable="true" name="header_user">
		  
	</text>
	<text text="$once{ parent.usertime }" align="right" fontsize="10" selectable="true" name="header_time" >
		
	</text>
	
	
	
	<text multiline="true" x="40" y="20" fontsize="10" text="$once{ parent.cbtext }"
		  width="220" selectable="true" name="multi">
		 
	</text>

</class>

</library>
