/*
*	http://www.caizq.com
*	快乐笛子 misshjn@163.com
*	2008-07-23
*/
if(typeof ComBox=="undefined"){
var ComBox = function(dataArr,splitChar,reverse){
	this.autoComplete = true;
	this.readOnly = true;
	
	var item = '<li><a href="javascript:void(0)" title="{1}" onclick="selectItem(this)" value="{0}">{1}</a></li>';
	var str =  '<div class="combox" style="display:inline;zoom:1; vertical-align:-7px">'
			   +'<input type="hidden" value="" /><input type="text" {3} value="" style="width:{1}px;" ifrname="{0}" {4} onblur=ComBox.hideMenu(this,"{0}") style="background:url(images/text-bg.gif) repeat-x left top #fff;border:1px solid #7F9DB9; padding:2px; height:15px; overflow:hidden; font-size:11px; font-family:Tahoma; margin:-1px -1px 0 0; vertical-align:top;" /><a href="javascript:void(0)" onclick=ComBox.showMenu(this,"{0}") onblur=ComBox.hideMenu(this,"{0}")><img src="images/transparent.gif"  border=0 style="width:16px; height:19px; background:url(images/trigger.gif) no-repeat -15px -1px; border:1px solid #7F9DB9; margin:0; overflow:hidden" /></a><iframe frameborder=0 name="{0}" id="{0}" class="dropmenu" style="visibility:hidden;width:{2}px; margin:0; padding:0; height:181px; position:absolute; margin-top:20px; margin-left:-{2}px; background:#fff; filter:progid:DXImageTransform.Microsoft.Shadow(color=#cccccc,direction=180,strength=3);"></iframe>'
			   +'</div>';
	var html = new StringBuffer();
	this.textIndex = {};
	this.valueIndex = {};
	splitChar || (splitChar=":");

	if(dataArr instanceof Array){
		for(var i=0,j; j=dataArr[i]; i++){
			var k = j.split(splitChar);
			var text = k[0];
			var value = k[1]||text;
			!this.textIndex[text] && (this.textIndex[text]=i);
			!this.valueIndex[value] && (this.valueIndex[value]=i);
			if(reverse){
				html.append(item.format(text,value));
			}else{
				html.append(item.format(value,text));
			}
		}
	}else if(dataArr instanceof Object){	
		for(var key in dataArr){
			var text = key;
			var value = dataArr[key];
			!this.textIndex[text] && (this.textIndex[text]=i);
			!this.valueIndex[value] && (this.valueIndex[value]=i);
			if(reverse){
				html.append(item.format(text,value));
			}else{
				html.append(item.format(value,text));
			}
		}
	}else if(typeof dataArr == "string"){
		var _arr = dataArr.split(",")
		for(var i=0,j; j=_arr[i]; i++){
			var k = j.split(splitChar);
			var text = k[0];
			var value = k[1]||text;	
			!this.textIndex[text] && (this.textIndex[text]=i);
			!this.valueIndex[value] && (this.valueIndex[value]=i);
			if(reverse){
				html.append(item.format(text,value));
			}else{
				html.append(item.format(value,text));
			}
		}
	}
	this.itemCache = "<ul id='list'>"+html.toString()+"</ul>";
	this.cache = str;
}
ComBox.globalCSS = "<style type='text/css'>"
					+"* {padding:0; margin:0}"
					+"html,body {width:100%; height:100%; border:none; overflow:hidden; zoom:1; padding:0; margin:0}"
					+"body{font-size:11px; font-family:Tahoma;scrollbar-face-color: #BBD0E9;scrollbar-highlight-color: #ffffff;scrollbar-shadow-color: #7F9DB9;scrollbar-3dlight-color: #7F9DB9;scrollbar-arrow-color: #31508B;scrollbar-track-color:#F7FBFF;scrollbar-darkshadow-color: #ffffff;}"
					+"ul,li {list-style:none; padding:0; margin:0}"
					+"#list {height:181px; overflow-y:auto; overflow-x:hidden; width:100%; border:1px solid #7F9DB9; }"
					+"a {display:block; color:#444; text-decoration:none; height:18px; line-height:18px; padding:0 1px; margin:0 1px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }"
					+"a:hover {background:#F3F8FF; color:blue}"
					+"a.cur {background:#E2EFFF; color:blue; font-weight:bold; font-size:11px}"
					+"a.high {height:18px; padding:0 1px; line-height:18px; border:1px dashed #C0DCFD; background:#E8F2FD; color:blue}"
					+"strong{color:blue}"
					+"</style>";
ComBox.globalJS = "<script type='text/javascript'>"
					+"window.onerror=function(){return true;};"						
					+"function selectItem(obj){"
					+"	var ifr=window.parent.document.getElementById(window.name);"
					+"	var txt = ifr.previousSibling.previousSibling;"
					+"	var t = obj.innerText;"
					+"	var v = obj.getAttribute('value');"
					+"	txt.value=obj.innerText;"
					+"	txt.previousSibling.value=obj.getAttribute('value');"
					+"	ifr.style.visibility='hidden'; "
					+"	setTimeout(function(){"
					+"		var arr=document.getElementById('list').getElementsByTagName('a');"
					+"		for(var i=0,j; j=arr[i];i++){"
					+"			j.innerHTML=j.innerText;"
					+"			j.className='';"
					+"		}"
					+"		obj.className='cur';"
					+"		var cfun = ifr.getAttribute('_bindFunction');"
					+"		if(typeof cfun=='function'){cfun(window.name);}"
					+"	},10);"
					+"}"
					+"<\/script>";
ComBox.prototype.write = function(){
	if(this.selectedIndex===undefined || this.selectedIndex<0){
		this.selectedIndex = this.readOnly?0:-1;
	}
	this.defaultText && (this.selectedIndex = this.textIndex[this.defaultText]);
	this.defaultValue && (this.selectedIndex = this.valueIndex[this.defaultValue]);	
	var iframeName = "_dropitem@"+parseInt(Math.random()*100000);
	ComBox.Queue[this.name||this.id] = iframeName;
	var w = parseInt(this.width);
	w || (w=140);
	var readonly = !this.readOnly?"":"onclick=ComBox.showMenu(this,'"+iframeName+"') readonly style='cursor:pointer;background-image:url(images/text-bg2.gif)'";
	var clickEvent = this.autoComplete?"onkeyup='ComBox.suggest(this)' onfocus='ComBox.showMenu(this.nextSibling,\""+iframeName+"\")'":"";
	document.write(this.cache.format(iframeName,w-23,w,readonly,clickEvent));
	
	var items = this.itemCache;
	var sIndex = this.selectedIndex;
	var nameid = this.name||this.id;
	var cfun = this.onchange;
	setTimeout(function(){
		if(cfun){			
			$(iframeName).setAttribute("_bindFunction",function(sid){cfun(ComBox.findInstance(sid))});
		}
		window.frames[iframeName].document.write(ComBox.globalCSS+ComBox.globalJS+items);
		setTimeout(function(){
			var list = window.frames[iframeName].document.getElementById("list");
			if(sIndex>=0){
				var arr = list.getElementsByTagName("a");
				arr[sIndex].className="cur";
				arr[sIndex].parentNode.parentNode.scrollTop = sIndex*18;
				var ipt = document.getElementById(iframeName).previousSibling.previousSibling;
				ipt.value = arr[sIndex].innerText;
				ipt.previousSibling.value = arr[sIndex].value;
			}
			setTimeout(function(){
				list.onscroll = function(){setTimeout(function(){document.getElementById(iframeName).previousSibling.previousSibling.focus();},10);}						
			},10);
		},50);
	},2);
}
ComBox.findInstance = function(nameid){
	if(nameid.substring(0,10)=="_dropitem@"){
		var arr = window.frames[nameid].document.getElementById("list").getElementsByTagName("a");
	}else{
		var arr = window.frames[ComBox.Queue[nameid]].document.getElementById("list").getElementsByTagName("a");
	}
	var cache = [];
	var num = -1;
	var text="";
	var value="";
	for(var i=0,j; j=arr[i]; i++){
		cache[i] = {text:j.innerText,value:j.value};
		if(j.className.indexOf("cur")>=0){
			num=i;
			text = j.innerText;
			value = j.value;
		}
	}
	var obj = {
		options:cache,
		selectedIndex:num,
		text:text,
		value:value,
		setValue:function(v){
			var s = true;
			var t = "";
			for(var i=0,j; j=arr[i]; i++){
				if(j.value==v && s){
					j.className="cur";
					t = j.innerText;
					s = false;
				}else{
					j.className="";
				}
			}
			var ipt = $(ComBox.Queue[nameid]).previousElement().previousElement();
			ipt.value = t;
			ipt.previousElement().value = v;
			return obj;
		},
		setText:function(v){
			var s = true;
			var t = "";
			for(var i=0,j; j=arr[i]; i++){
				if(j.innerText.toLowerCase()==v.toLowerCase() && s){
					j.className="cur";
					t = j.value;
					s = false;
				}else{
					j.className="";
				}
			}
			var ipt = $(ComBox.Queue[nameid]).previousElement().previousElement();
			ipt.value = v;
			ipt.previousElement().value = t;
			return obj;
		},
		select:function(n){
			for(var i=0,j; j=arr[i]; i++){
				j.className="";
			}
			arr[n].className="cur";
			var ipt = $(ComBox.Queue[nameid]).previousElement().previousElement();
			ipt.value = arr[n].innerText;
			ipt.previousElement().value = arr[n].value;
			return obj;
		},
		add:function(label,value){
			value || (value=label);
			var li = window.frames[ComBox.Queue[nameid]].document.createElement("li");
			li.innerHTML = "<a href='javascript:void(0)' title='"+label+"' value='"+value+"' onclick='selectItem(this)'>"+label+"</a>";
			window.frames[ComBox.Queue[nameid]].document.getElementById("list").appendChild(li);
			return obj;
		},
		addBefore:function(label,value,n){
			switch (arguments.length){
				case 0: return;
				case 1: value=label;n=0;break;
				case 2: n=0;break;					
			}
			var li = window.frames[ComBox.Queue[nameid]].document.createElement("li");
			li.innerHTML = "<a href='javascript:void(0)' title='"+label+"' value='"+value+"' onclick='selectItem(this)'>"+label+"</a>";
			window.frames[ComBox.Queue[nameid]].document.getElementById("list").insertBefore(li,window.frames[ComBox.Queue[nameid]].document.getElementById("list").getElementsByTagName("li")[n])
			return obj;
		},
		remove:function(n){
			var ul = window.frames[ComBox.Queue[nameid]].document.getElementById("list");
			ul.removeChild(ul.getElementsByTagName("li")[n]);
			return obj;
		},
		sort:function(fn){
			var arr = window.frames[ComBox.Queue[nameid]].document.getElementById("list").getElementsByTagName("a");
			var cache = {};
			var index = [];
			for(var i=0,j; j=arr[i]; i++){
				index[i] = j.innerText.toLowerCase()+"%@%&"+i;
				cache[index[i]] = j.innerText+"%@%&"+j.value;
			}
			fn?index.sort(fn):index.sort();
			var html = [];
			for(var i=0,j; j=index[i]; i++){
				var t = cache[j].split("%@%&");
				html[i] = "<li><a href='javascript:void(0)' onclick='selectItem(this)' title='"+t[0]+"' value='"+t[1]+"'>"+t[0]+"</a></li>";
			}
			window.frames[ComBox.Queue[nameid]].document.getElementById("list").innerHTML = html.join("");
			return obj;
		}

	}
	return obj;
}

ComBox.prototype.itemCache = null;
ComBox.hideMenu = function(btn,ifrname){
	var d = document.elementFromPoint(event.clientX,event.clientY);
	if(d.name==ifrname || d==btn || d==btn.previousSibling){return;}
	$(ifrname).style.visibility = "hidden";
}
ComBox.showMenu = function(btn,ifrname){
	$(ifrname).style.visibility = "visible";
}
ComBox.Queue = {};
ComBox.suggest = function(ipt){
	var arr = window.frames[ipt.getAttribute("ifrname")].document.getElementById("list").getElementsByTagName("a");
	var arrLen = arr.length;
	if(event.keyCode==40){
		for(var i=0,j; j=arr[i]; i++){
			if(j.className=="high"){
				if(i<arrLen-1){
					j.className="";
					arr[i+1].className="high";
				}
				break;
			}
		}	
		return;
	}else if(event.keyCode==38){
		for(var i=0,j; j=arr[i]; i++){
			if(j.className=="high"){
				if(i>0){
					j.className="";
					arr[i-1].className="high";
				}
				break;
			}
		}
		return;
	}else if(event.keyCode==13){
		for(var i=0,j; j=arr[i]; i++){
			if(j.className=="high"){
				j.fireEvent("onclick");
				break;
			}
		}
		return;
	}
	if(ipt.readOnly){
		var v = "abcdefghijklmnopqrstuvwxyz".split("")[event.keyCode-65];
	}else{
		var v = ipt.value.toLowerCase();
	}
	if(v===undefined)return;
	var len = v.length;
	var objCache = {};
	for(var i=0,j; j=arr[i]; i++){
		objCache[j.value] = j.innerText;
	}
	var html = [];
	var counter = 0;
	var t = 0;
	for(var key in objCache){
		if(objCache[key].substring(0,len).toLowerCase()==v){
			var c = "";
			if(counter==0){c = "class='high'"; counter = t;}
			if(ipt.readOnly){
				var txt = objCache[key];
			}else{
				var txt = '<strong>'+objCache[key].substring(0,len)+'</strong>'+objCache[key].substring(len);
			}
			html.push('<li><a href="javascript:void(0)" title='+objCache[key]+' onclick="selectItem(this)" value="'+key+'" '+c+'>'+txt+'</a></li>');
			window.frames[ipt.getAttribute("ifrname")].document.getElementById("list").scrollTop = counter*18;
		}else{
			html.push('<li><a href="javascript:void(0)"  title='+objCache[key]+' onclick="selectItem(this)" value="'+key+'">'+objCache[key]+'</a></li>');
		}
		t++;
	}
	window.frames[ipt.getAttribute("ifrname")].document.getElementById("list").innerHTML = html.join("");
}
}