visitedMenu = new Array();
function inArray (item,value){
	var i;
	for(i = 0; i<item.length; i++)
		if(item[i]==value)
			return true;
	return false;		
}
function HDWFisheyeMenu(menuNode){
	if(document.getElementsByTagName && menuNode)
		if(!inArray(visitedMenu,menuNode)){	
			var menuInstance = new HDWFisheye(menuNode);
			visitedMenu.push(menuNode);
		}	
}

function HDWFisheye(menuContainer){
	this.init(menuContainer);
}

HDWFisheye.prototype = {
	growIn:1.5, steps:20, power:0.333, interval:10, 
	init:function(menuContainer){
		var me = this;
		var menuOptions = menuContainer.getElementsByTagName("img");
		for (var i=0; i < menuOptions.length; i++){
			var dimObj= {w:menuOptions[i].offsetWidth,h:menuOptions[i].offsetHeight,bw:menuOptions[i].offsetWidth*me.growIn, bh:menuOptions[i].offsetHeight*me.growIn};
			menuOptions[i].onmouseover = function(){me.optionOver(this, dimObj);};
			menuOptions[i].onmouseout  = function(){me.optionOut(this, dimObj);};
		}
			
	}, 
	optionOver:function(menuOption, dimObj){
		var captionAttr = menuOption.attributes.getNamedItem("caption");
		if( captionAttr != null && captionAttr.value != "")
		  this.captionInsert(menuOption, captionAttr.value, dimObj.bw);
		this.changeSize(menuOption, dimObj, true);		
	},
	optionOut:function(menuOption, dimObj){
		var captionAttr = menuOption.attributes.getNamedItem("caption");
		if( captionAttr != null && captionAttr.value != "")
		  this.captionRemove(menuOption.parentNode, captionAttr.value);
		this.changeSize(menuOption, dimObj, false);		
	},
	captionInsert:function(insertAfter, captionText, spanWidth){
		
		var captionSpan = document.createElement('span');
		captionSpan.style.display = 'block';
		if (document.all)
			captionSpan.style.width = spanWidth+"px";
		else	
			captionSpan.width = spanWidth+"px";	
		captionSpan.appendChild(document.createTextNode(captionText));
		insertAfter.parentNode.insertBefore(captionSpan, insertAfter.nextSibling);
	},
	captionRemove:function(removeFrom, captionText){
		var spanNodes = removeFrom.getElementsByTagName("span");
		for(var i=0; i<spanNodes.length; i++)
			if(spanNodes[i].firstChild.nodeValue == captionText)
			  removeFrom.removeChild(spanNodes[i]);
	},
	changeSize:function(elemNode, dimObj, sTOb) {
		var me = this, actStep=0;
		var stWidth, stHeight, toWidth, toHeight;
		if (elemNode.intervalId) window.clearInterval(elemNode.intervalId);
		if(sTOb){stWidth = dimObj.w; stHeight = dimObj.h; toWidth = dimObj.bw; toHeight = dimObj.bh;
		} else{stWidth = dimObj.bw; stHeight = dimObj.bh; toWidth = dimObj.w; toHeight = dimObj.h;}
		elemNode.intervalId = window.setInterval(
			function(){
				elemNode.style.width = me.nextDim(stWidth, toWidth,actStep)+"px"; 
				elemNode.style.height = me.nextDim(stHeight, toHeight, actStep)+"px";
				actStep++;
				if (actStep > me.steps) window.clearInterval(elemNode.intervalId);
			}, me.interval
		);
	},
	nextDim:function(dimStart, dimEnd, actualStep){
		var diff = dimEnd - dimStart;
		return Math.ceil(dimStart+(Math.pow(((1 / this.steps)*actualStep),this.power)*diff));
	}

};
