function DynamicSelect(ajax_url,page_obj,locals_id,isadmin) {
  this.ajax_url = ajax_url;
  this.page_obj = page_obj;
  this.locals_id = (locals_id) ? locals_id : null;
  this.isadmin = (isadmin) ? isadmin : null;
  this.selTarget = null;

  if (typeof DynamicSelect._initialized == "undefined") {

    DynamicSelect.prototype.initLinks = function (parentid) {
      var parentEl = document.getElementById(parentid);
      var mySels = parentEl.getElementsByTagName('select');

      for (i=0;i<mySels.length;i++) {
        if (mySels[i].className.indexOf("ajax_process") != -1) {
          //showArray(this);
          mySels[i].pageObj = this;
          addEvent(mySels[i], 'change', this.processSelect, false);
        }
      }
    }

    DynamicSelect.prototype.handleLocals = function (pageObj) {
      var catSel = document.finder.finder_ListTypeID;
      if (catSel && catSel.value == pageObj.locals_id) {
        return catSel.value;
      }
      return null;
    }

    DynamicSelect.prototype.processSelect = function (e,el_id,default_val) {
      var el = null;
      el = (el_id) ? document.getElementById(el_id) : getTarget(e);

      if (!el) {
        return;
      }
      var pageObj = (pageObj) ? this.pageObj : el.pageObj;

      var param = el.value;
      var pieces = el.id.split("//");
      var selID = pieces[0];
      var catSelID = null;
      if (selID == "finder_CityID") {
        catSelID = pageObj.handleLocals(pageObj);
        if (!catSelID) {
          return;
        }
      }
      pageObj.selTarget = selTargetID = pieces[1];

      url = pageObj.ajax_url+"&param="+param+"&calling_select="+selID+"&target="+selTargetID;
      var selTarget = document.getElementById(selTargetID);
      if (!selTarget) {
        selTarget = document.finder[selTargetID];
      }
      var tempOp = "<option value=\"retrieving\">retrieving data...</option>";
      if (document.all) {
        select_innerHTML(selTarget,tempOp);  // IE work-around for innerHTML select bug
      } else {
        selTarget.innerHTML=tempOp; // Smarter, better browsers :)
      }

      if (el.className.indexOf("restricted") != -1) {
        url += "&restricted=1";
      }
      if (default_val) {
        url += "&default_val="+default_val;
      }

      // had to change this because javascript handles multi-byte characters differently than php
      // for times, sake, this is a hack to get things to work correctly 08/20/07
      var myForm = ascendDOM(el,'form');
      var formVars = getFormValues(null,myForm.name);
      for (i in formVars) {
        if (i != "page") {
          url += "&"+i+"="+formVars[i];

        }
      }

      var form_data = serialize(getFormValues(null,myForm.name));
      //url += "&form_data="+form_data;
      if (pageObj.isadmin) {
//alert(url);

      }

      myContent = new AjaxContent(url);
      myContent.setCallObj(pageObj);
      myContent.setCallBack(pageObj.processedSel);
      myContent.setReturnContent(true);
      if (pageObj.isadmin) {
        //myContent.setShowResponse(true);
      }
      //myContent.setShowResponse(true);
      myContent.getContent();

      if (pageObj.page_obj) {
        pageObj.page_obj.processSelect(el);
      }
    }

    DynamicSelect.prototype.processedSel = function (results,pageObj) {
//showArray(pageObj);
      var pageObj = pageObj.calling_obj;

      var selTarget = document.getElementById(pageObj.selTarget);
      if (!selTarget) {
        var selTargetID = pageObj.selTarget;
        selTarget = document.finder[selTargetID];
      }

      var hasOpts = results.getElementsByTagName("options");

      if (hasOpts) {
        var default_index = results.getElementsByTagName("default_index")[0].firstChild.nodeValue;

        var opts = results.getElementsByTagName("options")[0].firstChild.data;

        if (document.all) {
          select_innerHTML(selTarget,opts);  // IE work-around for innerHTML select bug
        } else {
          selTarget.innerHTML=opts; // Smarter, better browsers :)
        }
        selTarget.selectedIndex=default_index;
      } else {
        var prompt = results.getElementsByTagName("prompt")[0].firstChild.nodeValue;

        var msgdiv = document.createElement("div");
        var msg = document.createTextNode(prompt);

        msgdiv.appendChild(prompt);

        changeStyle(pageObj.selTarget,"display","none");
        pageObj.selTarget.appendChild(msgdiv);
      }
    }

    DynamicSelect._initialized = true;
  }
}

function initPage_obj() {
  dynsel_obj.initLinks("searchbar");
}
