function PopMenu(){
	this.timeoutValue = 20;
	this.menuElements = new Array();
	this.menuTriggerPrefix = "trigger";
	this.menuTargetPrefix = "menu";
	this.fillMenu = _fillMenu;
	this.toggle = _toggleElement;
	this.getElementIndex = _getElementIndex;
	this.updateElements = _updateElements;
}

function _fillMenu(){
	var number = 1;
	while(document.getElementById(this.menuTriggerPrefix+number)){ //while triggers exits
		trigger = document.getElementById(this.menuTriggerPrefix+number);
		target =  document.getElementById(this.menuTargetPrefix+number);
		if(target){
			this.menuElements[this.menuElements.length] = new MenuElement(trigger, target);
		}
		number++;

	}
}
function _updateElements(){
	var activeFound = false;
	for(i=0;i<this.menuElements.length;i++){ // loopataan kaikki elementit
		if(this.menuElements[i].timeout>1){  // jos timeOuttia on yli 1
			this.menuElements[i].timeout--; // vähennetään timeouttia
			activeFound = true;
			//alert(this.menuElements[i].timeout);
		}else if(this.menuElements[i].timeout>0){ // jos on yksi niin
			//alert("hiding");
			this.menuElements[i].hide(); //piilotetaan elementti
			this.menuElements[i].timeout = 0; // ja nollataan timeout
			activeFound = true;
		}
	}
	if(activeFound){
		setTimeout("menu.updateElements()", 10);

	}
}
function _toggleElement(htmlElement){

	elementIndex = this.getElementIndex(htmlElement.id);
	element = this.menuElements[elementIndex];
	if(element==false) return false;

	element_status = element.getStatus();
	if(element_status==0){ // hidden
		element.timeout = 0; // ei timeouttia
		element.show(); // element is hidden
	}
	if(element_status==1){ // visible but pending to vanish
		element.timeout = 0;
		element.show();
	}
	if(element_status==2){
		element.timeout = this.timeoutValue; // element is visible
		setTimeout("menu.updateElements()", 10);
	}


}
function _getElementIndex(triId){
	for(i=0;i<this.menuElements.length;i++){
		if(triId == this.menuElements[i].triggerEl.id || triId == this.menuElements[i].targetEl.id){
			return i;
		}
	}
	return false;
}

function MenuElement(triEl, tarEl){
	this.triggerEl = triEl;
	this.targetEl = tarEl;
	this.timeout = 0;
	this.getStatus = _getStatus;
	this.hide = _hide;
	this.show = _show;
	// this.element = document.getElementById(this.targetEl);
	this.targetEl.style.visibility = "hidden";

	function _show(){
		this.targetEl.style.visibility = "visible";
	}
	function _hide(){
		this.targetEl.style.visibility = "hidden";
	}
	function _getStatus(){
		if(this.targetEl.style.visibility == "hidden"){
			//alert("status: hidden, timeout"+this.timeout);
			return 0;
		}
		if(this.targetEl.style.visibility == "visible" && this.timeout >0){
			//alert("status: pending, timeout"+this.timeout);
			return 1;
		}
		if(this.targetEl.style.visibility == "visible"){
			//alert("status: visible, timeout"+this.timeout);
			return 2;
		}

	}
}
var menu = new PopMenu();

