﻿/// <reference name="AppGeo.Web.Extensions.js" assembly="AppGeo.Web"/>

// SearchAttributeViewMode (enum)
SearchAttributeViewMode = function() {
  /// <field name="main" type="Number" integer="true" static="true">Main Search page</field>
  /// <field name="interactive" type="Number" integer="true" static="true">Lower-right corner of Interactive tab on Map page</field>
  if (arguments.length !== 0) throw Error.parameterCount();
  throw Error.notImplemented();
}

SearchAttributeViewMode.prototype = {
  main: 0,
  interactive: 1
}

SearchAttributeViewMode.registerEnum("SearchAttributeViewMode");

SearchAttributeView = function(element) {
  SearchAttributeView.initializeBase(this, [element]);

  this._mode = SearchAttributeViewMode.main;
}

SearchAttributeView.prototype = {
  initialize: function() {
    SearchAttributeView.callBaseMethod(this, "initialize");
  },

  dispose: function() {
    SearchAttributeView.callBaseMethod(this, "dispose");
  },

  addItem: function(element, text, value) {
    /// <summary>Add an item to the SelectList</summary>
    var option = document.createElement("option");
    option.text = text;
    option.value = value;

    if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
      element.add(option);
    } else {
      element.add(option, null);
    }
  },

  set_dataSource: function(dataSource) {
    if (dataSource || this._dataSource) {
      var dsFiltered = [];
      for (var i = 0; i < dataSource.length; i++) {
        if ((dataSource[i].searchMain && this._mode == SearchAttributeViewMode.main) ||
        (dataSource[i].searchInteractive && this._mode == SearchAttributeViewMode.interactive)) {
          Array.add(dsFiltered, dataSource[i]);
        }
      }

      this._dataSource = dsFiltered;
      this.raisePropertyChanged("dataSource");
    }
  },

  get_mode: function() {
    return this._mode;
  },

  set_mode: function(value) {
    this._mode = value;
  },

  _initializeElement: function(element, property, dataItem) {
    if ((this._mode == SearchAttributeViewMode.main && dataItem.searchMain) ||
      (this._mode == SearchAttributeViewMode.interactive && dataItem.searchInteractive)) {
      if (element.nodeName.toLowerCase() == "select" && property == "value") {
        for (var i = 0; i < dataItem.domain.length; i++)
          this.addItem(element, dataItem.domain[i], dataItem.domain[i]);
      }

      SearchAttributeView.callBaseMethod(this, "_initializeElement", [element, property, dataItem]);
    } else {
      $(element).remove();
    }
  }
}

SearchAttributeView.registerClass("SearchAttributeView", Ag.UI.GridView);

if (typeof (Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
