// JavaScript Document
////创建命名空间,约定：短划线开头的变量或函数视为私有，这样可以避免复杂的构造方法，并且容易阅读
Ext.namespace("fat");
Ext.namespace("fat.page");
Ext.namespace("fat.data");
Ext.BLANK_IMAGE_URL = "../ext/resources/images/default/s.gif"; 
//Ext.QuickTips.init(); 


//loading
fat.page.loading=function(text){
		if(typeof(text)=="undefined")
		{var text="正在加载...";}
		var tagID="fat_page_loading_div";
		var lo=document.getElementById(tagID);
		
		if(lo==null){//创建
			lo=document.createElement("div");
			lo.id=tagID;
			var bd=document.getElementsByTagName("body").item(0);
			bd.insertBefore(lo,bd.firstChild);
		}
		lo.innerHTML=text;
};

//关闭loading
fat.page.closeLoading=function(){
	var tagID="fat_page_loading_div";
	var lo=Ext.get(tagID);
	if(lo!=null)
		lo.remove();
};

//处理查询字符串
fat.page.querystring={
	all:function(){
		var url = window.document.URL;
		if(url.indexOf("?") > 0)
			return url.split("?")[1];
		else
			return "";
	},
	get:function(key){
		var qs=this.all();
		var final="";
		if(qs!=""){
			var arr1=qs.split("&");
			for(var i=0;i<arr1.length;i++){
				if(arr1[i].toLowerCase().indexOf(key.toLowerCase())==0){//找到
					if(final!="")//处理找到多个key值时将各个值之间用逗号连接起来
						final +=( "," +	arr1[i].split("=")[1]);
					else
						final+=arr1[i].split("=")[1];
				}
			}
			return final;
		}
		else
			return "";
	},
	getAllBut:function(key){
		var qsall="",qskey="";
		qsall=this.all();
		qskey=key + "=" + this.get(key);
		return (qsall.replace("&" + qskey,"")).replace(qskey,"");
	}
};

fat.page.highLight=function(obj,keywords,className,linkURL){
	//obj要高亮的容器，//keywords要高亮的词汇,多个关键词用之间用|分开,className为关键字设置的CSS class,linKURL要链接的URL，没有留空
	var re=new RegExp(keywords, 'g'); 
        for(var i=0; i<obj.childNodes.length; i++){     
            var node=obj.childNodes[i]; 
            var pnode=node.parentNode; 
            if(node.nodeType==1) {//节点为element
				fat.page.highLight(node,keywords,className,linkURL);//递归              
             }
			 else
			 	if(node.nodeType==3){//节点为文本
					if(node.data.search(re)==-1)//没有找到关键字
						continue; 
					else//找到关键字
					{
						var span=document.createElement('span');
						if(!(pnode.nodeName=='A')){ //文本节点不是在一个链接里
							if(linkURL!="")
								span.innerHTML=node.nodeValue.replace(re,"<a href=\"" + linkURL + "\"><span class=\"" + className + "\">" + keywords + "</span></a>");
							else
								span.innerHTML=node.nodeValue.replace(re,"<span class=\"" + className + "\">" +keywords + "</span>");
						}
						else
						{
							span.innerHTML=node.nodeValue.replace(re,"<span class=\"" + className + "\">" + keywords + "</span>");
						}
						pnode.replaceChild(span,node);
					}
            }
        } 
	
};


