/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

var geoSelection = new Object();
var $ = null;

geoSelection = {
  currentGeoChildsData : new Array(), //内部使用变量
  currentGeoData : new Array(),      //内部使用变量
  domainList : new Array(),
  currentLevel : 1,

  selectionIdPre : "geo_level", //可配置变量#select框的ID名称
  includeGeoLayerPre : "level", //可配置变量#包含select框的元素
  geoInputName : "geo_code",    //可配置变量#要使用的表单的geo_code名
  
  lastGeolevel : 5,             //可配置变量#geo层的最后一层是多少
  firstGeoLevel : 1,            //可配置变量#geo开始的级别
  rootPath : "./",

  initDomain : "cunwu",

  geoLayerId : "geo_selection",
  
  firstLevelCanChange : true,
  
  initGeoSelection : function (geoCode) {
    $ = jQuery.noConflict();
    this.currentGeoData[0] = 0;
    if(typeof geoCode == "undefined") geoCode = 0;
    var data = $.getYoyoJSON(this.rootPath+"ajax_geo.php?act=get_init_geo_tree&geo_code="+geoCode+"&start_level="+this.firstGeoLevel);

    for(var i = 0; i < data.length; i++) {
      if (data[i].child.length == 0) continue;
      var id = typeof data[i].current.id == "undefined" ? 0 : data[i].current.id;
      var parentId = data[i].child[0].parent_id;
      var level = typeof data[i].current.level == "undefined" ? this.firstGeoLevel+i : data[i].current.level;

      if(data[i].child != null) {
        this.currentGeoChildsData[parentId] = data[i].child;
      }

      this.buildNewSelection(this.currentGeoChildsData[parentId], level, id);

      if(this.currentLevel < level && id > 0) {
        this.currentLevel = level;
      }
    }

    for(var g = 1; g <= 5; g++) {
      if(g < this.firstGeoLevel || g > this.lastGeolevel) {
        $("#"+this.includeGeoLayerPre+g).hide();
      }
    }

    
    //控制当前第一级是否可选
    if(typeof(geoCode) != "undefined" && geoCode > 0 && this.firstLevelCanChange == false) {
      $("#"+this.selectionIdPre+this.firstGeoLevel).attr("disabled", "disabled");
    }
    
    //初始化select框的动作属性
    $("#"+this.geoLayerId).find("select").each(function(level) {
      level+=1;

      $(this).change(function () {
        var tmpCurrentGeo = geoSelection.currentGeoData[$(this).val()];
        var domain = geoSelection.domainList[$(this).val()];
        if(typeof domain != "undefined" && domain != null) {
          geoSelection.initDomain = domain;
        }
        if(level < geoSelection.lastGeolevel) {
          for(var i = level+1; i <= geoSelection.lastGeolevel; i++) {
            $("#"+geoSelection.selectionIdPre+i).empty();
          }

          //如果当前的select值不为空 则对其子选项初始化
          if($(this).val() != 0) {
            var data = geoSelection.getGeoChildByParentId($(this).val());
            geoSelection.buildNewSelection(data, level+1);
          }
        }

        geoSelection.currentLevel = 1;
        for(var i = geoSelection.firstGeoLevel; i <= geoSelection.lastGeolevel; i++) {
          if($("#"+geoSelection.selectionIdPre+i).val() > 0) {
            geoSelection.currentLevel = i;
          }
        }
        
        $("input[name="+geoSelection.geoInputName+"]").val(geoSelection.currentGeoData[$("#"+geoSelection.selectionIdPre+geoSelection.currentLevel).val()]);
        
        try {
          if(geoSelection.currentLevel == 5) {
            $("#to_village_button").get(0).disabled = false;
          } else {
            $("#to_village_button").attr("disabled", "disabled");
          }
        } catch(e) {}
      });
    });
    $("input[name="+this.geoInputName+"]").val(this.currentGeoData[$("#"+this.selectionIdPre+this.currentLevel).val()]);
  },
  
  getGeoChildByParentId : function (parentId) {
    if(typeof(this.currentGeoChildsData[parentId]) != "undefined") {
      return this.currentGeoChildsData[parentId];
    } else {
      var data = $.getYoyoJSON(this.rootPath+"ajax_geo.php?act=get_geo_by_parent_id&parent_id="+parentId);
      //把取回来的数据缓存起来，防止重复取数据浪费资源
      this.currentGeoChildsData[parentId] = data;
      return this.currentGeoChildsData[parentId];
    }
  },
  
  buildNewSelection : function(data, level, selectedId) {
    var selectionObj = $("#"+this.selectionIdPre+level);
    selectionObj.empty();

    selectionObj.append("<option value='0'>请选择</option>");
    for(var i = 0; i < data.length; i ++) {
      if(data[i].token != 3 && level == 5) var disabledVal = " disabled='disabled' ";
      else disabledVal = "";
      
      if(data[i].id == selectedId) {
        this.currentLevel = level;
        selectionObj.append("<option value='"+data[i].id+"'"+disabledVal+" selected='selected'>"+data[i].display_name+"</option>");
      } else {
        selectionObj.append("<option value='"+data[i].id+"'"+disabledVal+">"+data[i].display_name+"</option>");
      }
      this.currentGeoData[data[i].id] = data[i].geo_code;
      if(data[i].token == 3) {
        this.domainList[data[i].id] = data[i].domain;
      }
    }
  }
}