
function GunManager(){
	
	var isIE;
	var swfTopY;
	var swfBtmY;
	
	var target_array;
	var target2_array;
	var gunCount;
	
	var downSpeed;
	var maxSpeed;
	
	this.constructor = function(){
	}
	
	this.initialize = function(){		
		this.gunCount = 0;
		if(this.target_array != undefined){
			var array = this.target_array;
			for(var i = 0;i < array.length; i++){
				var tmpImage_jqo = array[i];
				clearTimeout(tmpImage_jqo.ID);
				tmpImage_jqo.removeClass(nbp_relativeClassName);
				tmpImage_jqo.css('top',0);
				tmpImage_jqo.css('left',0);
			}
		}
		if(this.target2_array != undefined){
			var array = this.target2_array;
			for(var i = 0;i < array.length; i++){
				var tmp2_jqo = array[i];
				tmp2_jqo.css('overflow','hidden');
			}
		}
		if(this.body_jqo != undefined){
			if(this.isIE){
				this.body_jqo.css("left",0);
				this.body_jqo.css("top",0);
				this.body_jqo.removeClass(nbp_relativeClassName);
			}else{
				this.body_jqo.css("margin-left",0);
				this.body_jqo.css("margin-top",0);	
			}
		}
	}
	
	this.run = function(){
		
		this.body_jqo = j$(document.body);
		
		this.isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
		if(this.isIE){
			downSpeed = 6;
			maxSpeed  = 20;
			this.body_jqo.addClass(nbp_relativeClassName);
		}else{
			downSpeed = 10;
			maxSpeed  = 40;
		}
		
		this.gunCount = 0;
		this.pageHeight = this.getPageSize().H;
		this.pageWidth  = this.getPageSize().W;
		
		this.swfTopY = nbp_scrollY;
		this.swfBtmY = this.swfTopY + this.pageHeight;
		
		this.findTarget();
		this.setStyle();
		nbp_overSwf.run();
	}
	
	this.findTarget = function(){	
		
		this.target_array = new Array();
		this.target2_array = new Array();
		var owner = this;
		
		//header
		var tmpHEAD_jqo = j$("#head");
		tmpHEAD_jqo.each(function(){
			var tmpHEAD_jqo = j$(this);
			var tmpHeight = tmpHEAD_jqo.height();
			var offset = tmpHEAD_jqo.offset();
			if(offset.top + tmpHeight > owner.swfTopY && offset.top < owner.swfBtmY){
				tmpHEAD_jqo.offsetX = offset.left;
				tmpHEAD_jqo.offsetY = offset.top;
				owner.target_array.push(tmpHEAD_jqo);
			}
		});
		
		//div
		var tmpDiv_jqo = j$("div").not("#" + nbp_mainDivId).not("#" + nbp_overDivId).not("#head");
		tmpDiv_jqo.each(function(){
			var targetDiv_jqo = j$(this);
			if(targetDiv_jqo.find("div").length == 0){
				//if(targetDiv_jqo.find("h2").length == 0){
					if(targetDiv_jqo.find("dt").length == 0){
						if(targetDiv_jqo.find("ul").length == 0){
							if(targetDiv_jqo.find("img").length == 0){
								var tmpHeight = targetDiv_jqo.height();
								var offset = targetDiv_jqo.offset();
								if(offset.top + tmpHeight > owner.swfTopY && offset.top < owner.swfBtmY){
									targetDiv_jqo.offsetX = offset.left;
									targetDiv_jqo.offsetY = offset.top;
									owner.target_array.push(targetDiv_jqo);
								}
							}
						}
					}
				//}
			}else{
				var overflow = targetDiv_jqo.css('overflow');
				if(overflow == "hidden"){
					owner.target2_array.push(targetDiv_jqo);
					targetDiv_jqo.css('overflow','visible');
				}
			}
		});
		
		//img
		var tmpImg_jqo = j$("img");
		tmpImg_jqo.each(function(){
			var targetImg_jqo = j$(this);
			var tmpHeight = targetImg_jqo.height();
			var offset = targetImg_jqo.offset();
			if(offset.top + tmpHeight > owner.swfTopY && offset.top < owner.swfBtmY){
				targetImg_jqo.offsetX = offset.left;
				targetImg_jqo.offsetY = offset.top;
				owner.target_array.push(targetImg_jqo);
			}
		});
		
		if(this.target_array.length < 40)
		{			
			//h2
			var tmpH2_jqo = j$("h2");
			tmpH2_jqo.each(function(){
				var tmpH2_jqo = j$(this);
				if(tmpH2_jqo.find("div").length == 0){
					if(tmpH2_jqo.find("dt").length == 0){
						if(tmpH2_jqo.find("ul").length == 0){
							if(tmpH2_jqo.find("img").length == 0){
								var offset = tmpH2_jqo.offset();
								if(offset.top > owner.swfTopY && offset.top < owner.swfBtmY){
									tmpH2_jqo.offsetX = offset.left;
									tmpH2_jqo.offsetY = offset.top;
									owner.target_array.push(tmpH2_jqo);
								}
							}
						}
					}
				}		
			});
		}
		
		if(this.target_array.length < 40)
		{			
			//dt
			var tmpDT_jqo = j$("dt");
			tmpDT_jqo.each(function(){
				var tmpDT_jqo = j$(this);
				if(tmpDT_jqo.find("div").length == 0){
					if(tmpDT_jqo.find("h2").length == 0){
						if(tmpDT_jqo.find("ul").length == 0){
							if(tmpDT_jqo.find("img").length == 0){
								var offset = tmpDT_jqo.offset();
								if(offset.top > owner.swfTopY && offset.top < owner.swfBtmY){
									tmpDT_jqo.offsetX = offset.left;
									tmpDT_jqo.offsetY = offset.top;
									owner.target_array.push(tmpDT_jqo);
								}
							}
						}
					}
				}		
			});
		}
		
		if(this.target_array.length < 40)
		{			
			//ul
			var tmpUl_jqo = j$("ul");
			tmpUl_jqo.each(function(){
				var tmpUl_jqo = j$(this);
				if(tmpUl_jqo.find("h2").length == 0){
					if(tmpUl_jqo.find("img").length == 0){
						var offset = tmpUl_jqo.offset();
						if(offset.top > owner.swfTopY && offset.top < owner.swfBtmY){
							tmpUl_jqo.offsetX = offset.left;
							tmpUl_jqo.offsetY = offset.top;
							owner.target_array.push(tmpUl_jqo);
						}
					}
				}
			});
			
		}
	}
	
	this.setStyle = function(){
		var array = this.target_array;
		for(var i = 0;i < array.length; i++){
			var tmp_jqo = array[i];
			tmp_jqo.posX = 0;
			tmp_jqo.posY = 0;
			tmp_jqo.addClass(nbp_relativeClassName);
		}
	}
	
	this.moveGunHit = function(holeID){		
		if(holeID == 2){
			var array = this.target_array;
			for(var i = 0;i < array.length; i++){
				var tmpImage_jqo = array[i];
				this.moveRandom(tmpImage_jqo);
			}
		}
		this.moveBody(holeID);
	}
	
	this.moveRandom = function(_obj){
		var obj = _obj;
		obj.posX = obj.posX + Math.round(this.getOffset()*40);
		obj.posY = obj.posY + Math.round(this.getOffset()*40);
		obj.css("left",obj.posX);
		obj.css("top",obj.posY);
	}
	
	this.moveBody = function(holeID){
		
		var obj = this.body_jqo;
		
		if(holeID == 8){
			var targetX = 0;
			var targetY = 0;
		}else{
			var targetX = Math.round(this.getOffset()*50);
			var targetY = Math.round(this.getOffset()*50);
		}
		
		if(this.isIE){
			obj.css("left",targetX);
			obj.css("top",targetY);
		}else{
			obj.css("padding-left",targetX);
			obj.css("padding-top",targetY);
		}
	}
	
	this.lastMove = function(){
		var array = this.target_array;
		for(var i = 0;i < array.length; i++){
			var tmpImage_jqo = array[i];
			var delay = Math.round(Math.random()*2500);
			this.wait(tmpImage_jqo,delay,true);
			
		}	
	}
	
	this.wait = function(_obj,delay,flg){		
		var obj = _obj;
		if(flg){
			var self = this;
			obj.ID = setTimeout(function(){self.wait(obj,0,false)},delay);
		}else{
			clearTimeout(obj.ID);
			obj.maxCount = Math.random() < 0.5 ? 2:4;
			obj.left = obj.offset().left - obj.offsetX;
			this.swing(obj,0);
		}
	}
	
	this.swing = function(obj,count){
		var posX = obj.left + this.getOffset()*2;
		obj.css('left',posX);
		
		if(count >= obj.maxCount){
			clearTimeout(obj.ID);
			var self = this;
			var targetY  = this.pageHeight - 10 - obj.offsetY + this.swfTopY;
			obj.ID = setTimeout(function(){self.moveDown(obj,0,targetY)},400);
		}else{
			count++;
			var self = this;
			obj.ID = setTimeout(function(){self.swing(obj,count)},50);
		}
		
	}
	
	this.moveDown = function(_obj,_dy,_targetY){
		var obj     = _obj;
		var dy      = _dy;
		var targetY = _targetY;
		
		dy += downSpeed;
		if(dy > maxSpeed) dy = maxSpeed;
		
		obj.posY = obj.posY + dy;
		
		obj.css('top',obj.posY);
		
		if(obj.posY < targetY){
			var self = this;
			obj.ID = setTimeout(function(){self.moveDown(obj,dy,targetY)},30);
		}else{
			clearTimeout(obj.ID);
		}
	}
	
	this.getOffset = function(){
		return 1-Math.random()*2;
	}
	
	this.getPageSize=function(){
		var obj = new Object();
		var de = document.documentElement;
		obj.W = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
		obj.H = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; 
		return obj;
	}
	
	this.toString = function(){
		return "GunManager";
	}
	
	this.constructor();
	
}
