var pauseMenu              = false;
var rotatingElementsArray  = new Array();
var positionStylesArray    = new Array();
var rotatingElementsLength = 0;
var postionStylesLength    = 0;
var rotatingMenuInterval   = 200;
var rotatingMenuIntervalId = null;

function startRotatingMenu(){
    if( rotatingMenuIntervalId != null ){
        return;
    }
    pauseMenu = false;
    var rotatingElementsJQuery = $(".rotatingEL");
    rotatingElementsLength = rotatingElementsJQuery.length;
    rotatingElementsJQuery.hover(
        function( e ){
        	$("#labelDiv").css({
        		"display" : "block",
        		top: ( e.pageY - 30 ),
        		left: ( e.pageX + 20 )
        	}).stop(true,true).fadeIn( "slow" ).find("#labelText").html( this.getAttribute( "alt" ) );
            pauseMenu = true;
            thisJQuery = $(this);
            thisJQuery.stop(true,false).animate({
                width: ( thisJQuery.width()*1.2 ) + "px",
                height: ( thisJQuery.height()*1.2 ) + "px"
            },500 , function(){ pauseMenu = true; } );
        },
        function(){
        	$("#labelDiv").fadeOut( "fast" , function(){ $(this).css( "display" , "none" ).find("#labelText").html(""); } );
            thisJQuery = $(this);
            thisJQuery.stop(true,false).animate({
                width: ( thisJQuery.width()/1.2 ) + "px",
                height: ( thisJQuery.height()/1.2 ) + "px"
            },500, function(){ pauseMenu = false; });
        }
    );
    rotatingElementsJQuery.mousemove( function( e ){
    	$("#labelDiv").css({
    		top: ( e.pageY - 30 ),
    		left: ( e.pageX + 20 )
    	});
    });
    debug("init position Styles");
    initializePositionStyles();
    debug("positions initialized");
    var currentPosition = 0;
    var positionDelta = positionStylesArray.length / rotatingElementsJQuery.length;
    for ( var i = 0; i < rotatingElementsLength; i++) {
    	rotatingElementsArray[i] = $(rotatingElementsJQuery[i]);
    	rotatingElementsArray[i].position = parseInt( currentPosition , 10 );
    	currentPosition += positionDelta;
    }
    debug("rotate Elements");
    rotateElements();
    rotatingMenuIntervalId = setInterval( rotateElements , rotatingMenuInterval );
}
function stopRotatingMenu(){
    if( rotatingMenuIntervalId != null ){
        clearInterval( rotatingMenuIntervalId );
        rotatingMenuIntervalId = null;
        pauseMenu = true;
    }
}

$(window).resize( function(){
	if( pauseMenu == false ){
		initializePositionStyles();
	}
});

function initializePositionStyles(){
    var offsetX      = $("#cerros").offset().left + 40;
    var offsetY      = $("#cerros").offset().top  + 360;
    var scalex       = 1.30;
    var scaley       = 0.7;
    var radius       = 300;
    var startDegrees = 220;
    var endDegrees   = 45;
    var startWidth   = 100;
    var endWidth     = 30;
    var nPositions   = 0;
    var currentX     = 0;
    var currentY     = 0;
    for( var degrees = startDegrees ; degrees > endDegrees ; degrees = degrees - 20 ){
        var theta = degrees*Math.PI/180;
        var goalX = parseInt( Math.cos( theta ) * radius * scalex , 10 ) + offsetX + ( radius * scalex );
        var goalY = parseInt( Math.sin( theta ) * radius * scaley , 10 ) + offsetY;
        if( degrees == startDegrees ){
            currentX = goalX;
            currentY = goalY;
        }else{
            var xDelta = 1.0;
            var yDelta = 1.0;
            var xDistance = Math.abs( currentX - goalX );
            var yDistance = Math.abs( currentY - goalY );
            var totalDistance = 0;
            if( xDistance > yDistance ){
                yDelta = yDistance*xDelta/xDistance;
                totalDistance = xDistance;
            }else if( xDistance < yDistance ){
                xDelta = xDistance*yDelta/yDistance;
                totalDistance = yDistance;
            }
            for( var i = 0 ; i < totalDistance; i++ ){
                if( parseInt( currentX , 10 ) > goalX ){
                    currentX -= xDelta ;
                }else if( parseInt( currentX , 10 ) < goalX ){
                    currentX += xDelta ;
                }
                if( parseInt( currentY , 10 ) > goalY ){
                    currentY -= yDelta;
                }else if( parseInt( currentY , 10 ) < goalY ){
                    currentY += yDelta;
                }
                positionStylesArray[ nPositions++ ] = {
                    x : currentX,
                    y : currentY
                };
            }
        }
    }
    var opacity = 0.0;
    for ( var i = 0; i < positionStylesArray.length; i++) {
        var width = parseInt( ( ( positionStylesArray.length - i ) * ( startWidth - endWidth ) ) / positionStylesArray.length + endWidth , 10 );
        if( i > ( positionStylesArray.length - 20 ) ){
            opacity -= 0.05;
        }
        else if( opacity <= 1.0 ){
            opacity += 0.05;
        }
        positionStylesArray[i] = {
        	top    : parseInt( positionStylesArray[i].y , 10 ),
        	left   : parseInt( positionStylesArray[i].x , 10 ),
        	width  : width,
        	height : parseInt( width/1.5 , 10 ),
        	opacity: opacity
        };
    }
    postionStylesLength = positionStylesArray.length;
}

function rotateElements(){
    if( !pauseMenu ){
    	var i=0;
        while( i < rotatingElementsLength ) {
        	try{
        		rotatingElementsArray[ i ].css( positionStylesArray[ rotatingElementsArray[ i ].position++ ] );
        	}catch( e ){
        		rotatingElementsArray[ i ].position=0;
        	}
        	i++;
        }
    }
}
