function MenuItem(label, url, id){
    this.label = label;
    this.url = url;
    this.id = id;
    
    this.labelDiv = null;
}

function MenuMain(){
    this.menuDomElement;
    this.menuItems = new Array();
    this.selectedIndex;
	this.lineIntervalId;
	this.lineTime = 0;
}

MenuMain.LINE_DURATION = 10;
MenuMain.LINE_DELAY = 5;
//builder
MenuMain.prototype.addMenuItem = function(menuItem){
    this.menuItems.push(menuItem);
}

MenuMain.prototype.init = function(){

    log("init: " + this.menuDomElement);
    
    var children = this.menuDomElement.getElements("a");
    
    log("'a' count: " + children.length);
    
    this.menuDomElement.empty();
    
    for (var aIndex = 0; aIndex < children.length; aIndex++) {
        var oldLink = children[aIndex];
        
        var label = oldLink.innerHTML;
        var url = oldLink.href;
        var id = oldLink.id;
        var menuItem = new MenuItem(label, url, id);
        this.addMenuItem(menuItem);
    }
    
    log("create new divs");
    
    for (var menuItemIndex = 0; menuItemIndex < this.menuItems.length; menuItemIndex++) {
        var menuItem = this.menuItems[menuItemIndex];
        
        var lineCanvas = new Element("canvas");
		lineCanvas.setProperty("width", 40);
		lineCanvas.setProperty("height", 7);
        lineCanvas.className = "lineCanvas";
        
        if (menuItemIndex == this.selectedIndex) {
			if (lineCanvas.getContext) {
				
				var ctx = lineCanvas.getContext("2d");
				
				this.lineIntervalId = setInterval(Delegate.create(this, this.handleInterval, [ctx]), 20);
			}
		}
        this.menuDomElement.appendChild(lineCanvas);
        
        var menuItemDiv = new Element("div");
        if (menuItemIndex != this.selectedIndex) {
            menuItemDiv.className = "menuItem";
        }
        else {
            menuItemDiv.className = "menuItemSelected";
        }
        
        var txt = document.createTextNode(menuItem.label);
        menuItemDiv.appendChild(txt);
        this.menuDomElement.appendChild(menuItemDiv);
        
        var terminator = new Element("div");
        terminator.className = "menuItemTerminator";
        this.menuDomElement.appendChild(terminator);
        
        menuItem.labelDiv = menuItemDiv;
    }
    
    log("create new anchors");
    
    var height = this.menuItems[1].labelDiv.offsetTop - this.menuItems[0].labelDiv.offsetTop;
    log("measure height " + height);
    
    for (var menuItemIndex = 0; menuItemIndex < this.menuItems.length; menuItemIndex++) {
        var menuItem = this.menuItems[menuItemIndex];
        
        var size = menuItem.labelDiv.getSize();
        var position = menuItem.labelDiv.getPosition(this.menuDomElement);
        
        
        var menuItemAnchor = new Element("a");
        menuItemAnchor.className = "menuItemAnchor";
        menuItemAnchor.href = menuItem.url;
        menuItemAnchor.id = menuItem.id;
        menuItemAnchor.setPosition(position);
        menuItemAnchor.setSize(size.x, height);
        this.menuDomElement.appendChild(menuItemAnchor);
        
        if (menuItemIndex != this.selectedIndex) {
            this.createRollOver(menuItemAnchor, menuItem.labelDiv);
        }
    }
    
    log("init complete");
}

MenuMain.prototype.createRollOver = function(anchor, item){
    var myFx = new Fx.Tween(item, {
        duration: '200',
        transition: 'quad:out',
        link: 'cancel',
        property: 'color'
    });
    
    anchor.addEvent('mouseenter', function(){
    
        myFx.start(item.getStyle("color"), "#13BDAB");
    });
    
    anchor.addEvent('mouseleave', function(){
        myFx.start(item.getStyle("color"), "#000000");
    });
}

MenuMain.prototype.handleInterval = function(ctx){
	this.lineTime++;
	if(this.lineTime < MenuMain.LINE_DELAY)
		return;
	var start = 0;
	var target = 40;
	var value = Quad.easeInOut(this.lineTime - MenuMain.LINE_DELAY, start, target - start, MenuMain.LINE_DURATION);
	
	ctx.clearRect(0,0,40,7);
	ctx.fillStyle = "rgb(0,0,0)";
	ctx.fillRect(40 - value, 0, value, 1);
	if (this.lineTime - MenuMain.LINE_DELAY == MenuMain.LINE_DURATION)
	{
		clearInterval(this.lineIntervalId);
	}
	
}
