/*
    JS DIRECTORY
        __FORMS
        __TABBER
        __SpryCollapsiblePanel

/*__FORMS
==========================================================*/
    function clickclear(thisfield, defaulttext){
        if (thisfield.value == defaulttext)
            thisfield.value = "";
    }

    function clickrecall(thisfield, defaulttext){
        if (thisfield.value == "")
            thisfield.value = defaulttext;
    }

    /* Regular Expressions */
    var REGEXP_PHONE = new RegExp("^([(-.\\s]*\\d{3}[)-.\\s]*)?[-.\\s]*\\d{3}[-.\\s]*\\d{4}$");
    var REGEXP_EMAIL = new RegExp("^[a-zA-Z0-9-_.]+@([a-zA-Z0-9-_]+\\.)+[a-zA-Z]{2,6}$");
    var REGEXP_NAME = new RegExp("^[a-zA-Z]+\\s?[a-zA-Z]*$");

	function validate_field(field, regex, message){
	
        if( field.value == "" || (regex && !regex.test(field.value)) ){
            alert(message);
            field.focus();
            return false;
        }
        /* valid imput, return true */
        return true;
	}

	function validate_form(thisform){
		with (thisform){
            if( !validate_field(name, REGEXP_NAME, 'Not a valid name!') ) return false;
            if( !validate_field(phone, REGEXP_PHONE, 'Not a valid phone number!') ) return false;
            if( !validate_field(email, REGEXP_EMAIL, 'Not a valid email address!') ) return false;
            /* the following first check if field exists then make sure they are not blank */
            if( company && !validate_field(company, null, 'Company cannot be blank!') ) return false;
            if( address && !validate_field(address, null, 'Address cannot be blank!') ) return false;
            if( city && !validate_field(city, null, 'City cannot be blank!') ) return false;
            if( state && !validate_field(state, null, 'State cannot be blank!') ) return false;
            if( zip && !validate_field(zip, null, 'Zip cannot be blank!') ) return false;
            if( dimensions && !validate_field(dimensions, null, 'Dimensions cannot be blank!') ) return false;
		}
	}




