var EXPAND_ALL = "Expand All",
    COLLAPSE_ALL = "Collapse All";

/**
 * Register all events for compare accordion
 */
function registerCompareAccordion() {
    var compareDiv = document.getElementById('adsk91-compare');
    if (!compareDiv)
        return;

    registerTabs();

    // register expand/collapse all
    var accordionControls = getElementsByClassName(compareDiv, "a", "acc_control");
    for(i=0;i<accordionControls.length;i++) {
    	 accordionControls[i].onclick = function() { accordionAnimateAll(this ); return false; };
    }

    // register accordion header onclick event
    var accordionDivs = getElementsByClassName(compareDiv, "div", "accordion");
    if (!accordionDivs) return;

    for(i=0;i<accordionDivs.length;i++) {
    	var acc_handles = getElementsByClassName( accordionDivs[i], "p", "acc_handle" );
	for (j=0;j<acc_handles.length;j++) {
		acc_handles[j].onclick = function () { accordionAnimate(this, 'slideToggle' ); changeControlText(this); };
	}
    }

    /**
     * Expand or collapse all sections for an accordion
     */
    function accordionAnimateAll(currentElement) {
        var toExpand = (currentElement.innerHTML == EXPAND_ALL);
        currentElement.innerHTML = (toExpand) ? COLLAPSE_ALL : EXPAND_ALL;
        var action = ( toExpand ) ? "slideDown" : "slideUp";
        //accordion must exist within next element of control's parent node
        var acc_handles = getElementsByClassName( nextElement(currentElement.parentNode), "p", "acc_handle" );
        if (!acc_handles) return;
        for (j=0;j<acc_handles.length;j++) {
            accordionAnimate(acc_handles[j], action);
        }
     }

    /**
     * Open/Close an accordion.
     * @param currentElement header element whose section needs to be animated.
     * @param action animation action
     */
    function accordionAnimate(currentElement, action) {
        switch(action) {
         case "slideUp":
         currentElement.className = "acc_handle";
         break;
         case "slideDown":
         currentElement.className = "acc_handle open";
         break;
         case "slideToggle":
         currentElement.className = ( currentElement.className == "acc_handle open" ) ? "acc_handle" : "acc_handle open";
         break;
         default:
         break;
        }
        // set the speed of opening speed : closing speed
        var speed = ( currentElement.className == "open" ) ? 300 : 300;
        cda_animateElement( nextElement(currentElement), action, speed );
    }

    /**
     * If all accordion sections are open, display Collapse All. Otherwise diplay Expand All
     * @param currentElement current element
     */
    function changeControlText(currentElement) {
        var accordionDiv = currentElement.parentNode;
        var allOpen = true;
        var acc_handles = getElementsByClassName( accordionDiv, "p", "acc_handle" );
        for (j=0;j<acc_handles.length;j++) {
            if ( acc_handles[j].className == "acc_handle") {
                allOpen = false;
                break;
            }
        }
        var prevElement = accordionDiv.parentNode.previousSibling;
        while (prevElement.nodeType != 1) {
            prevElement = prevElement.previousSibling;
        }
        if (prevElement.className == "control") {
            prevElement.getElementsByTagName("a")[0].innerHTML = ( allOpen) ? COLLAPSE_ALL : EXPAND_ALL;
        }
    }


    /**
     * Locate next element of current element
     * @param currentElement current element
     */
    function nextElement(currentElement) {
        var nextElement = currentElement.nextSibling;
        while (nextElement.nodeType != 1)
        {
        nextElement = nextElement.nextSibling;
        }
        return nextElement;
    }
}

/**
 * Register tabs
*/
var compareTabLis;
var compareTabDivs;
var currentOpenPostion = 0;
function registerTabs() {
    var compareDiv = document.getElementById('adsk91-compare');
    compareTabLis = document.getElementById('adsk91-compare_tabs').getElementsByTagName('li');
    compareTabDivs = getElementsByClassName(compareDiv, "div", "adsk91-compare_section");

    for(i=0;i<compareTabLis.length;i++) {
         compareTabLis[i].id = "compareLi-" + i;
         if ( compareTabLis[i].className == "current" ) currentOpenPosition = i;
         compareTabLis[i].onclick = function() {
            compareTabLis[currentOpenPostion].className = "";
            compareTabDivs[currentOpenPostion].className = "adsk91-compare_section";

            var i = this.id.substring(10);
            this.className = "current";
            compareTabDivs[i].className = "adsk91-compare_section current";
            currentOpenPostion = i;
            return false;
        };
    }
}

