<?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>

<!---
    The playBackVideoStream is used in the recording playerback to show the video
 -->
<class name="playBackWhiteboardVideo" extends="baseVideoStream" bgcolor="0x000000">
	
	<attribute name="timerDelegate" value="null"/>
    <attribute name="timerDelegateStarted" value="false" type="boolean"/>
    
    <handler name="oninit">
        this.timerDelegate = new LzDelegate( this, "calcProgressBar" );
    </handler>
    
    <method name="playVideoStream" args="streamName,delay">
        this.playStream(streamName,delay);
        this.timerDelegateStarted = true;
        lz.Timer.addTimer( this.timerDelegate , 1000 );
    </method>
    
    <method name="stopVideo">
        this._stop();
        lz.Timer.removeTimer(this.timerDelegate);
        this.timerDelegateStarted = false;
    </method>
	
	<handler name="onNetStatus" args="info">
        //if ($debug) Debug.write("onNetStatus ",info);
        if (info.code ==  "NetStream.Play.Stop" ) {
        	if ($debug) Debug.write("-- stopStream");
            //parent.parent.stopStream();
            canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'stopRecordingStream', this.name);
        }
    </handler>
    <handler name="onMetaDataEvent" args="info">
        //if ($debug) Debug.warn("onMetaData ",info);
        //if ($debug) Debug.write("parent.parent.deltaInSeconds ",Number(info.duration));
        //parent.parent.deltaInSeconds = Number(info.duration);
        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'metaWhiteboardPlaybackStream', this.name, Number(info.duration));
    </handler>
    
    <method name="calcProgressBar" args="tObjRef">
        //if ($debug) Debug.write("calcProgressBar updateRecordingStreamTime",this._ns.time)
        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'updateWhiteboardStreamTime',this.name, this._ns.time);
        if (this.timerDelegateStarted) {
            lz.Timer.addTimer( this.timerDelegate , 1000 );
        }
    </method>
	
</class>

</library>