// Dynamicly Sizing Menu created by Brandon Checketts (www.brandonchecketts.com)
// The JavaScript code to produce this effect is copyrighted by
// gamepricewatcher.com and can not be used without express written permission

var current_growing_element_id = "";
var smallest = 14;
var largest = 18;
var grown_elements = new Array();
var growing_elements = new Array();


function debug() {
    // do nothing
}


function removeFromGrown(value) {
//  IE doesn't like the indexOf function (stupid IE), so I'll do it the long way...
//    index = grown_elements.indexOf(value);
//    grown_elements.splice(index,0);
    var found=0;
    var i=0;
    while(! found && grown_elements[i]) {
        if(grown_elements[i] == value) {
            grown_elements.splice(i,1);
            found = 1;
        }
        i++;
    }
}


function inArray(array, value) {
    var found=0;
    var z=0;
    while(array[z] && (! found)) {
        if(array[z] == value) {
            return z;
        }
        z++;
    }
    return null;
}


function removeFromGrowing(value) {
    var found=0;
    var i=0;
    while(! found && growing_elements[i]) {
        if(growing_elements[i] == value) {
            growing_elements.splice(i,1);
            found = 1;
        }
        i++;
    }
}


function shrinkElement(element_id) {
    if(current_growing_element_id == element_id) {
        debug("NOT shrinking the current growing element "+element_id);
        return;
    }
    var element = document.getElementById(element_id);
    if(element) {
        current_size_text = element.style.fontSize;
        current_size = current_size_text.substring(0,current_size_text.indexOf('p'));
        
        if(inArray(growing_elements, element_id)) {
            current_size = largest;
        }
        var next_delay = 0;
        while(current_size >= smallest) {
            current_size--;
            next_delay += 25;
            delay_command = "setElementSize('"+element_id+"','"+current_size+"')";
            setTimeout(delay_command,next_delay);
        }
        delay_command = "removeFromGrown('"+element_id+"');";
        setTimeout(delay_command, next_delay+1);
    }
}


function shrinkAllElementsExcept(exception_id) {
    var i=0;
    while(this_element = grown_elements[i]) {
        if(this_element != exception_id) {
            hideSubcategoryMenu(this_element);
            shrinkElement(this_element);
        }
        i++;
    }
}


function shrinkAllElements() {
    shrinkAllElementsExcept('bogus_element_id');
}


function growElement(element_id) {
    current_growing_element_id = element_id;
    delay_command = " \
        if(current_growing_element_id == '"+element_id+"') { \
            doGrowElement('"+element_id+"'); \
        } \
    ";
    setTimeout(delay_command,50);
}
    
        
function doGrowElement(element_id) {
    shrinkAllElementsExcept(element_id);
    var element = document.getElementById(element_id);
    if(element) {
        current_growing_element_id = element_id;
        growing_elements.push(element_id);
        grown_elements.push(element_id);
        current_size_text = element.style.fontSize;
        current_size = current_size_text.substring(0,current_size_text.indexOf('p'));
        if(! current_size) {
            current_size = smallest;
        }
        var next_delay = 0;
        while(current_size <= largest) {
            current_size++;
            next_delay += 25;
            delay_command = "setElementSize('"+element_id+"','"+current_size+"')";
            setTimeout(delay_command,next_delay);
        }
        // Re-shrink all, because some may have continued growing 
        delay_command = "shrinkAllElementsExcept('"+element_id+"')";
        setTimeout(delay_command,next_delay);

//        delay_command = "current_growing_element_id=''";
//        setTimeout(delay_command, next_delay+100);

        delay_command = "removeFromGrowing('"+element_id+"');";
        setTimeout(delay_command, next_delay);

        delay_command = "grown_elements.push('"+element_id+"');";
        setTimeout(delay_command, next_delay);

        delay_command = "showSubcategoryMenu('"+element_id+"')";
        next_delay += 100;
        setTimeout(delay_command,next_delay);
    }
}


function setElementSize(element_id, size) {
    element = document.getElementById(element_id);
    if(element) {
        size_in_px = size+"px";
        element.style.fontSize=size_in_px;
    }
}


function showSubcategoryMenu(category_div_id) {
    if(current_growing_element_id == category_div_id) {
        element_id = category_div_id+"_submenu";
        debug("showing category submenu named "+element_id);
        element = document.getElementById(element_id);
        if(element) {
            element.style.visibility="visible";
            element.style.display="block";
//            fadeIn(element_id);
        }
    }
}
            

function hideSubcategoryMenu(category_div_id) {
    submenu_element_id = category_div_id+"_submenu";
    subcat_element = document.getElementById(submenu_element_id);
    if(subcat_element) {
        subcat_element.style.visibility="hidden";
        subcat_element.style.display="none";
//        subcat_element.style.opacity=0;
        //fadeOut(submenu_element_id);
    }
}


function fadeIn(element_id) {
    for(i = 0; i <= 100; i+=10) {
        delay_command = "setOpacity('"+element_id+"','"+i+"')";
        setTimeout(delay_command, i*10);
    }
}


function fadeOut(element_id) {
    for(i = 100; i >= 0; i-=10) {
        delay_command = "setOpacity('"+element_id+"','"+i+"')";
        setTimeout(delay_command, (1000- (i*10) ) );
    }
}


function setOpacity(element_id, opacity) {
    element = document.getElementById(element_id);
    if(element) {
        element.style.opacity = (opacity / 100);
    }
}


function closeSubcategory(element_id) {
    fadeOut(element_id);
    delay_command = "hideElement('"+element_id+"')";
    setTimeout(delay_command,1000);
    delay_command = "setOpacity('"+element_id+"','0')";
    setTimeout(delay_command,1200);
}


function hideElement(element_id) {
    element = document.getElementById(element_id);
    if(element) {
        element.style.visibility = "hidden";
        element.style.display = "none";
    }
}