//处理透明效果
fat.page.opacity={
	opacityAttribute:"opacity",
	opacityBGAttribute:"bgopacity",
	create:function(){
		fat.page.loading("喧染:处理透明效果");
		this._transparent();
		this._transparentBG();
		//fat.page.closeLoading();
	},
	_transparent:function(){
		var doc=Ext.query("*[" + this.opacityAttribute + "]");
		for(var i=0;i<doc.length;i++){
			var o=Ext.get(doc[i]);
			var alpha=parseInt(o.dom.getAttribute(this.opacityAttribute))/100;
			o.setOpacity(alpha);//使之透明
			this._transparentBox(o.id,alpha);//如果设置了box属性，则使box生成的附加div也透明
		};
	},
	
	_transparentBG:function(){
		var doc=Ext.query("*[" + this.opacityBGAttribute + "]");
		for(var i=0;i<doc.length;i++){
			var o=Ext.get(doc[i]);
			var alpha=parseInt(o.dom.getAttribute(this.opacityBGAttribute))/100;
			var wp=fat.page.realWrap(o);//给元素创建一个外包的盒子
			var bgLayer=Ext.get(Ext.DomHelper.insertBefore(o,{tag:"div"}));//创建用于放置背景的背景层
			this._setLayer(wp,o,bgLayer);
			this._copybg(o,bgLayer);//把o的背景复制给
			bgLayer.setOpacity(alpha);//使之透明
			//alert(alpha);
			this._transparentBoxBG(o,alpha);//使Box也透明
		};
	},
	_transparentBox:function(boxid,alpha){
		var doc=Ext.query("*[boxto="+boxid+"]");//选出所有boxto属性等于boxid的元素，boxto属性在fat.page.box对象创建圆角时自动添加
		for(var i=0;i<doc.length;i++)
			Ext.fly(doc[i]).setOpacity(alpha);
	},
	
	_transparentBoxBG:function(o,alpha){
		var boxType=o.dom.getAttribute(fat.page.box.boxAttribute);
		//alert(boxType);
		switch(parseInt(boxType)){
			case 1://无处理
				break;
			case 2://因无边框直接处理成半透明
				this._transparentBox(o.id,alpha);
				break;
			case 3:
				var doc=Ext.query("*[boxto="+o.id+"]");
				for(var i=0;i<doc.length;i++){
					var box=Ext.get(doc[i]);
					//alert(i);
					if(box.dom.getAttribute("boxborder")!="true"){
						var wp=fat.page.realWrap(box,true);//给元素创建一个外包的盒子
						var bgLayer=Ext.get(Ext.DomHelper.insertBefore(box,{tag:"div"}));//创建用于放置背景的背景层
						this._setLayer(wp,box,bgLayer);
						this._copybg(box,bgLayer);//把o的背景复制给
						bgLayer.setOpacity(alpha);//使之透明
					}
					else
						fat.page.realWrap(box,true);
						//alert("hi");
				};
				break;
		};
	},
	
	_copybg:function(from,to){
		var bg='background-color:'+from.getStyle("background-color")+
			';background-image:'+from.getStyle("background-image")+
			';background-attachment:'+from.getStyle("background-attachment")+
			';background-repeat:'+from.getStyle("background-repeat")+
			';background-position:'+from.getStyle("background-position")+
			';background-position-x:'+from.getStyle("background-position-x")+
			';background-position-y:'+from.getStyle("background-position-y");
		to.addBackground(bg);//addBackground是一个重载的函数
		from.applyStyles("background:transparent;");
	},
	
	_setLayer:function(container,up,down){
		var w=up.getWidth();
		var h=up.getHeight();
		down.setWidth(w);
		down.setHeight(h);
		var ps=container.getStyle("position");
		//设置位置
		if(ps!="relative")
		{
			container.setStyle("position","relative");
		};
		up.setStyle("position","absolute");
		up.setStyle("top","0px");
		up.setStyle("left","0px");
	}
};

