var hideFPEPopUpTimeouts = new Array();

var FPEelements = new Array();

var smilAnimations = new Array();

var visibleFPE = new Array();

function initFPE(eleid, pageid, moduleid, moduleclass, property, childtype, childid, moduleOptions) {

	var ele = document.getElementById(eleid);

	if(ele) {
		bb.importHTML(ele, null, true, bb.document.getElementById('fpe'));
	
		ele = bb.document.getElementById(eleid);
		
		if(!ele) {
			alert('Cannot find element by id ' + eleid);
		}
	
		var FPEelement 			= new Object();
		FPEelement.pageid 		= pageid;
		FPEelement.moduleid 	= moduleid;
		FPEelement.moduleclass 	= moduleclass;
		FPEelement.property 	= property;
		FPEelement.childtype 	= childtype;
		FPEelement.childid 		= childid;
		FPEelement.options		= moduleOptions;
		FPEelements[eleid] 		= FPEelement;
	
		ele.viewNode.style.width = '100%';
		ele.viewNode.style.border = '1px dashed #BFBFBF';
	
		bb.command.load('/fpe/popup/id/'+ele.getAttribute('id'), 'GET', '', null, ele, 'appendChild');
	}
}

function isFPEElement(fpeId) {

	for(FPEelementIdx in FPEelements) {
	
		if(FPEelementIdx == fpeId) {
		
			return true;
		}
	}

	return false;	
}

function findParentFPEElement(target) {

	var fpeId = target.getAttribute('id');
	
	if(fpeId.indexOf('infoBoxFPE') != -1) {
	
		fpeId = fpeId.substring(11);
	}

	if(!isFPEElement(target.getAttribute('id'))) {
	
		target = target.getProperty('parentNode');
		
		if(target) {
			return findParentFPEElement(target);
		}
		else {
			return null;
		}
	}
	
	return target;
}

function mouseoverFPE(ev) {

	var target = bb.evaluateSmart('ancestor-or-self::*[@id][1]', ev.target);
	
	if(target) {
	
		target = findParentFPEElement(target);
	
		var fpeId = target.getAttribute('id');

		var infoBoxFPE = bb.document.getElementById('infoBoxFPE_'+fpeId);
		
		if(bb.console) {
			bb.console.log('mouseover: '+fpeId+' -- '+hideFPEPopUpTimeouts[fpeId]);
		}
		
		if(hideFPEPopUpTimeouts[fpeId]) {
			if(bb.console) {
				bb.console.log('mouseover clear: '+fpeId+' -- '+hideFPEPopUpTimeouts[fpeId]);
			}
			window.clearTimeout(hideFPEPopUpTimeouts[fpeId]);
			hideFPEPopUpTimeouts[fpeId] = 0;
		}
			
		if(bb.console) {
			bb.console.log('mouseover open: '+infoBoxFPE.getAttribute('open'));
		}
		if(infoBoxFPE.getAttribute('open') == 'false') {
			showFPEPopUp(fpeId);
		}
	}
}

function mouseoutFPE(ev) {

	var target = bb.evaluateSmart('ancestor-or-self::*[@id and not(contains(@id, \'infoBox\'))][1]', ev.target);
	var fpeId = 'TO DO: Define';
	if(target && isFPEElement(target.getAttribute('id')) && !hideFPEPopUpTimeouts[target.getAttribute('id')]) {
		hideFPEPopUpTimeouts[target.getAttribute('id')] = window.setTimeout("hideFPEPopUp('"+target.getAttribute('id')+"')", 400);
		if(bb.console) {
			bb.console.log('mouseout: '+fpeId+' -- '+hideFPEPopUpTimeouts[target.getAttribute('id')]);
		}
	}
}

function hideFPEPopUp(fpeId) {

	var target = bb.document.getElementById(fpeId);
	
	fadeOutFPEPopUp(fpeId);
}

function showFPEPopUp(fpeId) {

	var target = bb.document.getElementById(fpeId);

	fadeInFPEPopUp(fpeId);
}

function fadeInFPEPopUp(fpeId) {

	var infoBoxFPE = bb.document.getElementById('infoBoxFPE_'+fpeId);

	//infoBoxFPE.setAttribute('opacity', '0');
	infoBoxFPE.setAttribute('opacity', '1');
	infoBoxFPE.setAttribute('open', true);
	return;
	
	// for some reason, fading in doens't work anymore with bb 4.3.1, temporaily disabling it.
	
	var smilObj = new Object();
	smilObj.attributeName = 'opacity';
	smilObj.dur= '250ms';
	smilObj.to = '1.1';

	bb.smil.animate(infoBoxFPE, smilObj);
}

function fadeOutFPEPopUp(fpeId) {

	var infoBoxFPE = bb.document.getElementById('infoBoxFPE_'+fpeId);

	var smilObj = new Object();
	smilObj.attributeName = 'opacity';
	smilObj.dur= '250ms';
	smilObj.to = '0';

	var smilAnimId = bb.smil.animate(infoBoxFPE, smilObj, function(_smilAnimId){smilAnimations[_smilAnimId].setAttribute('open', 'false')});

	smilAnimations[smilAnimId] = infoBoxFPE;
}

