function local_sidebar_fetch(formname,forced)
{
  if(formname)
  {
    if(forced)
    {
      formname_array[formname]['NextForced'] = true;
    }
    // if the object isn't triggered and is reliant on a parent value
    if(formname_array[formname]['triggered'] == false
    && formname_array[formname]['parent']
    && formname_array[formname]['ParentValueRequired'] == true
    && document.getElementById(formname_array[formname_array[formname]['parent']]['hiddenfield']).value == false
    // parent triggered
    && formname_array[formname_array[formname]['parent']]['triggered'] == false
    )
    {
      if (formname_array[formname]['ParentValueRequiredNotice'])
      {
        //alert(formname_array[formname]['ParentValueRequiredNotice']);
      }
      // flag this one as triggered
      formname_array[formname]['triggered'] = true;
      //alert('current:'+formname+' parent:'+formname_array[formname]['parent']);
      local_sidebar_fetch(formname_array[formname]['parent']);
      //alert(formname_array[formname]['parent']);
      return;
    }
    // Loading
    if(document.getElementById(formname_array[formname]['htmldiv']))
    {
      if(formname_array[formname]['htmldivsection'])
      {
        document.getElementById(formname_array[formname]['htmldivsection']).style.display = 'block';
      }
      document.getElementById(formname_array[formname]['htmldiv']).innerHTML = '<div class="sidebar_search_loading">Waiting...</div>';
    }
    // if the element requires a parent value
    if(formname_array[formname]['ParentValueRequired']
    && document.getElementById(formname_array[formname_array[formname_array[formname]['parent']]['hiddenfield']]['hiddenfield']).value == false)
    {
      // send blank results because the parent is empty
      local_sidebar_handler(null,formname_array[formname]['htmldiv'],formname);
    }
    else if(formname_array[formname]['HardCodedValue'])
    {
      local_sidebar_handler(null,formname_array[formname]['htmldiv'],formname);
    }
    else if(formname)
    {
      if(formname_array[formname]['AjaxTimeout'])
      {
       clearTimeout(formname_array[formname]['AjaxTimeout']); 
      }
      formname_array[formname]['AjaxTimeout'] = setTimeout(function(){
        formname_array[formname]['AjaxTimeout'] = false;
        // Loading
        if(document.getElementById(formname_array[formname]['htmldiv']))
        {
          if(formname_array[formname]['htmldivsection'])
          {
            document.getElementById(formname_array[formname]['htmldivsection']).style.display = 'block';
          }
          document.getElementById(formname_array[formname]['htmldiv']).innerHTML = '<div class="sidebar_search_loading">Loading...</div>';
        }
        // Reset Next Forced
        formname_array[formname]['NextForced'] = false;
        // ajax wait to prevent spammage
        //prompt('url',formname+' - '+eval(formname_array[formname]['urleval']));
        formname_array[formname]['triggered'] = true;
        ajax_load_page(eval(formname_array[formname]['urleval']),false,false,'local_sidebar_handler(content,\''+formname_array[formname]['htmldiv']+'\',\''+formname+'\');');
        },500);
      //ajax_load_page(eval(formname_array[formname]['urleval']),false,false,'local_sidebar_handler(content,\''+formname_array[formname]['htmldiv']+'\',\''+formname+'\');');
    }
  }
}