/*__TABBER
==========================================================*/
    /* Copyright (c) 2006 Patrick Fitzgerald */
    function tabberObj(argsObj)
    {var arg;this.div=null;this.classMain="tabber";this.classMainLive="tabberlive";this.classTab="tabbertab";this.classTabDefault="tabbertabdefault";this.classNav="tabbernav";this.classTabHide="tabbertabhide";this.classNavActive="tabberactive";this.titleElements=['h2','h3','h4','h5','h6'];this.titleElementsStripHTML=true;this.removeTitle=true;this.addLinkId=false;this.linkIdFormat='<tabberid>nav<tabnumberone>';for(arg in argsObj){this[arg]=argsObj[arg];}
    this.REclassMain=new RegExp('\\b'+this.classMain+'\\b','gi');this.REclassMainLive=new RegExp('\\b'+this.classMainLive+'\\b','gi');this.REclassTab=new RegExp('\\b'+this.classTab+'\\b','gi');this.REclassTabDefault=new RegExp('\\b'+this.classTabDefault+'\\b','gi');this.REclassTabHide=new RegExp('\\b'+this.classTabHide+'\\b','gi');this.tabs=new Array();if(this.div){this.init(this.div);this.div=null;}}
    tabberObj.prototype.init=function(e)
    {var
    childNodes,i,i2,t,defaultTab=0,DOM_ul,DOM_li,DOM_a,aId,headingElement;if(!document.getElementsByTagName){return false;}
    if(e.id){this.id=e.id;}
    this.tabs.length=0;childNodes=e.childNodes;for(i=0;i<childNodes.length;i++){if(childNodes[i].className&&childNodes[i].className.match(this.REclassTab)){t=new Object();t.div=childNodes[i];this.tabs[this.tabs.length]=t;if(childNodes[i].className.match(this.REclassTabDefault)){defaultTab=this.tabs.length-1;}}}
    DOM_ul=document.createElement("ul");DOM_ul.className=this.classNav;for(i=0;i<this.tabs.length;i++){t=this.tabs[i];t.headingText=t.div.title;if(this.removeTitle){t.div.title='';}
    if(!t.headingText){for(i2=0;i2<this.titleElements.length;i2++){headingElement=t.div.getElementsByTagName(this.titleElements[i2])[0];if(headingElement){t.headingText=headingElement.innerHTML;if(this.titleElementsStripHTML){t.headingText.replace(/<br>/gi," ");t.headingText=t.headingText.replace(/<[^>]+>/g,"");}
    break;}}}
    if(!t.headingText){t.headingText=i+1;}
    DOM_li=document.createElement("li");t.li=DOM_li;DOM_a=document.createElement("a");DOM_a.appendChild(document.createTextNode(t.headingText));DOM_a.href="javascript:void(null);";DOM_a.title=t.headingText;DOM_a.onclick=this.navClick;DOM_a.tabber=this;DOM_a.tabberIndex=i;if(this.addLinkId&&this.linkIdFormat){aId=this.linkIdFormat;aId=aId.replace(/<tabberid>/gi,this.id);aId=aId.replace(/<tabnumberzero>/gi,i);aId=aId.replace(/<tabnumberone>/gi,i+1);aId=aId.replace(/<tabtitle>/gi,t.headingText.replace(/[^a-zA-Z0-9\-]/gi,''));DOM_a.id=aId;}
    DOM_li.appendChild(DOM_a);DOM_ul.appendChild(DOM_li);}
    e.insertBefore(DOM_ul,e.firstChild);e.className=e.className.replace(this.REclassMain,this.classMainLive);this.tabShow(defaultTab);if(typeof this.onLoad=='function'){this.onLoad({tabber:this});}
    return this;};tabberObj.prototype.navClick=function(event)
    {var
    rVal,a,self,tabberIndex,onClickArgs;a=this;if(!a.tabber){return false;}
    self=a.tabber;tabberIndex=a.tabberIndex;a.blur();if(typeof self.onClick=='function'){onClickArgs={'tabber':self,'index':tabberIndex,'event':event};if(!event){onClickArgs.event=window.event;}
    rVal=self.onClick(onClickArgs);if(rVal===false){return false;}}
    self.tabShow(tabberIndex);return false;};tabberObj.prototype.tabHideAll=function()
    {var i;for(i=0;i<this.tabs.length;i++){this.tabHide(i);}};tabberObj.prototype.tabHide=function(tabberIndex)
    {var div;if(!this.tabs[tabberIndex]){return false;}
    div=this.tabs[tabberIndex].div;if(!div.className.match(this.REclassTabHide)){div.className+=' '+this.classTabHide;}
    this.navClearActive(tabberIndex);return this;};tabberObj.prototype.tabShow=function(tabberIndex)
    {var div;if(!this.tabs[tabberIndex]){return false;}
    this.tabHideAll();div=this.tabs[tabberIndex].div;div.className=div.className.replace(this.REclassTabHide,'');this.navSetActive(tabberIndex);if(typeof this.onTabDisplay=='function'){this.onTabDisplay({'tabber':this,'index':tabberIndex});}
    return this;};tabberObj.prototype.navSetActive=function(tabberIndex)
    {this.tabs[tabberIndex].li.className=this.classNavActive;return this;};tabberObj.prototype.navClearActive=function(tabberIndex)
    {this.tabs[tabberIndex].li.className='';return this;};function tabberAutomatic(tabberArgs)
    {var
    tempObj,divs,i;if(!tabberArgs){tabberArgs={};}
    tempObj=new tabberObj(tabberArgs);divs=document.getElementsByTagName("div");for(i=0;i<divs.length;i++){if(divs[i].className&&divs[i].className.match(tempObj.REclassMain)){tabberArgs.div=divs[i];divs[i].tabber=new tabberObj(tabberArgs);}}
    return this;}
    function tabberAutomaticOnLoad(tabberArgs)
    {var oldOnLoad;if(!tabberArgs){tabberArgs={};}
    oldOnLoad=window.onload;if(typeof window.onload!='function'){window.onload=function(){tabberAutomatic(tabberArgs);};}else{window.onload=function(){oldOnLoad();tabberAutomatic(tabberArgs);};}}
    if(typeof tabberOptions=='undefined'){tabberAutomaticOnLoad();}else{if(!tabberOptions['manualStartup']){tabberAutomaticOnLoad(tabberOptions);}}