fat.page.box={
	boxAttribute:"box",
	create:function(){
		fat.page.loading("喧染:圆角矩形...");
		var doc=Ext.query("*[" + this.boxAttribute + "]");
		for(var i=0;i<doc.length;i++){
			var o=Ext.get(doc[i]);
			var boxType=o.dom.getAttribute(this.boxAttribute)
			
			fat.page.realWrap(o);
			switch(parseInt(boxType))
			{
				case 1:
					this.box1(o);//生成圆角矩形样式一：1像素圆角，内部可以使用渐变背景
					break;
				case 2:
					this.box2(o);//生成圆角矩形样式二：4像素圆角，无边框，内部只能使用填充色
					break;
				case 3:
					this.box3(o);//生成圆角矩形样式三：4像素圆角，有边框，内部只能使用填充色
					break;
				default:	//其他样式以后可以增加
					this.box1(o);
					break;
			};
		};
		//fat.page.closeLoading();
	},
	box1:function(o){
		var borderColor=this._getBorderColor(o);
		var bgColor=this._getBgColor(o);
		var width=o.getWidth()-2;

		var divStyle="display:block;clear:both;overflow:hidden;margin:0px 1px;height:1px;width:"+width+";background-color:"+borderColor+";";
		var div={tag:'div',style:divStyle};
		this._insert(o,div,true);
	},
	box2:function(o){
		var borderColor=this._getBorderColor(o);
		var bgColor=this._getBgColor(o);
		var width=o.getWidth();
		
		var div={tag:'div',style:this._getLineStyle(width-12,1,5,bgColor,bgColor,1)};
		this._insert(o,div);
		div={tag:'div',style:this._getLineStyle(width-10,1,3,bgColor,bgColor,2)};
		this._insert(o,div);
		div={tag:'div',style:this._getLineStyle(width-6,1,2,bgColor,bgColor,1)};
		this._insert(o,div);
		div={tag:'div',style:this._getLineStyle(width-4,2,1,bgColor,bgColor,1)};
		this._insert(o,div);
		o.setStyle("border-color",bgColor);
	},
	box3:function(o){
		var borderColor=this._getBorderColor(o);
		var bgColor=this._getBgColor(o);
		var width=o.getWidth();
		
		var div={tag:'div',style:this._getLineStyle(width-12,1,5,borderColor,borderColor,1)};
		this._insert(o,div,true);
		div={tag:'div',style:this._getLineStyle(width-10,1,3,bgColor,borderColor,2)};
		this._insert(o,div);
		div={tag:'div',style:this._getLineStyle(width-6,1,2,bgColor,borderColor,1)};
		this._insert(o,div);
		div={tag:'div',style:this._getLineStyle(width-4,2,1,bgColor,borderColor,1)};
		this._insert(o,div);
		
	},
	
	_getBorderColor:function(o){
		var color=o.getStyle("border-color");
		if(color=="")
			color=o.getStyle("border-left-color");
		return color;
	},
	_getBgColor:function(o){
		var color=o.getStyle("background-color");
		if(color=="")
			color=o.getStyle("background");
		return color;
	},
	_getDot:function(color,ps){
		var divStyle="position:absolute;margin:0px;height:1px;width:1px;overflow:hidden;background-color:"+color+";"+ps;
		return "<div style=\"" + divStyle + "\"></div>"
	},
	_getLineStyle:function(width,height,margin,bgColor,borderColor,borderWidth){
		if(width!="auto")
			width=width + "px";

		var divStyle="display:block;clear:both;padding:0px;overflow:hidden;margin:0px "+margin+"px;height:"+height+"px;width:"+width+";background-color:"+bgColor+";";
		return divStyle+this._getBorderStyle(borderColor,borderWidth);
	},
	_getBorderStyle:function(color,width){
		return "border-right-width: "+width+"px;border-left-width: "+width+"px;border-right-style: solid;border-left-style: solid;border-color:"+color+";"
	},
	_insert:function(o,div,isBoxBorder){
		
		var n=Ext.DomHelper.insertBefore(o,div);
		if(isBoxBorder==true)
			n.setAttribute("boxborder","true");
		//alert(isBoxBorder);
		n.setAttribute("boxto",o.id);
		n=Ext.DomHelper.insertAfter(o,div);
		if(isBoxBorder==true)
			n.setAttribute("boxborder","true");
		n.setAttribute("boxto",o.id);
	}
};

//给对象生成一个真正的包裹
fat.page.realWrap=function(o,isFix){
	var w=o.wrap();
	//复制基本样式
	var style="width:"+o.getWidth()+"px;"
		+"margin-top:"+o.getMargins("t")+ "px;margin-left:"+o.getMargins("l") + "px;"
		+"margin-right:"+o.getMargins("r") + "px;margin-bottom:"+o.getMargins("b") + "px;"
		+"clear:"+o.getStyle("clear")+";";
	if(isFix==true)
		style=style+"overflow:hidden;height:"+o.getHeight()+"px;"

	w.applyStyles(style);
	
	//复制浮动,因Ext无法改变float所以用外部class改变左右浮动
	var float=o.getStyle("float");
	if(float=="right")
		w.addClass("fat_right");
	else
		if(float=="left")	//开关：如果要更接近FF，则去掉本行前的//如果要更接近IE则保留本行前的//
			w.addClass("fat_left");
		//else
		//	w.addClass("fat_none");
	
	//改变源对像样式		
	style="margin:0px;float:none;clear:none;"
	
	o.applyStyles(style);
	
	//添加属性
	w.dom.setAttribute("wrapto",o.id);
	return w;
};

//insert是同步的，在它执行完之前不会执行其他代码。由insert引入的内容中的自定义属性会被应用,除了insert属性。
//insert会造成较大的页面显示延迟，所以要尽量少用，能用include完成的任务就不要使用insert
fat.page.insert=function(objID){
	var insertAttribute="insert";
	var doc;
	if(typeof(objID)!="undefined")
		doc=Ext.query("*[id="+objID+"]");
	else
		doc=Ext.query("*[" + insertAttribute + "]");
	
	try{
		for(var i=0;i<doc.length;i++){
			var URL=doc[i].getAttribute(insertAttribute);
			var conn = Ext.lib.Ajax.getConnectionObject().conn;
			conn.open("GET",URL,false);
			conn.send(null);
			doc[i].innerHTML+=conn.responseText;
		}
	}catch(e){};
};

