var Collapsible = Class.create();
Collapsible.PANELS = {
    Result : 0,
    ResultChooser : 1,
    Route : 2,
    DislayRoute : 3,
    SearchProximity : 4,
    POI : 5,
    Search : 6
}

Collapsible.PANEL_IDS = [
    "panelResultContainer", 
    "panelHitsContainer",  //"AccordionPaneHits", 
    "panelRouteContainer", 
    "panelDisplayRouteContainer",  //"AccordionPaneDisplayRoute",
    "panelProximityContainer", 
    "panelPOIContainer",
    "panelSearchContainer"];
    
Collapsible.BEHAVIOUR_IDS = [
    "CollapseResultBehaviour",
    "CollapseHitsBehaviour",
    "CollapseRouteBehaviour",
    "CollapseDisplayRouteBehaviour",
    "CollapseProximityBehaviour",
    "CollapsePOIBehaviour",
    "CollapseSearchBehaviour"
];

Collapsible.prototype = {
    initialize : function()
    {       
        this.m_onSelectedIndexChanged = this.addEventType("onselectedindexchanged");          
    },
    
    setSelectedIndex : function(t_index)
    {
        if(arguments.length > 1)
        {
            this.showPane(arguments, true, true);        
        }
        else
        {
            this.showPane(t_index, true, true);
        }
    },
    
    hidePane : function(t_index, t_retry)
    {        
        //alert("hidePane: " + t_index);
        if( this.m_selectedIndex == t_index ) //Given that t_index Accordion.PANELS.Route is never hidden.
        {
            this.setSelectedIndex(Collapsible.PANELS.Route);
        }
        
        var panel = $(Collapsible.PANEL_IDS[t_index]);
        if( panel != null && !Element.hasClassName(panel, "hidden") )
        {
            panel.addClassName("hidden");
            //$(Accordion.PANEL_IDS[t_index]).style.display = "none";
        
//            var pane = this.m_control.get_Pane(t_index);
//            var header = this.m_control.get_Header(t_index);
//            if( pane != null )
//            {
//                pane.style.display = "none";
//                header.style.display = "none";
//            }    
        }        
    },
    
    showPane : function(t_index, t_expand, t_collapseOthers, t_indexes)
    {
        //alert("showPane: " + [t_index, t_expand, t_collapseOthers]);
        if( typeof t_index != "number" )
        {
            //expect array
            var i,length = t_index.length;
            for( i=0; i<length; i++ )
            {
                this.showPane(t_index[i], t_expand, t_collapseOthers, t_index);
            }
            
            if( typeof t_collapseOthers != "undefined" && t_collapseOthers == true )
            {
                var i, length = Collapsible.BEHAVIOUR_IDS.length;
                var j, jlength = t_index.length;
                for(i=0; i<length; i++)
                {
                    var doClose = true;
                    for(j=0; j<jlength; j++)
                    {
                        if( i == t_index[j] )
                        {
                            doClose = false;
                            break;                            
                        }
                    }
                    
                    if( doClose )
                    {
                        try
                        {
                            var currBhvr = $find(Collapsible.BEHAVIOUR_IDS[i]);  
                            //TODO: Change to collapsePanel                      
                            //currBhvr._doClose();
                            currBhvr.collapsePanel();
                        }
                        catch(e){}
                    }
                }
            }
        }
        else
        {
            var panel = $(Collapsible.PANEL_IDS[t_index]);
                
            if( Element.hasClassName(panel, "hidden") )
            {
                panel.removeClassName("hidden");
            }     
            
            if( typeof t_expand != "undefined" && t_expand == true )
            {
                try
                {
                    var bhvr = $find(Collapsible.BEHAVIOUR_IDS[t_index]);
                    //TODO: Change to expandPanel
                    //bhvr._doOpen();
                    bhvr.expandPanel();
                }
                catch(e){}
            }
            
            if( typeof t_collapseOthers != "undefined" && t_collapseOthers == true )
            {
                var i, length = Collapsible.BEHAVIOUR_IDS.length;
                for(i=0; i<length; i++)
                {
                    var t_collapse = true;
                    if( typeof t_indexes != "undefined" && t_indexes != null )
                    {
                        for(var j=0; j<t_indexes.length; j++)
                        {
                            if(i == t_indexes[j])
                            {
                                t_collapse = false;
                            }
                        }
                    }
                
                    if( t_collapse && i != t_index )
                    {
                        try
                        {
                            var currBhvr = $find(Collapsible.BEHAVIOUR_IDS[i]);
                            currBhvr.collapsePanel();
                        }
                        catch(e){}
                    }
                }
            }
        }
    }
}
Object.extend(Collapsible.prototype, new AbstractEventTrigger()); //Extend with methods to make object an eventtrigger


