/**
 * RCPC spry initialization...
 */
var spryPanels = new Array();
var spryGroups = new Array();
var spryAccordians = new Array();
var spryTabbedPanels = new Array();
var sprySlidingPanels = new Array();

    function InitSpryDivs()
    {
		alert("Deprecated call: InitSpryDivs");
		return;
        var divs = document.getElementsByTagName("div");
        
        for (var i=0; i < divs.length; i++)
        {
            switch(divs[i].className)
            {
                case "Accordion":
                    spryAccordians[divs[i].id] = new Spry.Widget.Accordion(divs[i].id, {useFixedPanelHeights: false });
                break;
                
                case "TabbedPanels":
                break;

                case "CollapsiblePanel":
                break;

                case "CollapsiblePanelGroup":
                break;
            }
        }
    }
    
    function InitAccordians()
    {
        var divs = document.getElementsByTagName("div");
        
        for (var i=0; i < divs.length; i++)
        {
            if (divs[i].className == "Accordion")
            {
                spryAccordians[divs[i].id] = new Spry.Widget.Accordion(divs[i].id, {useFixedPanelHeights: false });
            }
        }
    }
    
    function InitTabbedPanels()
    {
        var divs = document.getElementsByTagName("div");
        
        for (var i=0; i < divs.length; i++)
        {
            if ((divs[i].className == "TabbedPanels") || (divs[i].className == "VTabbedPanels"))
            {
                spryTabbedPanels[divs[i].id] = new Spry.Widget.TabbedPanels(divs[i].id);
            }
        }
    }

    function InitSquishables()
    {
//		alert("spry.js:InitCollapsiblePanels");
		CreateSquishableBySelector(".Squishable");
    }
    
    function CreateSquishableBySelector(selector, attributes)
    {
//		alert("spry.js:CreateCollapsibleBySelector(" + selector + ")");		
        Spry.$$(selector).forEach
        (function(panel)
            {
//				var oContentDiv = Spry.Widget.CollapsiblePanel.prototype.getElementChildren(panel)[1];
//				var contentDisplay = (oContentDiv.style.display != "none") && (oContentDiv.style.visibility != "hidden");
//					alert("spry.js:CreateCollapsibleBySelector(" + selector + "): " + panel.id);
				var squish_hidden = new Spry.Effect.Squish(panel.id, attributes);						
				spryPanels[panel.id] = squish_hidden;
            }
        );
    }


/**
 * Creates any sliding panels based on the default behavior of them using the class
 * "SlidingPanels". The attributes parameter allows fine tuning of the effect...
 * <br>
 * <ul><b>defaultPanel</b>: panel number or ID - This determines the panel that is displayed when 
 * 				       	the page loads.</li>
 * <li><b>duration</b>: integer - In milliseconds. Determines the length of time to get to 
 *  					the selected panel. The same duration is used regardless of the 
 *  					distance to the specified content container.</li>
 * <li><b>enableKeyboardNavigation</b>: true/false  - Setting to false will allow the widget to get focus,
 *  					but will disable the previous and next keys</li>
 * <li><b>enableAnimation</b>: true/false - Setting to false will remove the panel animation. Panels will 
 *  					show up instantly.</li>
 * <li><b>fps</b>: integer  - Use fps and duration to fine tune the smoothness of the transition. 
 *  					A higher fps is generally smoother. Setting too high might affect performance.</li>
 * </ul>
 * 
 * @param attributes - Options 
 */
    function InitSlidingPanels(attributes)
    {
//		alert("spry.js:InitCollapsiblePanels");
		CreateSlidingPanelsBySelector(".SlidingPanels", attributes);
    }
    
    function CreateSlidingPanelsBySelector(selector, attributes)
    {
        Spry.$$(selector).forEach
        (function(panel)
            {
				var slidingPanel = new Spry.Widget.SlidingPanels(panel.id,attributes);						
				sprySlidingPanels[panel.id] = slidingPanel;
            }
        );
    }


    
    var ignorePanelList = new Array();
    function InitCollapsiblePanels()
    {
		CreateCollapsibleBySelector(".CollapsiblePanel");
    }
    
    function InitCollapsiblePanelGroups()
    {
		
		Spry.$$(".CollapsiblePanelGroup .CollapsiblePanel").forEach(function(panel) {
            ignorePanelList[panel.id] = panel.id;
		});

		Spry.$$(".CollapsiblePanelGroup").forEach(function(group) {
            spryGroups[group.id] = new Spry.Widget.CollapsiblePanelGroup(group.id, { contentIsOpen: false });
		});
    }
    
    function CreateCollapsibleBySelector(selector)
    {
        Spry.$$(selector).forEach
        (function(panel)
            {
                if (ignorePanelList[panel.id] != panel.id) {
					var oContentDiv = Spry.Widget.CollapsiblePanel.prototype.getElementChildren(panel)[1];
					var contentDisplay = (oContentDiv.style.display != "none") && (oContentDiv.style.visibility != "hidden");
//					alert("spry.js:CreateCollapsibleBySelector(" + selector + "): " + panel.id);
						var newPanel = new Spry.Widget.CollapsiblePanel(panel.id, {contentIsOpen: contentDisplay});
						spryPanels[panel.id] = newPanel;
				}
				else {
				//	alert("Ignore panel: " + panel.id);
				}
            }
        );
    }

    function CreateTabbedBySelector(selector, options)
    {
        Spry.$$(selector).forEach
        (function(n)
            {
//		alert("spry.js: CreateTabbedBySelector(" + selector + ") -- " + n.id);				
                spryTabbedPanels[n.id] = new Spry.Widget.TabbedPanels(n.id,options);
            }
        );
    }

    function CreateTextValidationBySelector(selector, validationType, validationOptions)
    {
        Spry.$$(selector).forEach
        (function(n)
            {
                window["tv" + n.id] = new Spry.Widget.ValidationTextField(n.id, validationType, validationOptions );
            }
        );
    }

function AllBrowser_AddEventListener(element, eventType, handler, capture)
{
	if (element.addEventListener)
		element.addEventListener(eventType, handler, capture);
	else if (element.attachEvent)
		element.attachEvent("on" + eventType, handler);
}


    function RCPC_InitSpry()
    {
        InitAccordians();
        InitCollapsiblePanelGroups();
//		InitSlidingPanels();     // these have been known to cause problems in some pages, so
//		InitCollapsiblePanels(); pages using collapsible/sliding panels must find appropriate place to call this initializer.
// 
		InitTabbedPanels();

        return true;
    }

Spry.Utils.addLoadListener(RCPC_InitSpry);
