<?xml version="1.0" encoding="UTF-8"?>
<bindings 	xmlns="http://www.mozilla.org/xbl" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xbl="http://www.mozilla.org/xbl"	xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <binding id="xml-combobox">
		<content>
      <xul:menulist datasources="" ref="*" querytype="xml" xbl:inherits="onselect">
        <xul:template>
          <xul:query/>
          <xul:action>
            <xul:menupopup>
              <xul:menuitem/>
            </xul:menupopup>
          </xul:action>
        </xul:template>
      </xul:menulist>
		</content>
		<implementation>
			<field name="datasources">this.getAttribute("datasources") ? this.getAttribute("datasources") : ""</field>
			<field name="expr">this.getAttribute("expr") ? this.getAttribute("expr") : ""</field>
			<field name="label">this.getAttribute("label") ? this.getAttribute("label") : ""</field>
			<field name="value">this.getAttribute("value") ? this.getAttribute("value") : ""</field>
      <field name="imageBaseFolder">this.getAttribute("imageBaseFolder") ? this.getAttribute("imageBaseFolder") : ""</field>
      <field name="image">this.getAttribute("image") ? this.getAttribute("image") : ""</field>
      <field name="default">this.getAttribute("default") ? this.getAttribute("default") : ""</field>
			<field name="menulist">document.getAnonymousNodes(this)[0];</field>
			<field name="query">this.menulist.firstChild.firstChild;</field>
			<field name="menuitem">this.query.nextSibling.firstChild.firstChild;</field>
			<constructor><![CDATA[
        this.menulist.setAttribute("datasources", this.datasources);
        this.query.setAttribute("expr", this.expr);
        
        if(this.value[0] == "!") {
          var arg1 = this.value.substring(1,this.value.length);
          var assign = document.createElement("assign");
          assign.setAttribute("var","?var1");
          assign.setAttribute("expr",arg1);
          
          this.query.appendChild(assign);
        }
        
        if(this.label[0] == "!") {
          var arg2 = this.label.substring(1,this.label.length);
          var assign = document.createElement("assign");
          assign.setAttribute("var","?var2");
          assign.setAttribute("expr",arg2);
          
          this.query.appendChild(assign);
        }
        
        if(this.image[0] == "!") {
          var arg3 = this.image.substring(1,this.image.length);
          var assign = document.createElement("assign");
          assign.setAttribute("var","?var3");
          assign.setAttribute("expr",arg3);
          
          this.query.appendChild(assign);
        }
        
        this.menuitem.setAttribute("uri", "?");
        
        if(this.label[0] == "!")
          this.menuitem.setAttribute("label", "?var2");
        else
          this.menuitem.setAttribute("label", this.label);
        
        if(this.value[0] == "!")
          this.menuitem.setAttribute("value", "?var1");
        else
          this.menuitem.setAttribute("value", this.value);
         
        if(this.image != "") {
          this.menuitem.setAttribute("class", "menuitem-iconic");
          if(this.image[0] == "!")
            this.menuitem.setAttribute("image", this.imageBaseFolder + "?var3");
          else
            this.menuitem.setAttribute("image", this.imageBaseFolder + this.image);
        }
        
			]]></constructor>
      <method name="getSelectedValue">
				<parameter name="aValue"/>
				<body><![CDATA[
          if(this.menulist.selectedItem)
            return this.menulist.selectedItem.value;
          else
            return "";
				]]></body>
			</method>
      <method name="selectValue">
				<parameter name="aValue"/>
				<body><![CDATA[
          if(aValue == null) {
            this.menulist.selectedIndex = 0;
            return;
          }
          
          for(i = 0; i<this.menulist.itemCount ; i++) 
          {
            if(this.menulist.getItemAtIndex(i).value == aValue) {
              this.menulist.selectedIndex = i;
              return;
            }
          }
          this.menulist.selectedIndex = 0;
				]]></body>
			</method>
      <method name="hideAllItems">
				<body><![CDATA[
          for(i = 0; i<this.menulist.itemCount ; i++) 
          {
            this.menulist.getItemAtIndex(i).setAttribute("hidden", "true");
          }
				]]></body>
			</method>
      <method name="unHide">
        <parameter name="aValue"/>
				<body><![CDATA[
          for(i = 0; i<this.menulist.itemCount ; i++) 
          {
            if(this.menulist.getItemAtIndex(i).value == aValue) {
              this.menulist.getItemAtIndex(i).setAttribute("hidden", "false");
              return;
            }
          }
				]]></body>
			</method>
      <method name="unHideAll">
				<body><![CDATA[
          for(i = 0; i<this.menulist.itemCount ; i++) 
          {
            this.menulist.getItemAtIndex(i).setAttribute("hidden", "false");
          }
				]]></body>
			</method>
		</implementation>
		<handlers>
      <handler event="mousedown">
        <![CDATA[

        ]]>
      </handler>
		</handlers>
	</binding>
</bindings>