var utils={};
utils.common={
	setTimeout:function(fun, delay) { 
		if(typeof fun == 'function'){  
			var argu = Array.prototype.slice.call(arguments,2);  
			var f = (function(){ fun.apply(null, argu); });  
			return window.setTimeout(f, delay); 
		}
		return window.setTimeout(fun,delay);
	},
	setInterval:function(fun, delay) { 
		if(typeof fun == 'function'){  
			var argu = Array.prototype.slice.call(arguments,2);  
			var f = (function(){ fun.apply(null, argu); });  
			return window.setInterval(f, delay); 
		}
		return window.setInterval(fun,delay);
	}
};
utils.html={
	data:{},
	switchView:function(obj,view){
		var display=obj.style.display;
		if(!view){
			if(display=='none') display='';
			else display='none';
		}
		else{
			if(view) display='';
			else display='none';
		}
	},
	changeCls:function(obj,cls){
		if(obj.className!=''&&!obj._className){
			obj._className=obj.className;
		}
		if(cls) obj.className=cls;
		else if(obj._className) obj.className=obj._className;
	},
	swapImages:function(save){
		var arr=arguments;
		for(var i=1;i<arr.length;i=i+2){
			var obj=$(arr[i]);
			if(obj){
				if(save==1)obj._src=obj.src;
				obj.src=arr[i+1];
				if(save==2)obj._src=obj.src;
			}
		}
	},
	restoreImages:function(){
		var arr=arguments;
		for(var i=1;i<arr.length;i++){
			var obj=$(arr[i]);
			if(obj) obj.src=obj._src;
		}
	},
	changeStyle:function(obj,name,value){
		var name2='_'+name;
		if(obj.style[name]!=''&&!obj.style[name2]){
			obj.style[name2]=obj.style[name];
		}
		if(name){
			if(value) obj.style[name]=value;
			else if(obj.style[name2]) obj.style[name]=obj.style[name2];
		}
	},
	trim:function(str){
		return str.replace(/^[\s　]*|[\s　]*$/,'');
	},
	isInputText:function(obj){
		var name='value';
		var name2='_value';
		if(!obj[name2]) return false;
		else if(this.trim(obj[name])==obj[name2]) return false;
		return true;
	},
	cleanText:function(obj,state){
		var name='value';
		var name2='_value';
		if(state==1){
			if(!obj[name2]) obj[name2]=obj[name];
			if(obj[name]==obj[name2]) obj[name]='';
		}
		else if(state==0){
			if(this.trim(obj[name])=='') obj[name]=obj[name2];
		}
	},
	isEmpty:function(str){
		var re=/\S+/;
		if(re.test(str)) return false;
		else return true;
	},
	preloadImages:function (){
		var d=document;
		var data=this.data;
		if(d.images){
			if(!data.preImgList) data.preImgList=new Array();
			var j=data.preImgList.length;
			var preImgList=data.preImgList;
			for(var i=0;i<arguments.length;i++){
				preImgList[j]=new Image();
				preImgList[j++].src=arguments[i];
			}
		}
	},
	adjustPos:function(){
	}
}