function local_sidebar_populate_hidden_field(formname,value)
{
  var oldvalue = document.getElementById(formname_array[formname]['hiddenfield']).value;
  // clear the hidden field
  document.getElementById(formname_array[formname]['hiddenfield']).value = '';
  if(value)
  {
    // Set the value to what has been provided in the function
    if(document.getElementById(formname_array[formname]['hiddenfield']).value == value)
    {
      return false;
    }
    // Clear checkboxes if a value is provided
    // assume providing a value overrides checkboxed options
    if(formname_array[formname]['type'] == 'checkbox')
    {
      clear_checkbox(formname);
    }
    document.getElementById(formname_array[formname]['hiddenfield']).value = value;
  }
  else if(formname_array[formname]['HardCodedValue'])
  {
    document.getElementById(formname_array[formname]['hiddenfield']).value = formname_array[formname]['HardCodedValue'];
  }
  else if(formname_array[formname]['type'] == 'checkbox')
  {
    // if we are clicking on a checkbox list, it needs to get all the values
    // of the checked items and store them as CSV data in a hidden field
    document.getElementById(formname_array[formname]['hiddenfield']).value = fetch_checkbox_as_csv(formname+'_dynamic');
  }
  // only fetch if we need to
  //alert('old:'+oldvalue+' new:'+document.getElementById(formname_array[formname]['hiddenfield']).value+' forced:'+formname_array[formname_array[formname]['next']]['NextForced']);
  if(
      formname_array[formname]['next'] //(formname_array[formname]['next'] && oldvalue !== document.getElementById(formname_array[formname]['hiddenfield']).value)
    ||
      (formname_array[formname]['next'] && formname_array[formname_array[formname]['next']]['NextForced'] == true)
    )
  {
    //alert('current:'+formname+' next:'+formname_array[formname]['next']+' forced:'+formname_array[formname_array[formname]['next']]['NextForced']);
    // reset the next forced value
    formname_array[formname_array[formname]['next']]['NextForced'] = false;
    local_sidebar_fetch(formname_array[formname]['next']);
  }
}
function local_sidebar_handler(content,targetdiv,formname)
{
  if(formname)
  {
    // 'content' is the var from the AJAX functions
    var data = eval(content);
    var html = '';
    var hiddenfield = document.getElementById(formname_array[formname]['hiddenfield']).value.split(',');
    if(document.getElementById(formname_array[formname]['htmldiv']))
    {
      if(data && data.length > 0)
      {
        for (var x = 0;x < data.length;x++)
        {
          var checked = '';
          if(formname_array[formname]['type'] == 'checkbox')
          {
            var onclick = 'local_sidebar_populate_hidden_field(\''+formname+'\')';
          }
          else
          {
            var onclick = '';
          }
          var text = (data[x]['attribute_text']) ? data[x]['attribute_text'] : data[x]['attribute_name'];
          var value = (data[x]['attribute_name']) ? data[x]['attribute_name'] : data[x]['attribute_name'];
          for (var y = 0;y < hiddenfield.length;y++)
          {
            if(hiddenfield[y].toLowerCase() == value.toLowerCase())
            {
              var checked = 'checked="true"';
            }
          }
          html += '<div>';
          html += '<input id="'+formname_array[formname]['formname']+'_'+value+'_target'+'" type="checkbox" name="'+formname+'_dynamic" value="'+value+'" '+checked+' onclick="javascript:'+onclick+'\">';
          html += '<a href="javascript:void(0);" onclick="javascript:clear_checkbox(\''+formname+'_dynamic\');local_sidebar_populate_hidden_field(\''+formname+'\',\''+value+'\');document.getElementById(\''+formname_array[formname]['formname']+'_'+value+'_target'+'\').checked=true;">';
          html += text;
          html += '</a>';
          if(data[x]['attribute_count'] > 0)
            {html += ' <span class="count"><small>('+data[x]['attribute_count']+')</small></span>';}
          html += '</div>';
        }
      }
      // if no data and parent is required
      else if(formname_array[formname]['ParentValueRequired']
      && formname_array[formname]['ParentValueRequiredNotice']
      && document.getElementById(formname_array[formname_array[formname_array[formname]['parent']]['hiddenfield']]['hiddenfield']).value == false)
      {
        html += formname_array[formname]['ParentValueRequiredNotice'];
      }
      else
      {
        html += 'Empty';
      }
      document.getElementById(formname_array[formname]['htmldiv']).innerHTML = html;
    }
    document.getElementById(formname_array[formname]['htmldiv']).style.display = 'block';
    local_sidebar_populate_hidden_field(formname);
  }
}
function fetch_checkbox_as_csv(name){
  var checkboxlist = document.getElementsByName(name);
  var csvlist = new Array();
  var csvlistindex = 0;
  for(var x = 0;x < checkboxlist.length;x++)
  {
    if(checkboxlist[x].checked == true)
    {
      csvlist[csvlistindex] = checkboxlist[x].value;
      csvlistindex++;
    }
    //csvlist = csvlist.join(',');
  }
  //alert(csvlist);
  return csvlist;
}
function clear_checkbox(name){
  var checkboxlist = document.getElementsByName(name);
  var csvlist = new Array();
  var csvlistindex = 0;
  for(var x = 0;x < checkboxlist.length;x++)
  {
    checkboxlist[x].checked = false;
  }
 }
 
 function local_sidebar_reset(formid)
{
  sidebar_reset_form_elements(formid);
  for(var item in formname_array)
  {
    document.getElementById(formname_array[item]['hiddenfield']).value = '';
  }
}

function sidebar_reset_form_elements(id)
{
  var target = document.getElementById(id);
  var NumElements=target.elements.length;
  for (i=0; i<NumElements;i++)
  {
    if(target.elements[i].type !="button" && target.elements[i].type !="submit")
    {
      if(target.elements[i].type == "text")
        target.elements[i].value = "";
      if(target.elements[i].type == "password")
        target.elements[i].value = "";
      if(target.elements[i].type == "select-one")
        target.elements[i].selectedIndex = 0;
      if(target.elements[i].type == "select")
        target.elements[i].selectedIndex = 0;
      if(target.elements[i].type == "checkbox")
        target.elements[i].checked = false;
      if(target.elements[i].type == "radio")
      {
        target.elements[i].checked = false;
        target.elements[target.elements[i].name][0].checked = true; // Select the first item in the group
      }
    }
  }
}