<?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="interviewRoomSidebar" extends="view" width="280" 
       height="${ canvas.height - ((canvas.currentRoomObj.hideTopBar) ? 0:28) }" y="0" clip="true">
    
    <attribute name="selected" value="null" />
    
    <attribute name="isOpen" value="true" type="boolean"/>
    
    <attribute name="restricted" value="true" type="boolean" />
   
    <attribute name="listType" value="eventUserListTable" type="string" />
    
    <method name="doSelection" args="itemRef">
        <![CDATA[
            if (this.selected != null) {
                this.selected.deselect();
            }
            
            this.selected = itemRef;
            this.selected.select();
          
        ]]>
    </method>
    
    <method name="toggleStatus">
        if (this.isOpen) {
            this._doClose.setAttribute('started', true);
            this.isOpen = false;
            this._minimizeSidebar._icon.setAttribute("frame",2);
            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",857);
        } else {
            this._doOpen.setAttribute('started', true);
            this.isOpen = true;
            this._minimizeSidebar._icon.setAttribute("frame",1);
            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",856);
        }
    </method>
    
    <view name="borderBarTop" y="0"
    			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
   	<view name="_tabbarBg" width="${ parent.width }" height="32" y="1" bgcolor="0xFAFAFA" />
	<view name="borderBarBottom" y="34"
   			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" /> 
    
    <view name="_head" y="1" width="${ parent.width-10 }" height="32"
    		  layout="axis:x;spacing:2;inset:2" >
    
    	<handler name="oninit">
    		for (var eg in this.subviews) {
            	this.subviews[eg].deselect();
            }
            this.userTabButton.doSelection();
    	</handler>
        
        <tabButtonMain name="userTabButton" height="$once{ parent.height }" width="$once{ (parent.width-6)/2 }"
                currentIconRsc="users_tab_btn" labelid="613" />
        
    </view>
    
    <interviewUserList name="_videocontainer" y="36"
			   width="$once{ parent.width-10 }" 
               height="${ parent.height-((canvas.currentRoomObj.hideActivitiesAndActions == true) ? 36:236) }" />
               
    <activityList name="_activityList" />
    
    <view name="_minimizeSidebar" x="${ parent.width - 10 }" width="10" y="1"
          				bgcolor="0xE0E1EB" height="${ parent.height-1 }">
        <handler name="onclick">
            parent.toggleStatus();
        </handler>
        
        <view width="${ parent.width }" height="$once{ parent.height }" 
               bgcolor="0xE0E1EB" >
        </view>
            
        <view name="_icon" resource="sidebar_tab_btn" y="0">
             <handler name="onclick">
	            parent.parent.toggleStatus();
	         </handler>
	         <labelTooltip name="_labelTooltip" labelid="856" />
        </view>
        
    </view>
    
    <animator name="_doOpen" attribute="width" to="$once{ parent.width }" 
              duration="750" started="false" />
              
    <animator name="_doClose" attribute="width" to="10" 
              duration="750" started="false" />
    
</class>

</library>