var SearchTip=function(){
	this.initSearchTip.apply(this,arguments);
};
SearchTip.getInstance=function(id){
	return SearchTip.instances[id];
};
SearchTip.instances={};
SearchTip.count=0;
SearchTip.prototype={
	initSearchTip:function(inputObject,url,count,click){
		if(inputObject.getAttribute('_searchTip')) return;
		this.inputObject=inputObject;
		this.url=url;
		this.count=count;
		this.click=click;
		this.delay=1000;
		inputObject._searchTip=1;
		inputObject.autocomplete='off';
		this.id='searchTip'+SearchTip.count++;
		this.itemIdPre=this.id+'_item';
		SearchTip.instances[this.id]=this;
		
		var tip=document.createElement('div');
		tip.className='searchTip';
		style=tip.style;
		style.position='absolute';
		style.zIndex=2000;
		style.fontSize=12;
		style.border='1px solid #000';
		style.backgroundColor='#fff';
		style.display='none';
		tip.innerHTML='<div id="'+this.id+'_body" class="body"><div>中国</div><div class="over">中国移动</div></div><div class="close" onclick="SearchTip.getInstance(\''+this.id+'\').hidden()">关闭</div>';
		document.body.appendChild(tip);
		this.body=$(this.id+'_body');
		this.element=tip;
		this.setPos();
		
		this.currentKeyword='';
		this.keywordCache='';
		this.index='';
		this.list=null;
		this.length=0;
		this.dataHandler=null;
		this.initEvents();
	},
	initEvents:function(){
		var _this=this;
		this.inputObject.onkeyup=function(evt){_this.onchangeE(evt);return true;};
		this.inputObject.onmousedown=function(evt){evt=evt||window.event;evt.cancelBubble=true;};
		this.inputObject.onmouseup=function(evt){evt=evt||window.event;evt.cancelBubble=true;};
		this.body.onmouseover=function(evt){_this.overE(evt);return false;};
		this.body.onmousedown=function(evt){_this.clickE(evt);return false;};
		
		var keydownFun=function(evt){_this.keydown(evt);return true};
		if(document.all){
			//window.attachEvent('onkeydown',keydownFun);
			var oldFun=document.onkeydown;
			var newFun=keydownFun;
			if(oldFun)newFun=function(){keydownFun();oldFun();return true}
			document.onkeydown=newFun;
		}
		else{
			window.addEventListener('keydown',keydownFun,false);
		}
	},
	keydown:function(evt){
		if(this.isHidden()) return;
		evt=evt||window.event;
		var keyCode=evt.keyCode;
		switch(keyCode){
			case 38:
				this.up();
				break;
			case 40:
				this.down();
				break;
			default:
				break;
		}
		return true;
	},
	up:function(){
		var index=this.index;
		if(index==''||index=='0') index=this.length-1;
		else{
			index=parseInt(index);
			index--;
		}
		this.overIndex(index);
	},
	down:function(){
		var index=this.index;
		if(index==''||index==(this.length-1)+'') index=0;
		else{
			index=parseInt(index);
			index++;
		}
		this.overIndex(index);
	},
	overE:function(evt){
		evt=evt||window.event;
		var src=evt.srcElement||evt.target;
		this.over(src);
	},
	overIndex:function(index){
		var d=this.list[index];
		var itemObj=$(this.itemIdPre+index);
		this.inputObject.value=this.filterHtml(d.name);
		this.currentKeyword=this.trim(this.inputObject.value);
		this.over(itemObj);
	},
	over:function(elm){
		if(elm.className=='body') return;
		if(elm.tagName!='DIV') return;
		if(this.index)$(this.itemIdPre+this.index).className='';
		elm.className='over';
		this.index=elm.id.replace(this.itemIdPre,'');
	},
	clickE:function(evt){
		evt=evt||window.event;
		var src=evt.srcElement||evt.target;
		src=this.getItemObj(src);
		var index=parseInt(src.id.replace(this.itemIdPre,''));
		var d=this.list[index];
		if(this.click){
			this.click(d);
		}
		//this.inputObject.value=d.name;
		this.hidden();
	},
	getItemObj:function(obj){
		if(obj.parentNode==this.body)return obj;
		else{
			while(obj.parentNode!=this.body){
				obj=obj.parentNode;
			}
			return obj;
		}
	},
	show:function(){
		this.element.style.display='';
	},
	hidden:function(){
		this.element.style.display='none';
	},
	isHidden:function(){
		return this.element.style.display=='none';
	},
	onchangeE:function(evt){
		this.putKeyword();
		if(this.timer) return;
		if(this.keywordCache)this.startSearchTimer();
	},
	putKeyword:function(){
		var keyword=this.trim(this.inputObject.value);
		if(this.currentKeyword==keyword) return;
		this.currentKeyword=keyword;
		this.keywordCache=keyword;
	},

	startSearchTimer:function(){
		var _this=this;
		this.timer=setTimeout(function(){_this.search();},this.delay);
	},
	search:function(){
		var keyword=this.keywordCache;
		this.keywordCache=null;
		if(keyword==''){
			this.hidden();
			this.timer=null;
			return;
		}
		
		var url=this.url;
		if(url.indexOf('?')!=-1){
			url+='&keyword='+encodeURIComponent(keyword)+'&count='+this.count;
		}
		var _this=this;
		postData(url,'',function(value){_this.resultBack(value);});
	},
	resultBack:function(value){
		var list;
		try{
			list=eval(value);
		}
		catch(e){
		}
		list=list||[];
		this.list=list;
		this.length=list.length;
		if(list.length!=0){
			this.createList();
			this.show();
			this.index='';
		}
		else{
			this.hidden();
		}
		if(this.keywordCache!=null) this.startSearchTimer();
		else this.timer=null;
	},
	createList:function(){
		var list=this.list;
		if(this.dataHandler) this.dataHandler(list);
		var frag=document.createDocumentFragment();
		for(var i=0;i<list.length;i++){
			var item=document.createElement('div');
			item.id=this.itemIdPre+i;
			item.innerHTML=list[i].title;
			frag.appendChild(item);
		}
		this.body.innerHTML='';
		this.body.appendChild(frag);
	},
	setDataHandler:function(dataHandler){
		this.dataHandler=dataHandler;
	},
	setPos:function(){
		var pos=this.getPos();
		var style=this.element.style;
		style.left=pos.x+'px';
		style.top=pos.y+'px';
		var width=this.inputObject.offsetWidth-2;
		width=width>=0?width:0;
		style.width=width+'px';
	},
	getPos:function(){
		var inputObj=this.inputObject;
		var left=inputObj.offsetLeft,top=inputObj.offsetTop;
		var parent=inputObj;
		while(parent=parent.offsetParent){
			left+=parent.offsetLeft;
			top+=parent.offsetTop;
		}
		return {x:left,y:top+inputObj.offsetHeight}
	},
	trim:function(str){
		var re=/^\s*|\s*$/ig;
		return str.replace(re,'');
	},
	filterHtml:function(str){
		var re=/<.?.*?>/g;
		return str.replace(re,'');
	}
};