/*__SpryCollapsiblePanel
==========================================================*/
    // SpryCollapsiblePanel.js - version 0.7 - Spry Pre-Release 1.6.1
    //
    // Copyright (c) 2006. Adobe Systems Incorporated.
    // All rights reserved.
    //
    // Redistribution and use in source and binary forms, with or without
    // modification, are permitted provided that the following conditions are met:
    //
    //   * Redistributions of source code must retain the above copyright notice,
    //     this list of conditions and the following disclaimer.
    //   * Redistributions in binary form must reproduce the above copyright notice,
    //     this list of conditions and the following disclaimer in the documentation
    //     and/or other materials provided with the distribution.
    //   * Neither the name of Adobe Systems Incorporated nor the names of its
    //     contributors may be used to endorse or promote products derived from this
    //     software without specific prior written permission.
    //
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    // POSSIBILITY OF SUCH DAMAGE.
    var Spry;
    if (!Spry) Spry = {};
    if (!Spry.Widget) Spry.Widget = {};

    Spry.Widget.CollapsiblePanel = function(element, opts)
    {
    	this.element = this.getElement(element);
    	this.focusElement = null;
    	this.hoverClass = "CollapsiblePanelTabHover";
    	this.openClass = "CollapsiblePanelOpen";
    	this.closedClass = "CollapsiblePanelClosed";
    	this.focusedClass = "CollapsiblePanelFocused";
    	this.enableAnimation = true;
    	this.enableKeyboardNavigation = true;
    	this.animator = null;
    	this.hasFocus = false;
    	this.contentIsOpen = true;

    	this.openPanelKeyCode = Spry.Widget.CollapsiblePanel.KEY_DOWN;
    	this.closePanelKeyCode = Spry.Widget.CollapsiblePanel.KEY_UP;

    	Spry.Widget.CollapsiblePanel.setOptions(this, opts);

    	this.attachBehaviors();
    };

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

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

    Spry.Widget.CollapsiblePanel.prototype.removeClassName = function(ele, className)
    {
    	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.CollapsiblePanel.prototype.hasClassName = function(ele, className)
    {
    	if (!ele || !className || !ele.className || ele.className.search(new RegExp("\\b" + className + "\\b")) == -1)
    		return false;
    	return true;
    };

    Spry.Widget.CollapsiblePanel.prototype.setDisplay = function(ele, display)
    {
    	if( ele )
    		ele.style.display = display;
    };

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

    Spry.Widget.CollapsiblePanel.prototype.onTabMouseOver = function(e)
    {
    	this.addClassName(this.getTab(), this.hoverClass);
    	return false;
    };

    Spry.Widget.CollapsiblePanel.prototype.onTabMouseOut = function(e)
    {
    	this.removeClassName(this.getTab(), this.hoverClass);
    	return false;
    };

    Spry.Widget.CollapsiblePanel.prototype.open = function()
    {
    	this.contentIsOpen = true;
    	if (this.enableAnimation)
    	{
    		if (this.animator)
    			this.animator.stop();
    		this.animator = new Spry.Widget.CollapsiblePanel.PanelAnimator(this, true, { duration: this.duration, fps: this.fps, transition: this.transition });
    		this.animator.start();
    	}
    	else
    		this.setDisplay(this.getContent(), "block");

    	this.removeClassName(this.element, this.closedClass);
    	this.addClassName(this.element, this.openClass);
    };

    Spry.Widget.CollapsiblePanel.prototype.close = function()
    {
    	this.contentIsOpen = false;
    	if (this.enableAnimation)
    	{
    		if (this.animator)
    			this.animator.stop();
    		this.animator = new Spry.Widget.CollapsiblePanel.PanelAnimator(this, false, { duration: this.duration, fps: this.fps, transition: this.transition });
    		this.animator.start();
    	}
    	else
    		this.setDisplay(this.getContent(), "none");

    	this.removeClassName(this.element, this.openClass);
    	this.addClassName(this.element, this.closedClass);
    };

    Spry.Widget.CollapsiblePanel.prototype.onTabClick = function(e)
    {
    	if (this.isOpen())
    		this.close();
    	else
    		this.open();

    	this.focus();

    	return this.stopPropagation(e);
    };

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

    Spry.Widget.CollapsiblePanel.prototype.onBlur = function(e)
    {
    	this.hasFocus = false;
    	this.removeClassName(this.element, this.focusedClass);
    	return false;
    };

    Spry.Widget.CollapsiblePanel.KEY_UP = 38;
    Spry.Widget.CollapsiblePanel.KEY_DOWN = 40;

    Spry.Widget.CollapsiblePanel.prototype.onKeyDown = function(e)
    {
    	var key = e.keyCode;
    	if (!this.hasFocus || (key != this.openPanelKeyCode && key != this.closePanelKeyCode))
    		return true;

    	if (this.isOpen() && key == this.closePanelKeyCode)
    		this.close();
    	else if ( key == this.openPanelKeyCode)
    		this.open();

    	return this.stopPropagation(e);
    };

    Spry.Widget.CollapsiblePanel.prototype.stopPropagation = function(e)
    {
    	if (e.preventDefault) e.preventDefault();
    	else e.returnValue = false;
    	if (e.stopPropagation) e.stopPropagation();
    	else e.cancelBubble = true;
    	return false;
    };

    Spry.Widget.CollapsiblePanel.prototype.attachPanelHandlers = function()
    {
    	var tab = this.getTab();
    	if (!tab)
    		return;

    	var self = this;
    	Spry.Widget.CollapsiblePanel.addEventListener(tab, "click", function(e) { return self.onTabClick(e); }, false);
    	Spry.Widget.CollapsiblePanel.addEventListener(tab, "mouseover", function(e) { return self.onTabMouseOver(e); }, false);
    	Spry.Widget.CollapsiblePanel.addEventListener(tab, "mouseout", function(e) { return self.onTabMouseOut(e); }, false);

    	if (this.enableKeyboardNavigation)
    	{
    		// XXX: IE doesn't allow the setting of tabindex dynamically. This means we can't
    		// rely on adding the tabindex attribute if it is missing to enable keyboard navigation
    		// by default.

    		// Find the first element within the tab container that has a tabindex or the first
    		// anchor tag.

    		var tabIndexEle = null;
    		var tabAnchorEle = null;

    		this.preorderTraversal(tab, function(node) {
    			if (node.nodeType == 1 /* NODE.ELEMENT_NODE */)
    			{
    				var tabIndexAttr = tab.attributes.getNamedItem("tabindex");
    				if (tabIndexAttr)
    				{
    					tabIndexEle = node;
    					return true;
    				}
    				if (!tabAnchorEle && node.nodeName.toLowerCase() == "a")
    					tabAnchorEle = node;
    			}
    			return false;
    		});

    		if (tabIndexEle)
    			this.focusElement = tabIndexEle;
    		else if (tabAnchorEle)
    			this.focusElement = tabAnchorEle;

    		if (this.focusElement)
    		{
    			Spry.Widget.CollapsiblePanel.addEventListener(this.focusElement, "focus", function(e) { return self.onFocus(e); }, false);
    			Spry.Widget.CollapsiblePanel.addEventListener(this.focusElement, "blur", function(e) { return self.onBlur(e); }, false);
    			Spry.Widget.CollapsiblePanel.addEventListener(this.focusElement, "keydown", function(e) { return self.onKeyDown(e); }, false);
    		}
    	}
    };

    Spry.Widget.CollapsiblePanel.addEventListener = function(element, eventType, handler, capture)
    {
    	try
    	{
    		if (element.addEventListener)
    			element.addEventListener(eventType, handler, capture);
    		else if (element.attachEvent)
    			element.attachEvent("on" + eventType, handler);
    	}
    	catch (e) {}
    };

    Spry.Widget.CollapsiblePanel.prototype.preorderTraversal = function(root, func)
    {
    	var stopTraversal = false;
    	if (root)
    	{
    		stopTraversal = func(root);
    		if (root.hasChildNodes())
    		{
    			var child = root.firstChild;
    			while (!stopTraversal && child)
    			{
    				stopTraversal = this.preorderTraversal(child, func);
    				try { child = child.nextSibling; } catch (e) { child = null; }
    			}
    		}
    	}
    	return stopTraversal;
    };

    Spry.Widget.CollapsiblePanel.prototype.attachBehaviors = function()
    {
    	var panel = this.element;
    	var tab = this.getTab();
    	var content = this.getContent();

    	if (this.contentIsOpen || this.hasClassName(panel, this.openClass))
    	{
    		this.addClassName(panel, this.openClass);
    		this.removeClassName(panel, this.closedClass);
    		this.setDisplay(content, "block");
    		this.contentIsOpen = true;
    	}
    	else
    	{
    		this.removeClassName(panel, this.openClass);
    		this.addClassName(panel, this.closedClass);
    		this.setDisplay(content, "none");
    		this.contentIsOpen = false;
    	}

    	this.attachPanelHandlers();
    };

    Spry.Widget.CollapsiblePanel.prototype.getTab = function()
    {
    	return this.getElementChildren(this.element)[0];
    };

    Spry.Widget.CollapsiblePanel.prototype.getContent = function()
    {
    	return this.getElementChildren(this.element)[1];
    };

    Spry.Widget.CollapsiblePanel.prototype.isOpen = function()
    {
    	return this.contentIsOpen;
    };

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

    Spry.Widget.CollapsiblePanel.prototype.focus = function()
    {
    	if (this.focusElement && this.focusElement.focus)
    		this.focusElement.focus();
    };

    /////////////////////////////////////////////////////

    Spry.Widget.CollapsiblePanel.PanelAnimator = function(panel, doOpen, opts)
    {
    	this.timer = null;
    	this.interval = 0;

    	this.fps = 60;
    	this.duration = 500;
    	this.startTime = 0;

    	this.transition = Spry.Widget.CollapsiblePanel.PanelAnimator.defaultTransition;

    	this.onComplete = null;

    	this.panel = panel;
    	this.content = panel.getContent();
    	this.doOpen = doOpen;

    	Spry.Widget.CollapsiblePanel.setOptions(this, opts, true);

    	this.interval = Math.floor(1000 / this.fps);

    	var c = this.content;

    	var curHeight = c.offsetHeight ? c.offsetHeight : 0;
    	this.fromHeight = (doOpen && c.style.display == "none") ? 0 : curHeight;

    	if (!doOpen)
    		this.toHeight = 0;
    	else
    	{
    		if (c.style.display == "none")
    		{
    			// The content area is not displayed so in order to calculate the extent
    			// of the content inside it, we have to set its display to block.

    			c.style.visibility = "hidden";
    			c.style.display = "block";
    		}

    		// Clear the height property so we can calculate
    		// the full height of the content we are going to show.

    		c.style.height = "";
    		this.toHeight = c.offsetHeight;
    	}

    	this.distance = this.toHeight - this.fromHeight;
    	this.overflow = c.style.overflow;

    	c.style.height = this.fromHeight + "px";
    	c.style.visibility = "visible";
    	c.style.overflow = "hidden";
    	c.style.display = "block";
    };

    Spry.Widget.CollapsiblePanel.PanelAnimator.defaultTransition = function(time, begin, finish, duration) { time /= duration; return begin + ((2 - time) * time * finish); };

    Spry.Widget.CollapsiblePanel.PanelAnimator.prototype.start = function()
    {
    	var self = this;
    	this.startTime = (new Date).getTime();
    	this.timer = setTimeout(function() { self.stepAnimation(); }, this.interval);
    };

    Spry.Widget.CollapsiblePanel.PanelAnimator.prototype.stop = function()
    {
    	if (this.timer)
    	{
    		clearTimeout(this.timer);

    		// If we're killing the timer, restore the overflow property.

    		this.content.style.overflow = this.overflow;
    	}

    	this.timer = null;
    };

    Spry.Widget.CollapsiblePanel.PanelAnimator.prototype.stepAnimation = function()
    {
    	var curTime = (new Date).getTime();
    	var elapsedTime = curTime - this.startTime;

    	if (elapsedTime >= this.duration)
    	{
    		if (!this.doOpen)
    			this.content.style.display = "none";
    		this.content.style.overflow = this.overflow;
    		this.content.style.height = this.toHeight + "px";
    		if (this.onComplete)
    			this.onComplete();
    		return;
    	}

    	var ht = this.transition(elapsedTime, this.fromHeight, this.distance, this.duration);

    	this.content.style.height = ((ht < 0) ? 0 : ht) + "px";

    	var self = this;
    	this.timer = setTimeout(function() { self.stepAnimation(); }, this.interval);
    };

    Spry.Widget.CollapsiblePanelGroup = function(element, opts)
    {
    	this.element = this.getElement(element);
    	this.opts = opts;

    	this.attachBehaviors();
    };

    Spry.Widget.CollapsiblePanelGroup.prototype.setOptions = Spry.Widget.CollapsiblePanel.prototype.setOptions;
    Spry.Widget.CollapsiblePanelGroup.prototype.getElement = Spry.Widget.CollapsiblePanel.prototype.getElement;
    Spry.Widget.CollapsiblePanelGroup.prototype.getElementChildren = Spry.Widget.CollapsiblePanel.prototype.getElementChildren;

    Spry.Widget.CollapsiblePanelGroup.prototype.setElementWidget = function(element, widget)
    {
    	if (!element || !widget)
    		return;
    	if (!element.spry)
    		element.spry = new Object;
    	element.spry.collapsiblePanel = widget;
    };

    Spry.Widget.CollapsiblePanelGroup.prototype.getElementWidget = function(element)
    {
    	return (element && element.spry && element.spry.collapsiblePanel) ? element.spry.collapsiblePanel : null;
    };

    Spry.Widget.CollapsiblePanelGroup.prototype.getPanels = function()
    {
    	if (!this.element)
    		return [];
    	return this.getElementChildren(this.element);
    };

    Spry.Widget.CollapsiblePanelGroup.prototype.getPanel = function(panelIndex)
    {
    	return this.getPanels()[panelIndex];
    };

    Spry.Widget.CollapsiblePanelGroup.prototype.attachBehaviors = function()
    {
    	if (!this.element)
    		return;

    	var cpanels = this.getPanels();
    	var numCPanels = cpanels.length;
    	for (var i = 0; i < numCPanels; i++)
    	{
    		var cpanel = cpanels[i];
    		this.setElementWidget(cpanel, new Spry.Widget.CollapsiblePanel(cpanel, this.opts));
    	}
    };

    Spry.Widget.CollapsiblePanelGroup.prototype.openPanel = function(panelIndex)
    {
    	var w = this.getElementWidget(this.getPanel(panelIndex));
    	if (w && !w.isOpen())
    		w.open();
    };

    Spry.Widget.CollapsiblePanelGroup.prototype.closePanel = function(panelIndex)
    {
    	var w = this.getElementWidget(this.getPanel(panelIndex));
    	if (w && w.isOpen())
    		w.close();
    };

    Spry.Widget.CollapsiblePanelGroup.prototype.openAllPanels = function()
    {
    	var cpanels = this.getPanels();
    	var numCPanels = cpanels.length;
    	for (var i = 0; i < numCPanels; i++)
    	{
    		var w = this.getElementWidget(cpanels[i]);
    		if (w && !w.isOpen())
    			w.open();
    	}
    };

    Spry.Widget.CollapsiblePanelGroup.prototype.closeAllPanels = function()
    {
    	var cpanels = this.getPanels();
    	var numCPanels = cpanels.length;
    	for (var i = 0; i < numCPanels; i++)
    	{
    		var w = this.getElementWidget(cpanels[i]);
    		if (w && w.isOpen())
    			w.close();
    	}
    };

