<?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.
  
-->

<!-- all datasets for main.lzx -->

<library>

<!-- get values from public/config.xml -->
<dataset type="http" name="myConfigSet" request="false" ondata="parent.mainTheme.loadTheme()" proxied="false">
    <handler name="oninit">
        var d = new Date();
        this.setAttribute("src","config.xml?random="+d.getTime());
        this.doRequest();
    </handler>
    <handler name="ondata">
        if ($debug) Debug.write("ondata");
    </handler>
    <handler name="onerror" args="e">
        if ($debug) Debug.write("onerror",e);
    </handler>
    <handler name="ontimeout" args="e">
        if ($debug) Debug.write("ontimeout",e);
    </handler>
</dataset>

<method name="reloadConfig">
	
</method>

<!-- get values from public/config.xml -->
<dataset type="http" name="mainTheme" request="false" ondata="canvas.myinit()" proxied="false">
    <method name="loadTheme">
        var d = new Date();
        this.setAttribute("src","theme.xml?random="+d.getTime());
        this.doRequest();
    </method>
    <handler name="ondata">
        if ($debug) Debug.write("ondata");
    </handler>
    <handler name="onerror" args="e">
        if ($debug) Debug.write("onerror",e);
    </handler>
    <handler name="ontimeout" args="e">
        if ($debug) Debug.write("ontimeout",e);
    </handler>
</dataset>

</library>