//include是异步的，在它执行完之前就会执行其他代码，一般情况下使用此方法。由include方法引入的内容不会被应用任何自定义属性。
fat.page.include=function(objID){
	var includeAttribute="include";
	var doc;
	if(typeof(objID)!="undefined")
		doc=Ext.query("*[id="+objID+"]");
	else
		doc=Ext.query("*[" + includeAttribute + "]");
	try{
		for(var i=0;i<doc.length;i++){
			var URL=doc[i].getAttribute(includeAttribute);
			
			var o=Ext.get(doc[i]);
			var updater=o.getUpdater();
			updater.update({
				url:URL,
				text:"正在加载",
				timeout:1,
				method:"GET",
				scripts:true
			});
			updater.on("failure", function(el,r){
				el.dom.innerHTML="读取失败 <a href=\"javascript:fat.data.include('" + o.id+"');\">&nbsp;重试</a>";
			});
		};
	}catch(e){};
};


fat.data.loadServerData=function(serverURLs){
	for(var i=0;i<serverURLs.length;i++){
		fat.page.loading("加载服务器数据...");
		Ext.Ajax.request({
			url:serverURLs[i]+(serverURLs[i].indexOf('?') != -1 ? '&' : '?')+"timeMark="+(new Date().getTime()),//加时间戳,防止页面被缓存
			//url:serverURLs[i]+"#"+Now(),//不加时间戳
			success:function(response){
				try{
					eval(response.responseText);
				}catch(e){Ext.Msg.alert("错误","服务器没有正确返回结果，请与软件开发人员联系");};
			},
			failure:function(response){
				Ext.Msg.alert("在访问 " +  serverURLs[i] + " 时失败",response.responseText);
				fat.page.closeLoading();
			},
			callback:fat.data._oncallbackExecute
		});
	}
	
};

fat.data._oncallbackExecute=function(){
	try{
		if(serverData.serverStatus.status!="OK"){
			Ext.Msg.alert("失败",serverData.serverStatus.message);
			fat.page.closeLoading();
		}
		else
		{
			fat.data.serverCommand();
			fat.data.mapping();
			fat.data.onComplete();
			fat.page.closeLoading();
		}
	}catch(e){alert("服务器返回错误")};
};

fat.data.serverCommand=function(){
	try{
		if(serverData.serverCommand!="")
			eval(serverData.serverCommand);
	}catch(e){};
};
fat.data.onComplete=function(){
	try{
		if(serverData.onComplete!="")
			eval(serverData.onComplete);
		//alert(serverData.onComplete);
	}catch(e){};
};
fat.data.mapping=function(){
	var mappingAttribute="mapping";
	fat.page.loading("映射服务器数据...");
	try{
		var doc=Ext.query("*[" + mappingAttribute + "]");
		for(var i=0;i<doc.length;i++){
			var mappingValue=doc[i].getAttribute(mappingAttribute);
			//fat.page.loading("加载:"+mappingValue);
			doc[i].innerHTML=serverData.mappingData[mappingValue];
		};
	}catch(e){};
	//fat.page.closeLoading();
};


fat.ad={};
fat.ad.floadAD={
	delay:30,
	adObj:{},
	bodyOffset:0,
	xStep:1,
	yStep:1,
	x:0,
	y:0,

	changePos:function(img){
		this.x+=this.xStep;
		this.y+=this.yStep;
		img.dom.style.left = this.x;
		img.dom.style.top=this.y;
		if(this.x>(document.body.clientWidth+this.bodyOffset-img.getWidth()-20) || this.x<(0-this.bodyOffset))
			this.xStep*=-1;
		if(this.y>(document.body.clientHeight-img.getHeight()) || this.y<0)
			this.yStep*=-1;
	},
	open:function(obj){
		this.adObj=obj;
		this.adObj.dom.style.position="absolute";
		this.adObj.dom.style.zindex=65535;
		this.bodyOffset=(window.screen.width - document.body.clientWidth)/2;
		this.x-= this.bodyOffset;
		this.adObj.dom.style.top = this.y;
		this.adObj.dom.style.left=this.x;
		var interval = setInterval('fat.ad.floadAD.changePos(fat.ad.floadAD.adObj)', this.delay); 
	}
	//moveImg(); 
};
