/**
*area
*jquery plugin v0.1
*by benson 2009-7-7
*/
(function($){
//i_show:1 表示只显示城市,2 表示显示省和城市，3 表示显示国家，省和城市,4 显示洲，国家，省和城市
jQuery.fn.area = function(opts){
	opts = jQuery.extend({
		s_url:system_js_basepath_support+"/common/area.dhtml?jsoncallback=?",  //默认的数据集url
		s_continent:"_continent",
		s_country:"_country",
		s_province:"_province",
		s_city:"_city",
		i_init:0,
		i_show:4,
		s_initvalue:"" ,
        callback : function(){}
	},opts||{});
	
	var o_this = $(this);
	var s_thisid = o_this.attr("id");
	o_this.append("<select name='"+opts.s_continent+"' id='"+s_thisid+"_continent'><option value=''>-洲-</option></select>");
	o_this.append("<select name='"+opts.s_country+"' id='"+s_thisid+"_country'><option value=''>-国家-</option></select>");
	o_this.append("<select name='"+opts.s_province+"' id='"+s_thisid+"_province'><option value=''>-省份-</option></select>");
	o_this.append("<select name='"+opts.s_city+"' id='"+s_thisid+"_city'><option value=''>-城市-</option></select>");
	
	var a_country = new Array();
	var a_province = new Array();
	var a_city = new Array();
	var o_continent = $("#"+s_thisid+"_continent");
	var o_country = $("#"+s_thisid+"_country");
	var o_province = $("#"+s_thisid+"_province");
	var o_city = $("#"+s_thisid+"_city");
	o_continent.hide();o_country.hide();o_province.hide();o_city.hide();
	if(opts.i_init == 5){
		var s_continent = opts.s_initvalue.substring(0,1);
		var s_country = opts.s_initvalue.substring(0,5);
		var s_province = opts.s_initvalue.substring(0,9);
	}
	
	$.ajax({
	  type: "GET",
	  cache: true,
	  url: opts.s_url,
	  dataType: "jsonp",

	  success: function(json){
	  	var a_data = json.areas;
		for(var i=0;i<a_data.length;i++){
			if(a_data[i].cityLevel == 'CONTINENT'){ 
				if(opts.i_init == 0){
					o_continent.append("<option value="+a_data[i].code+">"+a_data[i].name+"</option>");
				}else if(opts.i_init == 5){
					if(a_data[i].code ==  s_continent){
						o_continent.append("<option value="+a_data[i].code+" selected>"+a_data[i].name+"</option>");
					}else{
						o_continent.append("<option value="+a_data[i].code+">"+a_data[i].name+"</option>");
					}
				}
			}else if(a_data[i].cityLevel == 'COUNTRY'){
				a_country.push(a_data[i]);
				if(opts.i_init == 1){
					o_continent.hide();
					if(a_data[i].parentCode == opts.s_initvalue){
						o_country.append("<option value="+a_data[i].code+">"+a_data[i].name+"</option>");
					}
				}
			}else if(a_data[i].cityLevel == 'PROVINCE'){
				a_province.push(a_data[i]);
				if(opts.i_init == 2){
					o_continent.hide();
					o_country.hide();			
					if(a_data[i].parentCode == opts.s_initvalue){
						o_province.append("<option value="+a_data[i].code+">"+a_data[i].name+"</option>");
					}
				}
			}else if(a_data[i].cityLevel == 'CITY'){
				a_city.push(a_data[i]);
				if(opts.i_init == 3){
					o_continent.hide();
					o_country.hide();
					o_province.hide();
					if(a_data[i].parentCode == opts.s_initvalue){
						o_city.append("<option value="+a_data[i].code+">"+a_data[i].name+"</option>");
					}
				}
			}
		}

		a_country = a_country.sort();
		a_province = a_province.sort();
		a_city = a_city.sort();
		
		if(opts.i_init == 5){
			select(o_continent,o_country,1);
			select(o_country,o_province,2);
			select(o_province,o_city,3);
		}
		
		if (opts.i_show==4){
			o_continent.show();
			o_country.show(); 
			o_province.show();
			o_city.show();
		}
		if (opts.i_show==3){
			o_country.show(); 
			o_province.show();
			o_city.show();
		}
		if (opts.i_show==2){
			o_province.show();
			o_city.show();
		}
		if (opts.i_show==1){
			o_city.show();
		}
		 
        opts.callback();
  	  }
	});
	
	var select = function(parent,child,cityLevel){
		child.children("[value!='']").remove();
		if(cityLevel == 1){
			o_province.children("[value!='']").remove();
			o_city.children("[value!='']").remove();
			for(var i=0;i<a_country.length;i++){
				if(a_country[i].parentCode == parent.val()){ 
					if(a_country[i].code == s_country ){
						child.append("<option value="+a_country[i].code+" selected>"+a_country[i].name+"</option>");
					}else{
						child.append("<option value="+a_country[i].code+">"+a_country[i].name+"</option>");
					}
				}
			}
		}else if(cityLevel == 2){
			o_city.children("[value!='']").remove();
			for(var i=0;i<a_province.length;i++){
				if(a_province[i].parentCode == parent.val()){ 
					if(a_province[i].code == s_province ){
						child.append("<option value="+a_province[i].code+" selected>"+a_province[i].name+"</option>");
					}else{
						child.append("<option value="+a_province[i].code+">"+a_province[i].name+"</option>");
					}
				}
			}
		}else if(cityLevel == 3){
			for(var i=0;i<a_city.length;i++){
				if(a_city[i].parentCode == parent.val()){ 
					if(a_city[i].code == opts.s_initvalue ){
						child.append("<option value="+a_city[i].code+" selected>"+a_city[i].name+"</option>");
					}else{
						child.append("<option value="+a_city[i].code+">"+a_city[i].name+"</option>");
					}
				}
			}
		}
		
	}
	
	o_continent.change(function(){
		select(o_continent,o_country,1);
	});
	
	o_country.change(function(){
		select(o_country,o_province,2);
	});
	
	o_province.change(function(){
		select(o_province,o_city,3);
	});
}
	
})(jQuery)

