
var CategoryRadioButtons = function (formName, buttonGroupName, componentTemplate, requestParamName)
{
    this.requestParamName = requestParamName; // Name on the URL's query string and in parameter arrays
    this.formName = formName;                 // Name of the containing form element
    this.buttonGroupName = buttonGroupName;   // Name of radio buttons in the group
    this.component = componentTemplate;       // Name of the component template
    this.emptyList = true;                    // Flag: Only update to/from control if it is populated

    /*
     * Loads categories from torus and renders radio button group 
     */
    this.loadControl = function () {
        var categories = this.loadData();
        renderComponent(this.component, categories);
    };

    this.loadData = function () {
        var req = new pzHttpRequest(auth.servicePath + "?command=categories");
        var response = req.load();
        var categories = [];
        if (response) {
                var respCategories = response.getElementsByTagName("category");
                for (var i=0; i<respCategories.length; i++) {
                    categories[i] = { "name" : Element_getTextContent(respCategories[i].getElementsByTagName("categoryName")[0]),
                                      "id" : Element_getTextContent(respCategories[i].getElementsByTagName("categoryId")[0])};
                }
                if (respCategories.length>0){
                	this.emptyList = false;
                } else {
                	this.emptyList = true;
                }

        }
        return categories;
    };

    this.getSelectedValue = function () {
       var radio = document.forms[formName].elements[buttonGroupName];
       if (radio[0]) {
          for (var i=0; i<radio.length; i++) {
             if (radio[i].checked)
                return radio[i].value;
          }
       } else {
           if (radio.checked)
               return radio.value;
       }
       return null;
    };

    /* 
     * Sets the button selection according to value in the setts array
     */
    this.populateForm = function (setts) {
    	if (!this.emptyList) {
          var filterVal = setts[this.requestParamName];
          var control = document.forms[formName].elements[buttonGroupName];
          for (var j=0; j<control.length; j++) {
              var current = control[j];
              if (current.value == filterVal) {
                current.checked = true;
                break;
             }
          }
    	}
    };

    // Put selected value back into the provided array
    this.populateArray = function (array) {
    	if (!this.emptyList) {
    		if (this.getSelectedValue()) {
    			array[this.requestParamName] = this.getSelectedValue();
    		}
    	}
    };

};

var CategorySelectList = function (formName, selectListName, componentTemplate, requestParamName)
{
    this.requestParamName = requestParamName; // Name on the URL's query string and in parameter arrays
    this.formName = formName;                 // Name of the containing form element
    this.selectListName = selectListName;     // Name of the select list
    this.component = componentTemplate;       // Name of the component template
    this.emptyList = true;                    // Flag: Only update to/from control if it is populated


    /*
     * Loads categories from torus and renders select list
     */
    this.loadControl = function () {
        var categories = this.loadData();
        renderComponent(this.component, categories);
    };

    this.loadData = function () {
        var req = new pzHttpRequest(auth.servicePath + "?command=categories");
        var response = req.load();
        var categories = [];
        if (response) {
                var respCategories = response.getElementsByTagName("category");                
                for (var i=0; i<respCategories.length; i++) {
                    categories[i] = { "name" : Element_getTextContent(respCategories[i].getElementsByTagName("categoryName")[0]),
                                      "id" : Element_getTextContent(respCategories[i].getElementsByTagName("categoryId")[0])};
                }
                if (respCategories.length>0){
                	this.emptyList = false;
                } else {
                	this.emptyList = true;
                }
        }
        return categories;
    };

    this.getSelectedValue = function () {
    	var selectedItem = document.forms[formName].elements[selectListName].value;
        return selectedItem;
    };

    /*
     * Sets the selected item according to value in the setts array
     */
    this.populateForm = function (setts) {
    	if (!this.emptyList) {
    		var filterVal = setts[this.requestParamName];
    		if (filterVal) {
    			document.forms[formName].elements[selectListName].value = filterVal;
    		}
    	}
    };

    // Put selected value back into the provided array
    this.populateArray = function (array) {
    	if (!this.emptyList){
    		if (this.getSelectedValue()) {
    			array[this.requestParamName] = this.getSelectedValue();
    		}
    	}
    };
    
};


var CategoryCheckBoxes = function (formName, checkBoxName, componentTemplate, requestParamName)
{
    this.requestParamName = requestParamName; // Name on the URL's query string and in parameter arrays
    this.formName = formName;                 // Name of the containing form element
    this.checkBoxName = checkBoxName;   // Name of radio buttons in the group
    this.component = componentTemplate;       // Name of the component template
    this.emptyList = true;                    // Flag: Only update to/from control if it is populated

    /*
     * Loads categories from torus and renders check boxes
     */
    this.loadControl = function () {
        renderComponent(this.component, 'No-data-categories_Hardcoded-in-html');
        emptyList = false;
    };

    this.getSelectedValues = function () {
        var checkBoxes = document.forms[formName].elements[checkBoxName];
        var selected = new Array();
        for (var i = 0; i < checkBoxes.length; i++) {
            var cb = checkBoxes[i];
            if (cb.checked && cb.value)
                selected.push(cb.value);
        }
        return selected;
    };

    /*
     * Sets the button selection according to value in the setts array
     */
    this.populateForm = function (setts) {
       if (this.emptyList) {
        var control = document.forms[formName].elements[checkBoxName];
        for (var i=0; i<control.length; i++) {
            control[i].checked = false;
        }
        if (!setts["category"]) return;
        var cats = setts["category"].split(",");
        for (var j=0; j<cats.length; j++) {
          var cat = cats[j];
          for (var k=0; k<control.length; k++) {
            var current = control[k];
            if (current.value == cat) {
                current.checked = true;
                break;
            }
          }
        }
       }
    };

    // Put selected value back into the provided array
    this.populateArray = function (array) {
    	if (this.emptyList) {
    		if (this.getSelectedValue()) {
    			array[this.requestParamName] = this.getSelectedValue();
    		}
    	}
    };

};

var FullTextFilterCheckBox = function () {
  
  /*
   * Sets the selected item according to value in the setts array
   */
  this.populateForm = function (setts) {
    var defined = typeof setts['fullTextTargetFilter'] !== "undefined" 
      && typeof setts['fullTextRecordFilter'] !== "undefined" ? true : false;
    if (defined) {
      var checked = setts['fullTextTargetFilter']
        && setts['fullTextRecordFilter'] ? true : false;
      document.forms["fulltextfilter"].elements["fulltext"].checked = checked;
    }
  };

  // Put selected value back into the provided array
  this.populateArray = function (array) {
    if (document.forms["fulltextfilter"].elements["fulltext"].checked) {
        array["fullTextTargetFilter"] = "full_text_target~YES|PARTIALLY";
        array["fullTextRecordFilter"] = "has-fulltext~yes";
    } else {
        array["fullTextTargetFilter"] = "";
        array["fullTextRecordFilter"] = "";
    }
  };
  
  
};




