var __jsFloatbox=1;
var _currentX=0;
var _currentY=0;
var _floatBoxTimer;
var __fbDebug=0;
var __fbIntervalDuration=10000;
var eventOnCancelTimer;

var _boxedObjRegister;
initBoxRegister();

floatbox_init();
initMouseEvents();

function floatbox_init() {
	isIE=(navigator.appName.toLowerCase().indexOf("microsoft")>-1);	
}

function initMouseEvents() {
	if (!isIE) {
		window.captureEvents(Event.MOUSEMOVE);
		window.onmousemove=updatePosition;
	} else {
		document.onmousemove=updateIEPosition;
	}
}

// for IE only
function updateIEPosition(e) {
	_currentX=window.event.screenX;
	_currentY=window.event.screenY;	
}

// for non-IE
// IE use window.event directly
function updatePosition(e) {
	_currentX=e.pageX;
	_currentY=e.pageY;	
}

function hideReadyBox(ctrl_id) {
	if (ctrl_id==null) { return; }
	if (ctrl_id.length <=0) { return ; }
	
	var _obj=document.getElementById(ctrl_id);
	if (_obj ==null) { return ; }

	if (isIE) {
		_obj.style.visibility='hidden';
	}
	else
	{
		_obj.style.visibility='hidden';
	}
}

function showReadyBox(ctrl_id) {
	if (ctrl_id==null) { return; }
	if (ctrl_id.length <=0) { return ; }
	
	var _obj=document.getElementById(ctrl_id);
	if (_obj ==null) { return ; }

	if (isIE) {
		_obj.style.left=_currentX- 50;
		_obj.style.top=_currentY -50;
		_obj.style.visibility='';		
	}else {
		_obj.style.left=_currentX+"px";
		_obj.style.top=(_currentY+25)+"px";
		_obj.style.visibility='visible';
	}	
}

function initBoxRegister() {
	if (_boxedObjRegister==null) {
		_boxedObjRegister=new Object();
		_boxedObjRegister.idList=new Array();
		_boxedObjRegister.currentId='';
	}
}

function registerBoxObject() {
	initBoxRegister();
	
	if (arguments.length < 1) { return ; }
	
	if (__fbDebug==1) {
		var _status='';
		for (i=0;i<arguments.length;i++) {
			_status=_status+", " +registerBoxObject.arguments[i];
		}
		__fbTrace("registerBoxObject: "+_status);		
	}
	
	for (i=0;i<arguments.length;i++) {	
		var ctrl_id=registerBoxObject.arguments[i];
		if ((ctrl_id!=null) && (ctrl_id.length > 0)){
			if (registeredBoxObjIndex(ctrl_id) < 0) {
				_boxedObjRegister.idList.push(ctrl_id);
			}
		}
	}
	
	if (__fbDebug==1) {
		__fbTrace("_boxedObjRegister: "+_boxedObjRegister.idList);
	}
}

function setCurrentBoxObject(ctrl_id) {
	initBoxRegister();
	
	if (_boxedObjRegister==null) { return ;}
	
	if (__fbDebug==1) {
		__fbTrace("setCurrentBoxObject: " +ctrl_id);		
	}
	
	_boxedObjRegister.currentId=ctrl_id;		
}

function registeredBoxObjIndex(ctrl_id) {
	
	initBoxRegister();
	if (_boxedObjRegister==null) { return -1;}
	
	for (i=0;i<_boxedObjRegister.idList.length;i++) {
		if (_boxedObjRegister.idList[i]==ctrl_id) {
			return i;
		}
	}
	
	return -1;	
}

function showBoxCancel() {	
	clearInterval(_floatBoxTimer);
		
	if ((typeof eventOnCancelTimer)=="function") {
		eventOnCancelTimer();
	}
		
	if (__fbDebug==1) {		
		var _timestamp=new Date();
		//__fbTrace(eventOnCancelTimer);
		__fbTrace('showBoxCancel: ' + _timestamp.getHours().toString() +":"+_timestamp.getMinutes().toString()+":"+_timestamp.getSeconds().toString());
	}
}

function runBoxHitTest(target) {
	initBoxRegister();
	
	var _idx = registeredBoxObjIndex(_boxedObjRegister.currentId);
	
	if (_idx < 0 ) {
		__fbAlert("runBoxHitTest: "+target);
	}
	
	if (__fbDebug==1) {
		__fbTrace('runBoxHitTest: '+_boxedObjRegister.currentId+", " +_idx);
	}	
	
	if (_idx < 0) {
		var _obj=document.getElementById(target);
		if (_obj!=null) {	
			_obj.style.visibility='hidden';
		}
		showBoxCancel();
	}
}

function showBox(sender,ctrl_id,offsetX,offsetY) {
	var _obj=document.getElementById(ctrl_id);
	if (_obj==null) { return; }
	
	var _orgX = toInteger(sender.style.left);
	var _orgY= toInteger(sender.style.right);
	
	if (__jsDefault==0) { return ; }
	
	//_obj.style.left=(_orgX+offsetX).toString()+'px';
	//_obj.style.top=(_orgY+offsetY).toString()+'px';
	
	if (__fbDebug==1) {
		__fbTrace("showBox: pos: " +_orgX+", " + _orgY);
	}
	
	_obj.style.visibility='';

	clearInterval(_floatBoxTimer);
	_floatBoxTimer = setInterval("runBoxHitTest('"+ctrl_id+"')",__fbIntervalDuration);	
}

function __fbTrace(msg) {
	if (__fbDebug!=1) { return ; }
	if (isIE) {
		window.status=msg;
	} else {
		var _title=document.documentElement.getElementsByTagName('title').item(0);
		if (_title==null) { return ;}
		_title.text=msg;
	}
}

function __fbAlert(msg) {
	if (__fbDebug != 1) { return ; }
	alert(msg);
}

function parseMenuHtml(target_id,parseText_id) {		
	var _menuHolder=document.getElementById(target_id);
	var _textHolder=document.getElementById(parseText_id);
	
	if (_menuHolder==null) { return ; }
	if (_textHolder==null) { return ; }
	
	if (_menuHolder.innerHTML=='undefined') { return ; }
	if (_textHolder.value=='undefined') { return ; }
		
	clearMenuHtml(target_id);
	
	_menuHolder.innerHTML=_textHolder.value;
	
	clearInterval(_floatBoxTimer);
	_floatBoxTimer = setInterval("runTextHitTest('"+target_id+"')",__fbIntervalDuration);	
}

function runTextHitTest(target) {	
	initBoxRegister();
	
	var _idx = registeredBoxObjIndex(_boxedObjRegister.currentId);
	if (_idx < 0) {
		__fbTrace("runTextHitTest: "+_boxedObjRegister.currentId+", "+_idx.toString());
	}
	
	if (_idx < 0) {
		showBoxCancel();
		clearMenuHtml(target);		
	}
}

function clearMenuHtml(target_id) {
	var _obj = document.getElementById(target_id);
	
	if (_obj==null) { return ; }
	
	if (_obj.innerHTML==null) { return ; }
	
	_obj.innerHTML="";
}