

function onMouseLeave( pTarget, pAction ) {
	
	pTarget.realLeaveFunction = pAction; //store action
	pTarget.leaveFunction = function() { pTarget.realLeaveFunction(); }

	if (pTarget.onmouseout) pTarget.onmouseoutSave1 = pTarget.onmouseout; //Save1 previous mouseout
	pTarget.onmouseout = function() {
		if (pTarget.onmouseoutSave1) pTarget.onmouseoutSave1();
		this.ltimer = setTimeout(this.leaveFunction.bind(this),100);
	}
	
	if (pTarget.onmouseover) pTarget.onmouseoverSave1 = pTarget.onmouseover; //Save1 previous mouseover
	pTarget.onmouseover = function() {
		if (pTarget.onmouseoverSave1) pTarget.onmouseoverSave1();
		clearTimeout(this.ltimer);
	}

}

function onMouseEnter( pTarget, pAction ) {
	
	pTarget.enterFunction = pAction; //store action
	
	pTarget.stepPattern = function() { this.epattern = -1; } //reset pattern

	if (pTarget.onmouseover) pTarget.onmouseoverSave2 = pTarget.onmouseover; //save previous mouseover
	pTarget.onmouseover = function() {
		if (pTarget.onmouseoverSave2) pTarget.onmouseoverSave2();
		if (this.epattern == 1) { this.epattern = 0; clearTimeout(this.etimer); }
			else { (this.epattern = 0); this.enterFunction(); }
	}
	
	if (pTarget.onmouseout) pTarget.onmouseoutSave2 = pTarget.onmouseout; //save previous mouseout
	pTarget.onmouseout = function() {
		if (pTarget.onmouseoutSave2) pTarget.onmouseoutSave2();
		if (this.epattern == 0) this.epattern = 1;
		this.etimer = setTimeout(this.stepPattern.bind(this),100);
	}
}