// define prototype for different user-agent
function isIE(){ //ie?
  if (window.navigator.userAgent.indexOf("MSIE")>=1) return true;
  else return false;
}

var isIE=isIE();

// add new option to select input element
function addOption(obj, n, v, selected) {
  if(isIE) {
    var opt=new Option(n, v);
    opt.selected=selected;
    obj.add(opt);
  } else {
    var opt=document.createElement("<OPTION>");
    opt.text=n;
    opt.value=v;
    opt.selected=selected;
    obj.appendChild(opt);
  }
}

// clear all the options of select input element
function clearOptions(obj) {
  var oc=obj.length;
  if(oc>0)
  {
    for (var i=0; i<oc; i++) {
      obj.options[0]=null;
    }
  }
}

// set options[i]'s selected to true
function selectOption(obj, v) {
  var oc=obj.length;
  for (var i=0; i<oc; i++) {
    obj.options[i].selected=(obj.options[i].value == v);
  }
}

var InteractiveSearchEngine=function() {
  // instance variables
  this.m_ele_province=null;
  this.m_ele_city=null;
  this.m_ele_district=null;
  this.m_ele_comarea=null;
}


InteractiveSearchEngine.prototype.initialise=function() {
  // bind/attach very function to event
  if(isIE) {
    this.m_ele_province.attachEvent("onchange", this._init_city);
    this.m_ele_city.attachEvent("onchange", this._init_district);
   // this.m_ele_district.attachEvent("onchange", this._init_comarea);
  } else {
    this.m_ele_province.addEventListener("change", this._init_city, false);
    this.m_ele_city.addEventListener("change", this._init_district, false);
    //this.m_ele_district.addEventListener("change", this._init_comarea, false);
  }

  this.m_ele_province.attachedInstance=this;
  this.m_ele_city.attachedInstance=this;
  this.m_ele_district.attachedInstance=this;

  // init province select input element and all associated ones;
  this._init_province();
}

// init/reset province dropdown list
InteractiveSearchEngine.prototype._init_province=function() {
  clearOptions(this.m_ele_province);
  addOption(this.m_ele_province, '全部省份', '');

  var selected=this.m_ele_province.getAttribute("selected");
  //alert("_init_province begin:[" + selected + "]");
  for (var i=0; i<P.length; i++) {
    addOption(this.m_ele_province, P[i], P[i]);
  }
  selectOption(this.m_ele_province, selected);
  //alert("_init_province end");

  this._init_city();
} // s_province

// init city dropdown list
InteractiveSearchEngine.prototype._init_city=function(event) {
  var instance;
  if(event) {
    instance=isIE ? event["srcElement"]["attachedInstance"] : event["target"]["attachedInstance"];
  } else {
    instance=this.m_ele_city["attachedInstance"];
  }
  clearOptions(instance.m_ele_city);
  addOption(instance.m_ele_city, '全部城市', '');

  var pv=instance.m_ele_province.value;
  if(pv == "") {
    instance._init_district();
    return;
  }
  var selected=instance.m_ele_city.getAttribute("selected");
  //alert("_init_city begin:" + pv + "[" + selected + "]");
  for (var i=0; i<P.length; i++) {
    if(P[i] != pv) {
      continue;
    }
    for (var j=0; j<C[i].length; j++) {
      addOption(instance.m_ele_city, C[i][j], C[i][j]);
    }
    selectOption(instance.m_ele_city, (selected ? selected : C[i].length == 1 ? C[i][0] : ""));

    //alert("_init_city end");
    instance._init_district();
    return;
  }

} // s_city

// init district dropdown list
InteractiveSearchEngine.prototype._init_district=function(event) {
  var instance;
  if(event) {
    instance=isIE ? event["srcElement"]["attachedInstance"] : event["target"]["attachedInstance"];
  } else {
    instance=this.m_ele_city["attachedInstance"];
  }
  clearOptions(instance.m_ele_district);
  addOption(instance.m_ele_district, '全部区域', '');

  var pv=instance.m_ele_province.value;
  var cv=instance.m_ele_city.value;
  var selected=instance.m_ele_district.getAttribute("selected");
  //alert("_init_district begin:" + pv + "|" + cv + "[" + selected + "]");
  if(pv == "" || cv == "") {
    //instance._init_comarea();
    return;
  }
  for (i=0; i<P.length; i++) {
    if(P[i] != pv) {
      continue;
    }
    for (j=0; j<C[i].length; j++) {
      if (C[i][j] != cv) {
        continue;
      }
      for (k=0; k<D[i][j].length; k++) {
        addOption(instance.m_ele_district, D[i][j][k], D[i][j][k]);
      }
      selectOption(instance.m_ele_district, selected);

      //alert("_init_district end");
      //instance._init_comarea();
      return;
    }
  }
}, // s_district

// init/reset com-area dropdown list
InteractiveSearchEngine.prototype._init_comarea=function(event) {
  var instance;
  if(event) {
    instance=isIE ? event["srcElement"]["attachedInstance"] : event["target"]["attachedInstance"];
  } else {
    instance=this.m_ele_city["attachedInstance"];
  }
  alert("_init_comarea");
  clearOptions(instance.m_ele_comarea);
  addOption(instance.m_ele_comarea, '全部商圈', '');

  var pv=instance.m_ele_province.value;
  var cv=instance.m_ele_city.value;
  var dv=instance.m_ele_district.value;
  var selected=instance.m_ele_comarea.getAttribute("selected");
  //alert("_init_comarea begin:" + pv + "|" + cv + "|" + dv + "[" + selected + "]");
  if(pv == "" || cv == "" || dv == "") {
    return;
  }
  for (i=0; i<P.length; i++) {
    if(P[i] != pv) {
      continue;
    }

    for (j=0; j<C[i].length; j++) {
      if(C[i][j] !=cv) {
        continue;
      }

      for (k=0; k<D[i][j].length; k++) {
        if(D[i][j][k] != dv) {
          continue;
        }
        if(A[i]==null || A[i][j]==null || A[i][j][k]==null || A[i][j][k].length<=0) {
          addOption(instance.m_ele_comarea, D[i][j][k], D[i][j][k]);
        } else {
          for (m=0; m<A[i][j][k].length; m++) {
            addOption(instance.m_ele_comarea, A[i][j][k][m], A[i][j][k][m]);
          }
        }
        selectOption(instance.m_ele_comarea, selected);
        return;
      }
    }
  }
} // s_comarea

// select one item from dropdown list
InteractiveSearchEngine.prototype.select=function(ele) {
  if(ele) {
    var selected=ele.getAttribute("selected");
    selectOption(ele, selected);
  }
}
