<?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="newPrivateMessageFolder" extends="guiPresenter" labelid="1260" isdragable="true" 
    minimizable="false" maximizable="false" fullToolBar="true" x="100" y="200" 
    resizeable="false" width="350" height="100" >
	
	<attribute name="refObj" value="null"/>
	
	<attribute name="folderName" value="" type="string" />
	
	<handler name="oninit">
		<![CDATA[
			lz.Focus.setFocus(this._subject, true);
		]]>
	</handler>
	
	<method name="send">
		<![CDATA[
			this.folderName = this._subject.getText();
			this.addPrivateMessageFolder.doCall();
		]]>
	</method>
	
	<!--
	public Long addPrivateMessageFolder(String SID, String folderName)
	 -->
	<netRemoteCallHib name="addPrivateMessageFolder" funcname="userservice.addPrivateMessageFolder" remotecontext="$once{ canvas.thishib }" >    
		
		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
	    <netparam><method name="getValue">return parent.parent.folderName</method></netparam>
        
        <handler name="ondata" args="value">
        	<![CDATA[
				//The onResult-Handler will be called be the rtmpconnection
				if ($debug) Debug.write("addPrivateMessageFolder : ",value);
				parent.refObj.sendReload();
				parent.close();
			]]>
		</handler>   
	</netRemoteCallHib>	
	
	
	<labelText name="_labelSubject" x="2" labelid="1211" y="24"/>
	
	<customEdittext name="_subject" y="24" x="80" width="$once{ parent.width-82 }" />
		   
	<!-- label: send -->
	<simpleLabelButton labelid="1261" x="$once{ parent.width-260 }" width="120" y="$once{ parent.height-26 }">
		<handler name="onclick">
			parent.send();
		</handler>
	</simpleLabelButton>

	<!-- label: cancel -->
	<simpleLabelButton labelid="219" x="$once{ parent.width-130 }" width="120" y="$once{ parent.height-26 }">
		<handler name="onclick">
			parent.close();
		</handler>
	</simpleLabelButton>
	   		   
						  
</class>	
	
</library>
