
if(!document.all){
	document.captureEvents(Event.MOUSEMOVE);
}

function effect_marq(target_id, items_id, tableWidth, dataTransFormTimerNum, pageSize){
	var _effect_marq = this;
	this.target = document.createElement('div');this.target.id = target_id;document.body.appendChild(this.target);
	this.items = document.getElementById(items_id).getElementsByTagName('div');
	this.has_opened_child = false;
	this.slider_inter_x = null;
	this.slider_inter_y = null;
	this.tempInter = null;
	this.tempInter2 = null;
	this.marqInter = null;
	this.canclosing = false;
	this.timer_num = dataTransFormTimerNum;
	this.pager_size = pageSize;
	this.start = 0;
	this.exWidth = 0;
	this.exHeight = 0;
	this.tableMaxWidth = tableWidth;
	
	this.target.onmouseover=function(){
		_effect_marq.canclosing = false;
	};
	this.target.onmouseout=function(event){
		_effect_marq.close(30, event, this);
	};
}

effect_marq.prototype.run =
	function(table_id, table_css){
		var _effect_marq = this;
		var _temp_fun = 
			function(){
				if(_effect_marq.start < _effect_marq.items.length){
					var resultString = new String('<table id="'+table_id+'_'+_effect_marq.target.id+'_table" class="'+table_css+'">');
					var tempi=0;
					for(var i=_effect_marq.start;i<_effect_marq.start+_effect_marq.pager_size;i++){
						if(i >= _effect_marq.items.length) break;
						var titleTag = _effect_marq.items[i].getElementsByTagName('span')[0];
						if(titleTag==undefined){
							continue;
						}
						if(tempi % 2 == 0) resultString += '<tr>';

						resultString += '<td id="td_'+i+'_'+table_id+'_'+_effect_marq.target.id+'" class="'+titleTag.className+'">' + titleTag.innerHTML + '</td>';

						if((tempi+1) % 2 == 0) resultString += '</tr>';
						
						tempi++;
					}
					$('#'+table_id).html(resultString + '</table>');
					
					document.getElementById(table_id+'_'+_effect_marq.target.id+'_table').onmouseout = function(event){
						_effect_marq.close(30, event, this);
					};
					
					$('#'+table_id+'_'+_effect_marq.target.id+'_table tr td').mouseover(function(event) {
						_effect_marq.open(Number($(this).attr('id').split('_')[1]), event, this);
					});
					
					$('#'+table_id+'_'+_effect_marq.target.id+'_table tr td').mouseout(function(event) {
						_effect_marq.close(30, event, this)
					});
					
					_effect_marq.start += _effect_marq.pager_size;
				}else _effect_marq.start = 0;
			};
		
		_temp_fun();
		this.marqInter = setInterval(_temp_fun, _effect_marq.timer_num);
	};
	
effect_marq.prototype.open = 
	function(itemNum, event, currentTargetFromOutlet){
		var currentTarget;
		var relatedTarget;
		var targetx;
		var isopening= false;
	
		if(!event){
			isopening = true;
		}else{
			if(document.all){
				currentTarget = currentTargetFromOutlet;
				relatedTarget = event.fromElement;
				targetx = event.toElement;
				isopening = currentTarget==targetx;
				// || (checkRelatedObject(currentTarget, relatedTarget)
			}else{
				currentTarget = event.currentTarget;
				relatedTarget = event.relatedTarget;
				targetx = event.target;
				isopening = targetx==currentTarget && (relatedTarget==currentTarget || !checkRelatedObject(currentTarget, relatedTarget));
			}
		}
		if(!this.slider_inter_x && !this.slider_inter_y && !this.tempInter && isopening){
			var contentTag = this.items[itemNum].getElementsByTagName('div')[0];
			var tempHeight;
			
			this.target.style.height = '';
			
			$('#'+this.target.id).html(contentTag.innerHTML);
			
			this.target.style.visibility = 'hidden';
			this.target.style.display = 'block';
			this.target.style.height = this.target.offsetHeight;
			tempHeight = this.target.style.height.split('px')[0];
			this.target.style.display = 'none';
			this.target.style.visibility = 'visible';
			
			this.show(this.tableMaxWidth,Number(tempHeight),10, event);
		}
	};

