<?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="typingIcon" extends="view" width="30" height="16" resource="typing_rsc">
	<attribute name="timerDelegate" value="null"/>
	<attribute name="frm" value="0" type="number" />
	          
    <handler name="oninit">
		//if ($debug) Debug.write("typingIcon::oninit ");
    	startTyping();
    </handler>
    
    <handler name="ondestroy">
		//if ($debug) Debug.write("typingIcon::ondestroy ");
		stopTyping();
    </handler>
    
	<handler name="onvisible">
		//if ($debug) Debug.write("typingIcon::onvisible ", this.visible);
		toggle(this.visible);
	</handler>
	
	<method name="startTyping">
	<![CDATA[
		//if ($debug) Debug.write("typingIcon::startTyping ");
		if (timerDelegate == null && this.visible) {
			frm = 0;
			this.timerDelegate = new LzDelegate(this, "changeFrame");
			lz.Timer.addTimer(this.timerDelegate, 1000);
		}
	]]>
	</method>

	<method name="stopTyping">
		//if ($debug) Debug.write("typingIcon::stopTyping ");
		if (timerDelegate != null) {
			lz.Timer.removeTimer(timerDelegate);
			timerDelegate = null;
		}
	</method>
	 
	<method name="toggle" args="v">
		//if ($debug) Debug.write("typingIcon::toggle ", this.visible);
		if (v) {
			startTyping();
		} else {
			stopTyping();
		}
	</method>
	
	<method name="changeFrame" args="ignore=null">
		//if ($debug) Debug.write("typingIcon::frm ", frm);
		frm = (++frm) % 4;
		this.setAttribute('frame', frm + 1);
		lz.Timer.resetTimer(timerDelegate, 1000);
		if (frm == 3) {
			this.setAttribute('visible', false);
		}
	</method>
</class>

</library>
