/*----------------    FILE HEADER ---------------------------------------
 This file is part of Geoide.
 Copyright (C) 2005-2006 by:
 IDgis B.V.
 http://www.idgis.nl

 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation; either
 version 2.1 of the License, or (at your option) any later version.

 This library is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public
 License along with this library; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA

 Contact:

 Herman Assink
 IDgis bv
 P.O. Box 15
 7450 AA Holten
 The Netherlands
 E-Mail: herman.assink@idgis.nl

 * @version 1.4.0
 * @author IDgis team
 * 
 ------------------------------------------------------------------------*/
import mx.controls.TextInput;
import mx.utils.Delegate;

import nl.idgis.giclient.filterencoding.PropertyIsBetweenOperation;
import nl.idgis.giclient.framework.IDComboBox;
import nl.idgis.giclient.query.Operand;

class nl.idgis.giclient.query.PropertyIsBetweenOperand extends Operand {
  private var lowerValueField:Object = null;
  private var upperValueField:Object = null;
  
  function PropertyIsBetweenOperand(){
    paint();
  }
  
  
  private function paint(){
   if(operationViewer.queryColumn.getSearchType().toUpperCase() == "TEXTINPUT"){
    lowerValueField = TextInput(attachMovie("TextInput", "lowerValueField", 1,{_width:100}));
    lowerValueField.setNewTextFormat(textFormat);
    lowerValueField.text = operationViewer.queryColumn.getValueFormat();
    //TODO: format van de inputtext moet exact opgegeven kunnen worden
    if (operationViewer.queryColumn.getValueFormat() == "99999") {
           lowerValueField.restrict = "0-9 , -";
    }
    lowerValueField.addEventListener("change", Delegate.create(this, onChangeTypedLowerValue));
  
        upperValueField = TextInput(attachMovie("TextInput", "upperValueField", 4 ,{_x:120,_width:100}));
    upperValueField.setNewTextFormat(textFormat);
    upperValueField.text = operationViewer.queryColumn.getValueFormat();
    //TODO: format van de inputtext moet exact opgegeven kunnen worden
    if (operationViewer.queryColumn.getValueFormat() == "99999") {
           upperValueField.restrict = "0-9 , -";
    }
    upperValueField.addEventListener("change", Delegate.create(this, onChangeTypedUpperValue));
     } else { 
    lowerValueField = IDComboBox(attachMovie("IDComboBox", "lowerValueField", 1, {_x:0,_width:100}));
    lowerValueField.textField.setNewTextFormat(textFormat);
    lowerValueField.addEventListener("select", Delegate.create(this, onChangeSelectedLowerValue));
    lowerValueField.editable = true;
    upperValueField = IDComboBox(attachMovie("IDComboBox", "upperValueField", 4, {_x:120,_width:100}));
    upperValueField.textField.setNewTextFormat(textFormat);
    upperValueField.addEventListener("select", Delegate.create(this, onChangeSelectedUpperValue));
    upperValueField.editable = true;
   }
  createTextField("and", 3, 102, 0, 100, 20, {enabled:false});
    this["and"].setNewTextFormat(textFormat);
    this["and"].text = "en";
  }

  private function onChangeSelectedLowerValue(eventObject:Object){
    var selectedValue:String;
    // valueField.selectedIndex = 0  is "Alles" of "Selecteer een waarde"
    if(lowerValueField.selectedIndex != 0){
      selectedValue = lowerValueField.selectedItem.data;
    } else {
      selectedValue = null;
    }
    resetOperationLowerBoundary(selectedValue);
    
    if(selectedValue!=null && lowerValueField.selectedItem > upperValueField.selectedItem){
      resetOperationUpperBoundary(selectedValue);
    }
  operationViewer.onChangeOperand();
                   
  }
  
  private function onChangeSelectedUpperValue(eventObject:Object){
    var selectedValue:String;
    // valueField.selectedIndex = 0  is "Alles" of "Selecteer een waarde"
    if(upperValueField.selectedIndex != 0){
      selectedValue = upperValueField.selectedItem.data;
    } else {
      selectedValue = null;
    }
    resetOperationUpperBoundary(selectedValue);
    
    if(selectedValue!=null && lowerValueField.selectedItem > upperValueField.selectedItem){
      resetOperationLowerBoundary(selectedValue);
    }     
  operationViewer.onChangeOperand();
  }
  
    private function onChangeTypedLowerValue(eventObject:Object){
    resetOperationLowerBoundary(lowerValueField.text);
  operationViewer.onChangeOperand();              
    }
  
  private function onChangeTypedUpperValue(eventObject:Object){
    resetOperationUpperBoundary(upperValueField.text);
  operationViewer.onChangeOperand();  
  }
  
  function resetOperationLowerBoundary(selectedValue:String){
    PropertyIsBetweenOperation(operationViewer.getOperation()).setLowerBoundary(selectedValue);
  }
    
  function resetOperationUpperBoundary(selectedValue:String){
    PropertyIsBetweenOperation(operationViewer.getOperation()).setUpperBoundary(selectedValue);
  } 
  
  function reset(values:Array){
      lowerValueField.dataProvider = values;
      //zet de default selectie
      lowerValueField.selectedIndex = 0;
      upperValueField.dataProvider = values;
      //zet de default selectie
      upperValueField.selectedIndex = 0;
      resetOperationLowerBoundary(null);
      resetOperationUpperBoundary(null);
      IDComboBox(lowerValueField).resize();
      IDComboBox(upperValueField).resize();
      var lowerWidth:Number = IDComboBox(lowerValueField).getWidth();
      var upperWidth:Number = IDComboBox(upperValueField).getWidth();
      IDComboBox(upperValueField)._x = lowerWidth + 20;
      this["and"]._x = lowerWidth + 2;
      operandWidth= lowerWidth + 20 + upperWidth;
      operationViewer.onResizeOperand(this); 

  }
}