effect_marq.prototype.show = 
	function(width, height, inter_time, event){
		var _effect_marq = this;
		var offsetWidth;
		var offsetTop, offsetLeft;
		
		this.canclosing = false;
		
		if(document.all){
			offsetTop = getOffsetTop(event.toElement);
			offsetLeft = getOffsetLeft(event.toElement);
			offsetWidth = event.toElement.offsetWidth;
		}else{
			offsetTop = getOffsetTop(event.target);
			offsetLeft = getOffsetLeft(event.target);
			offsetWidth = event.target.offsetWidth;
		}
		
		_effect_marq.target.style.top = (offsetTop + 5) + 'px';
		_effect_marq.target.style.left = (offsetLeft + offsetWidth) + 'px';
		_effect_marq.target.style.display = "block";
		
		if(!_effect_marq.has_opened_child){
			
			_effect_marq.has_opened_child = true;
			
			_effect_marq.target.style.width = "1px";
			_effect_marq.target.style.height = "1px";
			
			this.exWidth = width;
			this.exHeight = height;
			
			_effect_marq.slider_inter_x = setInterval(
				function(){
					var cx = parseInt(_effect_marq.target.style.width);
					var cy = parseInt(_effect_marq.target.style.height);
					if(cx < width && cy < height){
						_effect_marq.target.style.width = (cx + Math.ceil((width-cx)/6)) +"px";
						_effect_marq.target.style.height = (cy + Math.ceil((height-cy)/6)) +"px";
					}else{
						clearInterval(_effect_marq.slider_inter_x);
						clearInterval(_effect_marq.slider_inter_y);
						clearInterval(_effect_marq.tempInter);
						clearInterval(_effect_marq.tempInter2);
						_effect_marq.slider_inter_x = null;
						if(_effect_marq.canclosing) _effect_marq.close(30);
					}
				},inter_time
			);
		}
	};

effect_marq.prototype.close = function(inter_time, event, currentTargetFromOutlet){
	var names = new String();
	var currentTarget;
	var relatedTarget;
	var targetx;
	var isclosing= false;

	if(!event){
		isclosing = true;
	}else{
		if(document.all){
			currentTarget = currentTargetFromOutlet;
			relatedTarget = event.fromElement;
			targetx = event.toElement;
			isclosing = (relatedTarget==currentTarget && !checkRelatedObject(currentTarget, targetx));
		}else{
			currentTarget = event.currentTarget;
			relatedTarget = event.relatedTarget;
			targetx = event.target;
			isclosing = targetx==currentTarget && (relatedTarget==currentTarget || !checkRelatedObject(currentTarget, relatedTarget));
		}
	}
	
	var _effect_marq = this;
	if(isclosing){
		_effect_marq.canclosing = true;
		if(!_effect_marq.slider_inter_y && !_effect_marq.slider_inter_x && !_effect_marq.tempInter){
			clearInterval(_effect_marq.tempInter2);
			this.tempInter2 = setInterval(function(){
				if(_effect_marq.canclosing){
					_effect_marq.has_opened_child = false;
					if(_effect_marq.target.style.display == "block"){
						_effect_marq.target.style.height = (Number(_effect_marq.target.style.height.split('px')[0]) + 3) +"px";
						_effect_marq.target.style.width = (Number(_effect_marq.target.style.width.split('px')[0]) + 3) +"px";
						_effect_marq.tempInter = setInterval(function(){
							_effect_marq.slider_inter_y = setInterval(
								function(){
									var cy = parseInt(_effect_marq.target.style.height);
									var cx = parseInt(_effect_marq.target.style.width);
									if(cy > 1 && cx > 1){
										_effect_marq.target.style.height = (cy - Math.ceil(cy/6)) +"px";
										_effect_marq.target.style.width = (cx - Math.ceil(cx/6)) +"px";
									}else{
										clearInterval(_effect_marq.slider_inter_x);
										clearInterval(_effect_marq.slider_inter_y);
										clearInterval(_effect_marq.tempInter);
										_effect_marq.slider_inter_y = null;
										_effect_marq.target.style.display = "none";
									}
								},inter_time
							);
							
							clearInterval(_effect_marq.tempInter);
							_effect_marq.tempInter = null;
						}, 200);
					}
				}
				clearInterval(_effect_marq.tempInter2);
			}, 500);
		}
	}
};

function checkRelatedObject(target, checkedTarget){
	return (target==checkedTarget)?true:runTreeObject(target, checkedTarget);
}

function runTreeObject(object, checkedTarget){
	for(var i=0;i<object.childNodes.length;i++){
		if(object.childNodes[i].hasChildNodes()){
			if(object.childNodes[i]==checkedTarget) return true;
			if(arguments.callee(object.childNodes[i], checkedTarget)) return true;
		}else{
			if(object.childNodes[i]==checkedTarget) return true;
		}
	}
	return false;
}

function getOffsetLeft(offsetParent) {
	var x = 0;
	while(offsetParent!=null && offsetParent.tagName.toUpperCase()!="BODY") {
		x+=offsetParent.offsetLeft;
		offsetParent=offsetParent.offsetParent;
	}
	return x;
}

function getOffsetTop(offsetParent) {
	var y = 0;
	while(offsetParent!=null && offsetParent.tagName.toUpperCase()!="BODY") {
		y+=offsetParent.offsetTop;
		offsetParent=offsetParent.offsetParent;
	}
	return y;
}

