/*FloatCpllision碰撞效果扩展
接受参数:无
返回类型:无

应用技术：
javascript

制作人：
黄若儒 Roy.Huang

注意:
1、全部采用静态/prototype写法，方便继承重载
2、该控件主要用于扩展Float.js对象的特效
3、通过IE\FireFox\Opera浏览器测试
4、必须存在Float.js和GetPosition.js包
*/

try{
	Float.prototype.group=null;//碰撞组
	
	Float.floats=new Array();//执行碰撞效果的所有Float对象
	Float.overlap=new Array();//重叠记录
	
	try{
		Float.getPosition=GetPosition;
	}
	catch(e){
		alert("安装Float碰撞效果，请按Float.js-GetPosition.js-FloatCollision.js的顺序加载包")
	}

	Float.doCollision=function(float){//执行碰撞检测
		for(var i=0;i<this.floats.length;i++){
			var _float=this.floats[i];
			if(float.group!=_float.group || float==_float.float)
				continue;
			var fA=float;
			var fB=_float.float;
			var tA=this.$(fA.target);
			var tB=this.$(fB.target);
			var pA=this.getPosition(tA);
			var pB=this.getPosition(tB);
			var inOverlap=false;
			overlap=Float.overlap;
			for(var j=0;j<overlap.length;j++){
				if((overlap[j].A==fA || overlap[j].B==fA) && (overlap[j].A==fB || overlap[j].B==fB)){
					inOverlap=true;
					break;
				}
			}
			if(pA.x+tA.offsetWidth>=pB.x && pA.x<=pB.x+tB.offsetWidth && pA.y+tA.offsetHeight>=pB.y && pA.y<=pB.y+tB.offsetHeight){
				if(!inOverlap){
					overlap.push({A:fA,B:fB});
					if(fA.LR.toUpperCase()==fB.LR.toUpperCase() && fA.UD.toUpperCase()==fB.UD.toUpperCase()){
						var q=null;
						var s=null;
						if(fA.frame/fA.speed>fB.frame/fB.speed){
							q=[fA,tA,pA];
							s=[fB,tB,pB];
						}
						else{
							q=[fB,tB,pB];
							s=[fA,tA,pA];
						}
						if((q[2].x>s[2].x && q[2].x<s[2].x+s[1].offsetWidth) || (q[2].x+q[1].offsetWidth>s[2].x && q[2].x+q[1].offsetWidth<s[2].x+s[1].offsetWidth))
							q[0].UD=(q[0].UD.toUpperCase()=="UP"?"DOWN":"UP");
						if((q[2].y>s[2].y && q[2].y<s[2].y+s[1].offsetHeight) || (q[2].y+q[1].offsetHeight>s[2].y && q[2].y+q[1].offsetHeight<s[2].y+s[1].offsetHeight))
							q[0].LR=(q[0].LR.toUpperCase()=="LEFT"?"RIGHT":"LEFT");
					}
					else{
						if((pA.x>pB.x && pA.x<pB.x+tB.offsetWidth) || (pA.x+tA.offsetWidth>pB.x && pA.x+tA.offsetWidth<pB.x+tB.offsetWidth)){
							fA.UD=(fA.UD.toUpperCase()=="UP"?"DOWN":"UP");
							fB.UD=(fB.UD.toUpperCase()=="UP"?"DOWN":"UP");
						}
						if((pA.y>pB.y && pA.y<pB.y+tB.offsetHeight) || (pA.y+tA.offsetHeight>pB.y && pA.y+tA.offsetHeight<pB.y+tB.offsetHeight)){
							fA.LR=(fA.LR.toUpperCase()=="LEFT"?"RIGHT":"LEFT");
							fB.LR=(fB.LR.toUpperCase()=="LEFT"?"RIGHT":"LEFT");
						}
					}
				}
			}
			else if(inOverlap){
				for(var j=0;j<overlap.length;j++){
					if((overlap[j].A==fA || overlap[j].B==fA) && (overlap[j].A==fB || overlap[j].B==fB)){
						overlap.splice(j,1);
						break;
					}
				}
			}
		}
	};
}
catch(e){
	alert("安装碰撞特效,请按Float.js-GetPosition.js-FloatCollision.js的顺序加载包")
}
