<?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="netRemoteCallHib" extends="netremotecall">

	<!-- this should be the contentSaveWindow -->
	<attribute name="returnObj" value="null" />
	 
	<!-- if true this object will register at the update-observer -->
	<attribute name="registerObject" value="false" type="boolean" />
	
	<!-- show Error Messages with normal Box -->
    <attribute name="activeErrorHandler" value="false" type="boolean" />	
    
	<!-- show Error Messages with normal Box -->
    <attribute name="showLoading" value="true" type="boolean" />    
	
	<!-- show Error Messages with Callback Box -->
	<attribute name="isCallBackHandler" value="false" type="boolean" />	
	
	<handler name="oninit">
		if (this.registerObject) this.parent.addViewToObserver(this);
	</handler>	
	<method name="doCall">
        //if (this.showLoading) canvas._loadingAll.setAttribute('visible',true);
		//if($debug) Debug.write("netRemoteCallHib/doCall: [ " , this.funcname , " ]",this.parent);
		this.callRPC(null);
	</method>
	
	<event name="sendCallBack" />
	
	<!--

	 -->
	<handler name="ondata" args="value">
		<![CDATA[
			//Debug.write("ondata: ",this.funcname,value);
			
			//if (this.showLoading) canvas._loadingAll.setAttribute('visible',false);
			
			//Another Error Handler for the Form-Components
			if (this.returnObj!=null && Number(value)>0) {
				//Debug.write("this.returnObj.processNext");
				this.returnObj.processNext();
			} else if (this.returnObj!=null && Number(value)<0) {
				this.returnObj.errorByCode(Number(value));
			} else if (this.returnObj!=null && value==null) {
				this.returnObj.errorByCode(-1);
			}
			
            if (this.activeErrorHandler) {
                if (Number(value)<0){
                    if ($debug) Debug.warn("Received Error ID: ",value);					
					if (this.isCallBackHandler) 
					{
					   //TODO: Fix error messages
					   
					} else {
					   //TODO: Fix error messages
					}
                }
            }			
		]]>
	</handler>	
</class>

</library>
