/**
*landmark
*jquery plugin v0.1
*by benson 2009-6-22
*/
(function($){

jQuery.fn.landmark = function(opts){
	opts = jQuery.extend({
		s_source:"",
		s_type:"",
		s_flag:"_",
		s_hidden:"_system_landmark_hidden",  //隐藏区域id 用于id
		s_showdiv:"_show"+(new Date().getTime()),  //默认的下拉层id (保证唯一性)
		s_url:system_js_basepath_support+"/common/landmark.dhtml?jsoncallback=?",  //默认的数据集url
		i_speed:0, //默认下拉速度
		callback:function(data){return false;}
	},opts||{});
	if(opts.s_source == ""){
		alert("init landmark failed: s_source cannot be null!");
		return;
	}
	var o_source = $("#"+opts.s_source);
	var o_hidden = $("#"+opts.s_hidden);
	var temp ="";  //by onchange
	var o_this = $(this);
	
	var a_landmark;
	$.ajax({
	  type: "GET",
	  cache: true,
	  url: opts.s_url,
	  dataType: "jsonp",
	  async: false,
	  success: function(json){
    	a_landmark = json.landmarks;
    	if(o_hidden.val() != ""){//初始化
			for(var i=0;i<a_landmark.length;i++){
				if(a_landmark[i].id == o_hidden.val()){ 
					o_this.val(a_landmark[i].name);
				}
			}
		}
		opts.callback(a_landmark);
  	  }
	});
	
	$("body").append("<div id='"+opts.s_showdiv+"'></div>"); //init showdiv
	o_this.attr("autocomplete","off");
	var o_showdiv = $("#"+opts.s_showdiv);
	o_showdiv.css("z-index", "5000");
	if ($.browser.msie) {//IE select bug
		if(!$("#_system_landmark_iframe").attr("id")){
			$("body").append("<iframe id='_system_landmark_iframe' scrolling='no'></iframe>");
		}
		var o_showdiviframe = $("#_system_landmark_iframe");
		o_showdiviframe.hide();
		o_showdiviframe.css("position", "absolute");
		o_showdiviframe.css("z-index", "99");
	}
	o_showdiv.hide();

	var f_show = function(event){
		if ($.browser.mozilla && event.keyCode == 27) {//when firefox put button Esc
 			$("#"+opts.s_hidden).val("");return;
		} 
		if(event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40 || event.keyCode == 13 || event.keyCode == 27 || event.keyCode == 9){return;};//回车键、ESC键 
		o_showdiv.empty();  
		var s_val = $("#"+opts.s_source).val() +"";
		if(s_val==""){
			f_close();
		}else{
			o_showdiv.css("position", "absolute");
			o_showdiv.css("left",  o_this.offset().left + 1 + "px");
			o_showdiv.css("top",  o_this.offset().top + 23 + "px");
			o_showdiv.append(f_parse(s_val));  
			o_showdiv.slideDown(opts.i_speed);
			if ($.browser.msie) {//IE select bug
				o_showdiviframe.show();
				o_showdiviframe.css("left",  o_this.offset().left + 1 + "px");
				o_showdiviframe.css("top",  o_this.offset().top + 23 + "px");
				o_showdiviframe.css("height",$("#"+opts.s_showdiv +" ul").height()+2);
				o_showdiviframe.css("width",$("#"+opts.s_showdiv +" ul").width()+2);
			}
		}
	}
	var f_close  = function (){
		o_showdiv.fadeOut(opts.i_speed);
		if ($.browser.msie) {//IE select bug
			o_showdiviframe.hide();
		}
	    return false;
	}
	
	var f_parse = function (s_wd){
		var s_result="";
		if(s_wd!=""){
			s_result = s_result + "<ul id='landmark'>";
			s_result = s_result + "<li><a href='#;' style='text-align: left;'>不限位置</a></li>";
			if(opts.s_type == ""){
				s_result = s_result + "<li><div>商业区</div>";
				for(var i=0;i<a_landmark.length;i++){
					if( (a_landmark[i].city == s_wd || a_landmark[i].cityCode == s_wd) && a_landmark[i].type == "B"){
						s_result = s_result + "<a flag='"+a_landmark[i].type+"' id='"+a_landmark[i].id+"' href='#;'>"+ a_landmark[i].name +"</a>";
					}
				}
				s_result = s_result + "</li>";
				s_result = s_result + "<li><div>行政区</div>";
				for(var i=0;i<a_landmark.length;i++){
					if( (a_landmark[i].city == s_wd || a_landmark[i].cityCode == s_wd) && a_landmark[i].type == "A"){
						s_result = s_result + "<a flag='"+a_landmark[i].type+"' id='"+a_landmark[i].id+"' href='#;'>"+ a_landmark[i].name +"</a>";
					}
				}
				s_result = s_result + "</li>";
			}else if(opts.s_type == "A"){
				s_result = s_result + "<li><div>行政区</div>";
				for(var i=0;i<a_landmark.length;i++){
					if( (a_landmark[i].city == s_wd || a_landmark[i].cityCode == s_wd) && a_landmark[i].type == opts.s_type){
						s_result = s_result + "<a flag='"+a_landmark[i].type+"' id='"+a_landmark[i].id+"' href='#;'>"+ a_landmark[i].name +"</a>";
					}
				}
				s_result = s_result + "</li>";
			}else if(opts.s_type == "B"){
				s_result = s_result + "<li><div>商业区</div>";
				for(var i=0;i<a_landmark.length;i++){
					if( (a_landmark[i].city == s_wd || a_landmark[i].cityCode == s_wd) && a_landmark[i].type == opts.s_type){
						s_result = s_result + "<a flag='"+a_landmark[i].type+"' id='"+a_landmark[i].id+"' href='#;'>"+ a_landmark[i].name +"</a>";
					}
				}
				s_result = s_result + "</li>";
			}
			s_result = s_result + "</ul>";
	  	}
		return s_result;
	}
	/* wow! input onchange start*/
	var f_clean = function(){
		o_this.val("");
		$("#"+opts.s_hidden).val("")
	}
	var f_onchange = function (){
		var val = $("#"+opts.s_source).val() +"";
		if(val == temp){
		}else{f_clean();}
		temp = val;
	}
	$("#"+opts.s_source).live("keyup" ,f_onchange);
	$("#"+opts.s_source).live("click" ,f_onchange);
	$("#"+opts.s_showdiv +" table tr").live("mousedown", f_onchange);
	$("#"+opts.s_source).change(function(){f_clean();});
	/* wow! input onchange end*/
	o_this.live("click" ,f_show);
	o_this.blur(function(){f_close();});
	$("#"+opts.s_showdiv +" ul li a").live("mousedown", function(){
		 $("#"+opts.s_hidden).val($(this).attr("id"));
		 $("#"+opts.s_flag).val($(this).attr("flag"));
		 o_this.val($(this).text());
	});
}
})(jQuery)