Object.extend = function(dest, source, replace) {
	for(prop in source) {
		if(replace == false && dest[prop] != null) continue;
		dest[prop] = source[prop];
	}
	return dest;
};


Object.extend(window, {
	$: function() {
		var elements = new Array();
		for(var i=0; i<arguments.length; i++) {
			var e = arguments[i];
			if(typeof e == 'string')
				e = document.getElementById(e);
			if (arguments.length == 1)
				return e;
			elements.push(e);
		}
		return elements;
	},
	Class: {
		create: function() {
			return function() {
				if(typeof this.initialize == "function")
					this.initialize.apply(this, arguments);
			}
		}
	}
}, false);

function PngHandler(){
	function fixPng(){
		var imgList=document.images;
		for(var i=0;i<imgList.length;i++){
			var img=imgList[i];
			var src=img.src;
			var w=img.width,h=img.height;
			if(reg_png.test(img.src)){
				img.src='images/blank.gif';
				//img.runtimeStyle.width=w+'px';
				//img.runtimeStyle.height=h+'px';
				img.runtimeStyle.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+src+'",sizingMethod="scale")';
			}
		}
	}
	var flag=/MSIE ((5\.5)|[6])/.test(navigator.userAgent);
	var reg_png=/.png/i;
	if(flag) window.attachEvent('onload',fixPng);
}
function LinkHandler(){
	function fixLink(){
		var linkList=document.links;
		for(var i=0;i<linkList.length;i++){
			linkList[i].onfocus=function(){this.blur()};
		}
	}
	if(document.all)window.attachEvent('onload',fixLink);
	else window.addEventListener('load',fixLink,false);
}