grDDCities = {
  ecity: null,
  eslts: null,
  timeo: null,
  clast: null,
  speed: 300,
  obreq: null,

  init: function () {
    var ei = document.getElementsByTagName("input"),
        es = document.getElementsByTagName("select"),
        brw = navigator.appName,
        brv = navigator.appVersion,
        brx = /\MSIE\s+(\d\.\d\b)/, i;
    for (i = 0; i < ei.length; i++) {
      if ((ei[i].name == "register[location_city]") || (ei[i].name == "info[location_city]") || (ei[i].name == "prod_info[location_city]")) {
        grDDCities.ecity = ei[i];
        grDDCities.clast = ei[i].value;
        break;
      }
    }
    grDDCities.eslts = new Array();
    if (brw == "Microsoft Internet Explorer") {
      i = brv.match(brx);
      if (i[1] <= 6) {
        for (i = 0; i < es.length; i++) {
          grDDCities.eslts[i] = es[i];
        }
      }  
    }  
    if (grDDCities.ecity) {
      grDDCities.createDDList();
    }  
  },
  
  createDDList: function () {
    var p = grDDCities.ecity.parentNode,
        d = document.createElement("div");
    d.setAttribute("id", "c-dd-list");
    p.appendChild(document.createElement("br"));
    p.appendChild(d);
    grDDCities.timeo = setTimeout("grDDCities.processTimer()", grDDCities.speed);
  },
  
  clearDDList: function () {
    var p = document.getElementById("c-dd-list");
    while (p.firstChild) {
      p.removeChild(p.firstChild);
    }
  },
  
  hideDDList: function () {
    document.getElementById("c-dd-list").style.display = "none";
    for (i = 0; i < grDDCities.eslts.length; i++) {
      grDDCities.eslts[i].style.visibility = "visible";
    }
  },

  showDDList: function () {
    for (i = 0; i < grDDCities.eslts.length; i++) {
      grDDCities.eslts[i].style.visibility = "hidden";
    }
    document.getElementById("c-dd-list").style.display = "block";
  },

  loadDDList: function (s) {
    grDDCities.hideDDList();
    grDDCities.obreq = grDDCities.createRequestObj();
    req = grDDCities.obreq;
    if (req) {
      try {
        req.onreadystatechange = function () {
          grDDCities.readyStateChange();
        }
        req.open("post", "/jx-cities.php", true);
        req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        req.setRequestHeader("X-Requested-With","rjxLib");
        req.setRequestHeader("Accept","text/javascript, text/html, application/xml, text/xml, */*");
        req.send("pref=" + s);
      }
      catch (err) {
      }
    }
  },

  onLoadDDList: function (r) {
    var s = r.responseText, i, a, t,
        p = document.getElementById("c-dd-list");
    eval(s);
    if (clst.length > 1) {
      grDDCities.clearDDList();
      for (i = 0; i < clst.length; i++) {
        t = document.createTextNode(clst[i]);
        a = document.createElement("a");
        a.onclick = grDDCities.clickLine;
        a.onmouseover = grDDCities.overLine;
        a.onmouseout = grDDCities.outLine;
        a.appendChild(t);
        p.appendChild(a);
        p.appendChild(document.createElement("br"));
      }
      grDDCities.showDDList();
    }
  },

  processTimer: function () {
    var v = grDDCities.ecity.value;
    if (v != grDDCities.clast) {
      grDDCities.clast = v;
      if (v.length < 1) {
        grDDCities.hideDDList();
      }
      else {
        grDDCities.loadDDList(v);
      }
    }  
    grDDCities.timeo = setTimeout("grDDCities.processTimer()", grDDCities.speed);
  },
  
  clickLine: function () {
    grDDCities.clast = this.innerHTML;
    grDDCities.ecity.value = this.innerHTML;
    grDDCities.hideDDList();
    return false;
  },

  overLine: function () {
    this.className = "hoverlink";
  },

  outLine: function () {
    this.className = "";
  },

/**********************
       AJAX PART
**********************/  
  createRequestObj: function () {
    var ret = null;
    try {ret = new XMLHttpRequest();}
    catch (tmt) {
      try {ret = new ActiveXObject("Msxml2.XMLHTTP");}
      catch (om) {
        try {ret = new ActiveXObject("Microsoft.XMLHTTP");}
        catch (fld) {
          return null;
        }
      }
    }
    return ret;
  },
  
  readyStateChange: function () {
    var req = grDDCities.obreq;
    if (req.readyState == 4) {
      if (req.status == 200 || req.status == 0) {
        grDDCities.onLoadDDList(req);
      }
    }
  }
  
}

if (window.addEventListener) {
  window.addEventListener ("load", grDDCities.init, false);
}
else {
  var oldWONLD = window.onload;
  window.onload = function () {
    oldWONLD.call(window);
    grDDCities.init();
  }
}

