Salve ragazzi.
Sul mio sito ho voluto mettere lo Spry Accordion di dreamweaver. Questo script agisce al click sull'header del div, invece io vorrei che il prossimo pannello fosse visualizzato solo dopo un controllo (quindi devo dirottare questo comando su un bottone e racchiuderlo in un if, tipo if(convalida == true))

Solo che non riesco a farlo, ho trovato delle funzioni ma inserite in un onclick non danno i frutti sperati.

Vi posto il codice (potete anche trovarlo su dreamweaver ma questo lo sapete già ^_^)

Codice PHP:

var Spry;
if (!
SprySpry = {};
if (!
Spry.WidgetSpry.Widget = {};

Spry.Widget.Accordion = function(elementopts)
{
    
this.element this.getElement(element);
    
this.defaultPanel 0;
    
this.hoverClass "AccordionPanelTabHover";
    
this.openClass "AccordionPanelOpen";
    
this.closedClass "AccordionPanelClosed";
    
this.focusedClass "AccordionFocused";
    
this.enableAnimation true;
    
this.enableKeyboardNavigation true;
    
this.currentPanel null;
    
this.animator null;
    
this.hasFocus null;

    
this.previousPanelKeyCode Spry.Widget.Accordion.KEY_UP;
    
this.nextPanelKeyCode Spry.Widget.Accordion.KEY_DOWN;

    
this.useFixedPanelHeights true;
    
this.fixedPanelHeight 0;

    
Spry.Widget.Accordion.setOptions(thisoptstrue);

    
this.attachBehaviors();
};

Spry.Widget.Accordion.prototype.getElement = function(ele)
{
    if (
ele && typeof ele == "string")
        return 
document.getElementById(ele);
    return 
ele;
};

Spry.Widget.Accordion.prototype.addClassName = function(eleclassName)
{
    if (!
ele || !className || (ele.className && ele.className.search(new RegExp("\\b" className "\\b")) != -1))
        return;
    
ele.className += (ele.className " " "") + className;
};

Spry.Widget.Accordion.prototype.removeClassName = function(eleclassName)
{
    if (!
ele || !className || (ele.className && ele.className.search(new RegExp("\\b" className "\\b")) == -1))
        return;
    
ele.className ele.className.replace(new RegExp("\\s*\\b" className "\\b""g"), "");
};

Spry.Widget.Accordion.setOptions = function(objoptionsObjignoreUndefinedProps)
{
    if (!
optionsObj)
        return;
    for (var 
optionName in optionsObj)
    {
        if (
ignoreUndefinedProps && optionsObj[optionName] == undefined)
            continue;
        
obj[optionName] = optionsObj[optionName];
    }
};

Spry.Widget.Accordion.prototype.onPanelTabMouseOver = function(epanel)
{
    if (
panel)
        
this.addClassName(this.getPanelTab(panel), this.hoverClass);
    return 
false;
};

Spry.Widget.Accordion.prototype.onPanelTabMouseOut = function(epanel)
{
    if (
panel)
        
this.removeClassName(this.getPanelTab(panel), this.hoverClass);
    return 
false;
};

Spry.Widget.Accordion.prototype.openPanel = function(elementOrIndex)
{
    var 
panelA this.currentPanel;
    var 
panelB;

    if (
typeof elementOrIndex == "number")
        
panelB this.getPanels()[elementOrIndex];
    else
        
panelB this.getElement(elementOrIndex);
    
    if (!
panelB || panelA == panelB)    
        return 
null;

    var 
contentA panelA this.getPanelContent(panelA) : null;
    var 
contentB this.getPanelContent(panelB);

    if (!
contentB)
        return 
null;

    if (
this.useFixedPanelHeights && !this.fixedPanelHeight)
        
this.fixedPanelHeight = (contentA.offsetHeight) ? contentA.offsetHeight contentA.scrollHeight;

    if (
this.enableAnimation)
    {
        if (
this.animator)
            
this.animator.stop();
        
this.animator = new Spry.Widget.Accordion.PanelAnimator(thispanelB, { durationthis.durationfpsthis.fpstransitionthis.transition });
        
this.animator.start();
    }
    else
    {
        if(
contentA)
        {
            
contentA.style.display "none";
            
contentA.style.height "0px";
        }
        
contentB.style.display "block";
        
contentB.style.height this.useFixedPanelHeights this.fixedPanelHeight "px" "auto";
    }

    if(
panelA)
    {
        
this.removeClassName(panelAthis.openClass);
        
this.addClassName(panelAthis.closedClass);
    }

    
this.removeClassName(panelBthis.closedClass);
    
this.addClassName(panelBthis.openClass);

    
this.currentPanel panelB;

    return 
panelB;
};

Spry.Widget.Accordion.prototype.closePanel = function()
{
    
// The accordion can only ever have one panel open at any
    // give time, so this method only closes the current panel.
    // If the accordion is in fixed panel heights mode, this
    // method does nothing.

    
if (!this.useFixedPanelHeights && this.currentPanel)
    {
        var 
panel this.currentPanel;
        var 
content this.getPanelContent(panel);
        if (
content)
        {
            if (
this.enableAnimation)
            {
                if (
this.animator)
                    
this.animator.stop();
                
this.animator = new Spry.Widget.Accordion.PanelAnimator(thisnull, { durationthis.durationfpsthis.fpstransitionthis.transition });
                
this.animator.start();
            }
            else
            {
                
content.style.display "none";
                
content.style.height "0px";
            }
        }        
        
this.removeClassName(panelthis.openClass);
        
this.addClassName(panelthis.closedClass);
        
this.currentPanel null;
    }
};

Spry.Widget.Accordion.prototype.openNextPanel = function()
{
    return 
this.openPanel(this.getCurrentPanelIndex() + 1);
};

Spry.Widget.Accordion.prototype.openPreviousPanel = function()
{
    return 
this.openPanel(this.getCurrentPanelIndex() - 1);
};

Spry.Widget.Accordion.prototype.openFirstPanel = function()
{
    return 
this.openPanel(0);
};

Spry.Widget.Accordion.prototype.openLastPanel = function()
{
    var 
panels this.getPanels();
    return 
this.openPanel(panels[panels.length 1]);
};

Spry.Widget.Accordion.prototype.onPanelTabClick = function(epanel)
{
    if (
panel != this.currentPanel)
        
this.openPanel(panel);
    else
        
this.closePanel();

    if (
this.enableKeyboardNavigation)
        
this.focus();

    if (
e.preventDefaulte.preventDefault();
    else 
e.returnValue false;
    if (
e.stopPropagatione.stopPropagation();
    else 
e.cancelBubble true;

    return 
false;
};

Spry.Widget.Accordion.prototype.onFocus = function(e)
{
    
this.hasFocus true;
    
this.addClassName(this.elementthis.focusedClass);
    return 
false;
};

Spry.Widget.Accordion.prototype.onBlur = function(e)
{
    
this.hasFocus false;
    
this.removeClassName(this.elementthis.focusedClass);
    return 
false;
};

Spry.Widget.Accordion.KEY_UP 38;
Spry.Widget.Accordion.KEY_DOWN 40;

Spry.Widget.Accordion.prototype.onKeyDown = function(e)
{
    var 
key e.keyCode;
    if (!
this.hasFocus || (key != this.previousPanelKeyCode && key != this.nextPanelKeyCode))
        return 
true;
    
    var 
panels this.getPanels();
    if (!
panels || panels.length 1)
        return 
false;
    var 
currentPanel this.currentPanel this.currentPanel panels[0];
    var 
nextPanel = (key == this.nextPanelKeyCode) ? currentPanel.nextSibling currentPanel.previousSibling;

    while (
nextPanel)
    {
        if (
nextPanel.nodeType == /* Node.ELEMENT_NODE */)
            break;
        
nextPanel = (key == this.nextPanelKeyCode) ? nextPanel.nextSibling nextPanel.previousSibling;
    }

    if (
nextPanel && currentPanel != nextPanel)
        
this.openPanel(nextPanel);

    if (
e.preventDefaulte.preventDefault();
    else 
e.returnValue false;
    if (
e.stopPropagatione.stopPropagation();
    else 
e.cancelBubble true;

    return 
false;
};

Spry.Widget.Accordion.prototype.attachPanelHandlers = function(panel)
{
    if (!
panel)
        return;

    var 
tab this.getPanelTab(panel);

    if (
tab)
    {
        var 
self this;
        
Spry.Widget.Accordion.addEventListener(tab"click", function(e) { return self.onPanelTabClick(epanel); }, false);
        
Spry.Widget.Accordion.addEventListener(tab"mouseover", function(e) { return self.onPanelTabMouseOver(epanel); }, false);
        
Spry.Widget.Accordion.addEventListener(tab"mouseout", function(e) { return self.onPanelTabMouseOut(epanel); }, false);
    }
};

Spry.Widget.Accordion.addEventListener = function(elementeventTypehandlercapture)
{
    try
    {
        if (
element.addEventListener)
            
element.addEventListener(eventTypehandlercapture);
        else if (
element.attachEvent)
            
element.attachEvent("on" eventTypehandler);
    }
    catch (
e) {}
};

Spry.Widget.Accordion.prototype.initPanel = function(panelisDefault)
{
    var 
content this.getPanelContent(panel);
    if (
isDefault)
    {
        
this.currentPanel panel;
        
this.removeClassName(panelthis.closedClass);
        
this.addClassName(panelthis.openClass);

        
// Attempt to set up the height of the default panel. We don't want to
        // do any dynamic panel height calculations here because our accordion
        // or one of its parent containers may be display:none.

        
if (content)
        {
            if (
this.useFixedPanelHeights)
            {
                
// We are in fixed panel height mode and the user passed in
                // a panel height for us to use.
    
                
if (this.fixedPanelHeight)
                    
content.style.height this.fixedPanelHeight "px";
            }
            else
            {
                
// We are in variable panel height mode, but since we can't
                // calculate the panel height here, we just set the height to
                // auto so that it expands to show all of its content.
    
                
content.style.height "auto";
            }
        }
    }
    else
    {
        
this.removeClassName(panelthis.openClass);
        
this.addClassName(panelthis.closedClass);

        if (
content)
        {
            
content.style.height "0px";
            
content.style.display "none";
        }
    }
    
    
this.attachPanelHandlers(panel);
};

Spry.Widget.Accordion.prototype.attachBehaviors = function()
{
    var 
panels this.getPanels();
    for (var 
0panels.lengthi++)
        
this.initPanel(panels[i], == this.defaultPanel);

    
// Advanced keyboard navigation requires the tabindex attribute
    // on the top-level element.

    
this.enableKeyboardNavigation = (this.enableKeyboardNavigation && this.element.attributes.getNamedItem("tabindex"));
    if (
this.enableKeyboardNavigation)
    {
        var 
self this;
        
Spry.Widget.Accordion.addEventListener(this.element"focus", function(e) { return self.onFocus(e); }, false);
        
Spry.Widget.Accordion.addEventListener(this.element"blur", function(e) { return self.onBlur(e); }, false);
        
Spry.Widget.Accordion.addEventListener(this.element"keydown", function(e) { return self.onKeyDown(e); }, false);
    }
};

Spry.Widget.Accordion.prototype.getPanels = function()
{
    return 
this.getElementChildren(this.element);
};

Spry.Widget.Accordion.prototype.getCurrentPanel = function()
{
    return 
this.currentPanel;
};

Spry.Widget.Accordion.prototype.getPanelIndex = function(panel)
{
    var 
panels this.getPanels();
    for( var 
panels.lengthi++ )
    {
        if( 
panel == panels[i] )
            return 
i;
    }
    return -
1;
};

Spry.Widget.Accordion.prototype.getCurrentPanelIndex = function()
{
    return 
this.getPanelIndex(this.currentPanel);
};

Spry.Widget.Accordion.prototype.getPanelTab = function(panel)
{
    if (!
panel)
        return 
null;
    return 
this.getElementChildren(panel)[0];
};

Spry.Widget.Accordion.prototype.getPanelContent = function(panel)
{
    if (!
panel)
        return 
null;
    return 
this.getElementChildren(panel)[1];
};

Spry.Widget.Accordion.prototype.getElementChildren = function(element)
{
    var 
children = [];
    var 
child element.firstChild;
    while (
child)
    {
        if (
child.nodeType == /* Node.ELEMENT_NODE */)
            
children.push(child);
        
child child.nextSibling;
    }
    return 
children;
};

Spry.Widget.Accordion.prototype.focus = function()
{
    if (
this.element && this.element.focus)
        
this.element.focus();
};

Spry.Widget.Accordion.prototype.blur = function()
{
    if (
this.element && this.element.blur)
        
this.element.blur();
};